Partilhar via


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