Bot Connector API を使用してチャネル固有の機能を実装する

一部のチャネルには、 メッセージ テキストと添付ファイルのみを使用して実装できない機能が用意されています。 チャネル固有の機能を実装するには、 Activity オブジェクトの channelData プロパティのチャネルにネイティブ メタデータを渡します。 たとえば、お使いのボットで channelData プロパティを使用して、ステッカーを送信するように Telegram に指示したり、電子メールを送信するように Office365 に指示したりできます。

この記事では、メッセージ アクティビティの channelData プロパティを使用して、このチャネル固有の機能を実装する方法について説明します。

チャネル 機能
Email 本文、件名、および重要度のメタデータを含む電子メールを送受信します
Slack 完全に忠実な Slack メッセージを送信します
Facebook 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 通知の種類 ( REGULARSILENT_PUSHNO_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"
        }
    }
]

その他のリソース