我们目前使用Bot Framework实现了一个机器人,并使用BotBuilder.Azure将消息记录到Azure表。
我们有多语言要求,因此当用户输入消息时我们当前正在检测语言,然后翻译消息以便我们可以将英语版本发送到我们基于英语的NLP。
现在发生的事情是我们的Azure表现在已经用英语而不是原始语言记录了消息。
我们目前正在MessageController类中进行翻译
MessageController.cs
...
public async Task<HttpResponseMessage> Post([FromBody] Activity activity) {
if (activity.Type == ActivityTypes.Message) {
activity.Text = DetectAndTranslateActivityText(activity);
}
}
...
有没有办法记录原始文本而不是翻译版本,还是有其他推荐方法来翻译消息?
答案 0 :(得分:0)
LogPostToBot已注册为键控类型:DialogModule.cs line 349
这可以使用自定义实现覆盖它:
Conversation.UpdateContainer(
builder =>
{
builder.RegisterType<ActivityLogger>().AsImplementedInterfaces().InstancePerDependency();
builder
.RegisterType<InterceptLogPostToBot>()
.Keyed<IPostToBot>(typeof(LogPostToBot));
});
public class InterceptLogPostToBot: IPostToBot
{
private readonly IPostToBot inner;
private readonly IActivityLogger logger;
public InterceptLogPostToBot(IPostToBot inner, IActivityLogger logger)
{
SetField.NotNull(out this.inner, nameof(inner), inner);
SetField.NotNull(out this.logger, nameof(logger), logger);
}
async Task IPostToBot.PostAsync(IActivity activity, CancellationToken token)
{
await this.logger.LogAsync(activity);
//translate here, after the logging is complete
await inner.PostAsync(activity, token);
}
}