Yandex.Alice dan Telegram bot dalam PHP dengan fungsi tunggal

Selamat siang

Ada banyak artikel tentang topik bot Telegram, tetapi sedikit yang menulis tentang keterampilan untuk Alice, dan saya tidak menemukan informasi tentang cara membuat bot tunggal, jadi saya memutuskan untuk berbagi pengalaman tentang cara membuat bot Telegram sederhana dan Yandex. Keahlian bagus untuk situs tersebut memiliki fungsional tunggal.

Jadi, saya tidak akan memberi tahu Anda cara menaikkan server web dan mendapatkan sertifikat ssl, sudah cukup banyak yang ditulis tentangnya.

Membuat bot Telegram


Pertama, buat bot Telegram, untuk ini, buka Telegram dan temukan bot BotFather di sana.





Pilih / newbot



Kami memasukkan nama bot yang akan ditanggapi, kemudian kami memasukkan nama bot, sebagai tanggapan kami mendapatkan token untuk mengendalikan bot, kami menulis kunci ini, ini akan berguna bagi kami di masa depan.



Langkah selanjutnya adalah memberi tahu server Telegram ke server mana untuk mengirim data dari bot ke. Untuk melakukan ini, buat tautan berupa:

https: //api.telegram.org/bot______/setWebhook?url=https://_________ 

___ TOKEN ___ ganti dengan token bot kami yang diterima sebelumnya

____ PATH_DO_SCRIPT ___ diganti dengan alamat skrip di server kami tempat data akan diproses (misalnya, www.my_server.ru/webhook_telegram.php ).

Ada masalah, server api.telegram.org terkunci, tetapi Anda dapat melakukan ini: sewa server termurah di mana tidak ada batasan dan berikan perintah dari konsol server ini

 wget _______ 

Itu saja, bot Telegram dibuat dan terhubung ke server Anda.

Menciptakan keterampilan untuk Yandex.Alice


Mari kita beralih ke menciptakan keterampilan untuk Yandex.Alice.

Untuk membuat skill, Anda harus pergi ke halaman pengembang Yandex.Dialogs, halaman pengembang Yandex.Dialogs, klik "Buat dialog" dan pilih "Skill in Alice."



Dialog pengaturan keterampilan terbuka.



Kami mulai memasuki pengaturan keterampilan.

Masukkan nama keahlian Anda.



Nama aktivasi harus dipilih dengan sangat hati-hati sehingga Alice memahaminya dengan benar, dari nuansa - aplikasi seluler dengan Alice dan kolom seperti Yandex.Station atau Irbis A dapat memahami kata-kata dengan cara yang berbeda.

Kami memasukkan jalur ke skrip di server kami dengan cara yang sama seperti untuk Telegram, tetapi itu akan menjadi skrip khusus untuk Alice, misalnya www.my_server.ru/webhook_alice.php .



Kami memilih suara yang keterampilannya akan berbicara, saya lebih suka suara Alice.



Jika Anda berencana untuk bekerja hanya di perangkat seluler atau di peramban, lalu pilih "Butuh perangkat dengan layar."

Selanjutnya, masukkan pengaturan untuk katalog skill Alice. Jika Anda berencana untuk menggunakan kata merek untuk aktivasi, Anda harus melalui verifikasi situs web merek di layanan webmaster.yandex.ru.



Dengan pengaturan, buka skrip.

Skrip bot telegram


Mari kita mulai dengan skrip untuk Telegram.

Kami menghubungkan perpustakaan tempat pesan dari bot dan Alice akan diproses:

 include_once 'webhook_parse.php'; 

Kami menetapkan token bot kami:

 $tg_bot_token = "_____YOUR_BOT_TOKEN_____"; 

Kami mendapatkan data:

 $request = file_get_contents('php://input'); $request = json_decode($request, TRUE); 

Kami mengurai data ke dalam variabel:

 if (!$request) { die(); // Some Error output (request is not valid JSON) } else if (!isset($request['update_id']) || !isset($request['message'])) { die(); // Some Error output (request has not message) } else { $user_id = $request['message']['from']['id']; $msg_user_name = $request['message']['from']['first_name']; $msg_user_last_name = $request['message']['from']['last_name']; $msg_user_nick_name = $request['message']['from']['username']; $msg_chat_id = $request['message']['chat']['id']; $msg_text = $request['message']['text']; $msg_text = mb_strtolower($msg_text, 'UTF-8'); $tokens = explode(" ", $msg_text); } 

Sekarang Anda dapat bekerja dengan variabel:

$ token - sekarang semua kata yang dimasukkan pengguna di sini

$ user_id - ini adalah id pengguna

$ msg_chat_id - obrolan di mana bot menerima perintah

$ msg_user_name - nama pengguna

Selanjutnya, kita memanggil fungsi Parse_Tokens untuk diproses:

 $Out_Str = Parse_Tokens($tokens); 

Dan kami mengirim jawabannya:

 Send_Out($user_id, $Out_Str); 

fungsi Send_Out sederhana dan terlihat seperti ini:

 function Send_Out($user_id, $text, $is_end = true) { global $tg_bot_token; if (strlen($user_id) < 1 || strlen($text) < 1) {return;} $json = file_get_contents('https://api.telegram.org/bot' . $tg_bot_token . '/sendMessage?chat_id=' . $user_id . '&text=' . $text); } 

Skill keterampilan untuk Yandex.Alice


Sekarang mari kita beralih ke script untuk Alice, itu hampir sama dengan Telegram.

Kami juga menghubungkan perpustakaan tempat pesan dari bot dan Alice akan diproses, ditambah perpustakaan dengan kelas untuk Alice:

 include_once 'classes_alice.php'; include_once 'webhook_parse.php'; 

Kami mendapatkan data:

 $data = json_decode(trim(file_get_contents('php://input')), true); 

Kami mengurai data ke dalam variabel:

 if (isset($data['request'])) { //original_utterance if (isset($data['meta'])) { $data_meta = $data['meta']; if (isset($data_meta['client_id'])) {$client_id = $data_meta['client_id'];} } if (isset($data['request'])) { $data_req = $data['request']; if (isset($data_req['original_utterance'])) { $original_utterance = $data_req['original_utterance']; } if (isset($data_req['command'])) {$data_msg = $data_req['command'];} if (isset($data_req['nlu'])) { $data_nlu = $data_req['nlu']; if (isset($data_nlu['tokens'])) {$tokens = $data_nlu['tokens'];} // $data_token_count = count($data_tokens); } } if (isset($data['session'])) { $data_session = $data['session']; if (isset($data_session['new'])) {$data_msg_new = $data_session['new'];} if (isset($data_session['message_id'])) {$data_msg_id = $data_session['message_id'];} if (isset($data_session['session_id'])) {$data_msg_sess_id = $data_session['session_id'];} if (isset($data_session['skill_id'])) {$skill_id = $data_session['skill_id'];} if (isset($data_session['user_id'])) {$user_id = $data_session['user_id'];} } } 

Di sini variabel yang diperlukan sedikit kurang:

$ token - sekarang semua kata yang dimasukkan pengguna di sini

$ user_id - ini adalah id pengguna

Yandex terus-menerus memunculkan keterampilan yang dipublikasikan, dan saya menambahkan baris untuk segera keluar dari skrip tanpa memulai pemrosesan pesan lengkap:

  if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);} 

Kami memanggil fungsi Parse_Tokens untuk diproses, sama seperti Telegram:

 $Out_Str = Parse_Tokens($tokens); 

Dan kami mengirim jawabannya:

 Send_Out($user_id, $Out_Str); 

Fungsi Send_Out lebih rumit di sini:

 function Send_Out($user_id, $out_text, $out_tts = "", $is_end = false) { global $data_msg_sess_id, $user_id; ///// GENERATE BASE OF OUT ////// $Data_Out = new Alice_Data_Out(); $Data_Out->response = new Alice_Response(); $Data_Out->session = new Alice_Session(); ///// GENERATE BASE OF OUT End ////// ///// OUT MSG GENERATE ///// $Data_Out->session->session_id = $data_msg_sess_id;; $Data_Out->session->user_id = $user_id; $Data_Out->response->text = $out_text; $Data_Out->response->tts = $out_tts; if (strlen($out_tts) < 1) {$Data_Out->response->tts = $out_text;} $Data_Out->response->end_session = $is_end; header('Content-Type: application/json'); print(json_encode($Data_Out, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT)); die(); } 

Menyelesaikan skrip untuk Alice.

Script pemrosesan Parse_Tokens sendiri dilakukan murni misalnya, Anda dapat melakukan pemeriksaan dan pemrosesan di sana.

 function Parse_Tokens($tokens) { $out = ""; // do something with tokens // $out = "Your eneter " . count($tokens) . " words: " . implode($tokens, " "); return $out; } 

Jika Anda perlu berkomunikasi dengan pengguna dengan bentuk yang lebih kompleks daripada tanya jawab, Anda perlu menyimpan dalam database (misalnya mysql) $ user_id dari pengguna dan data yang sudah diterima dari pengguna dan menganalisisnya dalam fungsi Parse_Tokens.

Sebenarnya, ini hampir semuanya, jika semuanya dilakukan dengan benar, maka bot Telegram sudah tersedia, keterampilan Alice dapat diperiksa dengan dialogs.yandex.ru/developer , pergi ke keahlian baru Anda pada tab pengujian.



Jika semuanya berfungsi dengan benar, Anda dapat mengirim keterampilan ke moderasi dengan mengklik tombol "Moderasi".

Sekarang Anda memiliki dua bot untuk platform berbeda yang bekerja dengan cara yang sama.

Dokumentasi layanan Yandex.Dialog di sini

Skrip lengkap diposting di unduhan github.

Perbarui: bungkus semuanya dalam kelas dan perbarui repositori di github

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


All Articles