Dobré popoludnie.
Na tému telegramových botov je veľa článkov, ale málokto píše o schopnostiach pre Alicu a nenašiel som žiadne informácie o tom, ako vyrobiť jedného robota, tak som sa rozhodol podeliť o svoje skúsenosti, ako vyrobiť robota jednoduchý telegramový robot a zručnosť Yandex.Alice pre stránku s rovnakou funkcionalitou.
Takže vám nepoviem, ako vytvoriť webový server a získať certifikát ssl, o tom už bolo napísané dosť.
Vytvorenie telegramového robota
Najprv si vytvorte telegramového robota, prejdeme na telegram a nájdeme tam robota BotFather.
Vyberte /newbot
Zadáme meno robota, ktorým bude reagovať, potom zadáme meno robota, ako odpoveď dostaneme token na ovládanie robota, tento kľúč si zapíšeme, bude sa nám hodiť v budúcnosti.
Ďalším krokom je oznámiť telegramovým serverom, na ktorý server majú odosielať údaje z robota. Na tento účel vytvoríme odkaz na formulár:
https: //api.telegram.org/bot___ТОКЕН___/setWebhook?url=https://____ПУТЬ_ДО_СКРПИТА___
___TOKEN___ nahradíme naším tokenom od robota, ktorý sme dostali skôr
____PATH_TO_SCRIPT____ nahradíme adresou skriptu na našom serveri, kde budú údaje spracované (napr.
Tu je problém, server api.telegram.org je blokovaný, ale môžete to urobiť: prenajmite si najlacnejší server, kde neexistujú žiadne obmedzenia, a zadajte príkaz z konzoly tohto servera
wget ___ПОЛУЧИВШИЙСЯ_АДРЕС___
To je všetko, telegramový bot je vytvorený a pripojený k vášmu serveru.
Vytvorenie zručnosti pre Yandex.Alisa
Prejdime k vytvoreniu zručnosti pre Yandex.Alice.
Ak chcete vytvoriť zručnosť, musíte prejsť na stránku vývojárov Yandex.Dialogues
Otvorí sa dialógové okno s nastaveniami zručností.
Začneme zadávať nastavenia zručností.
Zadajte názov svojej zručnosti.
Názov aktivácie by mal byť vybraný veľmi opatrne, aby ho Alice správne pochopila, od nuancií - mobilná aplikácia s Alice a stĺpce ako Yandex.Station alebo Irbis A môžu vnímať slová inak.
Cestu k skriptu na našom serveri zadávame rovnako ako pri Telegrame, ale bude to skript špeciálne pre Alicu, napr.
Vyberáme hlas, ktorým bude zručnosť rozprávať, mne sa viac páči hlas Alice.
Ak plánujete pracovať iba na mobilných zariadeniach alebo v prehliadači, vyberte možnosť „Potrebujete zariadenie s obrazovkou“.
Ďalej zadajte nastavenia pre Alicin katalóg zručností. Ak plánujete na aktiváciu použiť slovo „značka“, musíte si overiť webovú stránku značky v službe webmaster.yandex.ru.
To je s nastaveniami všetko, prejdime k skriptom.
Skript telegramového bota
Začnime so skriptom pre Telegram.
Pripojíme knižnicu, kde sa budú spracovávať správy od robota a Alice:
include_once 'webhook_parse.php';
Nastavili sme token nášho robota:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Prijímame údaje:
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
Analýza údajov do premenných:
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);
}
Teraz môžete pracovať s premennými:
$tokens – tu sú teraz všetky slová, ktoré používateľ zadal
$user_id – tu je ID používateľa
$msg_chat_id - chat, v ktorom robot dostal príkaz
$msg_user_name – používateľské meno
Ďalej zavoláme funkciu Parse_Tokens na spracovanie:
$Out_Str = Parse_Tokens($tokens);
A pošlite odpoveď:
Send_Out($user_id, $Out_Str);
funkcia Send_Out je jednoduchá a vyzerá takto:
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);
}
Skript zručnosti pre Yandex.Alisa
Teraz prejdime k scenáru pre Alice, je takmer rovnaký ako pre Telegram.
Pripájame tiež knižnicu, kde sa budú spracovávať správy od robota a Alice, plus knižnicu s triedami pre Alice:
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
Prijímame údaje:
$data = json_decode(trim(file_get_contents('php://input')), true);
Analýza údajov do premenných:
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'];}
}
}
Tu je o niečo menej premenných:
$tokens – tu sú teraz všetky slová, ktoré používateľ zadal
$user_id – tu je ID používateľa
Yandex neustále pinguje publikované zručnosti a pridal som riadok na okamžité ukončenie skriptu bez spustenia úplného spracovania správy:
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
Na spracovanie voláme funkciu Parse_Tokens, je to rovnaké ako pre telegram:
$Out_Str = Parse_Tokens($tokens);
A pošlite odpoveď:
Send_Out($user_id, $Out_Str);
Funkcia Send_Out je tu komplikovanejšia:
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();
}
Dokončili sme scenár pre Alice.
Samotný skript spracovania Parse_Tokens bol vytvorený čisto pre príklad, môžete tam vykonávať akékoľvek kontroly a spracovanie.
function Parse_Tokens($tokens)
{
$out = "";
// do something with tokens //
$out = "Your eneter " . count($tokens) . " words: " . implode($tokens, " ");
return $out;
}
Ak potrebujete komunikovať s používateľom zložitejšou formou, než je otázka-odpoveď, potom budete musieť uložiť $user_id používateľa a údaje, ktoré už používateľ dostal, do databázy (napríklad mysql) a analyzovať ich v funkcia Parse_Tokens.
V skutočnosti je to takmer všetko, ak je všetko vykonané správne, potom je telegramový robot už k dispozícii, je možné skontrolovať Alicinu zručnosť
Ak všetko funguje správne, môžete zručnosť odoslať na moderovanie kliknutím na tlačidlo „Na moderovanie“.
Teraz máte dvoch robotov pre rôzne platformy naraz, ktorí fungujú rovnakým spôsobom.
Dokumentácia pre službu Yandex.Dialogues
Úplné skripty zverejnené na github
Zdroj: hab.com