在 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”错误。

其他资源