Bonne journée.
Il existe de nombreux articles sur les robots Telegram, mais peu de gens écrivent sur les compétences d'Alice, et je n'ai trouvé aucune information sur la façon de créer un seul bot, j'ai donc décidé de partager mon expérience sur la façon de créer un un simple bot Telegram et la compétence Yandex.Alice pour le site ayant la même fonctionnalité.
Donc, je ne vais pas vous expliquer comment créer un serveur Web et obtenir un certificat SSL, on a suffisamment écrit à ce sujet.
Création d'un bot Telegram
Tout d'abord, créons un bot Telegram, pour cela nous allons sur Telegram et y trouvons le bot BotFather.
Choisissez /newbot
Nous entrons le nom du bot par lequel il répondra, puis nous entrons le nom du bot, en réponse nous obtenons un jeton pour contrôler le bot, nous écrivons cette clé, elle nous sera utile à l'avenir.
L'étape suivante consiste à indiquer aux serveurs Telegram à quel serveur envoyer les données du bot. Pour ce faire, nous faisons un lien du formulaire :
https: //api.telegram.org/bot___ТОКЕН___/setWebhook?url=https://____ПУТЬ_ДО_СКРПИТА___
___TOKEN___ nous remplaçons par notre token du bot, reçu plus tôt
____PATH_TO_SCRIPT____ nous remplaçons par l'adresse du script sur notre serveur où les données seront traitées (par exemple,
Il y a un problème ici, le serveur api.telegram.org est bloqué, mais vous pouvez faire ceci : louer le serveur le moins cher où il n'y a pas de restrictions et donner la commande depuis la console de ce serveur
wget ___ПОЛУЧИВШИЙСЯ_АДРЕС___
Ça y est, le bot Telegram est créé et connecté à votre serveur.
Création d'une compétence pour Yandex.Alisa
Passons à la création d'une compétence pour Yandex.Alice.
Pour créer une compétence, vous devez vous rendre sur la page des développeurs Yandex.Dialogues
La boîte de dialogue des paramètres de compétences s'ouvrira.
Nous commençons à entrer les paramètres de compétences.
Entrez le nom de votre compétence.
Le nom d'activation doit être choisi très soigneusement pour qu'Alice le comprenne correctement, parmi les nuances - une application mobile avec Alice et des colonnes comme Yandex.Station ou Irbis A peut percevoir les mots différemment.
On rentre le chemin du script sur notre serveur de la même manière que pour Telegram, mais ce sera un script spécifiquement pour Alice, par exemple
Nous choisissons la voix avec laquelle la compétence parlera, j'aime davantage la voix d'Alice.
Si vous prévoyez de travailler uniquement sur des appareils mobiles ou dans un navigateur, sélectionnez « Vous avez besoin d'un appareil avec un écran ».
Ensuite, entrez les paramètres du catalogue de compétences d'Alice. Si vous envisagez d'utiliser le mot « marque » pour l'activation, vous devez vérifier le site Web de la marque dans le service webmaster.yandex.ru.
C'est tout avec les paramètres, passons aux scripts.
Script de robot Telegram
Commençons par un script pour Telegram.
Nous connectons la bibliothèque où les messages du bot et d'Alice seront traités :
include_once 'webhook_parse.php';
Nous définissons le token de notre bot :
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Nous recevons des données :
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
Analyser les données 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);
}
Vous pouvez désormais travailler avec des variables :
$tokens - voici maintenant tous les mots saisis par l'utilisateur
$user_id - ID utilisateur ici
$msg_chat_id - chat dans lequel le bot a reçu la commande
$msg_user_name - nom d'utilisateur
Ensuite, nous appelons la fonction Parse_Tokens pour le traitement :
$Out_Str = Parse_Tokens($tokens);
Et envoyez une réponse :
Send_Out($user_id, $Out_Str);
la fonction Send_Out est simple et ressemble à ceci :
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 de compétence pour Yandex.Alisa
Passons maintenant au script pour Alice, c'est quasiment le même que pour Telegram.
Nous connectons également la bibliothèque où les messages du bot et d'Alice seront traités, ainsi qu'une bibliothèque avec des classes pour Alice :
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
Nous recevons des données :
$data = json_decode(trim(file_get_contents('php://input')), true);
Analyser les données 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'];}
}
}
Il y a quelques variables en moins ici :
$tokens - voici maintenant tous les mots saisis par l'utilisateur
$user_id - ID utilisateur ici
Yandex envoie constamment un ping aux compétences publiées et j'ai ajouté une ligne pour quitter immédiatement le script sans démarrer le traitement complet du message :
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
On appelle la fonction Parse_Tokens pour le traitement, c'est la même chose que pour Telegram :
$Out_Str = Parse_Tokens($tokens);
Et envoyez une réponse :
Send_Out($user_id, $Out_Str);
La fonction Send_Out est plus compliquée ici :
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();
}
J'ai terminé le scénario d'Alice.
Le script de traitement Parse_Tokens lui-même a été créé uniquement à titre d'exemple, vous pouvez y effectuer toutes les vérifications et tous les traitements.
function Parse_Tokens($tokens)
{
$out = "";
// do something with tokens //
$out = "Your eneter " . count($tokens) . " words: " . implode($tokens, " ");
return $out;
}
Si vous devez communiquer avec un utilisateur sous une forme plus complexe qu'une question-réponse, vous devrez alors enregistrer le $user_id de l'utilisateur et les données déjà reçues de l'utilisateur dans la base de données (par exemple, mysql) et les analyser dans la fonction Parse_Tokens.
En fait, c'est presque tout, si tout est fait correctement, alors le bot Telegram est déjà disponible, les compétences d'Alice peuvent être vérifiées
Si tout fonctionne correctement, vous pouvez envoyer la compétence en modération en cliquant sur le bouton "Pour modération".
Vous disposez désormais de deux robots pour différentes plates-formes à la fois, qui fonctionnent de la même manière.
Documentation pour le service Yandex.Dialogues
Scripts complets publiés sur github
Source: habr.com