チャネル固有の機能の実装Implement channel-specific functionality

注意

このトピックは、最新リリースの SDK (v4) を対象としています。This topic is for the latest release of the SDK (v4). 前のバージョンの SDK (v3) のコンテンツは、こちらにあります。You can find content for the older version of the SDK (v3) here.

一部のチャネルには、メッセージのテキストと添付ファイルを使用するだけでは実装できない機能が用意されています。Some channels provide features that cannot be implemented by using only message text and attachments. チャネル固有の機能を実装するには、アクティビティ オブジェクトの "チャネル データ" プロパティを使用して、ネイティブのメタデータをチャネルに渡します。To implement channel-specific functionality, you can pass native metadata to a channel in the activity object's channel data property. たとえば、お使いのボットでチャネル データ プロパティを使用して、ステッカーを送信するように Telegram に指示したり、電子メールを送信するように Office365 に指示したりできます。For example, your bot can use the channel data property to instruct Telegram to send a sticker or to instruct Office365 to send an email.

この記事では、メッセージ アクティビティのチャネル データ プロパティを使用して、このチャネル固有の機能を実装する方法について説明します。This article describes how to use a message activity's channel data property to implement this channel-specific functionality:

チャネルChannel 機能Functionality
電子メールEmail 本文、件名、および重要度のメタデータを含む電子メールを送受信しますSend and receive an email that contains body, subject, and importance metadata
SlackSlack 完全に忠実な Slack メッセージを送信しますSend full fidelity Slack messages
FacebookFacebook Facebook 通知をネイティブで送信しますSend Facebook notifications natively
TelegramTelegram 音声メモ、ステッカーの共有など、Telegram 固有のアクションを実行しますPerform Telegram-specific actions, such as sharing a voice memo or a sticker
KikKik ネイティブ Kik メッセージを送受信しますSend and receive native Kik messages

注意

アクティビティ オブジェクトのチャネル データ プロパティの値は JSON オブジェクトです。The value of an activity object's channel data property is a JSON object. そのため、この記事の例では、さまざまなシナリオにおいて有効な channelData JSON プロパティの書式を示します。Therefore, the examples in this article show the expected format of the channelData JSON property in various scenarios. .NET を使用して JSON オブジェクトを作成するには、JObject (.NET) クラスを使用します。To create a JSON object using .NET, use the JObject (.NET) class.

カスタム電子メール メッセージを作成するCreate a custom Email message

電子メール メッセージを作成するには、アクティビティ オブジェクトのチャネル データ プロパティを、以下のプロパティを含む JSON オブジェクトに設定します。To create an email message, set the activity object's channel data property to a JSON object that contains these properties:

プロパティProperty 説明Description
bccRecipientsbccRecipients メッセージの BCC (ブラインド カーボン コピー) フィールドに追加する、セミコロン (;) 区切りの電子メール アドレスの文字列。A semicolon (;) delimited string of email addresses to add to the message's Bcc (blind carbon copy) field.
ccRecipientsccRecipients メッセージの CC (カーボン コピー) フィールドに追加する、セミコロン (;) 区切りの電子メール アドレスの文字列。A semicolon (;) delimited string of email addresses to add to the message's Cc (carbon copy) field.
htmlBodyhtmlBody 電子メール メッセージの本文を指定する HTML ドキュメント。An HTML document that specifies the body of the email message. サポートされている HTML の要素と属性については、チャネルのドキュメントを参照してください。See the channel's documentation for information about supported HTML elements and attributes.
importanceimportance 電子メールの重要度レベル。The email's importance level. 有効な値は、highnormal、および low です。Valid values are high, normal, and low. 既定値は normal です。The default value is normal.
subjectsubject 電子メールの件名です。The email's subject. フィールドの要件については、チャネルのドキュメントを参照してください。See the channel's documentation for information about field requirements.
toRecipientstoRecipients メッセージの宛先フィールドに追加する、セミコロン (;) 区切りの電子メール アドレスの文字列。A semicolon (;) delimited string of email addresses to add to the message's To field.

注意

ボットがユーザーから電子メール チャネル経由で受信したメッセージには、上記で説明した JSON オブジェクトが設定されたチャネル データ プロパティが含まれている可能性があります。Messages that your bot receives from users via the Email channel may contain a channel data property that is populated with a JSON object like the one described above.

次のスニペットは、カスタム電子メール メッセージ用の channelData プロパティの例を示しています。This snippet shows an example of the channelData property for a custom email message.

"channelData": {
    "type": "message",
    "locale": "en-Us",
    "channelID": "email",
    "from": { "id": "mybot@mydomain.com", "name": "My bot"},
    "recipient": { "id": "joe@otherdomain.com", "name": "Joe Doe"},
    "conversation": { "id": "123123123123", "topic": "awesome chat" },
    "channelData":
    {
        "htmlBody": "<html><body style = /"font-family: Calibri; font-size: 11pt;/" >This is more than awesome.</body></html>",
        "subject": "Super awesome message subject",
        "importance": "high",
        "ccRecipients": "Yasemin@adatum.com;Temel@adventure-works.com"
    }
}

完全に忠実な Slack メッセージを作成するCreate a full-fidelity Slack message

完全に忠実な Slack メッセージを作成するには、アクティビティ オブジェクトのチャネル データ プロパティを、Slack のメッセージSlack の添付ファイルSlack のボタンを指定する JSON オブジェクトに設定します。To create a full-fidelity Slack message, set the activity object's channel data property to a JSON object that specifies Slack messages, Slack attachments, and/or Slack buttons.

注意

Slack メッセージでボタンをサポートするには、Slack チャネルにお使いのボットを接続するときに、インタラクティブ メッセージを有効にする必要があります。To support buttons in Slack messages, you must enable Interactive Messages when you connect your bot to the Slack channel.

このスニペットは、カスタム Slack メッセージ用の channelData プロパティの例を示しています。This snippet shows an example of the channelData property for a custom Slack message.

"channelData": {
   "text": "Now back in stock! :tada:",
   "attachments": [
        {
            "title": "The Further Adventures of Slackbot",
            "author_name": "Stanford S. Strickland",
            "author_icon": "https://api.slack.com/img/api/homepage_custom_integrations-2x.png",
            "image_url": "http://i.imgur.com/OJkaVOI.jpg?1"
        },
        {
            "fields": [
                {
                    "title": "Volume",
                    "value": "1",
                    "short": true
                },
                {
                    "title": "Issue",
                    "value": "3",
                    "short": true
                }
            ]
        },
        {
            "title": "Synopsis",
            "text": "After @episod pushed exciting changes to a devious new branch back in Issue 1, Slackbot notifies @don about an unexpected deploy..."
        },
        {
            "fallback": "Would you recommend it to customers?",
            "title": "Would you recommend it to customers?",
            "callback_id": "comic_1234_xyz",
            "color": "#3AA3E3",
            "attachment_type": "default",
            "actions": [
                {
                    "name": "recommend",
                    "text": "Recommend",
                    "type": "button",
                    "value": "recommend"
                },
                {
                    "name": "no",
                    "text": "No",
                    "type": "button",
                    "value": "bad"
                }
            ]
        }
    ]
}

ユーザーが Slack メッセージ内のボタンをクリックすると、お使いのボットに応答メッセージが届きます。このメッセージのチャネル データ プロパティには payload JSON オブジェクトが設定されています。When a user clicks a button within a Slack message, your bot will receive a response message in which the channel data property is populated with a payload JSON object. payload オブジェクトによって、元のメッセージのコンテンツが指定され、クリックされたボタンと、そのボタンをクリックしたユーザーが特定されます。The payload object specifies contents of the original message, identifies the button that was clicked, and identifies the user who clicked the button.

このスニペットは、ユーザーが Slack メッセージ内のボタンをクリックしたときに、ボットに届くメッセージ内の channelData プロパティの例を示しています。This snippet shows an example of the channelData property in the message that a bot receives when a user clicks a button in the Slack message.

"channelData": {
    "payload": {
        "actions": [
            {
                "name": "recommend",
                "value": "yes"
            }
        ],
        . . .
        "original_message": "{…}",
        "response_url": "https://hooks.slack.com/actions/..."
    }
}

お使いのボットでは通常の方法でこのメッセージに返信するか、その応答を、payload オブジェクトの response_url プロパティで指定されているエンドポイントに直接投稿できます。Your bot can reply to this message in the normal manner, or it can post its response directly to the endpoint that is specified by the payload object's response_url property. 応答を response_url に投稿するタイミングと方法については、Slack ボタンに関するページをご覧ください。For information about when and how to post a response to the response_url, see Slack Buttons.

次の JSON を使用して動的なボタンを作成できます。You can create dynamic buttons using the following JSON.

{
    "text": "Would you like to play a game ? ",
    "attachments": [
        {
            "text": "Choose a game to play!",
            "fallback": "You are unable to choose a game",
            "callback_id": "wopr_game",
            "color": "#3AA3E3",
            "attachment_type": "default",
            "actions": [
                {
                    "name": "game",
                    "text": "Chess",
                    "type": "button",
                    "value": "chess"
                },
                {
                    "name": "game",
                    "text": "Falken's Maze",
                    "type": "button",
                    "value": "maze"
                },
                {
                    "name": "game",
                    "text": "Thermonuclear War",
                    "style": "danger",
                    "type": "button",
                    "value": "war",
                    "confirm": {
                        "title": "Are you sure?",
                        "text": "Wouldn't you prefer a good game of chess?",
                        "ok_text": "Yes",
                        "dismiss_text": "No"
                    }
                }
            ]
        }
    ]
}

対話型メニューを作成するには、次の JSON を使用します。To create interactive menus, use the following JSON:

{
    "text": "Would you like to play a game ? ",
    "response_type": "in_channel",
    "attachments": [
        {
            "text": "Choose a game to play",
            "fallback": "If you could read this message, you'd be choosing something fun to do right now.",
            "color": "#3AA3E3",
            "attachment_type": "default",
            "callback_id": "game_selection",
            "actions": [
                {
                    "name": "games_list",
                    "text": "Pick a game...",
                    "type": "select",
                    "options": [
                        {
                            "text": "Hearts",
                            "value": "menu_id_hearts"
                        },
                        {
                            "text": "Bridge",
                            "value": "menu_id_bridge"
                        },
                        {
                            "text": "Checkers",
                            "value": "menu_id_checkers"
                        },
                        {
                            "text": "Chess",
                            "value": "menu_id_chess"
                        },
                        {
                            "text": "Poker",
                            "value": "menu_id_poker"
                        },
                        {
                            "text": "Falken's Maze",
                            "value": "menu_id_maze"
                        },
                        {
                            "text": "Global Thermonuclear War",
                            "value": "menu_id_war"
                        }
                    ]
                }
            ]
        }
    ]
}

Facebook 通知を作成するCreate a Facebook notification

Facebook 通知を作成するには、アクティビティ オブジェクトのチャネル データ プロパティを JSON オブジェクトに設定し、以下のプロパティを指定します。To create a Facebook notification, set the activity object's channel data property to a JSON object that specifies these properties:

プロパティProperty 説明Description
notification_typenotification_type 通知の種類 (例: REGULARSILENT_PUSHNO_PUSH)。The type of notification (e.g., REGULAR, SILENT_PUSH, NO_PUSH).
attachmentattachment 画像、動画、またはその他のマルチメディアの種類を指定する添付ファイル、または受信確認などのテンプレート化された添付ファイル。An attachment that specifies an image, video, or other multimedia type, or a templated attachment such as a receipt.

注意

notification_type プロパティおよび attachment プロパティの形式とコンテンツの詳細については、Facebook API のドキュメントを参照してください。For details about format and contents of the notification_type property and attachment property, see the Facebook API documentation.

このスニペットは、Facebook 受信確認添付ファイル用の channelData プロパティの例を示しています。This snippet shows an example of the channelData property for a Facebook receipt attachment.

"channelData": {
    "notification_type": "NO_PUSH",
    "attachment": {
        "type": "template"
        "payload": {
            "template_type": "receipt",
            . . .
        }
    }
}

Telegram メッセージを作成するCreate a Telegram message

音声メモやステッカーの共有など、Telegram 固有のアクションが実装されているメッセージを作成するには、アクティビティ オブジェクトのチャネル データ プロパティを JSON オブジェクトに設定し、次のプロパティを指定します。To create a message that implements Telegram-specific actions, such as sharing a voice memo or a sticker, set the activity object's channel data property to a JSON object that specifies these properties:

プロパティProperty 説明Description
methodmethod 呼び出す Telegram Bot API メソッド。The Telegram Bot API method to call.
parametersparameters 指定されたメソッドのパラメーター。The parameters of the specified method.

次の Telegram メソッドがサポートされています。These Telegram methods are supported:

  • answerInlineQueryanswerInlineQuery
  • editMessageCaptioneditMessageCaption
  • editMessageReplyMarkupeditMessageReplyMarkup
  • editMessageTexteditMessageText
  • forwardMessageforwardMessage
  • kickChatMemberkickChatMember
  • sendAudiosendAudio
  • sendChatActionsendChatAction
  • sendContactsendContact
  • sendDocumentsendDocument
  • sendLocationsendLocation
  • sendMessagesendMessage
  • sendPhotosendPhoto
  • sendStickersendSticker
  • sendVenuesendVenue
  • sendVideosendVideo
  • sendVoicesendVoice
  • unbanChateMemberunbanChateMember

これらの Telegram メソッドとそのパラメーターの詳細については、Telegram Bot API のドキュメントを参照してください。For details about these Telegram methods and their parameters, see the Telegram Bot API documentation.

注意

  • chat_id パラメーターは、すべての Telegram メソッドに共通です。The chat_id parameter is common to all Telegram methods. chat_id をパラメーターとして指定しない場合は、フレームワークによって ID が自動的に指定されます。If you do not specify chat_id as a parameter, the framework will provide the ID for you.
  • ファイル コンテンツをインラインで渡すのではなく、以下の例で示すように、URL およびメディアの種類を使用してファイルを指定します。Instead of passing file contents inline, specify the file using a URL and media type as shown in the example below.
  • お使いのボットで受信した、Telegram チャネルからの各メッセージの ChannelDataプロパティに、お使いのボットによって以前送信されたメッセージが指定されます。Within each message that your bot receives from the Telegram channel, the ChannelData property will include the message that your bot sent previously.

このスニペットは、1 つの Telegram メソッドを指定する channelData プロパティの例を示しています。This snippet shows an example of a channelData property that specifies a single Telegram method.

"channelData": {
    "method": "sendSticker",
    "parameters": {
        "sticker": {
            "url": "https://domain.com/path/gif",
            "mediaType": "image/gif",
        }
    }
}

このスニペットは、Telegram メソッドの配列を指定する channelData プロパティの例を示しています。This snippet shows an example of a channelData property that specifies an array of Telegram methods.

"channelData": [
    {
        "method": "sendSticker",
        "parameters": {
            "sticker": {
                "url": "https://domain.com/path/gif",
                "mediaType": "image/gif",
            }
        }
    },
    {
        "method": "sendMessage",
        "parameters": {
            "text": "<b>This message is HTML formatted.</b>",
            "parse_mode": "HTML"
        }
    }
]

ネイティブ Kik メッセージを作成するCreate a native Kik message

ネイティブ Kik メッセージを作成するには、アクティビティ オブジェクトのチャネル データ プロパティを JSON オブジェクトに設定し、次のプロパティを指定します。To create a native Kik message, set the activity object's channel data property to a JSON object that specifies this property:

プロパティProperty 説明Description
最大配信数messages Kik メッセージの配列。An array of Kik messages. Kik メッセージ形式の詳細については、Kik メッセージ形式に関するページをご覧ください。For details about Kik message format, see Kik Message Formats.

このスニペットは、ネイティブ Kik メッセージ用の channelData プロパティの例を示しています。This snippet shows an example of the channelData property for a native Kik message.

"channelData": {
    "messages": [
        {
            "chatId": "c6dd8165…",
            "type": "link",
            "to": "kikhandle",
            "title": "My Webpage",
            "text": "Some text to display",
            "url": "http://botframework.com",
            "picUrl": "http://lorempixel.com/400/200/",
            "attribution": {
                "name": "My App",
                "iconUrl": "http://lorempixel.com/50/50/"
            },
            "noForward": true,
            "kikJsData": {
                    "key": "value"
                }
        }
    ]
}

LINE のメッセージを作成するCreate a LINE message

LINE に固有のメッセージのタイプ (スタンプ、テンプレート、または携帯電話のカメラを開くといった LINE 固有のアクションのタイプ) を実装するメッセージを作成するには、LINE のメッセージのタイプとアクションのタイプを指定する JSON オブジェクトに、アクティビティ オブジェクトのチャネル データ プロパティを設定します。To create a message that implements LINE-specific message types (such as sticker, templates, or LINE specific action types like opening the phone camera), set the activity object's channel data property to a JSON object that specifies LINE message types and action types.

プロパティProperty 説明Description
typetype LINE のアクションまたはメッセージのタイプ名The LINE action/message type name

次の LINE メッセージのタイプがサポートされています。These LINE message types are supported:

  • スタンプSticker
  • イメージマップImagemap
  • テンプレート (ボタン、確認、カルーセル)Template (Button, confirm, carousel)
  • FlexFlex

次の LINE アクションを、メッセージ タイプ JSON オブジェクトの action フィールドで指定できます。These LINE actions can be specified in the action field of the message type JSON object:

  • ポストバックPostback
  • MessageMessage
  • URIURI
  • 日時選択Datetimerpicker
  • CameraCamera
  • カメラロールCamera roll
  • LocationLocation

これらの LINE メソッドとそのパラメーターの詳細については、LINE Bot API のドキュメントを参照してください。For details about these LINE methods and their parameters, see the LINE Bot API documentation.

次のスニペットでは、channelDataチャネル メッセージのタイプを指定するプロパティButtonTemplateと、3 つのアクション タイプ (カメラ、日時選択、カメラロール) の例を示します。This snippet shows an example of a channelData property that specifies a channel message type ButtonTemplate and 3 action types: camera, cameraRoll, Datetimepicker.

"channelData": { 
    "type": "ButtonsTemplate", 
    "altText": "This is a buttons template", 
    "template": { 
        "type": "buttons", 
        "thumbnailImageUrl": "https://example.com/bot/images/image.jpg", 
        "imageAspectRatio": "rectangle", 
        "imageSize": "cover", 
        "imageBackgroundColor": "#FFFFFF", 
        "title": "Menu", 
        "text": "Please select", 
        "defaultAction": { 
            "type": "uri", 
            "label": "View detail", 
            "uri": "http://example.com/page/123" 
        }, 
        "actions": [{ 
                "type": "cameraRoll", 
                "label": "Camera roll" 
            }, 
            { 
                "type": "camera", 
                "label": "Camera" 
            }, 
            { 
                "type": "datetimepicker", 
                "label": "Select date", 
                "data": "storeId=12345", 
                "mode": "datetime", 
                "initial": "2017-12-25t00:00", 
                "max": "2018-01-24t23:59", 
                "min": "2017-12-25t00:00" 
            } 
        ] 
    } 
}

その他のリソースAdditional resources