重要
本文介绍如何使用 Direct Line API 1.1 从机器人接收消息。 如果要在客户端应用程序和机器人之间创建新连接,请改用 Direct Line API 3.0。
使用 Direct Line 1.1 协议时,客户端必须轮询 HTTP GET
接口以接收消息。
通过 HTTP GET 检索消息
若要检索特定聊天的消息,请向 api/conversations/{conversationId}/messages
终结点发出 GET
请求,根据需要指定 watermark
参数以指示客户端看到的最新消息。 即使没有包含消息,也会在 JSON 响应中返回更新的 watermark
值。
以下代码段提供了“获取消息”请求和响应的示例。 “获取消息”响应包含 watermark
作为 MessageSet 的属性。 客户端应通过增加 watermark
值来按页浏览提供的消息,直到不返回任何消息。
请求
GET https://directline.botframework.azure.cn/api/conversations/abc123/messages?watermark=0001a-94
Authorization: Bearer RCurR_XV9ZA.cwA.BKA.iaJrC8xpy8qbOF5xnR2vtCX7CZj0LdjAPGfiCpg4Fv0
响应
HTTP/1.1 200 OK
[other headers]
{
"messages": [
{
"conversation": "abc123",
"id": "abc123|0000",
"text": "hello",
"from": "user1"
},
{
"conversation": "abc123",
"id": "abc123|0001",
"text": "Nice to see you, user1!",
"from": "bot1"
}
],
"watermark": "0001a-95"
}
计时注意事项
尽管 Direct Line 是一个具有潜在计时间隙的多部分协议,但协议和服务旨在轻松简单地生成可靠的客户端。 发送到“获取消息”中的 watermark
属性很可靠。 客户端只要一字不差地重播水印,就不会错过任何消息。
客户端应选择匹配其预期用途的轮询间隔。
服务到服务应用程序通常使用 5 秒或 10 秒的轮询间隔。
面向客户端的应用程序通常使用 1 秒的轮询间隔,并在客户端发送的每条消息之后 ~300ms 发出额外的请求(以快速检索机器人的响应)。 应根据机器人的速度和传输时间调整此 300ms 延迟。