我正在尝试创建一个LuisDialog
,其中来自用户的所有消息都将自动翻译为我的LUIS应用程序理解的语言。
为此,我正在覆盖LuisDialog.MessageReceived()
方法。
我自动将消息翻译成我的语言,但我遇到的问题是如何更新IAwaitable<IMessageActivity>.Text
的值,以便对话框内基于意图的方法可以透明地访问它。
[Serializable]
class LuisDialogAutoTranslated<T> : LuisDialog<T>
{
protected override async Task MessageReceived(IDialogContext context, IAwaitable<IMessageActivity> msg)
{
var activity = await msg;
activity.Text = await new CognitiveTranslator().TranslateToCurrentLanguage(activity.Text);
//????
//how to replace the value of IMessageActivity.Text
//inside the IAwaitable msg?
//????
await base.MessageReceived(context, msg);
}
}
答案 0 :(得分:3)
我建议您覆盖GetLuisQueryTextAsync
,而不是覆盖MessageReceived
,它基本上会收到消息并返回将传递给LUIS(see here)的文本。
如果您仍想覆盖MessageReceived
,则可以使用Awaitable<T>
创建Awaitable.FromItem<IMessageActivity>(activity)
,如下面的代码所示。
var activity = await msg;
activity.Text = await new CognitiveTranslator().TranslateToCurrentLanguage(activity.Text);
msg = Awaitable.FromItem<IMessageActivity>(activity);
await base.MessageReceived(context, msg);