Π΄Π΅Π½Ρ ΠΠΎΠ±ΡΡΠΉ.
Ana akeh artikel babagan topik bot Telegram, nanging sawetara wong sing nulis babagan katrampilan kanggo Alice, lan aku ora nemokake informasi babagan carane nggawe bot siji, mula aku mutusake kanggo nuduhake pengalaman babagan carane nggawe bot Telegram prasaja lan skill Yandex.Alice kanggo situs sing nduweni fungsi sing padha.
Dadi, aku ora bakal ngandhani sampeyan carane ngunggahake server web lan entuk sertifikat ssl, cukup wis ditulis babagan iki.
Nggawe bot Telegram
Pisanan, ayo nggawe bot Telegram, kanggo iki kita pindhah menyang Telegram lan golek bot BotFather ing kana.
Pilih /newbot
Kita ngetik jeneng bot sing bakal nanggapi, banjur ngetik jeneng bot, kanggo nanggepi kita entuk token kanggo ngontrol bot, kita nulis kunci iki, bakal migunani kanggo kita ing mangsa ngarep.
Langkah sabanjure yaiku ngandhani server Telegram sing server ngirim data saka bot menyang. Kanggo nindakake iki, kita nggawe link saka formulir:
https: //api.telegram.org/bot___Π’ΠΠΠΠ___/setWebhook?url=https://____ΠΠ£Π’Π¬_ΠΠ_Π‘ΠΠ ΠΠΠ’Π___
___TOKEN___ kita ganti nganggo token saka bot, sing ditampa sadurunge
____PATH_TO_SCRIPT____ kita ngganti karo alamat script ing server kita ngendi data bakal diproses (contone,
Ana masalah ing kene, server api.telegram.org diblokir, nanging sampeyan bisa nindakake iki: nyewa server sing paling murah sing ora ana watesan lan menehi perintah saka konsol server iki
wget ___ΠΠΠΠ£Π§ΠΠΠ¨ΠΠΠ‘Π―_ΠΠΠ ΠΠ‘___
Mekaten, bot Telegram digawe lan disambungake menyang server sampeyan.
Nggawe skill kanggo Yandex.Alisa
Ayo pindhah menyang nggawe skill kanggo Yandex.Alice.
Kanggo nggawe skill, sampeyan kudu pindhah menyang kaca pangembang Yandex.Dialogues
Dialog setelan skill bakal mbukak.
Kita wiwiti ngetik setelan skill.
Ketik jeneng skill sampeyan.
Jeneng aktivasi kudu dipilih kanthi ati-ati supaya Alice ngerti kanthi bener, saka nuansa - aplikasi seluler karo Alice lan kolom kaya Yandex.Station utawa Irbis A bisa ngerteni tembung kanthi beda.
Kita ngetik path menyang skrip ing server kita kanthi cara sing padha karo Telegram, nanging bakal dadi skrip khusus kanggo Alice, umpamane
Kita milih swara sing bakal diomongake, aku luwih seneng swarane Alice.
Yen sampeyan mung arep nggarap piranti seluler utawa ing browser, banjur pilih "Sampeyan butuh piranti kanthi layar."
Sabanjure, ketik setelan kanggo katalog katrampilan Alice. Yen sampeyan pengin nggunakake tembung "merek" kanggo aktivasi, sampeyan kudu verifikasi situs web merek ing layanan webmaster.yandex.ru.
Iku kabeh karo setelan, ayo pindhah menyang script.
Skrip bot telegram
Ayo miwiti nganggo skrip kanggo Telegram.
Kita nyambungake perpustakaan ing ngendi pesen saka bot lan Alice bakal diproses:
include_once 'webhook_parse.php';
Kita nyetel token bot kita:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Kita nampa data:
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
Parsing data dadi 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);
}
Saiki sampeyan bisa nggarap variabel:
$tokens - saiki kabeh tembung sing dilebokake pangguna
$user_id - user id kene
$msg_chat_id - chatting ing ngendi bot nampa perintah kasebut
$msg_user_name - jeneng panganggo
Sabanjure, kita nelpon fungsi Parse_Tokens kanggo diproses:
$Out_Str = Parse_Tokens($tokens);
Lan ngirim respon:
Send_Out($user_id, $Out_Str);
fungsi Send_Out prasaja lan katon kaya iki:
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 Skill kanggo Yandex.Alisa
Saiki ayo pindhah menyang skrip kanggo Alice, meh padha karo Telegram.
Kita uga nyambungake perpustakaan ngendi pesen saka bot lan Alice bakal diproses, plus perpustakaan karo kelas kanggo Alice:
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
Kita nampa data:
$data = json_decode(trim(file_get_contents('php://input')), true);
Parsing data dadi 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'];}
}
}
Ana sawetara variabel sing luwih sithik ing kene:
$tokens - saiki kabeh tembung sing dilebokake pangguna
$user_id - user id kene
Yandex terus-terusan ping katrampilan sing diterbitake, lan aku nambahake baris kanggo langsung metu saka skrip tanpa miwiti proses lengkap pesen:
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
Kita nelpon fungsi Parse_Tokens kanggo diproses, padha karo Telegram:
$Out_Str = Parse_Tokens($tokens);
Lan ngirim respon:
Send_Out($user_id, $Out_Str);
Fungsi Send_Out luwih rumit ing kene:
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();
}
Rampung skrip kanggo Alice.
Skrip pangolahan Parse_Tokens dhewe digawe mung kanggo conto, sampeyan bisa nindakake mriksa lan ngolah ing kono.
function Parse_Tokens($tokens)
{
$out = "";
// do something with tokens //
$out = "Your eneter " . count($tokens) . " words: " . implode($tokens, " ");
return $out;
}
Yen sampeyan kudu komunikasi karo pangguna sing luwih rumit tinimbang pitakonan-jawaban, sampeyan kudu nyimpen $user_id pangguna lan data sing wis ditampa saka pangguna ing basis data (contone, mysql) lan analisa ing fungsi Parse_Tokens.
Bener, iki meh kabeh, yen kabeh wis rampung kanthi bener, mula bot Telegram wis kasedhiya, katrampilan Alice bisa dicenthang
Yen kabeh bisa digunakake kanthi bener, sampeyan bisa ngirim skill kanggo moderat kanthi ngeklik tombol "Kanggo moderat".
Saiki sampeyan duwe rong bot kanggo platform sing beda bebarengan, sing bisa digunakake kanthi cara sing padha.
Dokumentasi kanggo layanan Yandex.Dialogues
Skrip lengkap dikirim ing github
Source: www.habr.com