Bagikan melalui


Middleware

BERLAKU UNTUK: SDK v4

Middleware hanyalah kelas yang berada di antara adapter dan logika bot, yang ditambahkan ke koleksi middleware adapter Anda selama inisialisasi. SDK memungkinkan Anda menulis middleware Anda sendiri atau menambahkan middleware yang dibuat oleh orang lain. Setiap aktivitas yang masuk atau keluar dari bot Anda mengalir melalui middleware Anda.

Adaptor memproses dan mengarahkan aktivitas masuk melalui alur middleware bot ke logika bot Anda dan kemudian kembali keluar lagi. Saat setiap aktivitas mengalir masuk dan keluar dari bot, setiap bagian dari middleware dapat memeriksa atau bertindak atas aktivitas, baik sebelum dan sesudah logika bot berjalan.

Sebelum melompat ke middleware, penting untuk memahami bot secara umum dan bagaimana mereka memproses aktivitas.

Menggunakan untuk middleware

Pertanyaan sering muncul: "Kapan saya harus menerapkan tindakan sebagai middleware versus menggunakan logika bot normal saya?" Middleware memberi Anda peluang tambahan untuk berinteraksi dengan alur percakapan pengguna Anda baik sebelum dan sesudah setiap giliran percakapan diproses. Middleware juga memungkinkan Anda untuk menyimpan dan mengambil informasi mengenai percakapan dan memanggil logika pemrosesan tambahan jika diperlukan. Di bawah ini adalah beberapa skenario umum yang menunjukkan di mana middleware dapat berguna.

Melihat atau bertindak pada setiap aktivitas

Ada banyak situasi yang mengharuskan bot Anda untuk melakukan sesuatu pada setiap aktivitas, atau untuk setiap aktivitas jenis tertentu. Misalnya, Anda mungkin ingin mencatat setiap aktivitas pesan yang diterima bot Anda atau memberikan respons fallback jika bot belum menghasilkan respons pada giliran ini. Middleware adalah tempat yang bagus untuk proses tersebut, dengan kemampuannya untuk bertindak baik sebelum dan sesudah logika bot lainnya dijalankan.

Memodifikasi atau meningkatkan konteks giliran

Percakapan tertentu bisa jauh lebih berbuah jika bot memiliki lebih banyak informasi daripada apa yang disediakan dalam aktivitas. Middleware dalam hal ini dapat melihat informasi status percakapan yang dimilikinya sejauh ini, mengkueri sumber data eksternal, dan menambahkannya ke objek konteks giliran sebelum meneruskan eksekusi ke logika bot.

SDK mendefinisikan middleware pengelogan yang dapat merekam aktivitas masuk dan keluar, tetapi Anda juga dapat menentukan middleware Anda sendiri.

Alur middleware bot

Untuk setiap aktivitas, adaptor memanggil middleware dalam urutan Anda menambahkannya. Adaptor meneruskan objek konteks untuk giliran dan delegasi berikutnya , dan middleware memanggil delegasi untuk meneruskan kontrol ke middleware berikutnya di alur. Middleware juga memiliki kesempatan untuk melakukan hal-hal setelah delegasi berikutnya kembali sebelum menyelesaikan metode . Anda dapat menganggapnya sebagai setiap objek middleware memiliki kesempatan pertama dan terakhir untuk bertindak sehubungan dengan objek middleware yang mengikutinya dalam alur.

Contohnya:

  • Penangan giliran objek middleware pertama menjalankan kode sebelum memanggil berikutnya.
    • Penangan giliran objek middleware kedua menjalankan kode sebelum memanggil berikutnya.
      • Penangan giliran bot dijalankan dan dikembalikan.
    • Penangan giliran objek middleware kedua menjalankan kode yang tersisa sebelum kembali.
  • Penangan giliran objek middleware pertama menjalankan kode yang tersisa sebelum kembali.

Jika middleware tidak memanggil delegasi berikutnya, adaptor tidak memanggil salah satu middleware atau penangan giliran bot berikutnya, dan sirkuit pendek alur.

Setelah alur middleware bot selesai, gilirannya berakhir, dan konteks giliran keluar dari cakupan.

Middleware atau bot dapat menghasilkan respons dan mendaftarkan penanganan aktivitas respons, tetapi perlu diingat bahwa respons ditangani dalam proses terpisah.

Urutan middleware

Karena urutan di mana middleware ditambahkan menentukan urutan di mana middleware memproses aktivitas, penting untuk memutuskan urutan middleware yang harus ditambahkan.

Catatan

Ini dimaksudkan untuk memberi Anda pola umum yang berfungsi untuk sebagian besar bot, tetapi pastikan untuk mempertimbangkan bagaimana setiap bagian middleware akan berinteraksi dengan yang lain untuk situasi Anda.

Middleware yang mengurus tugas tingkat terendah yang harus ditambahkan ke alur middleware Anda terlebih dahulu. Contohnya termasuk pengelogan, penanganan pengecualian, dan terjemahan. Pesan ini tergantung pada kebutuhan Anda, seperti apakah Anda ingin pesan masuk diterjemahkan terlebih dahulu, sebelum pesan disimpan, atau jika penyimpanan pesan harus terjadi terlebih dahulu, yang dapat berarti pesan yang disimpan tidak akan diterjemahkan.

Middleware khusus bot harus ditambahkan ke alur middleware Anda terakhir, middleware yang Anda terapkan untuk melakukan beberapa pemrosesan pada setiap pesan yang dikirim ke bot Anda. Jika middleware Anda menggunakan informasi status atau informasi lain yang diatur dalam konteks bot, tambahkan ke alur middleware setelah middleware yang memodifikasi status atau konteks.

Korsleting

Ide penting sekeliling middleware dan penangan respons adalah korsleting. Jika eksekusi adalah melanjutkan melalui lapisan yang mengikutinya, middleware (atau handler respons) diperlukan untuk meneruskan eksekusi dengan memanggil delegasi berikutnya . Jika delegasi berikutnya tidak dipanggil dalam middleware tersebut (atau handler respons), korsleting alur terkait dan lapisan berikutnya tidak dijalankan. Ini berarti semua logika bot, dan middleware apa pun lebih jauh di sepanjang alur, dilewati. Ada perbedaan halus antara middleware anda dan handler respons anda korsleting belokan.

Ketika sirkuit middleware berbelok, handler giliran bot Anda tidak akan dipanggil, tetapi semua kode middleware yang dijalankan sebelum titik ini dalam alur masih akan berjalan hingga selesai.

Untuk penanganan aktivitas, tidak memanggil berikutnya berarti bahwa acara dibatalkan, yang sangat berbeda dari logika lompati middleware. Dengan tidak memproses sisa peristiwa, adaptor tidak pernah mengirimkannya.

Tip

Jika Anda melakukan sirkuit pendek peristiwa respons, seperti SendActivities, pastikan itu adalah perilaku yang Anda inginkan. Jika tidak, itu dapat mengakibatkan sulit untuk memperbaiki bug.

Penanganan aktivitas respons

Selain logika aplikasi dan middleware, penangan respons (juga kadang-kadang disebut sebagai penanganan aktivitas, atau penanganan aktivitas aktivitas) dapat ditambahkan ke objek konteks. Handler ini dipanggil ketika respons terkait terjadi pada objek konteks saat ini, sebelum menjalankan respons aktual. Handler ini berguna ketika Anda tahu bahwa Anda akan ingin melakukan sesuatu, baik sebelum atau sesudah peristiwa aktual, untuk setiap aktivitas jenis tersebut untuk sisa respons saat ini.

Peringatan

Berhati-hatilah untuk tidak memanggil metode respons aktivitas dari dalam penanganan aktivitas respons masing-masing, misalnya, memanggil metode aktivitas kirim dari dalam handler aktivitas pengiriman. Melakukannya dapat menghasilkan perulangan tak terbatas.

Ingat, setiap aktivitas baru mendapatkan utas baru untuk dijalankan. Saat utas untuk memproses aktivitas dibuat, daftar handler untuk aktivitas tersebut disalin ke utas baru tersebut. Tidak ada handler yang ditambahkan setelah titik tersebut yang akan dijalankan untuk peristiwa aktivitas tertentu tersebut. Handler yang terdaftar pada objek konteks ditangani mirip dengan cara adaptor mengelola alur middleware. Yaitu, handler dipanggil sesuai urutan penambahannya, dan memanggil kontrol pass delegasi berikutnya ke penanganan aktivitas terdaftar berikutnya. Jika handler tidak memanggil delegasi berikutnya, tidak ada penanganan aktivitas berikutnya yang dipanggil, sirkuit pendek peristiwa, dan adaptor tidak mengirim respons ke saluran.

Menangani status di middleware

Metode umum untuk menyimpan status adalah memanggil metode simpan perubahan di akhir handler giliran. Berikut adalah diagram dengan fokus pada panggilan.

Diagram urutan giliran bot, dengan status disimpan dari penangan giliran bot.

Masalah dengan pendekatan ini adalah bahwa setiap pembaruan status yang dibuat dari beberapa middleware kustom yang terjadi setelah handler giliran bot dikembalikan tidak akan disimpan ke penyimpanan yang tahan lama. Solusinya adalah memindahkan panggilan ke metode simpan perubahan setelah middleware kustom selesai dengan menambahkan instans middleware perubahan penyimpanan otomatis ke awal tumpukan middleware, atau setidaknya sebelum salah satu middleware yang mungkin memperbarui status. Eksekusi ditunjukkan di bawah ini.

Diagram urutan giliran bot, dengan status disimpan dari middleware.

Tambahkan objek manajemen status yang perlu diperbarui ke objek set status bot , lalu gunakan saat Anda membuat middleware perubahan penyimpanan otomatis.

Sumber Daya Tambahan:

Anda dapat melihat middleware pencatat transkrip, seperti yang diimplementasikan dalam Bot Framework SDK [C# | JS].