如何获取从 Bot Framework Composer 发送的消息的 ResourceResponse.Id

Posted

技术标签:

【中文标题】如何获取从 Bot Framework Composer 发送的消息的 ResourceResponse.Id【英文标题】:How to get ResourceResponse.Id of a message being sent from Bot Framework Composer 【发布时间】:2021-08-06 16:19:17 【问题描述】:

我了解如何在 composer 之外的代码中执行此操作,但有没有办法在 composer 中使用它?

有这个:How to get message id of sent message Bot Framework (Teams channel)?,但它不是来自作曲家。

【问题讨论】:

您必须使用自定义运行时,这对您来说是否有效? 我已经在使用它了,答案是创建一个自定义操作来发送响应而不是从对话框文件中执行它吗? 我可能会在机器人本身中做,我现在发布答案。 你说得对,自定义操作是合适的地方! 【参考方案1】:

它必须在自定义操作中(正如您提到的那样),然后在结果属性中返回资源 ID,以便您可以在其他地方使用它。自定义操作的BeginDialogAsync 方法是这样的:

public override async Task<DialogTurnResult> BeginDialogAsync(DialogContext dc, object options = null, CancellationToken cancellationToken = default(CancellationToken))

    var activity = Activity.CreateMessageActivity();

    //...

    var resource = await dc.Context.SendActivityAsync(activity);

    if (this.ResultProperty != null)
    
        dc.State.SetValue(this.ResultProperty.GetValue(dc.State), result);
    

    return await dc.EndDialogAsync(result: result, cancellationToken: cancellationToken);

更新

更新了代码使用“ResultProperty”属性,就像自定义运行时中的示例自定义操作一样。这样,自定义操作将更加可重用。

【讨论】:

谢谢,太好了。我还将在 git hub 中创建一个问题,看看他们是否也可以通过 SendResponse 操作来执行此操作 嘿,我猜你的意思是 SendActivity 操作,但那条评论激起了我的好奇心,看了一眼源代码……猜猜看……it IS already there,只需要检查一下现在如何使用它? 我知道它已经存在于代码中,但我想从 Bot Framework composer 中使用它。其中有一个 SendResponse 动作,它在内部会调用 SendActivity。但它不会返回您在 C# 中看到的值。创建了这个问题,并将在未来的版本中考虑它:github.com/microsoft/BotFramework-Composer/issues/7850

以上是关于如何获取从 Bot Framework Composer 发送的消息的 ResourceResponse.Id的主要内容,如果未能解决你的问题,请参考以下文章

如何使用自适应卡操作从自适应卡获取用户响应。使用 Microsoft Bot Framework 从 MS Teams 频道提交操作?

使用 Bot Framework 代表用户发送消息

在 Bot Framework 中获取 Skype 身份?

Azure 机器人微软Azure Bot 编辑器系列 : 机器人/用户提问回答模式,机器人从API获取响应并组织答案 (The Bot Framework Composer tutorial(代码片段

Bot Framework Webchat 无法从 Node.js restify 服务器(在 Azure 上)获取令牌:CORS 策略:不存在“Access-Control-Allow-Origin

如何在 Bot Framework C# 中使用 Bing Speech API