代码之家  ›  专栏  ›  技术社区  ›  Joon

为什么我的聊天机器人刷新卡在团队不刷新?

  •  3
  • Joon  · 技术社区  · 8 年前

    我在聊天机器人中向我的团队频道提供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,并且包含一个http头“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响应。有谁能给我介绍一个与团队合作的刷新卡演示,或者告诉我我的消息有什么问题吗?

    1 回复  |  直到 8 年前
        1
  •  9
  •   Adrian Solis    8 年前

    团队不支持通过响应调用消息来更新原始卡。相反,您需要通过调用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,但最终需要这三个项来引用消息。)