Bona tarda.
Hi ha molts articles sobre el tema dels robots de Telegram, però poca gent escriu sobre habilitats per a l'Alice, i no vaig trobar cap informació sobre com fer un únic bot, així que vaig decidir compartir la meva experiència sobre com fer un bot. bot de Telegram senzill i l'habilitat Yandex.Alice per al lloc amb la mateixa funcionalitat.
Per tant, no us diré com crear un servidor web i obtenir un certificat ssl, ja s'ha escrit prou sobre això.
Creació d'un bot de Telegram
Primer, creem un bot de Telegram, per a això anem a Telegram i hi trobem el bot BotFather.
Trieu /newbot
Introduïm el nom del bot pel qual respondrà, després introduïm el nom del bot, en resposta obtenim un token per controlar el bot, anotem aquesta clau, ens serà útil en el futur.
El següent pas és indicar als servidors de Telegram a quin servidor enviar les dades del bot. Per fer-ho, fem un enllaç del formulari:
https: //api.telegram.org/bot___ТОКЕН___/setWebhook?url=https://____ПУТЬ_ДО_СКРПИТА___
___TOKEN___ substituïm amb el nostre testimoni del bot, rebut abans
____PATH_TO_SCRIPT____ substituïm per l'adreça de l'script al nostre servidor on es processaran les dades (per exemple,
Aquí hi ha un problema, el servidor api.telegram.org està bloquejat, però pots fer això: lloga el servidor més barat on no hi ha restriccions i dóna l'ordre des de la consola d'aquest servidor
wget ___ПОЛУЧИВШИЙСЯ_АДРЕС___
Això és tot, es crea el bot de Telegram i es connecta al teu servidor.
Creació d'una habilitat per a Yandex.Alisa
Passem a crear una habilitat per a Yandex.Alice.
Per crear una habilitat, heu d'anar a la pàgina de desenvolupadors de Yandex.Dialogues
S'obrirà el diàleg de configuració d'habilitats.
Comencem a introduir la configuració d'habilitats.
Introduïu el nom de la vostra habilitat.
El nom d'activació s'ha de triar amb molta cura perquè l'Alice l'entengui correctament, des dels matisos: una aplicació mòbil amb Alice i columnes com Yandex.Station o Irbis A poden percebre les paraules de manera diferent.
Introduïm el camí de l'script al nostre servidor de la mateixa manera que per a Telegram, però serà un script específic per a l'Alice, per exemple
Triem la veu amb la qual parlarà l'habilitat, m'agrada més la veu de l'Alícia.
Si teniu previst treballar només en dispositius mòbils o en un navegador, seleccioneu "Necessites un dispositiu amb pantalla".
A continuació, introduïu la configuració del catàleg d'habilitats d'Alice. Si teniu previst utilitzar la paraula "marca" per a l'activació, heu de verificar el lloc web de la marca al servei webmaster.yandex.ru.
Això és tot amb la configuració, passem als guions.
Script del bot de Telegram
Comencem amb un script per a Telegram.
Connectem la biblioteca on es processaran els missatges del bot i l'Alice:
include_once 'webhook_parse.php';
Hem establert el testimoni del nostre bot:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Rebem dades:
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
Analitzar les dades en variables:
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);
}
Ara podeu treballar amb variables:
$tokens: aquí hi ha ara totes les paraules que va introduir l'usuari
$user_id - identificació d'usuari aquí
$msg_chat_id - xat en què el bot va rebre l'ordre
$msg_user_name - nom d'usuari
A continuació, anomenem la funció Parse_Tokens per al processament:
$Out_Str = Parse_Tokens($tokens);
I envia una resposta:
Send_Out($user_id, $Out_Str);
la funció Send_Out és senzilla i té aquest aspecte:
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);
}
Script d'habilitats per a Yandex.Alisa
Ara passem al guió de l'Alice, és gairebé el mateix que el de Telegram.
També connectem la biblioteca on es processaran els missatges del bot i l'Alice, a més d'una biblioteca amb classes per a Alice:
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
Rebem dades:
$data = json_decode(trim(file_get_contents('php://input')), true);
Analitzar les dades en variables:
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'];}
}
}
Aquí hi ha algunes variables menys:
$tokens: aquí hi ha ara totes les paraules que va introduir l'usuari
$user_id - identificació d'usuari aquí
Yandex fa ping constantment a les habilitats publicades i he afegit una línia per sortir immediatament de l'script sense iniciar el processament complet del missatge:
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
Anomenem la funció Parse_Tokens per al processament, és el mateix que per a Telegram:
$Out_Str = Parse_Tokens($tokens);
I envia una resposta:
Send_Out($user_id, $Out_Str);
La funció Send_Out és més complicada aquí:
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();
}
S'ha acabat el guió d'Alice.
El propi script de processament de Parse_Tokens es va fer només com a exemple, podeu fer qualsevol comprovació i processament allà.
function Parse_Tokens($tokens)
{
$out = "";
// do something with tokens //
$out = "Your eneter " . count($tokens) . " words: " . implode($tokens, " ");
return $out;
}
Si necessiteu comunicar-vos amb un usuari d'una forma més complexa que una pregunta-resposta, haureu de desar el $user_id de l'usuari i les dades ja rebudes de l'usuari a la base de dades (per exemple, mysql) i analitzar-les en la funció Parse_Tokens.
De fet, això és gairebé tot, si tot es fa correctament, llavors el bot de Telegram ja està disponible, l'habilitat d'Alice es pot comprovar
Si tot funciona correctament, podeu enviar l'habilitat per a la moderació fent clic al botó "Per a la moderació".
Ara teniu dos bots per a plataformes diferents alhora, que funcionen de la mateixa manera.
Documentació per al servei Yandex.Dialogues
Scripts complets publicats a github
Font: www.habr.com