Bot Connector API を使用してメッセージにメディア添付ファイルを追加する

通常、ボットとチャネルが交換するのはテキスト文字列ですが、添付ファイルの交換もサポートされる一部のチャネルでは、ボットはよりリッチなメッセージをユーザーに送信できます。 たとえば、ボットはメディア添付ファイル (画像、ビデオ、オーディオ、ファイルなど) と リッチ カードを送信できます。 この記事では、Bot Connector サービスを使用してメッセージにメディア添付ファイルを追加する方法について説明します。

ヒント

各チャネルでサポートされている機能の詳細については、 チャネルのリファレンス 記事を参照してください。

メディア添付ファイルの追加

メッセージにメディア添付ファイルを追加するには、 Attachment オブジェクトを作成し、 プロパティを name 設定し、 プロパティをメディア ファイルの URL に設定 contentUrl し、 プロパティを contentType 適切なメディアの種類 ( image/jpgaudio/wavvideo/mp4 など) に設定します。 次に、メッセージを表す Activity オブジェクト内で、Attachment オブジェクトを attachments 配列内に指定します。

次の例に、テキストと 1 つの画像添付ファイルを含むメッセージを送信する要求を示します。 この要求の例で、https://smba.trafficmanager.net/teams はベース URI を示しています。ご利用のボットによって発行される要求に対するベース URI は、これとは異なる場合があります。 ベース URI の設定の詳細については、API リファレンスに関する記事をご覧ください。

POST https://smba.trafficmanager.net/teams/v3/conversations/abcd1234/activities/5d5cdc723
Authorization: Bearer ACCESS_TOKEN
Content-Type: application/json
{
    "type": "message",
    "from": {
        "id": "12345678",
        "name": "sender's name"
    },
    "conversation": {
        "id": "abcd1234",
        "name": "conversation's name"
   },
   "recipient": {
        "id": "1234abcd",
        "name": "recipient's name"
    },
    "text": "Here's a picture of the duck I was telling you about.",
    "attachments": [
        {
            "contentType": "image/jpg",
            "contentUrl": "https://www.publicdomainpictures.net/pictures/30000/t2/duck-on-a-rock.jpg",
            "name": "duck-on-a-rock.jpg"
        }
    ],
    "replyToId": "5d5cdc723"
}

イメージのインライン バイナリをサポートするチャネルの場合は、 の プロパティを contentUrl イメージの Attachment base64 バイナリ ( data:image/jpg など) に設定できます。base64,iVBORw0KGgo...).チャネルには、メッセージのテキスト文字列の横に画像または画像の URL が表示されます。

{
    "type": "message",
    "from": {
        "id": "12345678",
        "name": "sender's name"
    },
    "conversation": {
        "id": "abcd1234",
        "name": "conversation's name"
   },
   "recipient": {
        "id": "1234abcd",
        "name": "recipient's name"
    },
    "text": "Here's a picture of the duck I was telling you about.",
    "attachments": [
        {
            "contentType": "image/jpg",
            "contentUrl": "data:image/jpg;base64,iVBORw0KGgo...",
            "name": "duck-on-a-rock.jpg"
        }
    ],
    "replyToId": "5d5cdc723"
}

上記の画像ファイル用の手順と同じ手順を使用して、動画ファイルまたはオーディオ ファイルをメッセージに添付することができます。 チャネルによっては、動画やオーディオがインラインで再生されたり、リンクとして表示されたりすることがあります。

Note

ボットがメディア添付ファイルを含むメッセージを受け取ることもあります。 たとえば、分析する写真や保存するドキュメントをユーザーがアップロードすることがチャネルによって許可されている場合、ボットが受け取るメッセージに添付ファイルが含まれる場合があります。

AudioCard 添付ファイルの追加

AudioCard または VideoCard 添付ファイルを追加する方法は、メディア添付ファイルを追加する方法と同じです。 たとえば、次の JSON は、メディア添付ファイルにオーディオ カードを追加する方法を示しています。

{
    "type": "message",
    "from": {
        "id": "12345678",
        "name": "sender's name"
    },
    "conversation": {
        "id": "abcd1234",
        "name": "conversation's name"
   },
   "recipient": {
        "id": "1234abcd",
        "name": "recipient's name"
    },
    "attachments": [
    {
      "contentType": "application/vnd.microsoft.card.audio",
      "content": {
        "title": "Allegro in C Major",
        "subtitle": "Allegro Duet",
        "text": "No Image, No Buttons, Autoloop, Autostart, Sharable",
        "duration": "PT2M55S",
        "media": [
          {
            "url": "https://contoso.com/media/AllegrofromDuetinCMajor.mp3"
          }
        ],
        "shareable": true,
        "autoloop": true,
        "autostart": true,
        "value": {
            // Supplementary parameter for this card
        }
      }
    }],
    "replyToId": "5d5cdc723"
}

チャネルがこの添付ファイルを受け取ると、オーディオ ファイルの再生が開始されます。 たとえば、[ 一時停止] を選択してユーザーがオーディオを操作する場合、チャネルは次のような JSON を使用してボットにコールバックを送信します。

{
    ...
    "type": "event",
    "name": "media/pause",
    "value": {
        "url": // URL for media
        "cardValue": {
            // Supplementary parameter for this card
        }
    }
}

activity.name フィールドにはメディア イベント名 media/pause が表示されます。 すべてのメディア イベント名の一覧については、次の表を参照してください。

Event 説明
media/next クライアントが次のメディアまでスキップしました
media/pause クライアントがメディアの再生を一時停止しました
media/play クライアントがメディアの再生を開始しました
media/previous クライアントが前のメディアまでスキップしました
media/resume クライアントがメディアの再生を再開しました
media/stop クライアントがメディアの再生を停止しました

その他のリソース