Bagikan melalui


Men-debug bot dengan middleware inspeksi

BERLAKU UNTUK: SDK v4

Artikel ini menjelaskan cara men-debug bot menggunakan middleware inspeksi. Fitur ini memungkinkan Emulator Kerangka Kerja Bot untuk men-debug lalu lintas ke dalam dan ke luar bot, dan melihat status bot saat ini. Anda dapat menggunakan pesan pelacakan untuk mengirim data ke Emulator lalu memeriksa status bot Anda dalam giliran percakapan tertentu.

Kami menggunakan EchoBot yang dibuat secara lokal menggunakan Bot Framework v4 di mulai cepat Membuat bot untuk menunjukkan cara men-debug dan memeriksa status pesan bot. Anda juga dapat Men-debug bot menggunakan IDE atau Debug dengan Bot Framework Emulator, tetapi untuk men-debug status Anda perlu menambahkan middleware inspeksi ke bot Anda. Sampel bot inspeksi tersedia untuk C#, JavaScript, Java, dan Python.

Catatan

Bot Framework JavaScript, C#, dan Python SDK akan terus didukung, namun, Java SDK dihentikan dengan dukungan jangka panjang akhir yang berakhir pada November 2023.

Bot yang ada yang dibangun dengan Java SDK akan terus berfungsi.

Untuk pembuatan bot baru, pertimbangkan untuk menggunakan Power Virtual Agents dan baca tentang memilih solusi chatbot yang tepat.

Untuk informasi selengkapnya, lihat Masa depan pembuatan bot.

Prasyarat

Memperbarui Emulator Anda ke versi terbaru

Sebelum menggunakan middleware inspeksi bot untuk men-debug bot Anda, perbarui Emulator Anda ke versi 4.5 atau yang lebih baru. Periksa versi terbaru untuk pembaruan.

Untuk memeriksa versi Emulator Anda, pilih Bantuan, lalu Tentang di menu. Anda akan melihat versi Emulator Anda saat ini.

Memperbarui kode bot Anda

Status inspeksi dan middleware inspeksi dikonfigurasi dalam file Startup.cs lalu digunakan oleh adaptor.

Startup.cs

});

services.AddSingleton<ConversationState>();

// Create the Bot Framework Authentication to be used with the Bot Adapter.

AdapterWithInspection.cs

{
    public class AdapterWithInspection : CloudAdapter
    {
        public AdapterWithInspection(BotFrameworkAuthentication auth, IConfiguration configuration, InspectionState inspectionState, UserState userState, ConversationState conversationState, ILogger<IBotFrameworkHttpAdapter> logger)
            : base(auth, logger)
        {
            // Inspection needs credentials because it will be sending the Activities and User and Conversation State to the emulator
            var credentials = new MicrosoftAppCredentials(configuration["MicrosoftAppId"], configuration["MicrosoftAppPassword"]);

            Use(new InspectionMiddleware(inspectionState, userState, conversationState, credentials));

            OnTurnError = async (turnContext, exception) =>
            {
                // Log any leaked exception from the application.
                logger.LogError(exception, $"[OnTurnError] unhandled error : {exception.Message}");

                // Send a message to the user
                await turnContext.SendActivityAsync("The bot encountered an error or bug.");
                await turnContext.SendActivityAsync("To continue to run this bot, please fix the bot source code.");

                // Send a trace activity, which will be displayed in the Bot Framework Emulator
                await turnContext.TraceActivityAsync("OnTurnError Trace", exception.Message, "https://www.botframework.com/schemas/error", "TurnError");
            };
        }

Perbarui kelas bot dalam file EchoBot.cs .

EchoBot.cs

protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    var conversationStateProp = _conversationState.CreateProperty<CustomState>("customState");
    var convProp = await conversationStateProp.GetAsync(turnContext, () => new CustomState { Value = 0 }, cancellationToken);

    var userStateProp = _userState.CreateProperty<CustomState>("customState");
    var userProp = await userStateProp.GetAsync(turnContext, () => new CustomState { Value = 0 }, cancellationToken);

    await turnContext.SendActivityAsync(MessageFactory.Text($"Echo: {turnContext.Activity.Text} conversation state: {convProp.Value} user state: {userProp.Value}"), cancellationToken);

    convProp.Value++;
    userProp.Value++;
}

Menguji bot Anda secara lokal

Setelah memperbarui kode, Anda dapat menjalankan bot secara lokal dan menguji fitur penelusuran kesalahan menggunakan dua Emulator: satu untuk mengirim dan menerima pesan, dan yang lainnya untuk memeriksa status pesan dalam mode debugging. Untuk menguji bot Anda secara lokal:

  1. Buka direktori bot Anda di terminal dan jalankan perintah berikut untuk menjalankan bot Anda secara lokal:

    dotnet run
    
  2. Buka Emulator Anda. Pilih Buka Bot. Isi URL Bot dengan http://localhost:3978/api/messages dan nilai MicrosoftAppId dan MicrosoftAppPassword. Jika Anda memiliki bot JavaScript, Anda dapat menemukan nilai-nilai ini di file .env bot Anda. Jika Anda memiliki bot C#, Anda dapat menemukan nilai-nilai ini dalam file appsettings.json . Untuk bot Java, Anda dapat menemukan nilai-nilai ini dalam file application.properties . Pilih Sambungkan.

  3. Sekarang buka jendela Emulator lain. Jendela Emulator kedua ini akan berfungsi sebagai debugger. Ikuti instruksi seperti yang dijelaskan pada langkah sebelumnya. Centang Buka dalam mode debug lalu pilih Koneksi.

  4. Pada titik ini Anda akan melihat perintah dengan pengidentifikasi unik (/INSPECT attach <identifier>) di Emulator debugging Anda. Salin seluruh perintah dengan pengidentifikasi dari Emulator debugging dan tempelkan ke kotak obrolan Emulator pertama.

    Catatan

    Pengidentifikasi unik dihasilkan setiap kali Emulator diluncurkan dalam mode debug setelah Anda menambahkan middleware inspeksi dalam kode bot Anda.

  5. Sekarang Anda dapat mengirim pesan di kotak obrolan Emulator pertama Anda dan memeriksa pesan di Emulator penelusuran kesalahan. Untuk memeriksa status pesan, pilih Status Bot di Emulator debugging dan buka nilai di jendela JSON kanan. Anda akan melihat status bot Anda di Emulator debugging:

    status bot

Memeriksa status bot yang dikonfigurasi di Azure

Jika Anda ingin memeriksa status bot yang dikonfigurasi di Azure dan tersambung ke saluran (seperti Teams) Anda harus menginstal dan menjalankan ngrok.

Menjalankan ngrok

Pada titik ini, Anda telah memperbarui Emulator ke versi terbaru dan menambahkan middleware inspeksi dalam kode bot Anda. Langkah selanjutnya adalah menjalankan ngrok dan mengonfigurasi bot lokal Anda. Sebelum menjalankan ngrok, Anda perlu menjalankan bot Anda secara lokal.

Untuk menjalankan bot Anda secara lokal:

  1. Buka folder bot Anda di terminal dan atur pendaftaran npm Anda untuk menggunakan build terbaru

  2. Jalankan bot Anda secara lokal. Anda akan melihat bot Anda mengekspos nomor port seperti 3978.

  3. Buka prompt perintah lain dan buka folder proyek bot Anda. Jalankan perintah berikut:

    ngrok http 3978
    
  4. ngrok sekarang terhubung ke bot yang berjalan secara lokal. Salin alamat IP publik aman (HTTPS).

    kesuksesan ngrok

Memperbarui sumber daya bot Anda

Sekarang setelah bot lokal Anda tersambung ke ngrok, Anda dapat mengonfigurasi sumber daya bot Anda di Azure untuk menggunakan URL ngrok.

  1. Buka sumber daya bot Anda di Azure. Di menu sebelah kiri, di bawah Pengaturan, pilih Konfigurasi.

    1. Atur titik akhir Olahpesan ke alamat IP ngrok yang Anda salin. Jika perlu, tambahkan /api/messages setelah alamat IP. Contohnya,https://e58549b6.ngrok.io/api/messages.

    2. Pilih Aktifkan Titik Akhir Streaming.

      Mengatur titik akhir

    3. Pilih Terapkan untuk menyimpan perubahan.

      Tip

      Jika Terapkan tidak diaktifkan, Anda dapat menghapus centang Aktifkan Titik Akhir Streaming dan pilih Terapkan, lalu centang Aktifkan Titik Akhir Streaming dan pilih Terapkan lagi. Anda perlu memastikan bahwa Aktifkan Titik Akhir Streaming dicentang dan konfigurasi titik akhir disimpan.

  2. Buka grup sumber daya bot Anda.

    1. Pilih Penyebaran, lalu pilih sumber daya bot yang sebelumnya berhasil disebarkan. Pilih Templat dari menu sebelah kiri untuk mendapatkan MicrosoftAppId dan MicrosoftAppPassword untuk aplikasi web yang terkait dengan bot Anda.

      Mendapatkan input

    2. Perbarui file konfigurasi bot Anda (appsettings.json untuk C#, atau .env untuk JavaScript) dengan MicrosoftAppId dan MicrosoftAppPassword.

  3. Mulai Emulator Anda, pilih Buka Bot, dan masukkan http://localhost:3978/api/messages di URL Bot. Isi ID Aplikasi Microsoft dan kata sandi Aplikasi Microsoft dengan MicrosoftAppId dan MicrosoftAppPassword yang sama dengan yang Anda tambahkan ke file konfigurasi bot kami. Kemudian pilih Sambungkan.

  4. Bot Anda yang sedang berjalan sekarang tersambung ke sumber daya bot Anda di Azure. Untuk menguji bot Anda di Azure di Web Chat, buka sumber daya bot Anda, pilih Uji di Web Chat, dan kirim pesan ke bot Anda.

Aktifkan mode penelusuran kesalahan

  1. Di Emulator Anda, pilih Debug, lalu Mulai Penelusuran Kesalahan.

  2. Masukkan alamat IP ngrok (jangan lupa untuk menambahkan /api/messages) untuk URL Bot (misalnya, https://e58549b6.ngrok.io/api/messages).

    1. Untuk ID Aplikasi Microsoft, masukkan ID aplikasi bot Anda.
    2. Untuk kata sandi Aplikasi Microsoft, masukkan rahasia aplikasi bot Anda.
    3. Pastikan Buka dalam mode debug juga dicentang.
    4. Pilih Sambungkan.
  3. Dengan mode debugging diaktifkan, Emulator menghasilkan UUID. UUID adalah ID unik yang dihasilkan setiap kali Anda memulai mode debugging di Emulator Anda.

  4. Salin dan tempel UUID ke kotak Uji di obrolan Web Chat untuk kotak obrolan saluran Anda. Anda akan melihat pesan "Terlampir ke sesi, semua lalu lintas sedang direplikasi untuk diperiksa" di kotak obrolan.

Anda dapat mulai men-debug bot dengan mengirim pesan di kotak obrolan saluran yang dikonfigurasi. Emulator lokal Anda akan secara otomatis memperbarui pesan dengan semua detail untuk penelusuran kesalahan. Untuk memeriksa status pesan bot Anda, pilih Status Bot dan buka nilai di jendela JSON kanan.

debug-inspection-middleware

Langkah berikutnya