【问题标题】:Access original (user) message text in a LuisIntent method (MBF version 3)以 LuisIntent 方法访问原始(用户)消息文本(MBF 版本 3)
【发布时间】:2023-03-06 13:30:01
【问题描述】:

我正在尝试访问我在 Microsoft Bot Framework(版本 3)C# 项目中使用的 LuisModel 类中的 LuisIntent 方法中的原始消息。但是,我自己似乎无法弄清楚,a related StackOverflow question 中提出的任何建议也不起作用(因为这涉及 MBF 版本 1)。

我尝试评论a related issue on GitHub,但没有成功。

有谁知道如何获取触发该方法的用户消息?

【问题讨论】:

  • Luis 在查询中返回实际消息,因此请检查 args.query。 args 都是 json 格式,你可以很容易地记录它以查看来自 luis 的内容以及应该解析的内容。

标签: c# .net botframework azure-language-understanding


【解决方案1】:

更新 (08/09/2016)

自最新版本 (3.2.0) 以来,感谢提交 (https://github.com/Microsoft/BotBuilder/commit/f156a60880e86f7b853b1f94a5546386436ac3d0)

现在我们可以直接从意图处理程序获取活动

示例代码

public async Task Test(IDialogContext context, IAwaitable<IMessageActivity> origin, LuisResult result)

原始答案 (05/08/2016)

您可以拥有一个属性来存储原始活动并将其分配到MessageReceived

public class YourDialog : LuisDialog<string>
{    
    [NonSerialized]
    private IMessageActivity _originActivity;

    internal YourDialog()
    {
    }

    [LuisIntent("IntentionConstant.Empty")]
    public async Task HandleLuisResult(IDialogContext context, LuisResult result)
    {
        try
        {
            // you can access _originActivity here

        }
        catch (Exception ex) when(ex is ApplicationException)
        {
            throw;
        }
        catch (Exception ex) when (ex is TaskCanceledException)
        {
        }
    }

    protected override async Task MessageReceived(IDialogContext context, IAwaitable<IMessageActivity> item)
    {
        _originActivity = await item;
        await base.MessageReceived(context, item);
    }
}

【讨论】:

  • 谢谢 - 我找这个很久了! :)
  • @MartinKearn 现在有更好的方法,请查看我的更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 2022-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-03
  • 1970-01-01
相关资源
最近更新 更多