Bot Connector API を使用してチャネル固有の機能を実装する
一部のチャネルには、 メッセージ テキストと添付ファイルのみを使用して実装できない機能が用意されています。 チャネル固有の機能を実装するには、 Activity オブジェクトの channelData
プロパティのチャネルにネイティブ メタデータを渡します。 たとえば、お使いのボットで channelData
プロパティを使用して、ステッカーを送信するように Telegram に指示したり、電子メールを送信するように Office365 に指示したりできます。
この記事では、メッセージ アクティビティの channelData
プロパティを使用して、このチャネル固有の機能を実装する方法について説明します。
チャネル | 機能 |
---|---|
本文、件名、および重要度のメタデータを含む電子メールを送受信します | |
Slack | 完全に忠実な Slack メッセージを送信します |
Facebook 通知をネイティブで送信します | |
Telegram | 音声メモ、ステッカーの共有など、Telegram 固有のアクションを実行します |
Note
Activity
オブジェクトの channelData
プロパティの値は JSON オブジェクトです。
以下に示すように、JSON オブジェクトの構造は、チャネルおよび実装されている機能によって異なります。
カスタム電子メール メッセージを作成する
電子メール メッセージを作成するには、Activity
オブジェクトの channelData
プロパティを、次のプロパティを含む JSON オブジェクトに設定します。
{
"type": "ActivityTypes.Message",
"locale": "en-Us",
"channelID": "email",
"fromName": { "id": "mybot@mydomain.com", "name": "My bot"},
"recipientName": { "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>",
"importance": "high",
"ccRecipients": "Yasemin@adatum.com;Temel@adventure-works.com",
}
}
次のスニペットは、カスタム電子メール メッセージ用の channelData
プロパティの例を示しています。
"channelData":
{
"htmlBody": "<html><body style = \"font-family: Calibri; font-size: 11pt;\" >This is more than awesome.</body></html>",
"importance": "high",
"ccRecipients": "Yasemin@adatum.com;Temel@adventure-works.com"
}
完全に忠実な Slack メッセージを作成する
完全に忠実な Slack メッセージを作成するには、Activity
オブジェクトの channelData
プロパティを、Slack のメッセージ、Slack の添付ファイル、Slack のボタンを指定する JSON オブジェクトに設定します。
Note
Slack メッセージでボタンをサポートするには、Slack チャネルにお使いのボットを接続するときに、インタラクティブ メッセージを有効にする必要があります。
このスニペットは、カスタム Slack メッセージ用の channelData
プロパティの例を示しています。
"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 メッセージ内のボタンをクリックすると、お使いのボットに応答メッセージが届きます。このメッセージの channelData
プロパティには payload
JSON オブジェクトが設定されています。
payload
オブジェクトによって、元のメッセージのコンテンツが指定され、クリックされたボタンと、そのボタンをクリックしたユーザーが特定されます。
このスニペットは、ユーザーが Slack メッセージ内のボタンをクリックしたときに、ボットに届くメッセージ内の channelData
プロパティの例を示しています。
"channelData": {
"payload": {
"actions": [
{
"name": "recommend",
"value": "yes"
}
],
//...
"original_message": "{...}",
"response_url": "https://hooks.slack.com/actions/..."
}
}
お使いのボットでは通常の方法でこのメッセージに返信するか、その応答を、payload
オブジェクトの response_url
プロパティで指定されているエンドポイントに直接投稿できます。 応答を response_url
に投稿するタイミングと方法については、Slack ボタンに関するページをご覧ください。
Facebook 通知を作成する
Facebook 通知を作成するには、Activity
オブジェクトの channelData
プロパティを JSON オブジェクトに設定し、次のプロパティを指定します。
プロパティ | 説明 |
---|---|
notification_type | 通知の種類 ( REGULAR、 SILENT_PUSH、 NO_PUSHなど)。 |
attachment | 画像、動画、またはその他のマルチメディアの種類を指定する添付ファイル、または受信確認などのテンプレート化された添付ファイル。 |
Note
notification_type
プロパティおよび attachment
プロパティの形式とコンテンツの詳細については、Facebook API のドキュメントを参照してください。
このスニペットは、Facebook 受信確認添付ファイル用の channelData
プロパティの例を示しています。
"channelData": {
"notification_type": "NO_PUSH",
"attachment": {
"type": "template",
"payload": {
"template_type": "receipt",
//...
}
}
}
Telegram メッセージを作成する
音声メモやステッカーの共有など、Telegram 固有のアクションが実装されているメッセージを作成するには、Activity
オブジェクトの channelData
プロパティを JSON オブジェクトに設定し、次のプロパティを指定します。
プロパティ | 説明 |
---|---|
method | 呼び出す Telegram Bot API メソッド。 |
parameters | 指定されたメソッドのパラメーター。 |
次の Telegram メソッドがサポートされています。
- answerInlineQuery
- editMessageCaption
- editMessageReplyMarkup
- editMessageText
- forwardMessage
- banChatMember
- sendAudio
- sendChatAction
- sendContact
- sendDocument
- sendLocation
- sendMessage
- sendPhoto
- sendSticker
- sendVenue
- sendVideo
- sendVoice
- unbanChatMember
これらの Telegram メソッドとそのパラメーターの詳細については、Telegram Bot API のドキュメントを参照してください。
Note
-
chat_id
パラメーターは、すべての Telegram メソッドに共通です。 パラメーターとして を指定chat_id
しない場合、フレームワークによって ID が提供されます。 - ファイル コンテンツをインラインで渡すのではなく、以下の例で示すように、URL およびメディアの種類を使用してファイルを指定します。
- お使いのボットで受信した、Telegram チャネルからの各メッセージの
channelData
プロパティに、お使いのボットによって以前送信されたメッセージが指定されます。
このスニペットは、1 つの Telegram メソッドを指定する channelData
プロパティの例を示しています。
"channelData": {
"method": "sendSticker",
"parameters": {
"sticker": {
"url": "https://domain.com/path/gif",
"mediaType": "image/gif",
}
}
}
このスニペットは、Telegram メソッドの配列を指定する channelData
プロパティの例を示しています。
"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"
}
}
]