如何在 MS 机器人框架中从 IDialog.StartAsync() 中 post 丰富的内容

How to post rich content from within IDialog.StartAsync() in MS bot framework

我正在创建一个从另一个对话框调用的子对话框。作为第一条消息,我需要 post 一条带有图像和几个按钮的消息。

    public async Task StartAsync(IDialogContext context)
    {
        //??? convert context to Activity?
        //then it is trivial to add buttons, images or a HeroCard
        await context.PostAsync(activity);

        context.Done<TestDialog_Start>(this);
    }

但是,context.PostAsync() 只接受字符串或 IMessageActivity 对象。这是一个问题,因为对话框中的第一个方法没有接收 IMessageActivity 对象作为参数(下一个方法和后续方法接收)。

因此我不能使用 activity.CreateReply() 之类的东西,我也不能创建新的 Activity 对象,因为我没有发件人、收件人、对话、ServiceUrl 和其他数据。

如何从此处获取 Activity 对象,或者有任何其他方法可以在 IDialog 的第一个方法中 post 丰富的上下文。

好的,微软的文档中没有提到它很奇怪,但似乎您可以从 IDialogContext 创建一个完全可操作的 IMessageActivity 对象:

IMessageActivity activity = context.MakeMessage();
//TODO add text, rich content here
context.PostAsync(activity);

尽管 IMessageActivity 与功能齐全的 Activity 不一样,但它仍然可以正常使用并且可以使用附件。

通过浏览 class 定义无意中找到它。在此之前,我花了几个小时编写自己的自定义函数,从几个参数创建一个 Activity 对象。