
Aujourd'hui, nous allons assembler à partir de matériaux de récupération dans un bot Telegram à l'aide de ou les fonctions Yandex — pour abréger) et ou le stockage d'objets — pour plus de clarté). Le code sera sur Node.js. Cependant, il y a un petit détail — une organisation appelée, disons, Roskomtsenzur (la censure est interdite par l'article 29 de la Constitution de la Fédération de Russie), n'autorise pas les fournisseurs d'accès Internet en Russie à transmettre des requêtes à l'API Telegram à l'adresse : https://api.telegram.org/. Eh bien, nous n'allons pas le faire non plus — si c'est non, c'est non. Après tout, notre sac contient ce qu'on appelle des webhooks — grâce à eux, nous ne faisons pas de requêtes à une adresse spécifique, mais envoyons simplement notre requête comme réponse à toute requête adressée à nous. C'est-à-dire, comme à Odessa — nous répondons à une question par une question. Donc l'API Telegram il ne figurera pas dans notre code.
AvertissementLes noms d'organisations gouvernementales mentionnés dans cet article sont fictifs, et toute similitude avec des organisations réellement existantes est purement fortuite.
Ainsi, nous allons créer un bot qui nous fournira des pensées intelligentes. Exactement comme sur l'image :
Vous pouvez l'essayer en action — voici son nom : @SmartThoughtsBot. Avez-vous remarqué le petit bouton « Skill d'Alice »? Это потому, что бот является своеобразным «компаньоном» для одноименного du skill d'Alice, c'est-à-dire qu'il remplit les mêmes fonctions que le skill d'Alice et, peut-être, qu'ils pourront coexister paisiblement en se faisant de la publicité mutuellement. Sur comment créer le skill Pensées Intelligentes est expliqué dans l'article . Maintenant (après quelques modifications faites après la publication de l'article mentionné ci-dessus), sur smartphone, ce skill aura l'apparence suivante :
Création du bot
J'aimerais que ce tutoriel soit utile à tous, y compris aux « constructeurs de bots » débutants. Donc dans cette section, je vais décrire en détail comment créer des bots dans Telegram'e. Pour ceux dont cette information n'est pas nécessaire — passez aux sections suivantes.
Ouvrez l'application Telegaram, appelez le père de tous les bots (ils sont comme les humains) — @BotFather — et d'abord, donnons-lui la commande /help pour rafraîchir notre mémoire sur ce que nous pouvons faire. Maintenant, nous allons nous intéresser à la commande /newbot.

Puisque le bot décrit ici est déjà créé, pour des fins de démonstration, je vais créer un autre bot pendant une courte période (je l'effacerai ensuite). Je vais l'appeler DemoHabrBot. Les noms (username) de tous les bots Telegram doivent se terminer par le mot bot, par exemple : MyCoolBot ou my_cool_bot — c'est pour les bots. Mais d'abord, donnons un nom au bot (nom) — et c'est pour les humains. Le nom peut être dans n'importe quelle langue, contenir des espaces, et n'a pas besoin de se terminer par le mot bot, et il n'est même pas nécessaire qu'il soit unique. Dans cet exemple, j'ai nommé ce bot Démo Habr.

Maintenant, choisissons un nom pour le bot (username, celui qui est destiné aux bots). Appelons-le DemoHabrBot. Tout ce qui concernait le nom du bot (nom) ne concerne absolument pas son nom — username (ou cela le concerne, mais dans le sens opposé). Après avoir créé avec succès un nom unique pour le bot, nous devons copier et conserver (dans le plus grand secret !) le token affiché sur la capture d'écran avec la flèche rouge. Avec cela, nous établirons plus tard le webhook sortant de Telegram‘à notre fonction Yandex.

Et maintenant, donnons l'ordre au père de tous les bots : /mybots, et il nous montrera la liste de tous les bots que nous avons créés. Laissez de côté pour l'instant le bot fraîchement créé Démo Habr (il a été créé pour montrer comment créer des bots, mais nous l'utiliserons encore aujourd'hui à d'autres fins de démonstration), et examinons le bot Pensées Intelligentes (@SmartThoughtsBot). Cliquez sur le bouton avec son nom dans la liste des bots.

Ici, nous pouvons configurer notre bot. En appuyant sur le bouton Modifier… , nous accédons à l'édition de telle ou telle option. Par exemple, en cliquant sur le bouton Modifier le nom , nous pouvons changer le nom du bot, disons au lieu de Pensées Intelligentes, écrire Idées Absurdes. Botpic — c'est l'avatar du bot, il doit faire au moins 150 x 150 px. Description — c'est une brève description que l'utilisateur voit lors du premier lancement du bot, en réponse à la question : Que peut faire ce bot ? À propos — encore une description plus courte, qui est transmise avec le lien vers le bot (https://t.me/SmartThoughtsBot) ou lors de la consultation des informations à son sujet.

Il ne reste qu'à configurer les commandes. Pour ce faire, appuyez sur le bouton Modifier les commandes. Pour standardiser la pratique utilisateur, Telegram il est recommandé d'utiliser toujours deux commandes : /start et /help, et si le bot nécessite des configurables — une commande supplémentaire /settings. Notre bot est simple comme bonjour, donc il n'a pas encore besoin de configurations. Nous écrivons les deux premières commandes, que nous traiterons ensuite dans le code. Maintenant, si l'utilisateur entre une barre oblique (le signe de la barre oblique : /) dans le champ de saisie, une liste de commandes apparaîtra pour un choix rapide. Tout comme sur l'image : à gauche — nous établissons les commandes via le bot-père ; à droite, ces commandes sont déjà accessibles aux utilisateurs dans notre bot.

fonction Yandex
Maintenant que notre bot est créé, passons à Yandex.Cloud, pour créer une fonction qui exécutera le code de notre bot. Si vous n'avez pas encore travaillé avec Yandex.Cloud , consultez le matériel , puis — . Je suis presque sûr que ces deux articles relativement courts vous suffiront pour une compréhension basique du sujet.
Donc, dans la console Yandex.Cloud , dans le menu de navigation à gauche, sélectionnez l'élément Cloud Functions, puis cliquez sur le bouton Créer une fonction. Donnez-lui un nom et, pour vous, une brève description.

Après avoir cliqué sur le bouton Créer , et après quelques secondes, la nouvelle fonction apparaîtra dans la liste de toutes les fonctions. Cliquez sur son nom — cela nous mènera à la page Aperçu de notre fonction. Ici, vous devez activer (Activé) l'interrupteur Fonction publique, afin qu'elle soit accessible depuis l'extérieur (pour le Yandex.Cloud) monde, et que la valeur des champs Lien pour l'appel et Identifiant — gardez cela profondément secret de tous sauf vous-même et Telegram, pour que votre fonction ne puisse pas être appelée par divers escrocs.

Maintenant, avec le menu de gauche, allons dans Éditeur les fonctions. Mettons de côté pour un moment nos Pensées Intelligentes, et créons une fonction-modèle minimale pour tester le bon fonctionnement de notre bot... En fait, dans ce contexte, cette fonction est notre bot... En bref, maintenant et ici, nous allons créer un très simple bot qui « miroirera » (c'est-à-dire renverra) les demandes des utilisateurs. Ce modèle peut toujours être utilisé lors de la création de nouveaux bots Telegram pour s'assurer que la connexion avec Telegramfonctionne correctement. Cliquez sur Créer un fichier, appelez-le index.js, et dans l'éditeur de code en ligne , insérez dans ce fichier le code suivant : 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 }; };
Dans la console Yandex.Cloud, cela devrait ressembler à ceci :
Ensuite, un peu plus bas, indiquez

Point d'entrée index.bot — c'est le nom du fichier (, où index — le nom de la fonction (index.js), tandis que bot module.exports.bot). Tous les autres champs restent « tels quels », et dans le coin supérieur droit, cliquez sur le boutonCréer une version . Après quelques secondes, cette version de la fonction sera créée. Bientôt, après les testsdu webhook , nous créerons une nouvelle version —Maintenant que nous avons créé Pensées Intelligentes.

le stockage d'objets
, restons dans la console fonction Yandex, et créons un bucket ( Yandex.Cloudbucketbucket, c'est-à-dire un seau en russe, et pas un bouquet) pour stocker des fichiers image qui seront utilisés dans notre bot Pensées Intelligentes. Dans le menu de navigation à gauche, sélectionnez l'option Object Storage, puis cliquez sur le bouton Créer un seau, donnez-lui un nom, par exemple, img-bucket, et surtout, Accès en lecture aux objets le rend public — sinon Telegram ne pourra pas voir nos images. Tous les autres champs restent inchangés. Cliquez sur le bouton Créer un seau.

Après cela, la liste de tous les seaux peut ressembler à ceci (si c'est votre seul seau) :

Maintenant, je vous propose de cliquer sur le nom du seau, et à l'intérieur, de créer un dossier pour organiser le stockage des images pour différentes applications. Par exemple, pour un bot Telegram, Pensées Intelligentes j'ai créé un dossier nommé tg-bot-smart-thoughts (ne vous inquiétez pas, je comprends ce code). Créez-en un vous aussi.

Maintenant, vous pouvez cliquer sur le nom du dossier, y entrer et télécharger des fichiers :

Et en cliquant sur le nom du fichier — l'obtenir URL pour utilisation dans notre bot, et en général — n'importe où (mais ne publiez pas ce URL sans raison, car le trafic depuis le stockage d'objets est facturé).

Voilà, c'est tout concernant le stockage d'objets. Maintenant, vous saurez quoi faire lorsque vous verrez une invitation à télécharger des fichiers là-bas.
Webhook
Maintenant, nous allons configurer le webhook — c'est-à-dire, lorsque le bot reçoit une mise à jour (par exemple, un message d'un utilisateur), une requête Telegram sera envoyée depuis le serveur fonction Yandex vers notrerequest({}) avec les données. Voici la ligne que vous pouvez simplement coller dans la barre d'adresse de votre navigateur, puis actualiser la page (c'est à faire une seule fois) : https://api.telegram.org/bot{bot_token}/setWebHook?url={webhook_url}
Il suffit de remplacer {bot_token} par le token que nous avons obtenu de notre bot principal lors de la création de notre bot, et {webhook_url} — par URL le nôtre. les fonctions Yandex. Une minute ! Mais Roskomtsenzur interdit aux fournisseurs en RF de servir l'adresse https://api.telegram.org. Oui, c'est vrai. Mais vous pouvez trouver une solution. Par exemple, vous pouvez demander à votre grand-mère en Ukraine, Israël ou au Canada — là-bas, il n'y a pas de « censure russe », et seul Dieu sait comment les gens vivent sans cela. En fin de compte, la requête-réponse lors de la configuration du webhook doit ressembler à ceci :

Testons. Ça doit « réfléchir ».

Et c'est le cas. Félicitations — maintenant c'est un fonction Yandex est Telegram-bot !
Pensées Intelligentes
Et maintenant, faisons des Pensées Intelligentes. Le code est ouvert et disponible sur . Il est assez bien commenté, et il contient à peine une centaine de lignes. Lisez-le comme une diva d'opéra lirait un livret !

Clonez le projet et installez les dépendances :
git clone https://github.com/stmike/tg-bot-smart-thoughts.git
cd tg-bot-smart-thoughts
npm i
Apportez les modifications nécessaires à votre fichier index.js (facultatif ; vous pouvez ne rien changer). Créez une archive-zip, avec le fichier index.js et le dossier node_modules à l'intérieur, par exemple, sous le nom smart.zip.

Maintenant, allez dans la console vers notre les fonctions Yandex, sélectionnez l'onglet Archive ZIP, cliquez sur le bouton Choisir un fichier, et téléchargez notre archive smart.zip. Enfin, dans le coin supérieur droit, cliquez sur le bouton . Après quelques secondes, cette version de la fonction sera créée. Bientôt, après les tests.

Dans quelques secondes, lorsque la fonction sera mise à jour, testons à nouveau notre bot. Maintenant, il ne « réfléchit » plus, mais fournit des pensées intelligentes !

C'est tout pour aujourd'hui. D'autres articles suivront. Pour ceux qui aiment ce genre de lecture, abonnez-vous aux notifications des nouveaux articles. Vous pouvez vous abonner ici, ou sur Telegram-le canal , ou Twitter .
Liens
Dons
Source : habr.com
