Share via


Usar o Direct Line Speech no seu bot

APLICA-SE A: SDK v4

O Direct Line Speech usa uma nova funcionalidade de streaming baseada em WebSocket do Bot Framework para trocar mensagens entre o canal do Direct Line Speech e o seu bot. Após a habilitação do canal do Direct Line Speech no portal do Azure, você precisará atualizar seu bot para que ouça e aceite essas conexões de WebSocket. As instruções a seguir explicam como fazer isso.

Atualizar para a versão mais recente do SDK

Para o Direct Line Speech, verifique se você está usando a versão mais recente do SDK do Bot Builder.

Atualize o bot do .NET Core se ele usar AddBot e UseBotFramework

Se criou um bot usando a v4 do SDK do Bot Builder anterior à versão 4.3.2, seu bot provavelmente não inclui um BotController; em vez disso, ele usa os métodos AddBot() e UseBotFramework() do arquivo Startup.cs para expor o ponto de extremidade POST em que 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 explicam as alterações que precisam ser feitas. Se você já tem essas alterações, passe 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 linha UseBotFramework() e verifique se você 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 AddBot() e verifique se você tem linhas para adicionar 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.

Verificar se o WebSockets está habilitado

Quando você criar um bot pelo portal do Azure usando um dos modelos, como EchoBot, obterá um bot que inclui um controlador MVC do ASP.NET, que expõe um ponto de extremidade GET e POST e também usará o WebSockets. Estas instruções explicam como adicionar esses elementos ao bot quando você atualiza ou não usa um modelo.

Abra BotController.cs na pasta Controladores em sua solução

Localize o método PostAsync na classe e atualize a decoração de [HttpPost] para [HttpPost, HttpGet]:

[HttpPost, HttpGet]
public async Task PostAsync()
{
    await _adapter.ProcessAsync(Request, Response, _bot);
}

Salve e feche BotController.cs.

Abra Startup.cs na raiz de sua solução.

Em Startup.cs, navegue até o final do método Configure. Antes da chamada a app.UseMvc(), adicione uma chamada a app.UseWebSockets(). Isso é importante, pois a ordem dessas chamadas use faz diferença. O final do método deve ser semelhante a este:

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 por meio 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 do 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 snippet a seguir mostra como usar a função Speak anterior:

protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    await turnContext.SendActivityAsync(Speak($"Echo: {turnContext.Activity.Text}"), cancellationToken);
}

Informações adicionais