Use o Direct Line Speech em seu bot
APLICA-SE A: SDK v4
O Direct Line Speech usa um novo recurso de streaming baseado em WebSocket do Bot Framework para trocar mensagens entre o canal Direct Line Speech e seu bot. Depois de habilitar o canal de Fala de Linha Direta no portal do Azure, você precisará atualizar seu bot para ouvir e aceitar essas conexões WebSocket. Estas instruções explicam como fazer isso.
Atualize para a versão mais recente do SDK
Para Fala em Linha Direta, verifique se você está usando a versão mais recente do SDK do Bot Builder.
Atualize seu bot .NET Core se ele usar AddBot e UseBotFramework
Se você criou um bot usando a v4 do SDK do Bot Builder antes da versão 4.3.2, seu bot provavelmente não inclui um BotController, mas usa os métodos AddBot() e UseBotFramework() no arquivo Startup.cs para expor o ponto de extremidade POST onde o bot recebe mensagens. Para expor o novo ponto de extremidade de streaming, você precisará adicionar um BotController e remover os métodos AddBot() e UseBotFramework(). Estas instruções percorrem as alterações que precisam ser feitas. Se você já tiver essas alterações, continue para a próxima etapa.
Adicione um novo controlador MVC ao seu projeto de bot adicionando um arquivo chamado BotController.cs. Adicione o código do controlador a este arquivo:
[Route("api/messages")]
[ApiController]
public class BotController : ControllerBase
{
private readonly IBotFrameworkHttpAdapter _adapter;
private readonly IBot _bot;
public BotController(IBotFrameworkHttpAdapter adapter, IBot bot)
{
_adapter = adapter;
_bot = bot;
}
[HttpPost, HttpGet]
public async Task ProcessMessageAsync()
{
await _adapter.ProcessAsync(Request, Response, _bot);
}
}
No arquivo Startup.cs, localize o método Configure. Remova a UseBotFramework()
linha e certifique-se de que tem estas linhas para UseWebSockets
:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseWebSockets();
app.UseMvc();
...
}
Também no arquivo Startup.cs, localize o método ConfigureServices. Remova a linha e certifique-se de que tem linhas para adicionar o AddBot()
seu IBot
e um BotFrameworkHttpAdapter
:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddSingleton<ICredentialProvider, ConfigurationCredentialProvider>();
services.AddSingleton<IChannelProvider, ConfigurationChannelProvider>();
// Create the Bot Framework Adapter.
services.AddSingleton<IBotFrameworkHttpAdapter, BotFrameworkHttpAdapter>();
// Create the bot as a transient. In this case the ASP Controller is expecting an IBot.
services.AddTransient<IBot, EchoBot>();
}
O restante do código do bot permanece o mesmo!
Verifique se os WebSockets estão habilitados
Ao criar um novo bot a partir do portal do Azure usando um dos modelos, como o EchoBot, você obterá um bot que inclui um controlador MVC ASP.NET que expõe um ponto de extremidade GET e POST e também usará WebSockets. Estas instruções explicam como adicionar esses elementos ao seu bot quando você atualiza ou não usa um modelo.
Abra o BotController.cs na pasta Controllers na sua solução
Encontre o PostAsync
método na classe e atualize sua decoração de [HttpPost] para [HttpPost, HttpGet]:
[HttpPost, HttpGet]
public async Task PostAsync()
{
await _adapter.ProcessAsync(Request, Response, _bot);
}
Salve e feche o BotController.cs
Abra o Startup.cs na raiz da sua solução.
Em Startup.cs, navegue até a parte inferior do método Configure. Antes da chamada para app.UseMvc()
, adicione uma chamada a app.UseWebSockets()
. Isto é importante, uma vez que a ordem destas chamadas de utilização é importante. O final do método deve ser algo como isto:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseWebSockets();
app.UseMvc();
...
}
O restante do código do bot permanece o mesmo!
Opcionalmente, defina o campo Falar em atividades
Por padrão, todas as mensagens enviadas através do Direct Line Speech para o usuário serão faladas.
Opcionalmente, você pode personalizar como a mensagem é falada definindo o campo Falar de qualquer atividade enviada pelo bot:
public IActivity Speak(string message)
{
var activity = MessageFactory.Text(message);
string body = @"<speak version='1.0' xmlns='https://www.w3.org/2001/10/synthesis' xml:lang='en-US'>
<voice name='Microsoft Server Speech Text to Speech Voice (en-US, JessaRUS)'>" +
$"{message}" + "</voice></speak>";
activity.Speak = body;
return activity;
}
O trecho a seguir mostra como usar a função anterior Speak
:
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
await turnContext.SendActivityAsync(Speak($"Echo: {turnContext.Activity.Text}"), cancellationToken);
}
Informações adicionais
Para obter um exemplo completo de criação e uso de um bot habilitado para voz, consulte Tutorial: habilitar seu bot por voz usando o SDK de fala.
Para obter mais informações sobre como trabalhar com atividades, consulte como os bots funcionam e como enviar e receber mensagens de texto.