为了账号安全,请及时绑定邮箱和手机立即绑定

Direct Line 客户端的多个对话

Direct Line 客户端的多个对话

C#
慕仙森 2023-09-16 17:46:51
我正在尝试使用 Microsoft.Bot.Connector.DirectLine .NET 客户端连接到我的 Direct Line 通道。我的客户端应用程序将同时打开许多对话(例如 1000 多个)。我想要做的是有效地创建一个 Direct Line 客户端对象,它可以接收我所有对话的消息,并且每个对话没有一个客户端。下面的代码来自: https://learn.microsoft.com/en-us/azure/bot-service/bot-service-channel-directline-extension-net-client ?view=azure-bot-service-4.0问题是,要创建一个新的对话,我需要创建一个新的客户端,我认为这最终会耗尽大量的套接字。有谁知道我是否可以创建一个连接然后监听多个对话?谢谢static async Task Main(string[] args){    Console.WriteLine("What is your name:");    var UserName = Console.ReadLine();    var tokenClient = new DirectLineClient(            new Uri(endpoint),            new DirectLineClientCredentials(secret));    var conversation = await tokenClient.Tokens.GenerateTokenForNewConversationAsync();    var client = new DirectLineClient(            new Uri(endpoint),            new DirectLineClientCredentials(conversation.Token));    await client.StreamingConversations.ConnectAsync(        conversation.ConversationId,        ReceiveActivities);    var startConversation = await client.StreamingConversations.StartConversationAsync();    var from = new ChannelAccount() { Id = startConversation.ConversationId, Name = UserName };    var message = Console.ReadLine();    while (message != "end")    {        try        {            var response = await client.StreamingConversations.PostActivityAsync(                startConversation.ConversationId,                new Activity()                {                    Type = "message",                    Text = message,                    From = from,                    ChannelData = new Common.ChannelData() { FromNumber = "+17081234567"}                });        }        catch (OperationException ex)        {            Console.WriteLine(                $"OperationException when calling PostActivityAsync: ({ex.StatusCode})");        }        message = Console.ReadLine();    }    Console.ReadLine();}
查看完整描述

1 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

我认为使用 Direct Line 流媒体扩展对于您的目的来说会有问题。我猜您的自定义短信渠道本身就是一项应用服务。由于应用程序服务可以(并且可能应该,在您的情况下)进行扩展,以便多个实例同时运行,假设来自同一对话的两条短信发送到您的频道的两个实例。除了让频道的每个实例使用许多 Web 套接字与许多机器人对话之外,频道的多个实例还可能使用重复的 Web 套接字与同一个机器人对话。还有每个机器人本身需要支持流扩展的问题。

您可以考虑使用传统的 Direct Line,而不是使用 Direct Line 流扩展。这将涉及通过轮询 Direct Line 端点来接收来自机器人的活动。

由于 Direct Line 本身就是您在自己的频道之上使用的频道,因此您也可以考虑完全删除 Direct Line。这样,用户和机器人之间就不会有两个通道。您可以直接向每个机器人的端点发送 HTTP 请求,机器人将接收的活动将包含您频道的服务 URL,从而允许您的频道接收来自机器人的消息。


查看完整回答
反对 回复 2023-09-16
  • 1 回答
  • 0 关注
  • 76 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信