Selamat petang.
Terdapat banyak artikel mengenai topik bot Telegram, tetapi beberapa orang menulis tentang kemahiran untuk Alice, dan saya tidak menemui sebarang maklumat tentang cara membuat satu bot, jadi saya memutuskan untuk berkongsi pengalaman saya tentang cara membuat bot Telegram mudah dan kemahiran Yandex.Alice untuk tapak yang mempunyai fungsi yang sama.
Jadi, saya tidak akan memberitahu anda bagaimana untuk meningkatkan pelayan web dan mendapatkan sijil ssl, cukup telah ditulis mengenainya.
Mencipta bot Telegram
Mula-mula, mari kita buat bot Telegram, untuk ini kita pergi ke Telegram dan cari bot BotFather di sana.
Pilih /newbot
Kami memasukkan nama bot yang akan bertindak balas, kemudian kami memasukkan nama bot, sebagai tindak balas kami mendapat token untuk mengawal bot, kami menulis kunci ini, ia akan berguna kepada kami pada masa akan datang.
Langkah seterusnya ialah memberitahu pelayan Telegram pelayan mana untuk menghantar data daripada bot. Untuk melakukan ini, kami membuat pautan borang:
https: //api.telegram.org/bot___Π’ΠΠΠΠ___/setWebhook?url=https://____ΠΠ£Π’Π¬_ΠΠ_Π‘ΠΠ ΠΠΠ’Π___
___TOKEN___ kami gantikan dengan token kami daripada bot, diterima lebih awal
____PATH_TO_SCRIPT____ kami gantikan dengan alamat skrip pada pelayan kami di mana data akan diproses (contohnya,
Terdapat masalah di sini, pelayan api.telegram.org sedang disekat, tetapi anda boleh melakukan ini: sewa pelayan termurah di mana tiada sekatan dan berikan arahan dari konsol pelayan ini
wget ___ΠΠΠΠ£Π§ΠΠΠ¨ΠΠΠ‘Π―_ΠΠΠ ΠΠ‘___
Itu sahaja, bot Telegram dibuat dan disambungkan ke pelayan anda.
Mencipta kemahiran untuk Yandex.Alisa
Mari kita teruskan untuk mencipta kemahiran untuk Yandex.Alice.
Untuk mencipta kemahiran, anda perlu pergi ke halaman pembangun Yandex.Dialogues
Dialog tetapan kemahiran akan dibuka.
Kami mula memasuki tetapan kemahiran.
Masukkan nama kemahiran anda.
Nama pengaktifan harus dipilih dengan sangat berhati-hati supaya Alice memahaminya dengan betul, dari nuansa - aplikasi mudah alih dengan Alice dan lajur seperti Yandex.Station atau Irbis A boleh melihat perkataan secara berbeza.
Kami memasuki laluan ke skrip pada pelayan kami dengan cara yang sama seperti Telegram, tetapi ia akan menjadi skrip khusus untuk Alice, contohnya
Kami memilih suara yang akan digunakan oleh kemahiran itu, saya lebih suka suara Alice.
Jika anda merancang untuk bekerja hanya pada peranti mudah alih atau dalam penyemak imbas, kemudian pilih "Anda memerlukan peranti dengan skrin."
Seterusnya, masukkan tetapan untuk katalog kemahiran Alice. Jika anda bercadang untuk menggunakan perkataan "jenama" untuk pengaktifan, anda perlu mengesahkan tapak web jenama dalam perkhidmatan webmaster.yandex.ru.
Itu sahaja dengan tetapan, mari kita beralih kepada skrip.
Skrip bot Telegram
Mari mulakan dengan skrip untuk Telegram.
Kami menyambungkan perpustakaan tempat mesej daripada bot dan Alice akan diproses:
include_once 'webhook_parse.php';
Kami menetapkan token bot kami:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Kami menerima data:
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
Menghuraikan data kepada pembolehubah:
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);
}
Kini anda boleh bekerja dengan pembolehubah:
$tokens - kini adalah semua perkataan yang dimasukkan oleh pengguna
$user_id - id pengguna di sini
$msg_chat_id - sembang di mana bot menerima arahan
$msg_user_name - nama pengguna
Seterusnya, kami memanggil fungsi Parse_Tokens untuk pemprosesan:
$Out_Str = Parse_Tokens($tokens);
Dan hantar jawapan:
Send_Out($user_id, $Out_Str);
fungsi Send_Out adalah mudah dan kelihatan 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);
}
Skrip kemahiran untuk Yandex.Alisa
Sekarang mari kita beralih kepada skrip untuk Alice, ia hampir sama seperti untuk Telegram.
Kami juga menyambungkan perpustakaan tempat mesej daripada bot dan Alice akan diproses, serta perpustakaan dengan kelas untuk Alice:
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
Kami menerima data:
$data = json_decode(trim(file_get_contents('php://input')), true);
Menghuraikan data kepada pembolehubah:
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'];}
}
}
Terdapat beberapa pembolehubah yang lebih sedikit di sini:
$tokens - kini adalah semua perkataan yang dimasukkan oleh pengguna
$user_id - id pengguna di sini
Yandex sentiasa ping kemahiran yang diterbitkan, dan saya menambah baris untuk segera keluar dari skrip tanpa memulakan pemprosesan penuh mesej:
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
Kami memanggil fungsi Parse_Tokens untuk pemprosesan, ia adalah sama seperti untuk Telegram:
$Out_Str = Parse_Tokens($tokens);
Dan hantar jawapan:
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();
}
Selesai skrip untuk Alice.
Skrip pemprosesan Parse_Tokens itu sendiri dibuat semata-mata sebagai contoh, anda boleh melakukan sebarang pemeriksaan dan pemprosesan 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 dalam bentuk yang lebih kompleks daripada soalan-jawapan, maka anda perlu menyimpan $user_id pengguna dan data yang telah diterima daripada pengguna dalam pangkalan data (contohnya, mysql) dan menganalisis mereka dalam fungsi Parse_Tokens.
Sebenarnya ini hampir semuanya, jika semuanya dilakukan dengan betul, maka bot Telegram sudah tersedia, kemahiran Alice boleh disemak
Jika semuanya berfungsi dengan betul, anda boleh menghantar kemahiran untuk penyederhanaan dengan mengklik butang "Untuk penyederhanaan".
Kini anda mempunyai dua bot untuk platform berbeza sekaligus, yang berfungsi dengan cara yang sama.
Dokumentasi untuk perkhidmatan Yandex.Dialogues
Skrip penuh disiarkan di github
Sumber: www.habr.com