Beberapa fitur pengembangan keterampilan untuk Alice



Apakah Anda tinggal di Moskwa dan mengendarai mobil Anda? Jika demikian, bagaimana Anda membayar parkir? Kirim SMS? Bayar melalui aplikasi Moscow Parking? Gunakan bot di Telegram? "Ini semua tidak nyaman," aku memutuskan, dan menciptakan keahlianku untuk Alice membayar parkir dengan suara. Selain itu, Alice sudah dibangun ke dalam Yandex.Navigator. Sekarang Anda bisa memberi tahu Navigator sesuatu seperti "Alice, minta Moscow Parking untuk membayar parkir 3209 selama 30 menit ."

Apa yang saya temui ketika mengembangkan keterampilan?

Sesi


Untuk memulai keterampilan dari pengembang pihak ketiga, Alice perlu mengatakan "Alice, luncurkan keterampilan ini-dan-begitu." Ini bagus dan nyaman jika Anda memiliki komunikasi yang panjang dengan keterampilan - misalnya, permainan dimulai. Jika Anda perlu mengucapkan frasa, dapatkan jawaban dan itu saja, maka "memasukkan keterampilan" tidak nyaman - dengan input ini, ketika Anda selesai bekerja dengan keterampilan, Anda perlu "keluar".

Untuk satu frasa, ada solusi dari pengembang Alice - Anda perlu mengatakan, "Alice meminta keterampilan untuk melakukan ini dan itu ." Namun, contoh python dari pengembang Alice tidak mendukung peluncuran keterampilan seperti itu:

if req['session']['new']: # -  return 

Setiap kali keterampilan diluncurkan, termasuk. dan dengan perintah "Alice minta skill ...", nilai session.new Benar . Karena itu, semua kode pemrosesan lebih lanjut tidak akan dieksekusi. Solusinya adalah memeriksa teks session.command - harus kosong.

Omong-omong, jika Anda "memasukkan" suatu keterampilan, maka secara default untuk semua keterampilan, Alice mendukung frasa keluar - "Alice, hentikan" dan "Alice, kembali". Jika Anda ingin dengan kuat mengakhiri sesi dengan skill, Anda harus memberikan end_session yang sama dengan True dalam respons. Tapi ini hanya berfungsi dengan Yandex.Station - di perangkat lain, keluar dari skill dalam kasus ini tidak berfungsi.

Bekerja dengan angka


Keahlian saya adalah bekerja dengan angka - kenali dulu nomor telepon pengguna, kemudian kenali nomor parkirnya.

Dalam contoh di atas dari Yandex digunakan

 req['request']['original_utterance'].lower() 

untuk bekerja dengan permintaan pengguna. Pertama, saya menggunakan bidang ini dari permintaan. Untuk mengenali nomor telepon pengguna, saya harus meminta pengguna untuk menyebutkan setiap digit nomor secara terpisah - misalnya, "sembilan satu enam satu dua tiga empat lima enam tujuh". Dan dalam kode - ganti nilai teks ("sembilan") dengan angka (9). Ternyata lebih lucu dengan kode parkir - Saya menyebut kode "3209" sebagai "tiga puluh dua nol sembilan", ada banyak penggantian dalam kode seperti

 s.replace(' ', '32').replace(' ', '31').replace('', '0') 

Menimbang bahwa berdasarkan pada teks permintaan dalam kode keterampilan, saya mencoba memahami apa yang diinginkan pengguna (mesin negara tidak digunakan dalam keterampilan), konversi ini harus dilakukan dengan hampir setiap (!) Permintaan pengguna.

Ternyata server Alice sudah melakukan segalanya untuk Anda (dan bahkan lebih). Hanya alih-alih request.original_utterance Anda perlu menggunakan request.command . Ya, ini dinyatakan dalam dokumentasi. Pada tooltip pada contoh jawaban.
Bidang layanan: permintaan pengguna dikonversi untuk pemrosesan internal Alice. Selama konversi, teks, khususnya, dihapus dari tanda baca, dan angka dikonversi ke angka.
Sungguh aneh bahwa dalam contoh dari pengembang Alice (tautan di atas) teks aslinya digunakan ( request.original_utterance ). Bahkan, lebih banyak lagi yang dilakukan di request.command (yang tidak dijelaskan dalam dokumentasi). Misalnya, nomor telepon dikonversi ke format (916) 123-45-67 - sekarang pengguna dalam keahlian saya dapat memanggil telepon dalam format apa pun yang nyaman baginya. Juga, frase "Alice, minta keterampilan ini-dan-itu", pesan "Alice" dipotong, kesalahan ketik dikoreksi.

Di pihak Alice, setiap bagian dari kueri (angka, nama, alamat, tanggal) dapat dikonversi ke Entitas yang Ditentukan . Tapi ini bekerja aneh. Permintaan 79161234567 1234 , dalam entitas bernama yang dikonversi menjadi dua angka - 791612345 70 dan 1234 . Mengapa angka pertama ternyata berbeda, tidak mungkin untuk menemukan - itu. Dukungan Yandex.Dialog masih memikirkan jawabannya.

Waktu Respons Keterampilan


Alice menunggu respons dari skill dalam 3 detik (Google memiliki batas ini - 5/10 detik ). Keahlian saya mengakses server pihak ketiga untuk memulai dan mengakhiri parkir. Mereka menjawab perlahan. Terkadang dalam 3 detik skill saya tidak punya waktu untuk memberikan jawaban. Secara individual, itu tidak mungkin untuk meningkatkan waktu untuk respon dari skill. Oleh karena itu, dalam beberapa kasus, itu perlu mengorbankan kenyamanan - misalnya, pada awal parkir, keterampilan tidak meminta mobil yang sebenarnya ditentukan dalam profil aplikasi Parkir Moskow, tetapi menggunakan yang disimpan selama otorisasi pengguna.

Nah, tentang hak-hak "Saya PR";) -

Source: https://habr.com/ru/post/id471388/


All Articles