【发布时间】:2019-12-28 06:45:09
【问题描述】:
我正在尝试使用 Microsoft.Bot.Connector.DirectLine .NET 客户端连接到我的 Direct Line Channel。我的客户端应用程序将同时打开许多对话(例如 1000 多个)。
我正在尝试做的是有效地创建一个 Direct Line 客户端对象,该对象可以接收我所有对话的消息,并且每个对话没有一个客户端。
问题在于,要创建一个新对话,我需要创建一个新客户端,我认为这最终会耗尽大量套接字。有谁知道我是否可以创建一个连接然后监听多个对话?
谢谢
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();
}
public static void ReceiveActivities(ActivitySet activitySet)
{
if (activitySet != null)
{
foreach (var a in activitySet.Activities)
{
if (a.Type == ActivityTypes.Message && a.From.Id == "MyBotName")
{
Console.WriteLine($"<Bot>: {a.Text}");
}
}
}
}
【问题讨论】:
-
这将有助于更多地了解您的 Direct Line 客户的目的。当您说您将同时打开 1000 多个对话时,您是指与 1000 多个人的对话吗?拥有 1000 多个机器人?一个机器人有 1000 多个实例?您的客户是否打算参与所有这些对话?如果您只是想监控对话,那么我想您将不需要 websockets 启用的双向通信。我可以在this document 中看到,还有其他方式可以连接 Direct Line。
-
你还在做这个吗?
-
抱歉,是的 - 基本上我要做的是重新创建 Twilio SMS 通道,以便我们可以有多个传入和传出电话号码。 (每位客户 1 个)。所以基本上我的替代 Twilio 频道将使用 Direct Line API 开始对话,然后向机器人发送包含 SMS 文本的活动,然后等待它响应。因此,这个 Twilio 替代通道可能会同时为每个对话打开许多不同的 Websocket 客户端。有什么建议?谢谢。
-
我的理解是web sockets主要用于建立服务器和客户端之间的连接。如果您想制作自己的频道,那么听起来您想在服务器中使用 Direct Line。您正在尝试创建一个在 SMS 和机器人之间传输消息的 Web 服务。您不想使用 Direct Line 创建像 Web Chat 这样的聊天客户端,因为用户已经在他们的手机上使用文本消息系统。对吗?
-
您还需要帮助吗?
标签: c# client botframework azure-bot-service direct-line-botframework