Share via


Közvetlen vonalas beszéd használata a robotban

A KÖVETKEZŐKRE VONATKOZIK: SDK v4

A Direct Line Speech a Bot Framework új WebSocket-alapú streamelési funkciójával vált üzeneteket a Direct Line Speech csatorna és a robot között. Miután engedélyezte a Direct Line Speech csatornát az Azure Portalon, frissítenie kell a robotot a WebSocket-kapcsolatok figyeléséhez és elfogadásához. Ezek az utasítások ismertetik, hogyan teheti ezt meg.

Frissítés az SDK legújabb verziójára

A Direct Line Speech esetében győződjön meg arról, hogy a Bot Builder SDK legújabb verzióját használja.

Frissítse a .NET Core-robotot, ha az AddBot és a UseBotFramework alkalmazást használja

Ha a Bot Builder SDK 4-es verziójával hozott létre robotot a 4.3.2-es verzió előtt, a robot valószínűleg nem tartalmaz BotControllert, hanem a Startup.cs fájl AddBot() és UseBotFramework() metódusait használja annak a POST-végpontnak a közzétételéhez, ahol a robot üzeneteket fogad. Az új streamvégpont felfedéséhez hozzá kell adnia egy BotControllert, és el kell távolítania az AddBot() és a UseBotFramework() metódusokat. Ezek az utasítások végigvezetik a szükséges módosításokat. Ha már rendelkezik ezekkel a módosításokkal, folytassa a következő lépésekkel.

Adjon hozzá egy új MVC-vezérlőt a robotprojekthez egy BotController.cs nevű fájl hozzáadásával. Adja hozzá a vezérlőkódot ehhez a fájlhoz:

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

A Startup.cs fájlban keresse meg a Konfigurálás metódust. Távolítsa el a UseBotFramework() vonalat, és győződjön meg arról, hogy a következő sorokkal rendelkezik UseWebSockets:

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

A Startup.cs fájlban is keresse meg a ConfigureServices metódust. Távolítsa el a AddBot() sort, és győződjön meg arról, hogy vannak vonalai a következőhöz IBotBotFrameworkHttpAdapter:

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

A robotkód fennmaradó része ugyanaz marad!

Győződjön meg arról, hogy a WebSockets engedélyezve van

Amikor új robotot hoz létre az Azure Portalról az egyik sablonnal( például az EchoBottal), egy ASP.NET MVC-vezérlőt tartalmazó robotot kap, amely egy GET és POST végpontot tesz elérhetővé, és WebSocketeket is használ. Ezek az utasítások bemutatják, hogyan adhat hozzá ilyen elemeket a robothoz frissítéskor vagy sablon használata közben.

Nyissa meg a BotController.cs fájlt a megoldás Vezérlők mappájában

Keresse meg a metódust PostAsync az osztályban, és frissítse annak díszítését a [HttpPost]-ról a [HttpPost, HttpGet] értékre:

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

A BotController.cs mentése és bezárása

Nyissa meg a Startup.cs fájlt a megoldás gyökerében.

A Startup.cs fájlban lépjen a Konfigurálás metódus aljára. A hívás app.UseMvc()előtt adjon hozzá egy hívást a következőhöz app.UseWebSockets(): Ez azért fontos, mert ezeknek a hívásoknak a sorrendje számít. A metódus végén a következőhöz hasonlóan kell kinéznie:

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

A robotkód fennmaradó része ugyanaz marad!

Igény szerint állítsa be a Felolvasás mezőt a tevékenységekhez

Alapértelmezés szerint a rendszer minden, a felhasználónak a Direct Line Speechen keresztül küldött üzenetet elhangozza.

Igény szerint testre szabhatja az üzenet beszédének módját a robottól küldött tevékenységek Speak mezőjének beállításával:

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

Az alábbi kódrészlet az előző Speak függvény használatát mutatja be:

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

További információk