在 Direct Line API 3.0 中重新连接到对话
如果客户端使用 WebSocket 接口来接收消息但丢失了连接,则可能需要重新连接。 在这种情况下,客户端必须生成一个新的 WebSocket 流 URL,它可以用来重新连接到聊天。
生成新的 WebSocket 流 URL
若要生成可用于重新连接到现有聊天的新 WebSocket 流 URL,请发出此请求:
GET https://directline.botframework.azure.cn/v3/directline/conversations/{conversationId}?watermark={watermark_value}
Authorization: Bearer SECRET_OR_TOKEN
在此请求 URI 中,请将 {conversationId} 替换为聊天 ID,并将 {watermark_value} 替换为水印值(如果 watermark
参数 可用)。 watermark
参数是可选的。 如果在请求 URI 中指定了 watermark
参数,则聊天会从水印处重播,从而保证不会丢失任何消息。 如果请求 URI 中省略了 watermark
参数,则仅重播重新连接请求后收到的消息。
以下代码段提供了重新连接请求和响应的示例。
请求
GET https://directline.botframework.azure.cn/v3/directline/conversations/abc123?watermark=0000a-42
Authorization: Bearer RCurR_XV9ZA.cwA.BKA.iaJrC8xpy8qbOF5xnR2vtCX7CZj0LdjAPGfiCpg4Fv0y8qbOF5xPGfiCpg4Fv0y8qqbOF5x8qbOF5xn
响应
如果请求成功,则响应将包含聊天 ID、令牌和新的 WebSocket 流 URL。
HTTP/1.1 200 OK
[other headers]
{
"conversationId": "abc123",
"token": "RCurR_XV9ZA.cwA.BKA.iaJrC8xpy8qbOF5xnR2vtCX7CZj0LdjAPGfiCpg4Fv0y8qbOF5xPGfiCpg4Fv0y8qqbOF5x8qbOF5xn",
"streamUrl": "https://directline.botframework.azure.cn/v3/directline/conversations/abc123/stream?watermark=000a-4&t=RCurR_XV9ZA.cwA..."
}
重新连接到聊天
客户端必须使用新的 WebSocket 流 URL 在 60 秒内重新连接到聊天。 如果在此期间无法建立连接,则客户端必须发出另一个重新连接请求以生成新的流 URL。
如果 Direct Line 设置中启用了“增强身份验证选项”,则在未将正确配置的令牌附加到请求的情况下,可能会收到 400“MissingProperty”错误。