Menggunakan Direct Line Speech di bot Anda

BERLAKU UNTUK: SDK v4

Direct Line Speech menggunakan kemampuan streaming Bot Framework berbasis WebSocket baru untuk bertukar pesan antara saluran Direct Line Speech dan bot Anda. Setelah mengaktifkan saluran Direct Line Speech di portal Azure, Anda harus memperbarui bot untuk mendengarkan dan menerima koneksi WebSocket ini. Instruksi ini menjelaskan cara melakukan ini.

Tingkatkan ke versi terbaru SDK

Untuk Direct Line Speech, pastikan Anda menggunakan versi terbaru Bot Builder SDK.

Perbarui bot .NET Core Anda jika menggunakan AddBot dan UseBotFramework

Jika Anda membuat bot menggunakan v4 dari Bot Builder SDK sebelum versi 4.3.2, bot Anda kemungkinan tidak menyertakan BotController tetapi sebaliknya menggunakan metode AddBot() dan UseBotFramework() dalam file Startup.cs untuk mengekspos titik akhir POST tempat bot menerima pesan. Untuk mengekspos titik akhir streaming baru, Anda harus menambahkan BotController dan menghapus metode AddBot() dan UseBotFramework(). Instruksi ini menjelaskan perubahan yang perlu dilakukan. Jika Anda sudah memiliki perubahan ini, lanjutkan ke langkah berikutnya.

Tambahkan pengontrol MVC baru ke proyek bot Anda dengan menambahkan file bernama BotController.cs. Tambahkan kode pengontrol ke file ini:

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

Dalam file Startup.cs, temukan metode Konfigurasi. UseBotFramework() Hapus baris dan pastikan Anda memiliki baris ini untuk UseWebSockets:

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

Juga dalam file Startup.cs, temukan metode ConfigureServices. AddBot() Hapus baris dan pastikan Anda memiliki baris untuk menambahkan dan 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>();
}

Sisa kode bot Anda tetap sama!

Pastikan WebSocket diaktifkan

Saat Anda membuat bot baru dari portal Azure menggunakan salah satu templat, seperti EchoBot, Anda akan mendapatkan bot yang menyertakan pengontrol MVC ASP.NET yang mengekspos titik akhir GET dan POST dan juga akan menggunakan WebSocket. Instruksi ini menjelaskan cara menambahkan elemen ini ke bot saat Anda meningkatkan atau tidak menggunakan templat.

Buka BotController.cs di bawah folder Pengontrol dalam solusi Anda

PostAsync Temukan metode di kelas dan perbarui dekorasinya dari [HttpPost] ke [HttpPost, HttpGet]:

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

Simpan dan tutup BotController.cs

Buka Startup.cs di akar solusi Anda.

Di Startup.cs, navigasikan ke bagian bawah metode Konfigurasi. Sebelum panggilan ke app.UseMvc(), tambahkan panggilan ke app.UseWebSockets(). Ini penting karena urutan panggilan penggunaan ini penting. Akhir metode akan terlihat seperti ini:

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

Sisa kode bot Anda tetap sama!

Secara opsional atur bidang Bicara tentang aktivitas

Secara default, semua pesan yang dikirim melalui Direct Line Speech kepada pengguna akan diucapkan.

Anda dapat secara opsional menyesuaikan cara pesan diucapkan dengan mengatur bidang Bicara dari Aktivitas apa pun yang dikirim dari bot:

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

Cuplikan berikut menunjukkan cara menggunakan fungsi sebelumnya Speak :

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

Informasi Tambahan