Buenas tardes
Hay muchos artículos sobre el tema de los bots de Telegram, pero pocos escriben sobre habilidades para Alice, y no encontré ninguna información sobre cómo hacer un solo bot, así que decidí compartir mi experiencia sobre cómo hacer un bot simple de Telegram y Yandex. teniendo un solo funcional.
Por lo tanto, no le diré cómo generar un servidor web y obtener un certificado SSL, ya se ha escrito lo suficiente al respecto.
Crear un bot de Telegram
Primero, crea un bot de Telegram, para esto, ve a Telegram y encuentra el bot BotFather allí.


Elegir / newbot

Ingresamos el nombre del bot por el cual responderá, luego ingresamos el nombre del bot, en respuesta obtenemos un token para controlar el bot, escribimos esta clave, nos será útil en el futuro.

El siguiente paso es decirle a los servidores de Telegram a qué servidor enviar datos desde el bot. Para hacer esto, haga un enlace del formulario:
https: //api.telegram.org/bot______/setWebhook?url=https://_________
___ TOKEN ___ reemplaza con nuestro token bot recibido anteriormente
____ PATH_DO_SCRIPT ___ se reemplaza por la dirección del script en nuestro servidor donde se procesarán los datos (por ejemplo,
www.my_server.ru/webhook_telegram.php ).
Hay un problema, el servidor api.telegram.org está bloqueado, pero puede hacer esto: alquilar el servidor más barato donde no hay restricciones y dar el comando desde la consola de este servidor
wget _______
Eso es todo, el bot Telegram se crea y se conecta a su servidor.
Creando una habilidad para Yandex.Alice
Pasemos a crear la habilidad para Yandex.Alice.
Para crear una habilidad, debe ir a la página de desarrolladores de Yandex.Dialogs, la
página de desarrolladores de Yandex.Dialogs, hacer clic en "Crear diálogo" y seleccionar "Habilidad en Alice".

Se abre el cuadro de diálogo de configuración de habilidades.

Comenzamos a ingresar a la configuración de habilidades.
Ingrese el nombre de su habilidad.

El nombre de activación debe seleccionarse con mucho cuidado para que Alice lo entienda correctamente, desde los matices: una aplicación móvil con Alice y columnas como Yandex.Station o Irbis A pueden percibir las palabras de diferentes maneras.
Ingresamos la ruta al script en nuestro servidor de la misma manera que para Telegram, pero será un script específicamente para Alice, por ejemplo
www.my_server.ru/webhook_alice.php .

Elegimos la voz que hablará la habilidad, prefiero la voz de Alice.

Si planea trabajar solo en dispositivos móviles o en un navegador, seleccione "Necesita un dispositivo con pantalla".
Luego, ingrese la configuración para el catálogo de habilidades de Alice. Si planea usar la palabra marca para la activación, debe pasar por la verificación del sitio web de la marca en el servicio webmaster.yandex.ru.

Con la configuración, vaya a los scripts.
Telegram bot script
Comencemos con el guión de Telegram.
Conectamos la biblioteca donde se procesarán los mensajes del bot y Alice:
include_once 'webhook_parse.php';
Configuramos el token de nuestro bot:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Obtenemos los datos:
$request = file_get_contents('php://input'); $request = json_decode($request, TRUE);
Analizamos los datos en variables:
if (!$request) { die();
Ahora puedes trabajar con variables:
$ tokens - ahora todas las palabras que el usuario ingresó aquí
$ user_id: aquí está el ID de usuario
$ msg_chat_id - chat en el que el bot recibió un comando
$ msg_user_name - nombre de usuario
A continuación, llamamos a la función Parse_Tokens para procesar:
$Out_Str = Parse_Tokens($tokens);
Y enviamos la respuesta:
Send_Out($user_id, $Out_Str);
la función Send_Out es simple y se ve así:
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 habilidad para Yandex.Alice
Ahora pasemos al guión de Alice, es casi lo mismo que para Telegram.
También conectamos la biblioteca donde se procesarán los mensajes del bot y Alice, además de una biblioteca con clases para Alice:
include_once 'classes_alice.php'; include_once 'webhook_parse.php';
Obtenemos los datos:
$data = json_decode(trim(file_get_contents('php://input')), true);
Analizamos los datos en variables:
if (isset($data['request'])) {
Aquí las variables necesarias son un poco menos:
$ tokens - ahora todas las palabras que el usuario ingresó aquí
$ user_id: aquí está el ID de usuario
Yandex constantemente muestra habilidades publicadas, y agregué una línea para salir inmediatamente del script sin comenzar el procesamiento completo del mensaje:
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
Llamamos a la función Parse_Tokens para el procesamiento, es lo mismo que para Telegram:
$Out_Str = Parse_Tokens($tokens);
Y enviamos la respuesta:
Send_Out($user_id, $Out_Str);
La función Send_Out es más complicada aquí:
function Send_Out($user_id, $out_text, $out_tts = "", $is_end = false) { global $data_msg_sess_id, $user_id;
Terminado el guión de Alice.
La secuencia de comandos de procesamiento Parse_Tokens se realizó solo, por ejemplo, puede hacer cualquier verificación y procesamiento allí.
function Parse_Tokens($tokens) { $out = "";
Si necesita comunicarse con un usuario de una forma más compleja que una pregunta y respuesta, deberá guardar en la base de datos (por ejemplo mysql) $ user_id del usuario y los datos que ya recibió del usuario y analizarlos en la función Parse_Tokens.
En realidad, esto es casi todo, si todo se hace correctamente, entonces el bot de Telegram ya está disponible, la habilidad de Alice se puede verificar mediante
dialogs.yandex.ru/developer , yendo a su nueva habilidad en la pestaña de prueba.

Si todo funciona correctamente, puede enviar la habilidad a moderación haciendo clic en el botón "Moderación".
Ahora tiene dos bots para diferentes plataformas que funcionan de la misma manera.
Documentación del servicio Yandex.Dialog
aquíLos scripts completos se publican en la
descarga de github.
Actualización: envolvió todo en clases y actualizó el repositorio en github