您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

通过机器人连接器 API 实现特定于通道的功能

某些通道提供无法仅使用消息文本和附件实现的功能。 若要实现特定于通道的功能,可以将本机元数据传递给 [Activity[]] 对象的 channelData 属性中的通道。 例如,机器人可使用 channelData 属性来指示 Telegram 发送贴纸或指示 Office365 发送电子邮件。

本文介绍如何使用消息活动的 channelData 属性来实现此通道特定的功能:

Channel 功能
电子邮件 发送和接收包含正文、主题和重要性元数据的电子邮件
Slack 发送全保真的 Slack 消息
Facebook 本机发送 Facebook 通知
Telegram 执行 Telegram 特定操作,例如共享语音备忘录或贴纸
Kik 发送和接收本机 Kik 消息

备注

Activity 对象的 channelData 属性的值是一个 JSON 对象。 JSON 对象的结构将根据所执行的通道和功能而变化,如下所述。

创建自定义电子邮件

要创建电子邮件,请将 Activity 对象的 channelData 属性设置为包含以下属性的 JSON 对象:

properties 说明
htmlBody 用于邮件正文的 HTML。
subject 用于邮件的主题。
importance 用于邮件的重要性标志:lownormalhigh
toRecipients 添加到邮件“收件人”字段的用分号 (;) 分隔的电子邮件地址字符串。
ccRecipients 添加到邮件“Cc(抄送)”字段的用分号 (;) 分隔的电子邮件地址字符串。
bccRecipients 添加到邮件“Bcc(密件抄送)”字段的用分号 (;) 分隔的电子邮件地址字符串。

此代码片段显示了自定义“电子邮件”消息的 channelData 属性示例。

"channelData":
{
    "htmlBody": "<html><body style = /"font-family: Calibri; font-size: 11pt;/" >This is more than awesome.</body></html>",
    "subject": "Super awesome message subject",
    "importance": "high",
    "ccRecipients": "Yasemin@adatum.com;Temel@adventure-works.com"
}

创建全保真的 Slack 消息

要创建全保真的 Slack 消息,请将 Activity 对象的 channelData 属性设置为 JSON 对象,该对象指定 Slack 消息Slack 附件 和/或 Slack 按钮

备注

要使用户能在 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 对象:

properties 说明
notification_type 通知的类型(例如 REGULAR、SILENT_PUSH 和 NO_PUSH) 。
attachment 附件(用于指定图像、视频或其他多媒体类型)或模板化附件(如收据)。

备注

要详细了解 notification_type 属性和attachment 属性的格式和内容,请参阅 Facebook API 文档

此代码片段显示了Facebook 收据附件的 channelData 属性示例。

"channelData": {
    "notification_type": "NO_PUSH",
    "attachment": {
        "type": "template"
        "payload": {
            "template_type": "receipt",
            . . .
        }
    }
}

创建 Telegram 消息

要创建实现 Telegram 特定的操作(例如共享语音备注或贴纸)的消息,请将 Activity 对象的 channelData 属性设置为指定以下属性的 JSON 对象:

properties 说明
method 要调用的 Telegram 机器人 API 方法。
parameters 已指定的方法的参数。

支持以下 Telegram 方法:

  • answerInlineQuery
  • editMessageCaption
  • editMessageReplyMarkup
  • editMessageText
  • forwardMessage
  • kickChatMember
  • sendAudio
  • sendChatAction
  • sendContact
  • sendDocument
  • sendLocation
  • sendMessage
  • sendPhoto
  • sendSticker
  • sendVenue
  • sendVideo
  • sendVoice
  • unbanChateMember

要详细了解这些 Telegram 方法及其参数,请参阅 Telegram 机器人 API 文档

备注

  • chat_id 参数可通用于所有 Telegram 方法。 如果未将 chat_id 指定为参数,则框架将为你提供 ID。
  • 不要内联传递文件内容,而是使用 URL 和媒体类型指定文件,如下面的示例所示。
  • 在机器人从 Telegram 通道接收的每条消息中,channelData 属性都将包含机器人之前发送的消息。

此代码片段显示了一个指定单个 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"
        }
    }
]

创建本机 Kik 消息

要创建本机 Kik 消息,请将 Activity 对象的 channelData 属性设置为指定以下属性的 JSON 对象:

properties 说明
messages 一组 Kik 消息。 有关 Kik 消息格式的详细信息,请参阅 Kik 消息格式

此代码片段显示了本机 Kik 消息的 channelData 属性示例。

"channelData": {
    "messages": [
        {
            "chatId": "c6dd8165…",
            "type": "link",
            "to": "kikhandle",
            "title": "My Webpage",
            "text": "Some text to display",
            "url": "http://botframework.com",
            "picUrl": "http://lorempixel.com/400/200/",
            "attribution": {
                "name": "My App",
                "iconUrl": "http://lorempixel.com/50/50/"
            },
            "noForward": true,
            "kikJsData": {
                    "key": "value"
                }
        }
    ]
}

其他资源