如何在Bot Composer中设置动态特定的LG文件以启动对话



我使用具有多个语言生成文件的bot composer创建了一个bot项目。我创建了一个自定义操作来确定哪种语言的机器人应该启动对话/聊天,该对话/聊天将在问候对话框之前/欢迎消息之前调用。

我已经将机器人部署到Wats应用程序频道,默认语言为英语(en-US((机器人编辑器-->项目设置-->机器人语言-->。

甚至认为机器人程序是用英语部署到Azure web应用程序的,但如果自定义操作对话框结果返回意大利语("it it"(,机器人程序应该用"it it it"显示问候响应;it it";仅lg文件响应。

如何在Bot Composer中实现这种功能

例如:自定义操作输出:en-Us

机器人:嗨,欢迎来到多语言机器人

例如:自定义动作输出(意大利(:it it

机器人:Ciao,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);
});

最新更新