我正在尝试通过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/

10-10 23:26