使用 Bot Connector API 将媒体附件添加到消息中
机器人和通道通常会交换文本字符串,但某些通道也支持交换附件,这样机器人就可向用户发送更丰富的消息。 例如,机器人可以发送媒体附件(例如,图像、视频、音频、文件)和资讯卡。 本文介绍如何使用 Bot Connector 服务向消息添加媒体附件。
提示
有关每个通道支持的功能的详细信息,请参阅通道参考一文。
添加媒体附件
要向消息添加媒体附件,请创建一个 Attachment 对象,设置 name
属性,将 contentUrl
属性设置为媒体文件的 URL,并将 contentType
属性设置为相应的媒体类型(如 image/jpg、audio/wav、video/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"
}
对于支持图像内联二进制文件的通道,可以将 Attachment
的 contentUrl
属性设置为图像的 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 附件
添加 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
}
}
}
媒体事件名称“media/pause” 将出现在 activity.name
字段中。 参考下表了解所有媒体事件名称的列表。
事件 | 说明 |
---|---|
media/next | 客户端跳到下一个媒体 |
media/pause | 客户端暂停播放媒体 |
media/play | 客户端开始播放媒体 |
media/previous | 客户端跳到上一个媒体 |
media/resume | 客户端继续播放媒体 |
media/stop | 客户端停止播放媒体 |