我正在尝试通过DirectLineClient库将活动发送到我的机器人:
var directLineClient = new DirectLineClient($"{secret}");
directLineClient.BaseUri = new Uri($"https://directline.botframework.com/");
var conversation = await directLineClient.Conversations.StartConversationAsync().ConfigureAwait(false);
var activity = new Microsoft.Bot.Connector.DirectLine.Activity();
activity.From = new Microsoft.Bot.Connector.DirectLine.ChannelAccount();
activity.From.Name = "Morgan";
activity.Text = message;
activity.Type = "message";
var resourceResponse = await directLineClient.Conversations.PostActivityAsync(conversation.ConversationId, activity).ConfigureAwait(false);
await ReadBotMessagesAsync(directLineClient, conversation.ConversationId);
resourceResponse始终为null。
Nicolas R回答后编辑
我添加了一种方法来等待机器人的响应:
private static async Task ReadBotMessagesAsync(DirectLineClient client, string conversationId)
{
string watermark = null;
while (true)
{
var activitySet = await client.Conversations.GetActivitiesAsync(conversationId, watermark);
watermark = activitySet?.Watermark;
foreach (Microsoft.Bot.Connector.DirectLine.Activity activity in activitySet.Activities)
{
Console.WriteLine(activity.Text);
if (activity.Attachments != null)
{
foreach (Microsoft.Bot.Connector.DirectLine.Attachment attachment in activity.Attachments)
{
Console.WriteLine(attachment.ContentType);
}
}
}
if (activitySet.Activities.Count > 0)
{
return;
}
await Task.Delay(TimeSpan.FromSeconds(1)).ConfigureAwait(false);
}
}
但是我从不离开ReadBotMessagesAsync。
我精确地说,我可以通过HTTP请求(已通过Postman测试)与我的机器人进行通信,并且只要发送消息,它就应该发送响应消息。
最佳答案
OP精度后编辑
方法始终返回null
根据文档/样本,似乎从未使用过此PostActivityAsync
返回值,因此该值可能不相关。
从样本中:
await client.Conversations.PostActivityAsync(conversation.ConversationId, userMessage);
请参见示例here。
对于那些想要更多细节的人,因为此答案仅限于与示例用法进行比较,所以可惜该软件包不是开源的:https://github.com/Microsoft/BotBuilder/issues/2756
备注(针对那些使用错误软件包的用户)
我不建议使用位于以下位置的
DirectLineClient
Nuget软件包:https://www.nuget.org/packages/DirectLineClient,因为自2016年5月以来一直未维护,并且Bot Framework自那时以来发生了很大变化。
而且,它使用DirectLine API 1.0,这在当时还不是最佳实践。请参阅文档here:
重要
本文介绍Direct Line API 1.1和
提供有关开发人员资源的信息。如果你是
在客户端应用程序和bot之间创建新的连接,使用
改用Direct Line API 3.0。
关于c# - Botframework DirectLineClient.Conversations.PostActivityAsync返回null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50965496/