Botframework DirectLineClient.Conversations.PostActivityAsync返回null

Mor*_*gan 1 .net c# botframework direct-line-botframework

我正在尝试通过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);
Run Code Online (Sandbox Code Playgroud)

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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是我从不离开ReadBotMessagesAsync。

我精确地说,我可以通过HTTP请求(已通过Postman测试)与我的机器人进行通信,并且只要发送消息,它就应该发送响应消息。

Nic*_*s R 5

OP精度后编辑

方法总是返回null

根据文档/样本,似乎PostActivityAsync从未使用过此返回值,因此该值可能不相关。

从样本中:

await client.Conversations.PostActivityAsync(conversation.ConversationId, userMessage);
Run Code Online (Sandbox Code Playgroud)

在这里查看示例。

对于那些想了解更多细节的人,由于此答案仅限于与示例用法进行比较,因此,该软件包不是开源的:https//github.com/Microsoft/BotBuilder/issues/2756

备注(针对那些使用错误软件包的用户)

我不建议使用DirectLineClient位于以下位置的此Nuget软件包:https ://www.nuget.org/packages/DirectLineClient, 因为自2016年5月以来一直未维护,并且Bot Framework自那时以来发生了很大变化。

而且,它使用DirectLine API 1.0,这在当时还不是最佳实践。在这里查看文档:

重要

本文介绍Direct Line API 1.1中的关键概念,并提供有关相关开发人员资源的信息。如果要在客户端应用程序和漫游器之间创建新连接,请改用Direct Line API 3.0