Direct Line 客户端的多个对话

我正在尝试使用 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();

}

慕仙森
浏览 83回答 1
1回答

四季花海

我认为使用 Direct Line 流媒体扩展对于您的目的来说会有问题。我猜您的自定义短信渠道本身就是一项应用服务。由于应用程序服务可以(并且可能应该,在您的情况下)进行扩展,以便多个实例同时运行,假设来自同一对话的两条短信发送到您的频道的两个实例。除了让频道的每个实例使用许多 Web 套接字与许多机器人对话之外,频道的多个实例还可能使用重复的 Web 套接字与同一个机器人对话。还有每个机器人本身需要支持流扩展的问题。您可以考虑使用传统的 Direct Line,而不是使用 Direct Line 流扩展。这将涉及通过轮询 Direct Line 端点来接收来自机器人的活动。由于 Direct Line 本身就是您在自己的频道之上使用的频道,因此您也可以考虑完全删除 Direct Line。这样,用户和机器人之间就不会有两个通道。您可以直接向每个机器人的端点发送 HTTP 请求,机器人将接收的活动将包含您频道的服务 URL,从而允许您的频道接收来自机器人的消息。
打开App,查看更多内容
随时随地看视频慕课网APP