Dobré odpoledne.
Na téma telegramových botů je spousta článků, ale málokdo píše o dovednostech pro Alici a já jsem nenašel žádné informace o tom, jak vyrobit jediného bota, tak jsem se rozhodl podělit se o své zkušenosti, jak vyrobit jednoduchý telegramový bot a dovednost Yandex.Alice pro web se stejnou funkčností.
Neřeknu vám tedy, jak získat webový server a získat ssl certifikát, o tom bylo napsáno dost.
Vytvoření telegramového robota
Nejprve si vytvořte telegramového bota, za tímto účelem přejdeme do Telegramu a najdeme tam bota BotFather.
Vyberte /newbot
Zadáme jméno robota, kterým bude reagovat, poté zadáme jméno robota, jako odpověď získáme token pro ovládání robota, tento klíč si zapíšeme, bude se nám hodit v budoucnu.
Dalším krokem je sdělit telegramovým serverům, na který server mají odeslat data z robota. Za tímto účelem vytvoříme odkaz na formulář:
https: //api.telegram.org/bot___ТОКЕН___/setWebhook?url=https://____ПУТЬ_ДО_СКРПИТА___
___TOKEN___ nahrazujeme naším tokenem od robota, který jsme obdrželi dříve
____PATH_TO_SCRIPT____ nahradíme adresou skriptu na našem serveru, kde budou data zpracována (např.
Zde je problém, server api.telegram.org je blokován, ale můžete to udělat: pronajměte si nejlevnější server, kde neexistují žádná omezení, a zadejte příkaz z konzoly tohoto serveru
wget ___ПОЛУЧИВШИЙСЯ_АДРЕС___
To je vše, robot Telegram je vytvořen a připojen k vašemu serveru.
Vytvoření dovednosti pro Yandex.Alisa
Pojďme k vytvoření dovednosti pro Yandex.Alice.
Chcete-li vytvořit dovednost, musíte přejít na stránku vývojáře Yandex.Dialogues
Otevře se dialog nastavení dovedností.
Začneme vstupovat do nastavení dovedností.
Zadejte název své dovednosti.
Aktivační jméno by mělo být vybráno velmi pečlivě, aby mu Alice správně rozuměla, z nuancí - mobilní aplikace s Alicí a sloupce jako Yandex.Station nebo Irbis A mohou slova vnímat jinak.
Cestu ke skriptu na našem serveru zadáváme stejně jako u Telegramu, ale bude to skript speciálně pro Alici, např.
Volíme hlas, kterým bude dovednost hovořit, mně se více líbí hlas Alice.
Pokud plánujete pracovat pouze na mobilních zařízeních nebo v prohlížeči, vyberte možnost „Potřebujete zařízení s obrazovkou“.
Dále zadejte nastavení pro katalog dovedností Alice. Pokud plánujete pro aktivaci použít slovo „značka“, musíte ověřit web značky ve službě webmaster.yandex.ru.
To je s nastavením vše, přejděme ke skriptům.
Skript telegramového bota
Začněme skriptem pro Telegram.
Připojujeme knihovnu, kde se budou zpracovávat zprávy od robota a Alice:
include_once 'webhook_parse.php';
Nastavili jsme token našeho robota:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Přijímáme údaje:
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
Analýza dat do proměnný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);
}
Nyní můžete pracovat s proměnnými:
$tokens - zde jsou nyní všechna slova, která uživatel zadal
$user_id – zde ID uživatele
$msg_chat_id - chat, ve kterém bot obdržel příkaz
$msg_user_name – uživatelské jméno
Dále zavoláme funkci Parse_Tokens pro zpracování:
$Out_Str = Parse_Tokens($tokens);
A pošlete odpověď:
Send_Out($user_id, $Out_Str);
funkce Send_Out je jednoduchá a vypadá 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);
}
Dovednostní skript pro Yandex.Alisa
Nyní přejděme ke scénáři pro Alici, je téměř stejný jako u Telegramu.
Připojujeme také knihovnu, kde se budou zpracovávat zprávy od robota a Alice, plus knihovnu s třídami pro Alice:
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
Přijímáme údaje:
$data = json_decode(trim(file_get_contents('php://input')), true);
Analýza dat do proměnný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'];}
}
}
Zde je o něco méně proměnných:
$tokens - zde jsou nyní všechna slova, která uživatel zadal
$user_id – zde ID uživatele
Yandex neustále pinguje publikované dovednosti a přidal jsem řádek pro okamžité ukončení skriptu bez zahájení úplného zpracování zprávy:
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
Pro zpracování voláme funkci Parse_Tokens, je to stejné jako u telegramu:
$Out_Str = Parse_Tokens($tokens);
A pošlete odpověď:
Send_Out($user_id, $Out_Str);
Funkce Send_Out je zde složitější:
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 jsme scénář pro Alici.
Samotný zpracovatelský skript Parse_Tokens byl vytvořen čistě pro příklad, můžete tam provádět libovolné kontroly a zpracování.
function Parse_Tokens($tokens)
{
$out = "";
// do something with tokens //
$out = "Your eneter " . count($tokens) . " words: " . implode($tokens, " ");
return $out;
}
Pokud potřebujete komunikovat s uživatelem složitějšího tvaru, než je otázka-odpověď, budete muset uložit $user_id uživatele a data již přijatá od uživatele do databáze (například mysql) a analyzovat je v funkce Parse_Tokens.
Ve skutečnosti je to téměř vše, pokud je vše provedeno správně, pak je robot Telegram již k dispozici, lze zkontrolovat Alicinu dovednost
Pokud vše funguje správně, můžete dovednost odeslat k moderování kliknutím na tlačítko „Pro moderování“.
Nyní máte dva roboty pro různé platformy najednou, kteří fungují stejným způsobem.
Dokumentace pro službu Yandex.Dialogues
Úplné skripty zveřejněné na githubu
Zdroj: www.habr.com