Botframework 当使用wait context.PostAsync(reply)发送多条消息时,它们有时会被无序接收

Botframework 当使用wait context.PostAsync(reply)发送多条消息时,它们有时会被无序接收,botframework,Botframework,当我们使用下面的代码使用Directline通道发送消息时,消息有时会被交换顺序接收 await context.PostAsync(msg1); await context.PostAsync(msg2); 预期: mgs1 msg2 但在某些情况下,它们是通过 msg2 msg1 有什么方法可以处理和防止这种情况吗?假设您使用Directline或REST API来接收消息,我将编写此答案。如果不是这样,我可以更新 这个完整的答案是基于对DirectLineAPI的测试来确认的 如果您是通

当我们使用下面的代码使用Directline通道发送消息时,消息有时会被交换顺序接收

await context.PostAsync(msg1);
await context.PostAsync(msg2);
预期:

mgs1
msg2

但在某些情况下,它们是通过

msg2
msg1


有什么方法可以处理和防止这种情况吗?

假设您使用Directline或REST API来接收消息,我将编写此答案。如果不是这样,我可以更新

这个完整的答案是基于对DirectLineAPI的测试来确认的

如果您是通过WebSocket连接的,那么您应该始终按顺序接收消息,前提是消息中没有需要额外处理的某种大小差异(比如有附件)

如果您没有,这意味着您的客户端可能每5秒或10秒发送一次GET请求(根据客户端的不同而不同),以检索所有尚未检索的消息

这样做后,客户将收到如下信息:

{
    "activities": [
        {
            "type": "message",
            "channelId": "directline",
            "conversation": {
                "id": "abc123"
            },
            "id": "abc123|0000",
            "from": {
                "id": "user1"
            },
            "text": "hello"
        }, 
        {
            "type": "message",
            "channelId": "directline",
            "conversation": {
                "id": "abc123"
            },
            "id": "abc123|0001",
            "from": {
                "id": "bot1"
            },
            "text": "Nice to see you, user1!"
        }
    ],
    "watermark": "0001a-95"
}

我的猜测是,您的客户机只是在活动数组上运行一个
foreach
,这可能会使它们的显示顺序混乱。如果您让客户机通过
时间戳
id
对其进行排序,那么它应该可以工作。

我将编写此答案,假设您使用Directline或REST API接收消息。如果不是这样,我可以更新

这个完整的答案是基于对DirectLineAPI的测试来确认的

如果您是通过WebSocket连接的,那么您应该始终按顺序接收消息,前提是消息中没有需要额外处理的某种大小差异(比如有附件)

如果您没有,这意味着您的客户端可能每5秒或10秒发送一次GET请求(根据客户端的不同而不同),以检索所有尚未检索的消息

这样做后,客户将收到如下信息:

{
    "activities": [
        {
            "type": "message",
            "channelId": "directline",
            "conversation": {
                "id": "abc123"
            },
            "id": "abc123|0000",
            "from": {
                "id": "user1"
            },
            "text": "hello"
        }, 
        {
            "type": "message",
            "channelId": "directline",
            "conversation": {
                "id": "abc123"
            },
            "id": "abc123|0001",
            "from": {
                "id": "bot1"
            },
            "text": "Nice to see you, user1!"
        }
    ],
    "watermark": "0001a-95"
}

我的猜测是,您的客户机只是在活动数组上运行一个
foreach
,这可能会使它们的显示顺序混乱。如果您让客户通过
时间戳
id
订购,它应该可以工作。

遇到这种情况的bot的appId是什么?我可以查看后端日志以寻找线索……您使用什么客户端与bot通信?遇到这种情况的bot的appId是什么?我可以查看后端日志以寻找线索……您使用哪个客户端与bot通信?这里我发送的不是一系列消息,而是一条单独的消息。因此,我无法应用orderby…@Shaik您正在单独发送它们,但由于轮询间隔,客户端可能正在阵列中接收它们。你在用什么客户端?@Shaik忘了@。提到你…不确定它是否会通知你如果我没有^^^这里我发送的不是一系列消息,而是一条单独的消息。因此,我无法应用orderby…@Shaik您正在单独发送它们,但由于轮询间隔,客户端可能正在阵列中接收它们。你在用什么客户机?@Shaik忘了@。提到你…不确定如果我不知道它是否会通知你^^