Dela via


Använda Direct Line Speech i din robot

GÄLLER FÖR: SDK v4

Direct Line Speech använder en ny WebSocket-baserad strömningsfunktion i Bot Framework för att utbyta meddelanden mellan Direct Line Speech-kanalen och din robot. När du har aktiverat Direct Line Speech-kanalen i Azure-portalen måste du uppdatera roboten för att lyssna efter och acceptera dessa WebSocket-anslutningar. De här anvisningarna förklarar hur du gör detta.

Uppgradera till den senaste versionen av SDK

För Direct Line Speech kontrollerar du att du använder den senaste versionen av Bot Builder SDK.

Uppdatera .NET Core-roboten om den använder AddBot och UseBotFramework

Om du har skapat en robot med hjälp av v4 i Bot Builder SDK före version 4.3.2 innehåller roboten förmodligen inte någon BotController, utan använder i stället metoderna AddBot() och UseBotFramework() i filen Startup.cs för att exponera POST-slutpunkten där roboten tar emot meddelanden. För att exponera den nya slutpunkten för direktuppspelning måste du lägga till en BotController och ta bort metoderna AddBot() och UseBotFramework(). De här instruktionerna beskriver de ändringar som behöver göras. Om du redan har dessa ändringar fortsätter du till nästa steg.

Lägg till en ny MVC-styrenhet i robotprojektet genom att lägga till en fil med namnet BotController.cs. Lägg till styrenhetskoden i den här filen:

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

Leta reda på metoden Konfigurera i filen Startup.cs . Ta bort raden UseBotFramework() och se till att du har dessa rader till UseWebSockets:

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

Leta också upp metoden ConfigureServices i filen Startup.cs. Ta bort raden AddBot() och se till att du har rader för att lägga till och IBot en 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>();
}

Resten av robotkoden förblir densamma!

Kontrollera att WebSockets är aktiverat

När du skapar en ny robot från Azure-portalen med någon av mallarna, till exempel EchoBot, får du en robot som innehåller en ASP.NET MVC-styrenhet som exponerar en GET- och POST-slutpunkt och som även använder WebSockets. De här anvisningarna beskriver hur du lägger till dessa element i roboten när du uppgraderar eller inte använder en mall.

Öppna BotController.cs under mappen Controllers i din lösning

PostAsync Hitta metoden i klassen och uppdatera dekorationen från [HttpPost] till [HttpPost, HttpGet]:

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

Spara och stäng BotController.cs

Öppna Startup.cs i roten för din lösning.

I Startup.cs navigerar du längst ned i metoden Konfigurera. Innan anropet till lägger du till app.UseMvc()ett anrop till app.UseWebSockets(). Detta är viktigt eftersom ordningen på dessa användningsanrop spelar roll. Slutet av metoden bör se ut ungefär så här:

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

Resten av robotkoden förblir densamma!

Du kan också ange fältet Tala om aktiviteter

Som standard kommer alla meddelanden som skickas via direktradstal till användaren att talas.

Du kan också anpassa hur meddelandet ska sägas genom att ange fältet Tala för alla aktiviteter som skickas från roboten:

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

Följande kodfragment visar hur du använder den tidigare Speak funktionen:

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

Ytterligare information