Share via


Direct Line Speech gebruiken in uw bot

VAN TOEPASSING OP: SDK v4

Direct Line Speech maakt gebruik van een nieuwe WebSocket-streamingfunctie van Bot Framework om berichten uit te wisselen tussen het Direct Line Speech-kanaal en uw bot. Nadat u het Direct Line Speech-kanaal hebt ingeschakeld in Azure Portal, moet u uw bot bijwerken om naar deze WebSocket-verbindingen te luisteren en te accepteren. In deze instructies wordt uitgelegd hoe u dit doet.

Upgraden naar de nieuwste versie van de SDK

Voor Direct Line Speech zorgt u ervoor dat u de nieuwste versie van Bot Builder SDK gebruikt.

Uw .NET Core-bot bijwerken als deze Gebruikmaakt van AddBot en UseBotFramework

Als u een bot hebt gemaakt met v4 van de Bot Builder SDK vóór versie 4.3.2, bevat uw bot waarschijnlijk geen BotController, maar gebruikt in plaats daarvan de methoden AddBot() en UseBotFramework() in het bestand Startup.cs om het POST-eindpunt weer te geven waarin de bot berichten ontvangt. Als u het nieuwe streaming-eindpunt beschikbaar wilt maken, moet u een BotController toevoegen en de methoden AddBot() en UseBotFramework() verwijderen. In deze instructies worden de wijzigingen doorlopen die moeten worden aangebracht. Als u deze wijzigingen al hebt, gaat u verder met de volgende stap.

Voeg een nieuwe MVC-controller toe aan uw botproject door een bestand met de naam BotController.cs toe te voegen. Voeg de controllercode toe aan dit bestand:

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

Zoek in het bestand Startup.cs de methode Configureren. Verwijder de UseBotFramework() regel en zorg ervoor dat u deze regels hebt om:UseWebSockets

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

Zoek ook in het bestand Startup.cs de methode ConfigureServices. Verwijder de AddBot() lijn en zorg ervoor dat u regels hebt voor het toevoegen van uw IBot en een 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>();
}

De rest van uw botcode blijft hetzelfde!

Controleren of WebSockets zijn ingeschakeld

Wanneer u een nieuwe bot maakt vanuit Azure Portal met behulp van een van de sjablonen, zoals EchoBot, krijgt u een bot met een ASP.NET MVC-controller die een GET- en POST-eindpunt beschikbaar maakt en die ook WebSockets gebruikt. In deze instructies wordt uitgelegd hoe u deze elementen toevoegt aan uw bot wanneer u een upgrade uitvoert of geen sjabloon gebruikt.

Open BotController.cs onder de map Controllers in uw oplossing

Zoek de methode in de klasse en werk de PostAsync decoratie van [HttpPost] bij naar [HttpPost, HttpGet]:

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

BotController.cs opslaan en sluiten

Open Startup.cs in de hoofdmap van uw oplossing.

Navigeer in Startup.cs naar de onderkant van de methode Configureren. Voeg vóór de aanroep app.UseMvc()een aanroep toe aan app.UseWebSockets(). Dit is belangrijk omdat de volgorde van deze gebruiksoproepen van belang is. Het einde van de methode moet er ongeveer als volgt uitzien:

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

De rest van uw botcode blijft hetzelfde!

Desgewenst het veld Uitspreken voor activiteiten instellen

Standaard worden alle berichten die via Direct Line Speech naar de gebruiker worden verzonden, gesproken.

U kunt desgewenst aanpassen hoe het bericht wordt gesproken door het veld Uitspreken in te stellen van elke activiteit die vanuit de bot wordt verzonden:

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

In het volgende codefragment ziet u hoe u de vorige Speak functie gebruikt:

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

Aanvullende informatie