我想为每个基于其语言环境添加的成员实现欢迎消息。代码如下:
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活动期间,我有什么办法可以获得语言环境吗?
提前谢谢!
答案 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
对于讲法语的用户,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: "-",
})