如何动态设置特定的 LG 文件以在 Bot Composer 中发起对话
How to set dynamically specific LG file to initiate conversations in Bot Composer
我使用带有多个语言生成文件的 bot composer 创建了一个 bot 项目。我创建了一个自定义操作来确定应该启动哪种语言的机器人 conversation/chat,它将在问候 dialog/before 欢迎消息之前调用。
我已经将 bot 部署到 Wats App 频道,默认语言为英语(en-US)(Bot Composer --> 项目设置 --> Bot Languages-->English)。
即使认为机器人以英语部署到 Azure 网络应用程序,但如果自定义操作对话结果 returns 意大利语(“it-it”),机器人应该显示带有“it-it”的问候响应仅 lg 文件响应。
如何在 Bot Composer 中实现这种功能?
例如:自定义操作输出:en-Us
Bot:嗨,欢迎使用多语言 Bot
例如:自定义操作输出(意大利):it-it
Bot:Ciao,多语言 Bot 中的 benvenuto
解决方案:在 Bot Composer 项目中创建您自己的中间件组件。我已经提供了遵循如何使用部分编码创建中间件的步骤。
代码:
public class LanguageDetectionMiddleware : IMiddleware
{
public async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default)
{
//Step1: Fetch Channel Data
// Step2: Fetch Coutry Code and Number : Since I am using wats app channel, I will get phone number of any user with country code and number.
string channelLocale = await FetchLocaleFromChannelMobileNumber(Channeldata);
//Step4 : Assign turn activity locale to ChannelLocale.
turnContext.Activity.Locale = channelLocale;
//save the language to user state.
await this.userstate.SaveChangesAsync(turnContext, false, cancellationToken);
}
}
要在 Startup.cs 文件中完成的代码更改:
//step5: Add middleware in startup.cs file adapter
.Use(s.GetService<LanguageDetectionMiddleware>());
// step6: Add Language Middle to Configure Services
services.AddSingleton(sp =>
{
return new LanguageDetectionMiddleware(sp.GetService<IBotTelemetryClient>(), userState);
});
我使用带有多个语言生成文件的 bot composer 创建了一个 bot 项目。我创建了一个自定义操作来确定应该启动哪种语言的机器人 conversation/chat,它将在问候 dialog/before 欢迎消息之前调用。
我已经将 bot 部署到 Wats App 频道,默认语言为英语(en-US)(Bot Composer --> 项目设置 --> Bot Languages-->English)。
即使认为机器人以英语部署到 Azure 网络应用程序,但如果自定义操作对话结果 returns 意大利语(“it-it”),机器人应该显示带有“it-it”的问候响应仅 lg 文件响应。
如何在 Bot Composer 中实现这种功能?
例如:自定义操作输出:en-Us
Bot:嗨,欢迎使用多语言 Bot
例如:自定义操作输出(意大利):it-it
Bot:Ciao,多语言 Bot 中的 benvenuto
解决方案:在 Bot Composer 项目中创建您自己的中间件组件。我已经提供了遵循如何使用部分编码创建中间件的步骤。
代码:
public class LanguageDetectionMiddleware : IMiddleware
{
public async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default)
{
//Step1: Fetch Channel Data
// Step2: Fetch Coutry Code and Number : Since I am using wats app channel, I will get phone number of any user with country code and number.
string channelLocale = await FetchLocaleFromChannelMobileNumber(Channeldata);
//Step4 : Assign turn activity locale to ChannelLocale.
turnContext.Activity.Locale = channelLocale;
//save the language to user state.
await this.userstate.SaveChangesAsync(turnContext, false, cancellationToken);
}
}
要在 Startup.cs 文件中完成的代码更改:
//step5: Add middleware in startup.cs file adapter
.Use(s.GetService<LanguageDetectionMiddleware>());
// step6: Add Language Middle to Configure Services
services.AddSingleton(sp =>
{
return new LanguageDetectionMiddleware(sp.GetService<IBotTelemetryClient>(), userState);
});