为什么 Teams 中的聊天机器人刷新卡不刷新?
Why are my chatbot refresh cards in Teams not refreshing?
我正在为我的聊天机器人中的团队频道提供 O365 连接器卡,供用户使用 HttpPost 操作将数据发送回机器人。
这是用户保存时调用消息的示例:
{
"name": "actionableMessage/executeAction",
"type": "invoke",
"timestamp": "2018-06-16T20:58:24.388Z",
"localTimestamp": "2018-06-16T21:58:24.388+01:00",
"id": "snip",
"channelId": "msteams",
"serviceUrl": "https://smba.trafficmanager.net/emea-client-ss.msg/",
"from": {
"id": "snip",
"name": "my name",
"aadObjectId": "snip"
},
"conversation": {
"conversationType": "personal",
"id": "long conversation id"
},
"recipient": {
"id": "bot id",
"name": "bot name"
},
"entities": [
{
"locale": "en-US",
"country": "US",
"platform": "Web",
"type": "clientInfo"
}
],
"channelData": {
"tenant": {
"id": "tenant id"
},
"source": {
"name": "message"
}
},
"replyToId": "message id",
"value": {
"body": "{\"sportType\":\"1\", \"tournamentName\":\"FIFA Soccer World Cup\",\"startTime\":\"2018-06-14T03: 00: 00.000Z\", \"endTime\":\"2018-07-16T07: 30: 00.000Z\", \"timeZone\":\"Russian Standard Time\", \"tournamentId\": \"1\"}",
"actionId": "SaveTournament"
}
}
为了响应保存卡,我在响应 body 中返回了一个 ActionCard,并且我包含了一个 HTTP header "CARD-UPDATE-IN-BODY" 和一个值 "true" .这是一个示例响应消息:
{
"@type": "ActionCard",
"inputs": [
{
"@type": "TextInput",
"isMultiline": true,
"maxLength": 500.0,
"id": "SaveStatus",
"isRequired": false,
"title": "Save Status",
"value": "You updated the tournament FIFA Soccer World Cup running from 6/14/2018 to 7/16/2018 in timezone Russian Standard Time"
}
],
"actions": [
{
"@type": "HttpPOST",
"body": "{\"tournamentId\": \"1\"}",
"name": "Update FIFA Soccer World Cup again",
"@id": "UpdateTournament#1"
}
],
"name": "Save Tournament",
"@id": "SaveTournament"
}
我已经在我的 Web 应用程序中对此进行了跟踪,所以我知道这就是返回到 bot 框架中间件的内容。
在浏览器中我的团队应用程序中,当我使用 Fiddler 跟踪响应消息时,卡片调用响应没有收到我发送的刷新卡片,它只是收到一个带有空响应的通用 200 响应body.任何人都可以指点我使用 Teams 的刷新卡演示,或者告诉我我的消息有什么问题吗?
Teams 不支持通过响应调用消息来更新原始卡片。相反,您需要通过调用 Bot Framework API(参见 https://docs.microsoft.com/en-us/microsoftteams/platform/concepts/bots/bot-conversations/bots-conversations#updating-messages)来显式更新消息。
传入的调用消息包含更新原始消息所需的信息:
<serviceurl>/v3/conversations/<conversationid>/activities/<activityid>
<serviceurl>
: serviceUrl
<conversationid>
: conversation.id
<activityid>
: replyToId
(如何更新消息的详细信息取决于您使用的是哪个 SDK,但最终您将需要这 3 项来引用消息。)
我正在为我的聊天机器人中的团队频道提供 O365 连接器卡,供用户使用 HttpPost 操作将数据发送回机器人。 这是用户保存时调用消息的示例:
{
"name": "actionableMessage/executeAction",
"type": "invoke",
"timestamp": "2018-06-16T20:58:24.388Z",
"localTimestamp": "2018-06-16T21:58:24.388+01:00",
"id": "snip",
"channelId": "msteams",
"serviceUrl": "https://smba.trafficmanager.net/emea-client-ss.msg/",
"from": {
"id": "snip",
"name": "my name",
"aadObjectId": "snip"
},
"conversation": {
"conversationType": "personal",
"id": "long conversation id"
},
"recipient": {
"id": "bot id",
"name": "bot name"
},
"entities": [
{
"locale": "en-US",
"country": "US",
"platform": "Web",
"type": "clientInfo"
}
],
"channelData": {
"tenant": {
"id": "tenant id"
},
"source": {
"name": "message"
}
},
"replyToId": "message id",
"value": {
"body": "{\"sportType\":\"1\", \"tournamentName\":\"FIFA Soccer World Cup\",\"startTime\":\"2018-06-14T03: 00: 00.000Z\", \"endTime\":\"2018-07-16T07: 30: 00.000Z\", \"timeZone\":\"Russian Standard Time\", \"tournamentId\": \"1\"}",
"actionId": "SaveTournament"
}
}
为了响应保存卡,我在响应 body 中返回了一个 ActionCard,并且我包含了一个 HTTP header "CARD-UPDATE-IN-BODY" 和一个值 "true" .这是一个示例响应消息:
{
"@type": "ActionCard",
"inputs": [
{
"@type": "TextInput",
"isMultiline": true,
"maxLength": 500.0,
"id": "SaveStatus",
"isRequired": false,
"title": "Save Status",
"value": "You updated the tournament FIFA Soccer World Cup running from 6/14/2018 to 7/16/2018 in timezone Russian Standard Time"
}
],
"actions": [
{
"@type": "HttpPOST",
"body": "{\"tournamentId\": \"1\"}",
"name": "Update FIFA Soccer World Cup again",
"@id": "UpdateTournament#1"
}
],
"name": "Save Tournament",
"@id": "SaveTournament"
}
我已经在我的 Web 应用程序中对此进行了跟踪,所以我知道这就是返回到 bot 框架中间件的内容。
在浏览器中我的团队应用程序中,当我使用 Fiddler 跟踪响应消息时,卡片调用响应没有收到我发送的刷新卡片,它只是收到一个带有空响应的通用 200 响应body.任何人都可以指点我使用 Teams 的刷新卡演示,或者告诉我我的消息有什么问题吗?
Teams 不支持通过响应调用消息来更新原始卡片。相反,您需要通过调用 Bot Framework API(参见 https://docs.microsoft.com/en-us/microsoftteams/platform/concepts/bots/bot-conversations/bots-conversations#updating-messages)来显式更新消息。
传入的调用消息包含更新原始消息所需的信息:
<serviceurl>/v3/conversations/<conversationid>/activities/<activityid>
<serviceurl>
:serviceUrl
<conversationid>
:conversation.id
<activityid>
:replyToId
(如何更新消息的详细信息取决于您使用的是哪个 SDK,但最终您将需要这 3 项来引用消息。)