【问题标题】:Why are my chatbot refresh cards in Teams not refreshing?为什么我的 Teams 中的聊天机器人刷新卡不刷新?
【发布时间】:2018-06-17 05:27:02
【问题描述】:

我正在为我的聊天机器人中的团队频道提供 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"
    }
}

作为对保存卡的响应,我在响应正文中返回了一个 ActionCard,并且包含了一个值为“true”的 HTTP 标头“CARD-UPDATE-IN-BODY”。这是一个示例响应消息:

{
    "@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"
}

我已经在我的网络应用程序中跟踪了这一点,所以我知道这是返回给机器人框架中间件的内容。

在浏览器中我的团队应用程序中,当我使用 Fiddler 跟踪响应消息时,卡调用响应没有收到我发送的刷新卡,它只是获得一个带有空响应正文的通用 200 响应。谁能给我指出一个与 Teams 一起使用的刷新卡演示,或者告诉我我的消息有什么问题?

【问题讨论】:

    标签: botframework microsoft-teams


    【解决方案1】:

    Teams 不支持通过响应调用消息来更新原始卡片。相反,您需要通过调用 Bot Framework API 显式更新消息(请参阅https://docs.microsoft.com/en-us/microsoftteams/platform/concepts/bots/bot-conversations/bots-conversations#updating-messages)。

    传入的invoke消息包含更新原始消息所需的信息:

    <serviceurl>/v3/conversations/<conversationid>/activities/<activityid>

    • <serviceurl>: serviceUrl
    • <conversationid>: conversation.id
    • <activityid>: replyToId

    (如何更新消息的详细信息取决于您使用的是哪个 SDK,但最终您需要这 3 个项目来引用消息。)

    【讨论】:

    • 您先生是我的新英雄。谢谢!
    • 最后一次更新,我尝试了替换卡,效果很好。我有一段时间遇到问题,因为我同时发送活动文本(错误消息)和附件,并且收到“错误请求”错误。我对此感到困惑,但经过一段令人尴尬的长时间调试后,我最终想检查 Azure 中机器人服务上的通道,那里有一条错误消息,解释我正在尝试创建一个多部分消息,但事实并非如此支持的。再次感谢!
    • 啊,是的,带有文本+卡片(或多张卡片)的活动被拆分为多条消息。在放宽此限制之前,最安全的做法是只进行文本->文本或卡片->卡片更新。
    猜你喜欢
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多