Verwenden von Direct Line Speech in Ihrem Bot

GILT FÜR: SDK v4

Für Direct Line Speech wird eine neue WebSocket-basierte Streamingfunktion von Bot Framework genutzt, um Nachrichten zwischen dem Direct Line Speech-Kanal und Ihrem Bot auszutauschen. Nachdem der Direct Line Speech-Kanal im Azure-Portal aktiviert wurde, müssen Sie Ihren Bot aktualisieren, um auf diese WebSocket-Verbindungen lauschen und sie akzeptieren zu können. Dies wird in der folgenden Anleitung beschrieben.

Durchführen eines Upgrades auf die neueste Version des SDK

Stellen Sie für Direct Line Speech sicher, dass Sie die aktuelle Version des Bot Builder SDK nutzen.

Aktualisieren Ihres .NET Core-Bots bei Verwendung von AddBot und UseBotFramework

Wenn Sie für die Boterstellung vor Version 4.3.2 zuerst v4 des Bot Builder SDK genutzt haben, enthält Ihr Bot wahrscheinlich keinen BotController. Stattdessen werden die Methoden AddBot() und UseBotFramework() in der Datei „Startup.cs“ verwendet, um den POST-Endpunkt verfügbar zu machen, über den der Bot Nachrichten empfängt. Zum Verfügbarmachen des neuen Streamingendpunkts müssen Sie einen BotController hinzufügen und die Methoden AddBot() und UseBotFramework() entfernen. In dieser Anleitung werden die Änderungen, die Sie vornehmen müssen, einzeln beschrieben. Fahren Sie mit dem nächsten Schritt fort, falls Sie diese Änderungen bereits vorgenommen haben.

Fügen Sie Ihrem Botprojekt einen neuen MVC-Controller hinzu, indem Sie die Datei „BotController.cs“ hinzufügen. Fügen Sie den Controller dieser Datei hinzu:

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

Suchen Sie in der Datei Startup.cs nach der Configure-Methode. Entfernen Sie die Zeile UseBotFramework(), und stellen Sie sicher, dass die folgenden Zeilen für UseWebSockets vorhanden sind:

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

Suchen Sie in der Datei „Startup.cs“ außerdem nach der ConfigureServices-Methode. Entfernen Sie die Zeile AddBot(), und stellen Sie sicher, dass Sie über die Zeilen für das Hinzufügen von IBot und BotFrameworkHttpAdapter verfügen:

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

Der Rest des Botcodes bleibt unverändert!

Sicherstellen der Aktivierung von WebSockets

Wenn Sie über das Azure-Portal mit einer der Vorlagen einen neuen Bot erstellen, z. B. EchoBot, erhalten Sie einen Bot mit einem ASP.NET MVC-Controller, der einen GET- und einen POST-Endpunkt verfügbar macht und zusätzlich WebSockets nutzt. In dieser Anleitung wird beschrieben, wie Sie diese Elemente Ihrem Bot hinzufügen, wenn Sie ein Upgrade durchführen oder keine Vorlage verwenden.

Öffnen Sie die Datei BotController.cs im Ordner „Controllers“ Ihrer Lösung.

Suchen Sie in der Klasse nach der PostAsync-Methode, und aktualisieren Sie die Dekoration von „[HttpPost]“ auf „[HttpPost, HttpGet]“:

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

Speichern und schließen Sie „BotController.cs“.

Öffnen Sie die Datei Startup.cs im Stammverzeichnis Ihrer Lösung.

Navigieren Sie in „Startup.cs“ an das Ende der „Configure“-Methode. Fügen Sie vor dem Aufruf von app.UseMvc() einen Aufruf von app.UseWebSockets() hinzu. Das ist wichtig, da die Reihenfolge dieser Aufrufe vom Typ use eine Rolle spielt. Das Ende der Methode sollte in etwa wie folgt aussehen:

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

Der Rest des Botcodes bleibt unverändert!

Optional das Feld Sprechen für Aktivitäten einstellen

Standardmäßig werden alle Nachrichten gesprochen, die per Direct Line Speech an den Benutzer gesendet werden.

Sie können optional anpassen, wie die Nachricht gesprochen wird, indem Sie das Feld „Speak“ für eine vom Bot gesendete Aktivität festlegen:

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

Der folgende Ausschnitt veranschaulicht, wie die obige Speak-Funktion Speak verwendet wird:

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

Weitere Informationen