检索发送到机器人

时间:2018-01-23 03:23:29

标签: c# botframework

我们目前使用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);
   }
}
...

有没有办法记录原始文本而不是翻译版本,还是有其他推荐方法来翻译消息?

1 个答案:

答案 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);
    }
}