Używanie mowy direct line w botze

DOTYCZY: ZESTAW SDK w wersji 4

Usługa Direct Line Speech używa nowej funkcji przesyłania strumieniowego opartego na protokole WebSocket platformy Bot Framework do wymiany komunikatów między kanałem mowy direct line a botem. Po włączeniu kanału mowy direct line w witrynie Azure Portal należy zaktualizować bota w celu nasłuchiwania i akceptowania tych połączeń protokołu WebSocket. Te instrukcje wyjaśniają, jak to zrobić.

Uaktualnianie do najnowszej wersji zestawu SDK

W przypadku usługi Direct Line Speech upewnij się, że używasz najnowszej wersji zestawu Bot Builder SDK.

Zaktualizuj bota platformy .NET Core, jeśli używa polecenia AddBot i UseBotFramework

Jeśli bot został utworzony przy użyciu wersji 4 zestawu BOT Builder SDK przed wersją 4.3.2, bot prawdopodobnie nie zawiera botcontrollera, ale zamiast tego używa metod AddBot() i UseBotFramework() w pliku Startup.cs w celu uwidocznienia punktu końcowego POST, w którym bot odbiera komunikaty. Aby uwidocznić nowy punkt końcowy przesyłania strumieniowego, należy dodać metodę BotController i usunąć metody AddBot() i UseBotFramework(). Te instrukcje przejdą przez zmiany, które należy wprowadzić. Jeśli masz już te zmiany, przejdź do następnego kroku.

Dodaj nowy kontroler MVC do projektu bota, dodając plik o nazwie BotController.cs. Dodaj kod kontrolera do tego pliku:

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

W pliku Startup.cs znajdź metodę Configure. UseBotFramework() Usuń wiersz i upewnij się, że masz następujące wiersze do UseWebSockets:

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

Również w pliku Startup.cs znajdź metodę ConfigureServices. AddBot() Usuń wiersz i upewnij się, że masz wiersze do dodania elementu IBot i :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>();
}

Pozostała część kodu bota pozostaje taka sama!

Upewnij się, że obiekty WebSocket są włączone

Podczas tworzenia nowego bota z witryny Azure Portal przy użyciu jednego z szablonów, takich jak EchoBot, otrzymasz bota, który zawiera kontroler MVC ASP.NET, który uwidacznia punkt końcowy GET i POST, a także użyje obiektów WebSocket. Te instrukcje wyjaśniają, jak dodać te elementy do bota podczas uaktualniania lub nie używać szablonu.

Otwórz plik BotController.cs w folderze Controllers w rozwiązaniu

Znajdź metodę PostAsync w klasie i zaktualizuj jej dekorację z witryny [HttpPost] do [HttpPost, HttpGet]:

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

Zapisz i zamknij plik BotController.cs

Otwórz plik Startup.cs w katalogu głównym rozwiązania.

W pliku Startup.cs przejdź do dołu metody Configure. Przed wywołaniem metody app.UseMvc()dodaj wywołanie do app.UseWebSockets(). Jest to ważne, ponieważ kolejność tych wywołań użycia ma znaczenie. Koniec metody powinien wyglądać mniej więcej tak:

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

Pozostała część kodu bota pozostaje taka sama!

Opcjonalnie ustaw pole Mów dla działań

Domyślnie wszystkie komunikaty wysyłane za pośrednictwem funkcji Direct Line Speech do użytkownika będą mówione.

Opcjonalnie możesz dostosować sposób wypowiadania komunikatu, ustawiając pole Speak dowolnego działania wysłanego z bota:

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

Poniższy fragment kodu pokazuje, jak używać poprzedniej Speak funkcji:

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

Dodatkowe informacje