机器人框架 DirectLineClient.Conversations.PostActivityAsync returns 空

Botframework DirectLineClient.Conversations.PostActivityAsync returns null

我正在尝试通过 DirectLineClient 库向我的机器人发送 activity:

        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 始终为空。

在 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 精度编辑

方法总是 returns null

基于 documentation/samples,看起来 PostActivityAsync return 从未使用过,因此值可能不相关。

来自示例:

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:

Important

This article introduces key concepts in Direct Line API 1.1 and provides information about relevant developer resources. If you are creating a new connection between your client application and bot, use Direct Line API 3.0 instead.