Bon après-midi
Il y a beaucoup d'articles sur le sujet des bots Telegram, mais peu é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 faire un bot Telegram simple et Yandex. ayant une seule fonction.
Donc, je ne vous dirai pas comment élever un serveur Web et obtenir un certificat SSL, assez de choses ont été écrites à ce sujet.
Création d'un bot Telegram
Tout d'abord, créez un bot Telegram, pour cela, allez dans Telegram et trouvez le bot BotFather là-bas.


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, écrivez cette clé, cela nous sera utile à l'avenir.

L'étape suivante consiste à indiquer aux serveurs Telegram à quel serveur envoyer les données du bot. Pour ce faire, faites un lien du formulaire:
https: //api.telegram.org/bot______/setWebhook?url=https://_________
___ TOKEN ___ remplacer par notre jeton de bot reçu plus tôt
____ PATH_DO_SCRIPT ___ est remplacé par l'adresse du script sur notre serveur où les données seront traitées (par exemple,
www.my_server.ru/webhook_telegram.php ).
Il y a un problème, le serveur api.telegram.org est verrouillé, mais vous pouvez le faire: 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 _______
Voilà, le bot Telegram est créé et connecté à votre serveur.
Création d'une compétence pour Yandex.Alice
Passons à la création de la compétence pour Yandex.Alice.
Pour créer une compétence, vous devez vous rendre sur la page des développeurs Yandex.Dialogs, la
page des développeurs Yandex.Dialogs, cliquez sur "Créer un dialogue" et sélectionnez "Skill in Alice".

La boîte de dialogue des paramètres de compétence s'ouvre.

Nous commençons à entrer les paramètres de compétence.
Entrez le nom de votre compétence.

Le nom d'activation doit être sélectionné très soigneusement afin qu'Alice le comprenne correctement, à partir des nuances - une application mobile avec Alice et des colonnes comme Yandex.Station ou Irbis A peut percevoir les mots de différentes manières.
Nous entrons 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
www.my_server.ru/webhook_alice.php .

Nous choisissons la voix que la compétence parlera, je préfère la voix d'Alice.

Si vous prévoyez de travailler uniquement sur des appareils mobiles ou dans un navigateur, sélectionnez "Besoin d'un appareil avec écran".
Ensuite, entrez les paramètres du catalogue de compétences Alice. Si vous prévoyez d'utiliser le mot marque pour l'activation, vous devez passer par la vérification du site Web de la marque dans le service webmaster.yandex.ru.

Avec les paramètres, accédez aux scripts.
Script de télégramme bot
Commençons par le script de 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 jeton de notre bot:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Nous obtenons les données:
$request = file_get_contents('php://input'); $request = json_decode($request, TRUE);
Nous analysons les données en variables:
if (!$request) { die();
Vous pouvez maintenant travailler avec des variables:
$ tokens - maintenant tous les mots que l'utilisateur a saisis ici
$ user_id - voici l'ID utilisateur
$ msg_chat_id - chat dans lequel le bot a reçu une commande
$ msg_user_name - nom d'utilisateur
Ensuite, nous appelons la fonction Parse_Tokens pour le traitement:
$Out_Str = Parse_Tokens($tokens);
Et nous envoyons la 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.Alice
Passons maintenant au script pour Alice, c'est presque la même chose 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 obtenons les données:
$data = json_decode(trim(file_get_contents('php://input')), true);
Nous analysons les données en variables:
if (isset($data['request'])) {
Ici, les variables nécessaires sont légèrement inférieures:
$ tokens - maintenant tous les mots que l'utilisateur a saisis ici
$ user_id - voici l'ID utilisateur
Yandex envoie constamment des pings 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);}
Nous appelons la fonction Parse_Tokens pour le traitement, c'est la même chose que pour Telegram:
$Out_Str = Parse_Tokens($tokens);
Et nous envoyons la 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;
Fin du script pour Alice.
Le script de traitement Parse_Tokens lui-même a été fait purement par exemple, vous pouvez y faire des vérifications et des traitements.
function Parse_Tokens($tokens) { $out = "";
Si vous devez communiquer avec un utilisateur d'un formulaire plus complexe qu'une question et une réponse, vous devrez enregistrer dans la base de données (par exemple mysql) $ user_id de l'utilisateur et les données déjà reçues de l'utilisateur 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, la compétence d'Alice peut être vérifiée par
dialogs.yandex.ru/developer , en allant à votre nouvelle compétence sur l'onglet test.

Si tout fonctionne correctement, vous pouvez envoyer la compétence à la modération en cliquant sur le bouton "Modération".
Maintenant, vous avez deux robots pour différentes plates-formes qui fonctionnent de la même manière.
Documentation du service Yandex.Dialog
iciLes scripts complets sont publiés sur le
téléchargement de github.
Mise à jour: tout enveloppé dans les classes et mis à jour le référentiel sur github