Chatbot untuk Kontrol Aset

Oct 29 2020
Pada artikel ini, saya menyusun chatbot untuk Asset Control sebagai proyek kecil yang menyenangkan. Mengapa? Karena saya sudah lama ingin menerapkan chatbot - jika hanya untuk memahami cara melakukannya - dan melakukannya di domain AC sepertinya wajar.

Pada artikel ini, saya menyusun chatbot untuk Asset Control sebagai proyek kecil yang menyenangkan. Mengapa? Karena saya sudah lama ingin menerapkan chatbot - jika hanya untuk memahami cara melakukannya - dan melakukannya di domain AC sepertinya wajar. Saya juga akan mengintegrasikannya dengan Slack untuk melihat bagaimana ini bisa sesuai dengan alat dan alur kerja saya yang sudah ada.

Seorang chatbot untuk melakukan apa?

Anda akan menemukan chatbot di banyak tempat sekarang. Mereka mungkin ada di situs web perusahaan dan membantu Anda mendapatkan jawaban atas pertanyaan umum, memungkinkan Anda membuat pemesanan, dll.

Dalam hal ini, saya ingin menerapkan prototipe chatbot untuk diintegrasikan dengan Slack yang memungkinkan saya berkomunikasi dengan Asset Control. Saya mungkin ingin menanyakan informasi status env AC saya atau meminta data.

Untuk memandu penerapan, saya menggunakan pertanyaan-pertanyaan berikut yang harus dapat dijawab oleh bot:

  • Berapa harga terakhir untuk XYZ?
  • Berapa tinggi bulan ini untuk XYZ?
  • Berapa banyak tersangka hari ini?
  • Apakah replikasi mutakhir?

Jadi, apakah kita menerapkan bot dari awal? Tentu saja tidak. Ada sejumlah solusi di luar sana dan saya dengan cepat memilih Google Dialogflow. Mari kita lihat cara kerjanya.

Membangun bot di Dialogflow

Untuk membangun bot kita di Google Dialogflow, kita perlu memahami beberapa konsep:

  • Maksud
  • Entitas
  • Pemenuhan

Sebuah maksud menggabungkan semua yang termasuk dalam topik tertentu yang didefinisikan secara sempit yang harus ditangani bot. Dalam kasus kami, itu adalah pengambilan harga terakhir yang tersedia dari suatu saham dari sistem kami. Kami akan menggunakan Dialogflow untuk melatih bot agar memahami saat percakapan tentang maksud seperti itu dengan memberinya frasa pelatihan. Kita akan melihatnya sebentar lagi.

Kemudian entitas adalah blok bangunan yang membentuk percakapan kita dan memiliki minat khusus sehingga kita ingin menangkapnya sebagai parameter. Sekarang, dalam kasus kita itu akan menjadi simbol ticker AAPL ketika kita mengajukan pertanyaan "Berapa harga terakhir AAPL?"

Terakhir, konsep pemenuhan memungkinkan kami menjangkau layanan di bagian belakang chatbot melalui webhook. Di sinilah kami akan berkomunikasi dengan Asset Control untuk menanyakan saham yang diberikan dan mengambil harga terakhir yang tersedia.

Sekarang mari kita buat bot kita.

Langkah 1: Siapkan bot Anda.

Menuju ke https://dialogflow.cloud.google.com/#/login dan masuk. Kemudian buat Agen AcChatBot:

Langkah 2: Buat entitas Saham

Dari menu di sebelah kiri, klik Tambah di samping Entitas, beri nama Saham dan masukkan [A-Z][A-Z0-9]{1,6}sebagai ekspresi reguler. Meskipun tidak sepenuhnya cocok untuk simbol ticker, ini cukup untuk contoh kita dan berfungsi dengan pemeriksaan ekspresi reguler yang dilakukan oleh Dialogflow itu sendiri (misalnya tidak terlalu luas, dll.). Lalu simpan.

Langkah 3: Buat maksud harga terakhir

Saatnya niat harga terakhir kami. Sekali lagi, dari menu di sebelah kiri pilih Plus di samping Maksud, panggil Last pricedan klik TAMBAHKAN FRASA PELATIHAN:

Masuk What is the last price for AAPL?. Kemudian sorot AAPLdengan mouse Anda. Ini akan memunculkan pop-up. Cari Stock, lalu pilih opsi yang disajikan:

Jika dilakukan dengan benar, hasilnya akan terlihat seperti ini untuk memastikan bahwa Dialogflow menangkap entitas Stok dengan benar:

PENTING! Kemudian gulir ke bawah, buka bagian Fulfillment, klik Enable Fulfillment lalu alihkan ke Enable webhook call for this intentseperti ini:

Ini memungkinkan kita untuk memanggil fungsi backend kita sendiri dan berkomunikasi dengan Asset Control.

Pastikan untuk menyimpan maksud sebelum melanjutkan.

Langkah 4: Terapkan layanan REST untuk mengambil data Asset Control

Sekali lagi, ada banyak cara untuk melakukannya. Kami akan menggunakan Spring Boot karena melakukan semua pekerjaan berat bagi kami dan kami tetap menggunakan Java dan karenanya dapat langsung menggunakan API Java Kontrol Aset yang sama yang digunakan Adetta .

Jika Anda belum mengetahuinya, Adetta adalah perangkat lunak otomatisasi pengujian kami untuk Kontrol Aset. Pastikan untuk melihat Pengantar Adetta di sini .

Bit yang menarik adalah kelas AcBotControllerdan handleIntentmetodenya seperti yang ditunjukkan di bawah ini:

Anda dapat melihat bahwa webhook untuk pemenuhan Dialogflow sedang menangani permintaan POST. Baik masukan maupun keluarannya adalah JSON. Dan kami menggunakan GoogleCloudDialogflowV2Webhook*kelas untuk menangani permintaan dan respons JSON untuk kami.

Penanganan maksud sebenarnya diteruskan ke AcBotIntentHandler yang kita dapatkan dari panggilan AcBotIntents.getHandlerFor(request). Mari kita lihat kelas ini:

Kita membuat pemetaan maksud untuk penangan (ingat Last pricemaksud kita ?) Dan mengimplementasikan metode untuk mengambil penangan yang sesuai dengan maksud yang dikodekan dalam objek permintaan. Kami juga mendefinisikan penangan default jika kami tidak dapat menemukan penangan yang sebenarnya:

Sekarang, untuk mendapatkan harga terakhir untuk saham tertentu, mari kita lihat AcBotLastPriceIntentHandler:

Anda melihat bagaimana kami mengambil parameter entitas Stock kami dari objek permintaan menggunakan request.getQueryResult().getParameters().getOrDefault("Stock", "")dan kemudian memanggil getLastPriceMessageForStockseperti yang ditunjukkan di sini:

Kami melindungi diri dari nilai yang hilang untuk saham. Jika tidak, kami menelusuri sistem Kontrol Aset kami untuk ekuitas dengan ticker yang diberikan. Jika kami tidak memiliki ADO semacam itu, kami menampilkan pesan yang sesuai. Jika tidak, kami terus mengambil data harga untuk setiap ADO yang kami temukan (sementara itu seharusnya hanya satu ADO, implementasi hanya akan mengembalikan banyak pesan jika diperlukan.)

Inilah cara kami menemukan harga terakhir:

Kami memuat deret waktu ADO, mendapatkan rekaman terakhir dan - jika ada - membuat pesan yang akan dibaca sebagai The last price for AAPL (C0.EQY.100101) is from 2020-06-12 at $338.00. Dan lagi-lagi kami melindungi diri dari kasus-kasus di mana kami tidak dapat menemukan harga.

Menggunakan Spring Boot kita dapat menjalankannya dan menjalankan layanan REST kita di localhost: 8080 / ac-bot. Apa selanjutnya?

Ya, kami jelas sedikit curang karena kami tidak menerapkan layanan ini di mana pun, jadi untuk membuatnya tersedia dari luar, kami akan menggunakan ngrok untuk menyiapkan terowongan untuk kami:

Langkah 5: Siapkan webhook pemenuhan kita sendiri

Selanjutnya kita harus memberi tahu Dialogflow di mana layanan REST kita, jadi kembali ke sana dan klik Fulfillment dari menu di sebelah kiri:

Kemudian masukkan https://...alamat yang diberikan oleh ngrok dan pastikan Anda menambahkan /ac-botdi bagian akhir.

Ok, momen kebenaran. Di sudut kanan atas di mana dikatakan Try it now, kita dapat mengetik What is the last price for AAPL?dan jika semuanya berfungsi dengan baik kita harus mendapatkan jawaban berikut:

Ini menyenangkan!

Langkah 6: Integrasikan chatbot kami dengan Slack

Sekarang, kami tidak akan melanjutkan menggunakan konsol Dialogflow untuk bermain dengan bot kami. Sebagai gantinya kami akan mengintegrasikannya dengan Slack. Jadi, pilih Integrasi dari menu di sebelah kiri, temukan Slack dan mulai uji bot:

Lalu buka Slack dan mulai mengobrol dengan bot:

Kemudian kita dapat mengulangi siklus tersebut untuk menerapkan pertanyaan / maksud lain yang diuraikan di awal artikel.

Kata penutup

Saya pikir itu menyenangkan untuk dilakukan. Dan lebih mudah dari yang saya kira juga. Tentu saja, saya mengambil beberapa jalan pintas:

  • Hanya menjalankan layanan secara lokal.
  • Tidak ada pertimbangan untuk keamanan, kontrol akses, dan pilihan lingkungan Kontrol Aset.
  • Penggunaan bot sangat terbatas.

Saya harap Anda menikmati artikel ini. Hubungi untuk membagikan pemikiran Anda, mengajukan pertanyaan, dll. Kami di sini untuk membantu.