使用 Bot Connector API 将媒体附件添加到消息中

机器人和通道通常会交换文本字符串,但某些通道也支持交换附件,这样机器人就可向用户发送更丰富的消息。 例如,机器人可以发送媒体附件(例如,图像、视频、音频、文件)和资讯卡。 本文介绍如何使用 Bot Connector 服务向消息添加媒体附件。

提示

有关每个通道支持的功能的详细信息,请参阅通道参考一文。

添加媒体附件

要向消息添加媒体附件,请创建一个 Attachment 对象,设置 name 属性,将 contentUrl 属性设置为媒体文件的 URL,并将 contentType 属性设置为相应的媒体类型(如 image/jpgaudio/wavvideo/mp4)。 然后在表示消息的 Activity 对象中,在 attachments 数组中指定 Attachment 对象。

以下示例显示了一个请求,该请求可以发送包含文本和单个图像附件的消息。 在此示例请求中,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"
}

对于支持图像内联二进制文件的通道,可以将 AttachmentcontentUrl 属性设置为图像的 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"
}

可以通过为图像文件使用上述相同的过程,将视频文件或音频文件附加到消息中。 根据通道的不同,视频和音频可以内联播放,也可以显示为链接。

注意

机器人也可能会收到包含媒体附件的消息。 例如,如果通道允许用户上传要分析的照片或要存储的文档,则机器人收到的消息可能包含附件。

添加 AudioCard 附件

添加 AudioCardVideoCard 附件与添加媒体附件相同。 例如,以下 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
        }
    }
}

媒体事件名称“media/pause” 将出现在 activity.name 字段中。 参考下表了解所有媒体事件名称的列表。

事件 说明
media/next 客户端跳到下一个媒体
media/pause 客户端暂停播放媒体
media/play 客户端开始播放媒体
media/previous 客户端跳到上一个媒体
media/resume 客户端继续播放媒体
media/stop 客户端停止播放媒体

其他资源