Použití direct line speech v robotovi

PLATÍ PRO: SDK v4

Direct Line Speech používá novou funkci streamování založenou na webSocketu služby Bot Framework k výměně zpráv mezi kanálem Direct Line Speech a vaším robotem. Po povolení kanálu Direct Line Speech na webu Azure Portal budete muset robota aktualizovat, aby naslouchal a přijímal tato připojení WebSocket. Tyto pokyny vysvětlují, jak to udělat.

Upgrade na nejnovější verzi sady SDK

V případě Direct Line Speech se ujistěte, že používáte nejnovější verzi sady SDK bot Builderu.

Aktualizace robota .NET Core, pokud používá AddBot a UseBotFramework

Pokud jste vytvořili robota pomocí sady SDK bot Builderu verze 4.3.2 před verzí 4.3.2, robot pravděpodobně neobsahuje BotController, ale místo toho používá metody AddBot() a UseBotFramework() v souboru Startup.cs k zveřejnění koncového bodu POST, ve kterém robot přijímá zprávy. Pokud chcete zveřejnit nový koncový bod streamování, budete muset přidat BotController a odebrat metody AddBot() a UseBotFramework(). Tyto pokyny projdou změnami, které je potřeba provést. Pokud už tyto změny máte, pokračujte dalším krokem.

Přidejte do projektu robota nový kontroler MVC přidáním souboru s názvem BotController.cs. Přidejte kód kontroleru do tohoto souboru:

[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);
    }
}

V souboru Startup.cs vyhledejte metodu Configure. UseBotFramework() Odeberte řádek a ujistěte se, že máte tyto řádkyUseWebSockets:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    ...
    app.UseDefaultFiles();
    app.UseStaticFiles();
    app.UseWebSockets();
    app.UseMvc();
    ...
}

V souboru Startup.cs vyhledejte také metodu ConfigureServices. AddBot() Odeberte řádek a ujistěte se, že máte řádky pro přidání IBot aBotFrameworkHttpAdapter:

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>();
}

Zbytek kódu robota zůstane stejný!

Ujistěte se, že jsou povolené protokoly WebSocket.

Když vytvoříte nového robota z webu Azure Portal pomocí jedné ze šablon, jako je EchoBot, získáte robota, který obsahuje kontroler ASP.NET MVC, který zpřístupňuje koncový bod GET a POST a bude také používat webSockets. Tyto pokyny vysvětlují, jak tyto prvky přidat do robota, když upgradujete nebo nepoužíváte šablonu.

Otevřete Soubor BotController.cs ve složce Kontrolery v řešení.

Vyhledejte metodu PostAsync ve třídě a aktualizujte její dekoraci z [HttpPost] na [HttpPost, HttpGet]:

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

Uložení a zavření souboru BotController.cs

Otevřete Startup.cs v kořenovém adresáři vašeho řešení.

V souboru Startup.cs přejděte do dolní části metody Configure. Před voláním app.UseMvc()přidejte hovor .app.UseWebSockets() To je důležité, protože pořadí těchto volání použití je důležité. Konec metody by měl vypadat přibližně takto:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    ...
    app.UseDefaultFiles();
    app.UseStaticFiles();
    app.UseWebSockets();
    app.UseMvc();
    ...
}

Zbytek kódu robota zůstane stejný!

Volitelně můžete nastavit pole Přečíst u aktivit.

Ve výchozím nastavení budou všechny zprávy odeslané prostřednictvím Direct Line Speech pro uživatele mluvené.

Volitelně můžete přizpůsobit způsob mluveného sdělení nastavením pole Přečíst libovolnou aktivitu odeslanou z robota:

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;
}

Následující fragment kódu ukazuje, jak použít předchozí Speak funkci:

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

Další informace