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