如何在conversationUpdate活动中获取区域设置?

时间:2018-01-17 08:33:28

标签: c# botframework

我想为每个基于其语言环境添加的成员实现欢迎消息。代码如下:

if (message.Type == ActivityTypes.ConversationUpdate)
{
    // some code...

    if (message.Locale == "en-us")
    {
        var reply = message.CreateReply("Hello world");
    }
    else
    {
        // some code...
    }


    // some code...
}

奇怪的是,语言环境是null,即使我在使用bot模拟器和BotFramework-WebChat测试它时都设置了语言环境。 收到邮件时,语言环境属性正常。

在conversationUpdate活动期间,我有什么办法可以获得语言环境吗?

提前谢谢!

2 个答案:

答案 0 :(得分:2)

在第一次输入之前获取用户语言的一种解决方案是使用网络聊天的HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); logging.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(logging) .connectTimeout(300, TimeUnit.SECONDS) .readTimeout(300,TimeUnit.SECONDS) .build(); 功能。这允许我们以隐藏的方式将信息推送到我们的机器人,例如提供区域设置或自定义ID。

您将在GitHub帐户here上找到此演示。

特别是,以下是根据Microsoft的Webchat GitHub描述中的示例创建的,使用backchannel将事件发送到机器人的网络聊天的集成示例:

postActivity

我添加了一个控制台事件来显示已发布的活动。

此事件由机器人<!DOCTYPE html> <html> <head> <link href="https://cdn.botframework.com/botframework-webchat/latest/botchat.css" rel="stylesheet" /> </head> <body> <div id="bot" /> <script src="https://cdn.botframework.com/botframework-webchat/latest/botchat.js"></script> <script> // Get parameters from query const params = BotChat.queryParams(location.search); // Language definition var chatLocale = params['locale'] || window.navigator.language; // Connection settings const botConnectionSettings = new BotChat.DirectLine({ domain: params['domain'], secret: 'YOUR_SECRET', webSocket: params['webSocket'] && params['webSocket'] === 'true' // defaults to true }); // Webchat init BotChat.App({ botConnection: botConnectionSettings, user: { id: 'userid' }, bot: { id: 'botid' }, locale: chatLocale, resize: 'detect' }, document.getElementById('bot')); // Send message to provide language of user botConnectionSettings.postActivity({ type: 'event', from: { id: 'userid' }, locale: chatLocale, name: 'localeSelectionEvent', value: chatLocale }).subscribe(function (id) { console.log('event language "' + chatLocale + '" selection sent'); }); </script> </body> </html> 接收并处理:

MessageController

插图de l'arrivéedes消息: Exemple messages

对于讲法语的用户,here是我公司博客上更详细的答案

答案 1 :(得分:0)

使用 DirectLineJs 0.13.0,添加了一个属性,允许像这样指定起始语言环境:

...
createDirectLine({
  token: tokenResponse.token,
  domain: `https://europe.directline.botframework.com/v3/directline`,
  pollingInterval: 500,
  conversationStartProperties: {
    locale : "fr"
  },
  watermark: "-",
})