Wir erstellen einen Telegram-Bot in Yandex.Cloud

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Heute werden wir aus einfachen Materialien in Yandex.Cloud Telegram-Bot geschrieben und verwendet Yandex Cloud Functions (oder Yandex-Funktionen — um es kurz zu machen) und Yandex Object Storage (oder Objektspeicher — zur Klarheit). Der Code wird in Node.js. Allerdings gibt es ein pikantes Detail — eine Organisation namens, sagen wir mal, Roskomnadzor (Zensur ist durch Artikel 29 der Verfassung der Russischen Föderation verboten), erlaubt es Internetanbietern in Russland nicht, Anfragen an die Telegram API unter der Adresse: https://api.telegram.org/. Nun werden wir das auch nicht machen — wenn es nicht geht, dann geht es nicht. Schließlich haben wir in unserem Koffer das sogenannte Webhook — damit stellen wir keine Anfragen an eine bestimmte Adresse, sondern senden nur unsere Anfrage als Antwort auf jede Anfrage an uns. Das heißt, wie in Odessa — wir antworten mit einer Frage auf eine Frage. Daher Telegram API wird in unserem Code nicht vorkommen.

HaftungsausschlussDie in diesem Artikel erwähnten Namen staatlicher Organisationen sind fiktiv, und mögliche Übereinstimmungen mit den Namen real existierender Organisationen sind zufällig.

Also werden wir einen Bot erstellen, der uns mit klugen Gedanken versorgt. Genau wie auf dem Bild:

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Sie können ihn in der Praxis testen — hier ist der Name: @SmartThoughtsBotBeachten Sie die Schaltfläche „Alises Fähigkeit“? Это потому, что бот является своеобразным «компаньоном» для одноименного von Alises Fähigkeit, d.h. sie erfüllt die gleichen Funktionen wie Alises Fähigkeit und möglicherweise können sie harmonisch koexistieren und sich gegenseitig bewerben. Wie man einen Fähigkeit „Intelligente Gedanken“ wird im Artikel beschrieben Alisa erwirbt eine Fähigkeit. Jetzt (nach einigen Änderungen nach der Veröffentlichung des genannten Artikels) wird diese Fähigkeit ungefähr so aussehen:

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Erstellen eines Bots

Ich hoffe, dass dieses Tutorial für alle nützlich ist, einschließlich der Anfänger, die „Bots erstellen“. Daher werde ich in diesem Abschnitt recht detailliert beschreiben, wie man überhaupt in TelegramTelegram-Bots erstellt. Für diejenigen, die diese Informationen nicht benötigen — fahren Sie mit den nächsten Abschnitten fort.

Öffnen Sie die Anwendung Telegram, rufen Sie den Vater aller Bots (bei ihnen ist alles wie bei Menschen) — @BotFather — und geben Sie ihm zu Beginn den Befehl /help, um sich ins Gedächtnis zu rufen, was wir tun können. Jetzt interessiert uns der Befehl /newbot.

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Da der hier beschriebene Bot bereits erstellt wurde, werde ich zu Demonstrationszwecken vorübergehend einen anderen Bot erstellen (den ich später löschen werde). Ich nenne ihn DemoHabrBot. Alle Namen (Benutzername) aller Telegram-Bots müssen mit dem Wort enden bot, zum Beispiel: MyCoolBot oder my_cool_bot — das ist für Bots. Zuerst geben wir dem Bot einen Namen (name) — und das ist für Menschen. Der Name kann in jeder Sprache sein, Leerzeichen enthalten und muss nicht mit einem Wort enden bot, und er muss sogar nicht einzigartig sein. In diesem Beispiel habe ich diesen Bot genannt Demo Habr.

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Jetzt wählen wir einen Namen für den Bot (Benutzername, der für Bots gedacht ist). Nennen wir ihn DemoHabrBot. Alles, was mit dem Namen des Bots zu tun hat (name) hat nichts mit seinem Namen zu tun — Benutzername (oder hat damit zu tun, aber genau entgegengesetzt). Nach der erfolgreichen Erstellung eines einzigartigen Botnamens müssen wir das Token kopieren und aufbewahren (unter strengster Geheimhaltung!), das auf dem Screenshot mit dem roten Pfeil gezeigt wird. Damit werden wir später den Webhook aus Telegram‘ einstellen für unsere Yandex-Funktion.

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Jetzt geben wir dem Vater aller Bots den Befehl: /mybots, und er zeigt uns die Liste aller von uns erstellten Bots. Lassen Sie den frisch erstellten Bot Demo Habr vorerst in Ruhe (er wurde erstellt, um zu zeigen, wie man Bots erstellt, aber wir werden ihn heute noch für andere Demonstrationszwecke verwenden), und betrachten wir den Bot Schlaue Gedanken (@SmartThoughtsBot). Im Bots Fenster klicken wir auf den Button mit seinem Namen.

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Hier können wir unseren Bot konfigurieren. Klicken Sie auf die Schaltfläche Bearbeiten… Wir werden mit der Bearbeitung einer bestimmten Option fortfahren. Zum Beispiel, indem wir auf die Schaltfläche klicken Name bearbeiten wir können den Namen des Bots ändern, sagen wir statt Schlaue Gedanken, schreiben wir Abstruse Ideen. Botpic — ist das Avatar des Bots, und sollte mindestens 150 x 150 px. Beschreibung — ist eine kurze Beschreibung, die der Benutzer beim ersten Start des Bots sieht, als Antwort auf die Frage: Was kann dieser Bot tun? Über — eine noch kürzere Beschreibung, die mit einem Link zum Bot übermittelt wird (https://t.me/SmartThoughtsBot) oder beim Anzeigen von Informationen über ihn.

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Jetzt müssen wir nur noch die Befehle einstellen. Dazu drücken wir die Schaltfläche Befehle bearbeiten. Zur Standardisierung der Benutzerpraxis Telegram wird empfohlen, immer zwei Befehle zu verwenden: /start und /help, und wenn der Bot Anpassungen benötigt – einen zusätzlichen Befehl /settings. Unser Bot ist so einfach wie ein Ball, daher sind momentan keine Einstellungen nötig. Wir schreiben die ersten beiden Befehle auf, die wir später im Code bearbeiten werden. Jetzt, wenn der Benutzer ein Slash (Schrägstrich: /) in das Eingabefeld eingibt, erscheint eine Liste von Befehlen zur schnellen Auswahl. Alles wie im Bild: links – wir setzen die Befehle über den Bot-Vater; rechts sind diese Befehle bereits den Benutzern in unserem Bot verfügbar.

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Yandex-Funktion

Jetzt, da unser Bot erstellt wurde, gehen wir zu Yandex.Cloud, um eine Funktion zu erstellen, die den Code unseres Bots ausführt. Falls Sie noch nicht mit Yandex.Cloud gearbeitet haben, lesen Sie das Material Alice im Land von Bitrix, und dann— Yandex-Funktionen versenden E-Mails. Ich bin mir fast sicher, dass diese beiden relativ kurzen Artikel ausreichend sind, um ein grundlegendes Verständnis des Themas zu erlangen.

Also wählen Sie im Yandex.Cloud im linken Navigationsmenü den Punkt Cloud Functions, und klicken dann auf die Schaltfläche Funktion erstellen. Geben Sie ihr einen Namen und eine kurze Beschreibung für sich selbst.

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Nach dem Klicken auf die Schaltfläche Erstellen Sie und nach ein paar Sekunden wird die neue Funktion in der Liste aller Funktionen erscheinen. Klicken Sie auf ihren Namen—das bringt uns zur Seite Übersicht unserer Funktion. Hier müssen Sie den Schalter (Ein) für Öffentliche Funktionaktivieren, damit sie von der Außenwelt (für Yandex.Cloud) zugänglich ist, und die Werte der Felder Aufruf-URL und Identifikator sollten streng geheim gehalten werden, damit nur Sie und Telegram darüber Bescheid wissen, sodass Ihre Funktion nicht von Betrügern aufgerufen werden kann.

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Jetzt wechseln wir mit dem linken Menü zu Editor Funktionen. Lassen Sie uns vorerst unsere Schlaue Gedanken, und erstellen wir eine minimale Vorlagenfunktion, um die Funktionalität unseres Bots zu überprüfen… Im Grunde genommen ist diese Funktion in diesem Kontext unser Bot… Kurz gesagt, hier und jetzt erstellen wir einen einfachen Bot, der Benutzeranfragen „spiegelt“ (d.h. zurücksendet). Diese Vorlage kann immer beim Erstellen neuer Telegram-Bots verwendet werden, um sicherzustellen, dass die Verbindung zu Telegramnormal funktioniert. Klicken Sie auf Datei erstellen, benennen Sie sie index.js, und fügen Sie im Online Code-Editor den folgenden Code in diese Datei ein:

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
  };
};

In der Yandex.Cloud-Konsole sollte es ungefähr so aussehen:

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Darunter geben wir den Endpunktindex.bot, wobei index das ist der Name der Datei (index.js), und bot — der Name der Funktion (module.exports.bot). Alle anderen Felder lassen wir „wie sie sind“, und klicken oben rechts auf die Schaltfläche Version erstellen. In wenigen Sekunden wird diese Funktionsversion erstellt. Bald nach den Tests Webhook, werden wir eine neue Version erstellen — Schlaue Gedanken.

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Objektspeicher

Jetzt, wo wir eine erstellt haben Yandex-Funktion, lassen Sie uns, während wir in der Konsole sind Yandex.Cloud, einen sogenannten Bucket (bucket, also ein Eimer auf Deutsch, definitiv kein Strauß) zum Speichern von Bilddateien erstellen, die in unserem Bot verwendet werden Schlaue Gedanken. Im linken Navigationsmenü wählen wir den Punkt Object Storage, klicken auf die Schaltfläche Bucket erstellen, denken uns einen Namen aus, zum Beispiel img-bucket, und das Wichtigste, Zugriff auf Objekt lesen stellen wir öffentlich ein — sonst sieht Telegram unsere Bilder nicht. Alle anderen Felder lassen wir unverändert. Wir klicken auf die Schaltfläche Bucket erstellen.

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Danach könnte die Liste aller Buckets ungefähr so aussehen (wenn dies Ihr einziger Bucket ist):

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Ich schlage vor, auf den Namen des Buckets zu klicken und darin einen Ordner zu erstellen, um die Speicherung von Bildern für verschiedene Anwendungen zu organisieren. Zum Beispiel für den Telegram-Bot Schlaue Gedanken habe ich einen Ordner mit dem Namen tg-bot-smart-thoughts erstellt (keine Sorge, ich verstehe diesen Code). Erstellen Sie auch einen.

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Jetzt können Sie auf den Namen des Ordners klicken, ihn öffnen und Dateien hochladen:

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Und durch Klicken auf den Dateinamen erhalten Sie dessen URL zur Nutzung in unserem Bot, und eigentlich überall (aber veröffentlichen Sie das nicht URL ohne Notwendigkeit, da der Datenverkehr von Objektspeicher berechnet wird).

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Das ist im Grunde alles zu Objektspeicher. Jetzt wissen Sie, was zu tun ist, wenn Sie aufgefordert werden, Dateien dort hochzuladen.

Webhook

Jetzt richten wir den Webhook ein – d.h. wenn der Bot ein Update erhält (zum Beispiel eine Nachricht von einem Benutzer), wird vom Server Telegram an unser Yandex-Funktion eine Anfrage (request) mit den Daten gesendet. Hier ist die Zeile, die Sie einfach in die Adressleiste Ihres Browsers einfügen und die Seite dann aktualisieren können (das muss nur einmal geschehen): https://api.telegram.org/bot{bot_token}/setWebHook?url={webhook_url}
Ersetzen wir nur {bot_token} durch das Token, das wir vom Bot-Vater bei der Erstellung unseres Bots erhalten haben, und {webhook_url} durch URL unserem Yandex-Funktionen. Einen Moment! Aber Roskomnadzor verhindert es, dass Anbieter in der RF diese Adresse bedienen. https://api.telegram.org. Ja, das stimmt. Aber Sie denken sich etwas aus. Sie könnten zum Beispiel Ihre Großmutter in der Ukraine, Israel oder Kanada bitten – dort gibt es keine „Russischen Zensuren“, und nur Gott weiß, wie die Menschen ohne so etwas leben. Letztendlich sollte die Anfrage-Antwort beim Einrichten des Webhooks so aussehen:

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Testen wir. Es sollte „spiegeln“.

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Das stimmt. Unsere Glückwünsche – jetzt Yandex-Funktion ist es Telegram-Bot!

Schlaue Gedanken

Jetzt erstellen wir Smarte Gedanken. Der Code ist offen und liegt unter GitHub. Er ist recht gut kommentiert und umfasst nur etwa hundert Zeilen. Lesen Sie ihn wie ein Libretto einer Operndiva!

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Klonen Sie das Projekt und installieren Sie die Abhängigkeiten:

git clone https://github.com/stmike/tg-bot-smart-thoughts.git
cd tg-bot-smart-thoughts
npm i

Nehmen Sie die notwendigen Änderungen in die Datei vor index.js (optional; Sie können auch nichts ändern). Erstellen Sie eine ZIP-Archive mit der Datei index.js und dem Ordner node_modules darinnen, zum Beispiel unter dem Namen smart.zip.

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Gehen Sie nun im Terminal zu unserem Yandex-Funktionen, wählen Sie den Reiter ZIP-Archiv, klicken Sie auf die Schaltfläche Datei auswählen, und laden Sie unser Archiv smart.ziphoch. Schließlich klicken Sie oben rechts auf die Schaltfläche Version erstellen.

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Nach ein paar Sekunden, wenn die Funktion aktualisiert wird, testen wir unseren Bot erneut. Jetzt spiegelt er nicht mehr, sondern liefert schlaue Gedanken!

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Das war's für heute. Weitere Artikel folgen. Wer an ähnlichen Inhalten interessiert ist, kann sich hier für Benachrichtigungen über neue Artikel anmelden, oder auf Telegram-Kanal IT Tutorial Zachar, oder Twitter @mikezaharov.

Links

Code auf GitHub
Yandex Cloud Functions
Yandex Object Storage
Bots: Eine Einführung für Entwickler
Telegram Bot API

Spenden

Wir erstellen einen Telegram-Bot in Yandex.Cloud

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster