
Hoy, utilizando materiales de fácil acceso, vamos a crear en un bot de Telegram utilizando (o las funciones de Yandex — por brevedad) y (o Almacenamiento de objetos — para mayor claridad). El código estará en Node.js. Sin embargo, hay una circunstancia delicada: una organización denominada, digamos, Roskomtsenzur (la censura está prohibida por el artículo 29 de la Constitución de la Federación de Rusia), no permite a los proveedores de Internet en Rusia enviar solicitudes a Telegram API en la dirección: https://api.telegram.org/. Pues no lo haremos; si no se puede, no se puede. En nuestra bolsa tenemos los llamados webhooks — con ellos no hacemos solicitudes a una dirección específica, sino que simplemente enviamos nuestra solicitud como respuesta a cualquier solicitud que se nos haga. Es decir, como en Odesa: respondemos a una pregunta con otra pregunta. Por lo tanto, Telegram API no estará presente en nuestro código.
Descargo de responsabilidadLos nombres de cualquier organización gubernamental mencionados en este artículo son ficticios, y cualquier coincidencia con nombres de organizaciones reales es pura casualidad.
Así que haremos un bot que nos proporcionará pensamientos inteligentes. Exactamente como en la imagen:
Puedes probarlo en acción; aquí está su nombre: @SmartThoughtsBot. Notaste el botón «Habilidad de Alice»? Это потому, что бот является своеобразным «компаньоном» для одноименного de la habilidad de Alice, es decir, realiza las mismas funciones que la habilidad de Alice y, posiblemente, puedan coexistir pacíficamente promocionándose mutuamente. Acerca de cómo crear la habilidad Pensamientos Inteligentes se detalla en el artículo . Ahora (después de realizar algunos cambios tras la publicación del artículo mencionado anteriormente), en el smartphone, esta habilidad se verá aproximadamente así:
Creación de un bot
Me gustaría que este tutorial fuera útil para todos, incluidos los principiantes en la 'construcción de bots'. Por lo tanto, en esta sección describiré con bastante detalle cómo crear Telegrambots en
‘e. Para aquellos que no necesiten esta información, salten a las siguientes secciones. Abrimos la aplicaciónTelegaram , llamamos al padre de todos los bots (como en el caso de los humanos) — @BotFather /newbot.

— y, para empezar, le damos el comando /help, para refrescar la memoria sobre lo que podemos hacer. En este momento, nos interesará el comando Dado que el bot descrito ya está creado, para fines de demostración, crearé un bot diferente por un corto tiempo (luego lo eliminaré). Lo nombraréDemoHabrBotusername. Los nombres ( ) de todos los bots de Telegram deben terminar con la palabra, por ejemplo: MyCoolBot o my_cool_bot — esto es para los bots. Pero primero, le damos un nombre al bot (name) — y esto es para las personas. El nombre puede estar en cualquier idioma, contener espacios y no tiene que terminar en una palabra. ) de todos los bots de Telegram deben terminar con la palabra, y ni siquiera tiene que ser único. En este ejemplo, llamé a este bot Demo Habr.

Ahora elijamos un nombre para el bot (username, el que se usa para los bots). Lo llamaremos Dado que el bot descrito ya está creado, para fines de demostración, crearé un bot diferente por un corto tiempo (luego lo eliminaré). Lo nombraré. Todo lo que se refiera al nombre del bot (name) no tiene nada que ver con su nombre — username (o sí, pero de manera opuesta). Después de crear con éxito un nombre único para el bot, necesitamos copiar y guardar (¡en estricta confidencialidad!) el token que se muestra en la captura de pantalla con la flecha roja. Con esto, más tarde configuraremos el webhook desde Telegram‘ a nuestra Función de Yandex.

Ahora le damos una orden al padre de todos los bots: /mybots, y él nos mostrará la lista de todos los bots que hemos creado. Por ahora dejemos de lado el nuevo bot Demo Habr (fue creado para mostrar cómo crear bots, pero aún lo utilizaremos hoy para otros fines demostrativos), y revisemos el bot Pensamientos Inteligentes (@SmartThoughtsBot). Hacemos clic en el botón con su nombre en la lista de bots.

Aquí podemos configurar nuestro bot. Al hacer clic en el botón Editar… pasaremos a editar una opción u otra. Por ejemplo, al hacer clic en el botón Editar Nombre podemos cambiar el nombre del bot, digamos que en lugar de Pensamientos Inteligentes, escribir Ideas Ridículas. Botpic — es el avatar del bot, debe ser al menos 150 x 150 px. Descripción — es una breve descripción que el usuario ve al iniciar el bot por primera vez, como respuesta a la pregunta: ¿Qué puede hacer este bot? Acerca de — es una descripción aún más breve que se envía con el enlace al bot (https://t.me/SmartThoughtsBot) o al ver la información sobre él.

Solo nos queda configurar los comandos. Para ello, hacemos clic en el botón Editar Comandos. Para estandarizar la práctica del usuario, se recomienda usar siempre dos comandos: Telegram , y si el bot necesita configuraciones, un comando adicional /settings. Nuestro bot es tan simple como un balón, por lo que no necesita configuraciones por ahora. Escribimos los dos primeros comandos, que luego procesaremos en el código. Ahora, si el usuario introduce una barra (el signo de la barra diagonal: /) en el campo de entrada, aparecerá una lista de comandos para su selección rápida. Todo como en la imagen: a la izquierda — configuramos los comandos a través del bot padre; a la derecha, estos comandos ya están disponibles para los usuarios en nuestro bot. /start y /helpFunción de Yandex

Ahora, cuando nuestro bot ha sido creado, pasamos a
Ahora que hemos creado nuestro bot, pasemos a Yandex.Cloud, para crear una función que ejecute el código de nuestro bot. Si aún no has trabajado con Yandex.Cloud lee el material , y luego — . Estoy casi seguro de que estos dos artículos relativamente breves serán suficientes para una comprensión básica del tema.
Entonces, en la consola de Yandex.Cloud en el menú de navegación izquierdo seleccionamos la opción Cloud Functions, y luego hacemos clic en el botón Crear función. Le asignamos un nombre y para nosotros una breve descripción.

Después de hacer clic en el botón Crear y después de unos segundos, la nueva función aparecerá en la lista de todas las funciones. Hacemos clic en su nombre, lo que nos llevará a la página Reseña de nuestra función. Aquí necesitamos activar (On) el interruptor Función pública, para que sea accesible desde el exterior (para de Yandex.Cloud) el mundo, y el valor de los campos Enlace para invocación y Identificador — debe mantenerse en profundo secreto de todos, excepto de uno mismo y de Telegram, para que no puedan invocar su función varios estafadores.

Ahora, utilizando el menú de la izquierda, accedemos a Editor las funciones. Por ahora, dejemos a un lado nuestros Pensamientos Inteligentes, y creemos una función plantilla mínima para comprobar el funcionamiento de nuestro bot… Sin embargo, en este contexto, esta función es nuestro bot… En resumen, ahora mismo aquí haremos un bot muy simple que "reflejará" (es decir, enviará de vuelta) las solicitudes de los usuarios. Esta plantilla se puede usar siempre al crear nuevos bots de Telegram, para asegurarse de que la conexión con Telegramfunciona correctamente. Hacemos clic en Crear archivo, lo llamamos index.js, y en el editor de código en línea pegamos en este archivo el siguiente código: module.exports.bot = async (event) => { const body = JSON.parse(event.body);const msg = { 'method': 'sendMessage', 'chat_id': body.message.chat.id, 'text': body.message.text };return { 'statusCode': 200, 'headers': { 'Content-Type': 'application/json' }, 'body': JSON.stringify(msg), 'isBase64Encoded': false }; };
En la consola de Yandex.Cloud esto debería verse aproximadamente así:
Luego un poco más abajo indicamos

Punto de entrada index.bot — index, donde es el nombre del archivo ( — nombre de la función (index.js), y ) de todos los bots de Telegram deben terminar con la palabra module.exports.bot). Todos los demás campos los dejamos «como están», y en la esquina superior derecha hacemos clic en el botónCrear versión . Después de unos segundos, se creará esta versión de la función. Pronto, después de probarel webhook , crearemos una nueva versión —Ahora que hemos creado Pensamientos Inteligentes.

Almacenamiento de objetos
, vamos a, mientras estamos en la consola Ahora, cuando nuestro bot ha sido creado, pasamos a, vamos, mientras estamos en la consola de Yandex.Cloud, crearemos un bucket (bucket, es decir, un cubo en español, nada que ver con un ramo) para almacenar archivos de imágenes que se usarán en nuestro bot Pensamientos Inteligentes. En el menú de navegación de la izquierda, seleccionamos la opción Object Storage, hacemos clic en el botón Crear bucket, le damos un nombre, por ejemplo, img-bucket, y, lo más importante, Acceso de lectura a los objetos lo hacemos público, de lo contrario Telegram no podrá ver nuestras imágenes. Dejamos todos los demás campos sin cambios. Hacemos clic en el botón Crear bucket.

Después de esto, la lista de todos los buckets podría verse así (si este es su único bucket):

Ahora propongo hacer clic en el nombre del bucket y dentro crear una carpeta para organizar el almacenamiento de imágenes para diferentes aplicaciones. Por ejemplo, para un bot de Telegram Pensamientos Inteligentes he creado una carpeta llamada tg-bot-smart-thoughts (no se preocupe, entenderé este código). Cree usted también una.

Ahora puede hacer clic en el nombre de la carpeta, entrar en ella y subir archivos:

Y al hacer clic en el nombre del archivo, podrá obtenerlo URL para usarlo en nuestro bot y, en general, en cualquier lugar (pero no publique este URL sin necesidad, ya que el tráfico de Almacenamiento de objetos se factura).

Y eso es todo con Almacenamiento de objetos. Ahora sabrá qué hacer cuando vea un aviso para cargar archivos.
Webhook
Ahora vamos a configurar el webhook — es decir, cuando el bot reciba una actualización (por ejemplo, un mensaje de un usuario), se enviará una solicitud desde el servidor Telegram a nuestro Función de Yandex con los datos. Aquí hay una línea que puede simplemente insertar en la barra de direcciones del navegador y luego actualizar la página (solo necesita hacerlo una vez):requestSolo reemplazamos https://api.telegram.org/bot{bot_token}/setWebHook?url={webhook_url}
{bot_token} por el token que recibimos del bot padre al crear nuestro bot, y {webhook_url} — por nuestro URL . ¡Un momento! Pero las funciones de Yandexprohíbe a los proveedores en Rusia servir la dirección Roskomtsenzur . Sí, es cierto. Pero piense en algo. Por ejemplo, puede pedirle a su abuela en Ucrania, Israel o Canadá — allí no hay ningún 'censura rusa', y solo dios sabe cómo vive la gente sin esto. En resumen, la solicitud-respuesta al configurar el webhook debería verse así: https://api.telegram.orgProbando. Debería 'reflejar'.

Así es. Nuestras felicitaciones — ahora

-bot! Ahora, cuando nuestro bot ha sido creado, pasamos a se convirtió en TelegramAhora hacemos Pensamientos Inteligentes. El código es abierto y está en
Pensamientos Inteligentes
. Está bastante bien comentado y tiene solo un centenar de líneas. ¡Léalo como una diva de ópera lee el libreto! Clonar el proyecto e instalar dependencias:

Clona el proyecto e instala las dependencias:
git clone https://github.com/stmike/tg-bot-smart-thoughts.git
cd tg-bot-smart-thoughts
npm i
Realice los cambios necesarios en el archivo index.js (opcional; no es necesario cambiar nada). Cree zip-archivo con el archivo index.js y la carpeta node_modules adentro, por ejemplo, con el nombre smart.zip.

Ahora dirígete a nuestra las funciones de Yandex, selecciona la pestaña ZIP-archivo, haz clic en el botón Seleccionar archivo, y sube nuestro archivo comprimido smart.zip. Finalmente, en la esquina superior derecha, haz clic en el botón . Después de unos segundos, se creará esta versión de la función. Pronto, después de probar.

Después de unos segundos, cuando la función se actualice, probaremos nuevamente nuestro bot. ¡Ahora ya no «refleja», sino que ofrece pensamientos inteligentes!

Eso es todo por hoy. Otros artículos seguirán. A quienes les interese leer algo similar, suscríbanse a las notificaciones sobre nuevos artículos. Pueden suscribirse aquí o en Telegram-canal , o Twitter .
Enlaces
Donaciones
Fuente: habr.com
