Wir bauen einen Telegram-Bot in Yandex.Cloud.

Wir bauen einen Telegram-Bot in Yandex.Cloud.

Heute werden wir aus verfügbaren Materialien in Yandex.Cloud Telegram-Bot unter Verwendung von Yandex Cloud Functions (oder Yandex-Funktionen — der Kürze halber) und Yandex Object Storage (oder Objektspeicher — zur Klarheit). Der Code wird in Node.js. Es gibt jedoch ein pikantes Detail – eine Organisation mit dem Namen, sagen wir mal, RossKomZenzur (Zensur ist durch Artikel 29 der Verfassung der RF verboten), erlaubt es den Internetanbietern in Russland nicht, Anfragen an Telegram API an die Adresse: https://api.telegram.org/. Nun, wir werden es nicht tun – wenn es nicht möglich ist, dann eben nicht. Schließlich haben wir in unserem Koffer die sogenannten Webhooks — damit stellen wir keine Anfragen an eine bestimmte Adresse, sondern senden einfach unsere Anfrage als Antwort auf jede Anfrage an uns. Das heißt, wie in Odessa – wir antworten auf eine Frage mit einer Frage. Daher Telegram API wird es in unserem Code nicht auftauchen.

HaftungsausschlussDie in diesem Artikel genannten Namen von staatlichen Organisationen sind erfunden, und mögliche Übereinstimmungen mit den Namen real existierender Organisationen sind zufällig.

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

Wir bauen einen Telegram-Bot in Yandex.Cloud.

Sie können ihn im Einsatz testen – hier ist der Name: @SmartThoughtsBot. Haben Sie die Schaltfläche „Fähigkeit von Alice“? Это потому, что бот является своеобразным «компаньоном» для одноименного Fähigkeit von Alice, d.h. er erfüllt die gleichen Funktionen wie Fähigkeit von Alice und es ist möglich, dass sie friedlich zusammen existieren, indem sie einander bewerben. Wie man eine Fähigkeit Intelligente Gedanken erstellt, wird im Artikel Alice erwirbt die Fähigkeitbeschrieben. Jetzt (nach einigen Änderungen nach der Veröffentlichung des oben erwähnten Artikels) wird diese Fähigkeit auf dem Smartphone etwa so aussehen:

Wir bauen einen Telegram-Bot in Yandex.Cloud.

Bot-Erstellung

Ich hoffe, dass dieses Tutorial für alle hilfreich ist, auch für Anfänger im 'Bot-Bau'. Daher werde ich in diesem Abschnitt recht ausführlich beschreiben, wie man überhaupt TelegramBots erstellt. Für diejenigen, für die diese Informationen nicht erforderlich sind – wechseln Sie zu den nächsten Abschnitten.

Öffnen Sie die Anwendung Telegaram, rufen Sie den Vater aller Bots (sie sind wie 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 bauen einen Telegram-Bot in Yandex.Cloud.

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

Wir bauen einen Telegram-Bot in Yandex.Cloud.

Jetzt wählen wir einen Namen für den Bot (username, 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 — username (oder hat, aber genau gegenteilig). Nach erfolgreicher Erstellung eines einzigartigen Namens für den Bot müssen wir das Token, das mit dem roten Pfeil im Screenshot angezeigt wird, kopieren und geheim halten! Damit werden wir später den ausgehenden TelegramWebhook auf unsere Yandex-Funktion.

Wir bauen einen Telegram-Bot in Yandex.Cloud.

Jetzt geben wir dem Vater aller Bots den Befehl: /mybots, und er wird uns eine Liste aller Bots zeigen, die wir erstellt haben. Lassen wir vorerst den frisch gebackenen Bot Demo Habr (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 Kluge Gedanken (@SmartThoughtsBot). Klicken Sie in der Liste der Bots auf die Schaltfläche mit seinem Namen.

Wir bauen einen Telegram-Bot in Yandex.Cloud.

Hier können wir unseren Bot anpassen. Wenn wir auf die Schaltfläche Bearbeiten… klicken, gelangen wir zur Bearbeitung jener oder anderer Optionen. Zum Beispiel können wir, wenn wir auf die Schaltfläche Name bearbeiten klicken, den Namen des Bots ändern, sagen wir, anstelle von Kluge Gedanken, schreiben wir Verrückte Ideen. Botbild — ist das Avatar des Bots und muss 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 dem Link zum Bot (https://t.me/SmartThoughtsBot) oder beim Betrachten der Informationen über ihn übermittelt wird.

Wir bauen einen Telegram-Bot in Yandex.Cloud.

Jetzt müssen wir nur noch die Befehle einrichten. Dazu klicken wir auf die Schaltfläche Befehle bearbeiten. Um die Benutzerpraxis zu standardisieren, Telegram wird empfohlen, immer zwei Befehle zu verwenden: /start und /help, und wenn der Bot Einstellungen benötigt — einen zusätzlichen Befehl /settings. Unser Bot ist einfach wie ein Ball, daher sind derzeit keine Einstellungen erforderlich. Wir geben die beiden ersten Befehle ein, die wir später im Code verarbeiten werden. Jetzt, wenn der Benutzer im Eingabefeld einen Schrägstrich (/) eingibt, wird eine Liste von Befehlen zum schnellen Auswählen angezeigt. Alles wie auf dem Bild: links — wir richten die Befehle über den Vater-Bot ein; rechts sind diese Befehle bereits für die Benutzer in unserem Bot verfügbar.

Wir bauen einen Telegram-Bot in Yandex.Cloud.

Yandex-Funktion

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

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

Wir bauen einen Telegram-Bot in Yandex.Cloud.

Nach dem Drücken der Taste Erstellen 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 Überblick unserer Funktion. Hier müssen wir den Schalter (Ein) für die Öffentliche Funktion, damit sie für die externe (für Yandex.Cloud) Welt zugänglich wird, und die Werte der Felder URL zum Aufrufen und Identifier – sollten vor allen außer Ihnen selbst und Telegram geheim gehalten werden, damit Ihre Funktion nicht von verschiedenen Betrügern aufgerufen werden kann.

Wir bauen einen Telegram-Bot in Yandex.Cloud.

Jetzt wechseln wir mithilfe des linken Menüs zum Editor der Funktion. Lassen Sie unsere Kluge Gedanken, vorerst beiseite und erstellen Sie eine minimale Template-Funktion zur Überprüfung der Funktionsfähigkeit unseres Bots... Im Grunde genommen ist diese Funktion in diesem Kontext unser Bot... Kurz gesagt, jetzt und direkt hier erstellen wir einen einfachsten Bot, der Anfragen von Benutzern „spiegeln“ (d.h. zurücksenden) wird. Diese Vorlage kann immer verwendet werden, wenn neue Telegram-Bots erstellt werden, um sicherzustellen, dass die Verbindung zu Telegramnormal funktioniert. Klicken Sie auf Datei erstellen, nennen Sie es index.js, und im Online- Code-Editor fügen Sie in diese Datei den folgenden Code 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 Konsole von Yandex.Cloud sollte das ungefähr so aussehen:

Wir bauen einen Telegram-Bot in Yandex.Cloud.

Dann geben wir etwas weiter unten an Eingangspunktindex.bot

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 in der oberen rechten Ecke klicken wir auf die Schaltfläche Version erstellen. Nach ein paar Sekunden wird diese Version der Funktion erstellt. Bald, nach dem Testen des Webhooks, werden wir eine neue Version erstellen — Kluge Gedanken.

Wir bauen einen Telegram-Bot in Yandex.Cloud.

Objektspeicher

Jetzt, da wir eine erstellt haben Yandex-Funktion, lassen Sie uns, während wir in der Konsole sind, Yandex.Cloud, wir erstellen einen sogenannten Bucket (Bucket, d.h. einen Eimer auf Russisch, keineswegs ein Blumenstrauß) zur Speicherung von Bilddateien, die in unserem Bot verwendet werden sollen. Kluge Gedanken. Im linken Navigationsmenü wählen wir den Punkt Object Storage, klicken auf die Schaltfläche Einen Bucket erstellen, geben ihm einen Namen, zum Beispiel, img-bucket, und ganz wichtig, Leserechte für Objekte machen wir öffentlich — sonst sieht Telegram unsere Bilder nicht. Alle anderen Felder lassen wir unverändert. Wir klicken auf die Schaltfläche Einen Bucket erstellen.

Wir bauen einen Telegram-Bot in Yandex.Cloud.

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

Wir bauen einen Telegram-Bot in Yandex.Cloud.

Jetzt schlage ich 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 Kluge Gedanken habe ich einen Ordner mit dem Namen tg-bot-smart-thoughts erstellt (keine Sorge, ich verstehe diesen Code). Erstellen Sie auch Sie einen.

Wir bauen einen Telegram-Bot in Yandex.Cloud.

Jetzt können wir auf den Ordnernamen klicken, um ihn zu öffnen und Dateien hochzuladen:

Wir bauen einen Telegram-Bot in Yandex.Cloud.

Und wenn wir auf den Dateinamen klicken, erhalten wir ihn URL zur Verwendung in unserem Bot und überhaupt — wo immer (aber veröffentlichen Sie dies nicht URL ohne Notwendigkeit, da der Traffic von Dem Objektspeicher kostenpflichtig ist).

Wir bauen einen Telegram-Bot in Yandex.Cloud.

Das ist also alles zum Objektspeicher. Jetzt wissen Sie, was zu tun ist, wenn Sie die Aufforderung sehen, Dateien dorthin hochzuladen.

Webhook

Jetzt werden wir den Webhook einrichten — d.h. wenn der Bot ein Update erhält (zum Beispiel eine Nachricht von einem Benutzer), wird vom Server Telegram an unsere Yandex-Funktion eine Anfrage (request) mit Daten gesendet. Hier ist der String, den Sie einfach in das Adressfeld des Browsers einfügen und dann die Seite aktualisieren können (dies müssen Sie nur einmal tun): https://api.telegram.org/bot{bot_token}/setWebHook?url={webhook_url}
Ersetzen wir einfach {bot_token} mit dem Token, das wir von dem Bot-Vater bei der Erstellung unseres Bots erhalten haben, und {webhook_url} — mit URL unserem Yandex-Funktionen. Einen Moment! Aber RossKomZenzur verhindert, dass Anbieter in RF die Adresse bedienen. https://api.telegram.org. Ja, das stimmt. Aber Sie können sich etwas einfallen lassen. Sie können beispielsweise Ihre Großmutter in der Ukraine, Israel oder Kanada um Hilfe bitten — dort gibt es keine „Russischen Zensoren“, und nur Gott weiß, wie die Menschen ohne diese leben. Am Ende sollte die Anfrage-Antwort bei der Einrichtung des Webhooks so aussehen:

Wir bauen einen Telegram-Bot in Yandex.Cloud.

Wir testen es. Es sollte „spiegeln“.

Wir bauen einen Telegram-Bot in Yandex.Cloud.

So ist es. Unsere Glückwünsche — jetzt sind Sie Yandex-Funktion zoned storage Telegram-Bot!

Kluge Gedanken

Und jetzt erstellen wir Smarte Gedanken. Der Code ist offen und liegt auf GitHub. Er ist ziemlich gut kommentiert und enthält nur hundert Zeilen. Lesen Sie ihn wie eine Operndiva das Libretto!

Wir bauen 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 erforderlichen Änderungen an der Datei vor index.js (optional; Sie können alles so lassen, wie es ist). Erstellen Sie zip-Archiv mit der Datei index.js und dem Ordner node_modules darinnen, zum Beispiel unter dem Namen smart.zip.

Wir bauen einen Telegram-Bot in Yandex.Cloud.

Jetzt wechseln Sie in der Konsole zu unserer Yandex-Funktionen, wählen Sie den Tab ZIP-Archiv, klicken Sie auf die Schaltfläche Datei auswählen, und laden Sie unser Archiv hoch smart.zip. Schließlich klicken Sie in der oberen rechten Ecke auf die Schaltfläche Version erstellen.

Wir bauen 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 wider, sondern liefert kluge Gedanken!

Wir bauen einen Telegram-Bot in Yandex.Cloud.

Das ist alles für heute. Weitere Artikel folgen. Wer an solchen Themen interessiert ist, kann hier Benachrichtigungen über neue Artikel abonnieren oder auf Telegram-Kanal IT Tutorial Zahar, 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 bauen einen Telegram-Bot in Yandex.Cloud.

Quelle: habr.com

60GB SSD 8Gb DDR4