So starten Sie einen Telegramm-Bot mit PHP

Wenn Sie dies lesen, wissen Sie, dass Chat Bots einer der größten Tech-Trends des Jahres 2016 sind.

Bei der Bot-Revolution geht es nicht nur um künstliche Intelligenz. Ein Bot kann ein Tool in Ihrem Messenger mit einer einfachen Chat-Benutzeroberfläche sein, mit der die Funktionalität von Websites oder Diensten erweitert werden kann, oder sogar als eigenständige Anwendung. Bots sind günstiger in der Entwicklung und einfacher zu installieren. Eine weitere großartige Funktion ist, dass Messenger auf allen Arten von Gerätelaptops, Smartphones und Tablets verwendet werden können. Deshalb sind alle jetzt verrückt nach Bots.

Und der größte Messenger mit einer offenen Bot-API ist Telegram.

Was wir tun werden

In diesem Artikel erstellen wir einen einfachen Stoppuhr-Telegramm-Bot. Ich zeige Ihnen, wie Sie Ihren Bot erstellen, sich mit Analysen verbinden, Code schreiben und schließlich Ihren Bot einem Bot-Store hinzufügen.

Ich habe übrigens bereits eine Demo vorbereitet, so dass Sie sie einfach testen können, indem Sie @stopwatchbot zu Ihrer Telegram-Kontaktliste hinzufügen.

Erstellen Sie einen Bot mit BotFather

Der erste Schritt zum Erstellen eines Bots ist die Registrierung des Kontos Ihres Bots in Telegram. Und dafür gibt es einen Bot, den BotFather. Fügen Sie es einfach zu Ihrer Kontaktliste hinzu und Sie können Telegrammots erstellen und einrichten, indem Sie einfach die / newbot Befehl und befolgen Sie die Anweisungen von BotFather.

Nachdem Sie Ihren neuen Bot registriert haben, erhalten Sie eine Glückwunschmeldung mit einem Autorisierungstoken. Wir werden dieses Token in Kürze verwenden, um einen Bot zu autorisieren und Anforderungen an die Bot-API zu senden.

Später können Sie BotFather verwenden, um Beschreibungen oder Fotos zu den Profilen Ihrer Bots hinzuzufügen, Token neu zu generieren, Befehlslisten festzulegen, Konten zu verwenden, Konten zu löschen usw. Um eine vollständige Liste der Befehle zu erhalten, geben Sie einfach ein /Hilfe In einem Chat erhalten Sie eine Liste der BotFather-Befehle.

Stellen Sie eine Verbindung zu Botan Analytics her

Die Telegram Bots-API enthält keine integrierten Analysen. Es ist jedoch wichtig zu wissen, wie viele Benutzer Sie haben, wie sie agieren und welche Befehle sie mehr auslösen. Natürlich können wir diese Informationen mit unserer eigenen Engine sammeln, aber wenn wir uns auf die Bot-Funktionalität und nicht auf Metriken konzentrieren möchten, müssen wir nur eine sofort einsatzbereite Lösung verwenden.

Es gibt ein einfaches Werkzeug, um Ihren Bot mit Analysen zu verbinden, genannt Botan. Es basiert auf Yandex AppMetric und ist völlig kostenlos. Mit Botan können Sie Ihre Zielgruppe segmentieren, Informationen zu Benutzerprofilen erhalten, den am häufigsten verwendeten Befehl erhalten und schöne Grafiken direkt in Ihrem Messenger anzeigen.

Um zu beginnen, müssen Sie Ihren Bot in Botan registrieren und ein Token erhalten. Und wieder können Sie es mit einem Bot, BotanioBot, tun:

Klicken Sie einfach auf die Schaltfläche "Bot hinzufügen" auf der Dialogtastatur, geben Sie den Benutzernamen Ihres Bots ein und Sie erhalten Ihr Bot-Track-Token. Jetzt kann Botanio Ihre Bot-Ereignisse verfolgen und Sie können Statistiken zu Benutzern, Sitzungen, Aufbewahrung und Ereignissen direkt in Ihrem Messenger abrufen.

Erstellen und Registrieren eines SSL-Webhooks

In Telegram gibt es zwei Möglichkeiten, Nachrichten von Ihren Benutzern abzurufen: lange Abfragen und Webhooks.

Grundsätzlich müssen Sie bei langen Abfragen neue Nachrichten von der API anfordern, und mit Webhooks setzen Sie einen Rückruf, den die Telegramm-API aufruft, wenn eine neue Nachricht von einem Benutzer eingeht. Ich ziehe es vor, Webhooks zu verwenden, da es wie Echtzeitkommunikation aussieht. In diesem Artikel werden wir auch diese Methode verwenden. Nun müssen wir eine Callback-URL für unseren Webhook auswählen, die unter dem HTTPS-Protokoll erreicht werden muss, und wir müssen sie wirklich sicher einstellen. Verbergen Sie Ihr Skript also in einem geheimen Pfad, wie im Handbuch heißt:

Wenn Sie sicherstellen möchten, dass die Webhook-Anforderung von Telegram stammt, empfehlen wir die Verwendung eines geheimen Pfads in der URL, z. https://www.example.com/. Da niemand sonst das Bot-Zeichen Ihres Bots kennt, können Sie ziemlich sicher sein, dass Sie es sind.

Wenn Ihr SSL-Zertifikat vertrauenswürdig ist, müssen Sie nur diese URL in Ihrem Browser öffnen:

https://api.telegram.org:443/bot[token\/setwebhook?url=[webhook]

Andernfalls müssen Sie ein selbstsigniertes Zertifikat erstellen. Hier ist ein Beispiel für den Befehl unter Linux:

openssl req -newkey rsa: 2048 -sha256 -nodes -keyout /path/to/certificate.key -x509 -days 365 -out /path/to/certificate.crt -subj "/ C = IT / ST = state / L = location / O = Beschreibung / CN = IhreDomain.com "

Vergessen Sie nicht, den SSL-Port zu öffnen:

sudo ufw erlauben 443 / tcp

Um das Zertifikat prüfen zu lassen und Ihre Webhook-Domain als vertrauenswürdig einzurichten, müssen Sie Ihr Public Key-Zertifikat hochladen:

curl \ -F "url = https: //ihrdomain.de/pfad/zu/script.php" \ -F "certificate = / path / to / certificate.key" \ "https://api.telegram.org/ bot [token] / setwebhook "

Zum Schluss erhalten Sie eine JSON-Antwort wie folgt:

"ok": true, "result": true, "description": "Webhook wurde festgelegt"

Der Webhook wurde eingestellt und wir sind bereit, die Engine des Bots zu starten.

Erstellen Sie eine Datenbank

Jetzt müssen wir eine Datenbank für unsere Timer erstellen. Was müssen wir darin aufbewahren? Wenn ein Benutzer der Stoppuhr den Startbefehl erteilt, nehmen wir die ID des Chats und speichern eine Zeile mit der Chat-ID und der aktuellen Unix-Zeit. Dies ist die Anzahl der Sekunden zwischen dem Start von Unix Epoch und dem 1. Januar 1970 um UTC. Daher speichern wir eine Zeile mit der Chat-ID und dem ganzzahligen Zeitstempel der aktuellen Unix-Zeit.

Um die aktuelle Stoppuhrzeit anzuzeigen, wird der gespeicherte Zeitstempel abgerufen und mit dem aktuellen Zeitstempel verglichen. Die Differenz wird die aktuelle Zeit in Sekunden sein. Wenn der Benutzer den Timer stoppt, löschen wir einfach die Zeile mit der aktuellen Chat-ID.

Also erstellen wir eine Datenbank und eine Tabelle, um die Stoppuhrinformationen zu speichern:

CREATE TABLE WENN NOT EXISTS 'Stoppuhr' ('chat_id' int (10) unsigned NOT NULL, 'timestamp' int (10) unsigned NOT NULL, Primärschlüssel ('chat_id')) nicht vorhanden ist.

Erstellen Sie eine Stoppuhrklasse

Endlich können wir mit dem Programmieren beginnen. Lassen Sie uns eine Klasse erstellen, um mit der Datenbank in einer Datei namens zu arbeiten stopwatch.php und beginnen Sie mit einem Konstruktor, der zwei private Variablen setzt, in denen die Chat-ID und die aktuelle MySQL-Verbindung gespeichert werden:

Klasse Stoppuhr / ** @var mysqli * / private $ mysqli; / ** @var int * / private $ Stoppuhr-ID; / ** * Stoppuhrkonstruktor * @param mysqli $ mysqli * @param $ stopwatch_id * / public function __construct (\ mysqli $ mysqli, $ stopwatch_id) $ this-> mysqli = $ mysqli; $ this-> stopwatch_id = intval ($ stopwatch_id); 

Wenn der Benutzer den Timer startet, erhalten wir die aktuelle Unix-Zeit und speichern diese in einer Reihe mit der Chat-ID Start() Methode:

öffentliche Funktion start () $ timestamp = time (); $ query = "INSERT INTO 'Stoppuhr' ('chat_id', 'timestamp') VALUES ('$ this-> stopwatch_id', '$ timestamp') ON DUPLICATE KEY UPDATE timestamp = '$ timestamp'"; $ this-> mysqli-> query ($ query) zurückgeben; 

Wenn der Timer stoppt, müssen wir eine Zeile aus der Datenbank löschen:

/ ** * Zeile mit Stoppuhr-ID löschen * @return bool | mysqli_result * / public function stop () $ query = "DELETE FROM 'Stoppuhr' WHERE 'chat_id' = $ this-> stopwatch_id"; $ this-> mysqli-> query ($ query) zurückgeben; 

Und jetzt zum Hauptteil der Klasse. Wenn der Benutzer den Status des Timers anfordert, müssen wir die Zeile mit der Stoppuhr aus der aktuellen Konversation suchen und die Differenz in Sekunden zwischen der gespeicherten Unix-Zeit und der aktuellen Uhrzeit berechnen. Glücklicherweise ist die Unix-Zeit eine Ganzzahl, so dass wir einen Wert einfach von einem anderen Wert abziehen können. Um den resultierenden Wert als Uhrzeit zu formatieren, verwenden wir die gmdate Funktion.

/ ** * Zeile mit Stoppuhr-ID suchen und Differenz in Sekunden von der gespeicherten Unix-Zeit und der aktuellen Uhrzeit zurückgeben * @return string * / public Funktionsstatus () $ query = "SELECT 'Zeitstempel' FROM 'Stoppuhr' WHERE 'chat_id' = $ this-> stopwatch_id "; $ timestamp = $ this-> mysqli-> query ($ query) -> fetch_row (); if (! empty ($ timestamp)) return gmdate ("H: i: s", time () - reset ($ timestamp)); 

Wie Sie sehen, wenn die Datenbank keinen Wert enthält, die Methode Status() gibt nichts zurück und wir verarbeiten einen Nullwert wie einen gestoppten Timer.

Auswahl einer PHP-Bibliothek

Es gibt viele PHP-Bibliotheken, die mit der Telegram-API arbeiten können, aber zum Zeitpunkt der Erstellung dieses Artikels gibt es nur eine, die sowohl den Telegram-Bot-API-Wrapper als auch das Botan-Tracking unterstützt. Und es heißt PHP Telegram Bot API.

Verwenden Sie Composer, um diese Bibliothek zu installieren:

Composer benötigen Telegramm-Bot / API

Wenn Sie kein Interesse an der Verwendung von Analysen haben, versuchen Sie es mit dem PHP-SDK der API für PHP-API mit Lavarel oder mit dem PHP-Telegramm-Bot.

Starten Sie das Webhook-Skript

Nun beginnt der Hauptteil. Wir erstellen ein Skript, um Callbacks von der Telegram Bot API zu verarbeiten. Starten Sie eine Datei mit dem Namen index.php und enthalten Composer Autoload und eine neue Stopwatch-Klasse. Öffnen Sie eine MySQL-Verbindung, erstellen Sie einen neuen Telegram API-Client und führen Sie ihn aus:

required_once 'vendor / autoload.php'; required_once 'stopwatch.php'; // Verbindung zur Datenbank herstellen $ mysqli = neues mysqli ('database_host', 'database_user', 'database_password', 'database_name'); if (! empty ($ mysqli-> connect_errno)) Neue Ausnahmebedingung auslösen ($ mysqli-> connect_error, $ mysqli-> connect_errno);  // Einen Bot erstellen $ bot = new \ TelegramBot \ Api \ Client ('bot_token', 'botanio_token'); // Laufen, Bot, Laufen! $ bot-> run ();

Befehle erstellen

Jetzt müssen wir einen Bot einrichten, um auf Befehl antworten zu können /Start. Dieser Befehl wird verwendet, um alle Telegramm-Bots zu starten, und Benutzern wird beim Starten des ersten Chats die Begrüßungsnachricht angezeigt.

$ bot-> command ('start', function ($ message) use ($ bot) $ answer = 'Howdy! Willkommen bei der Stoppuhr. Verwenden Sie Bot-Befehle oder eine Tastatur, um Ihre Zeit zu steuern.'; $ bot-> sendMessage ( $ message-> getChat () -> getId (), $ answer););

Hier in der Befehl() Methode haben wir eine Schließung für den Empfang eines Befehls definiert. Diese Schließung erhält die ID des aktuellen Chats und sendet eine Begrüßungsnachricht. Außerdem werden alle registrierten Befehle automatisch als Befehlsname nachverfolgt.

Um die Stoppuhr zu starten, definieren wir die /gehen Befehl:

$ bot-> command ('go', Funktion ($ message) use ($ bot, $ mysqli) $ stopwatch = neue Stoppuhr ($ mysqli, $ message-> getChat () -> getId ()); $ stopwatch- > start (); $ bot-> sendMessage ($ message-> getChat () -> getId (), 'Stoppuhr gestartet. Los!'););

Dadurch wird eine Instanz der Stopwatch-Klasse erstellt und ein Timer gestartet, der den Aufruf von Start() Methode, die wir bereits definiert haben.

Um das zu definieren /Status Befehl, müssen wir das Gleiche tun. Rufen Sie einfach an Status() Methode und geben Sie das Ergebnis zurück. Wenn die Methode null zurückgegeben hat, teilen Sie dem Benutzer mit, dass der Timer nicht gestartet wurde.

$ bot-> command ('status', Funktion ($ message) use ($ bot, $ mysqli) $ stopwatch = neue Stoppuhr ($ mysqli, $ message-> getChat () -> getId ()); $ answer = $ stopwatch-> status (); if (empty ($ answer)) $ answer = 'Timer wurde nicht gestartet.'; $ bot-> sendMessage ($ message-> getChat () -> getId (), $ answer.) ;);

Und wenn der Benutzer den Timer stoppt, müssen wir zuerst den Status abrufen, die resultierende Zeit anzeigen und den Timer mit der Taste stoppen halt() Methode.

$ bot-> Befehl ('stop', Funktion ($ message) use ($ bot, $ mysqli) $ stopwatch = neue Stoppuhr ($ mysqli, $ message-> getChat () -> getId ()); $ answer = $ stopwatch-> status (); if (! empty ($ answer)) $ answer = 'Ihre Zeit ist'. $ answer. PHP_EOL; $ stopwatch-> stop (); $ bot-> sendMessage ($ message- > getChat () -> getId (), $ answer. 'Stoppuhr angehalten. Genieße deine Zeit!'););

Das ist es! Jetzt können Sie alle Dateien in das Webhook-Verzeichnis hochladen und Ihren Bot testen.

Eine Tastatur hinzufügen

Um dem Benutzer vorzuschlagen, welche Befehle er ausführen kann, können Sie einer Nachricht eine Tastatur hinzufügen. Unsere Stoppuhr kann laufen oder gestoppt werden, und es gibt zwei für jeden Zustand. Um dem Benutzer eine Tastatur anzuzeigen, müssen Sie nur die Tastatur erweitern Nachricht senden() Methode:

$ keyboard = new \ TelegramBot \ Api \ Types \ ReplyKeyboardMarkup ([['/ go', '/ status']], null, true); $ bot-> sendMessage ($ message-> getChat () -> getId (), $ answer, false, null, null, $ keyboards); );

Jetzt können Sie jedem Befehl Ihres Bots Tastaturen hinzufügen. Ich werde hier kein vollständiges Beispiel hinzufügen, aber Sie können es auf den Repository-Seiten sehen.

Bot zu einem Store hinzufügen

Okay, jetzt haben wir einen funktionierenden Bot und wir wollen ihn der Welt zeigen. Am besten registrieren Sie den Bot in einem Bot-Katalog. Im Moment hat Telegram keinen offiziellen Katalog wie diesen, aber es gibt ein paar inoffizielle, und der größte ist Storebot.me, in dem bereits Tausende von Bots registriert sind.

Und es gibt einen… Bot, um Ihren Bot in einem Bot-Store zu registrieren! Fügen Sie @storebot zu Ihrer Kontaktliste hinzu /hinzufügen Befehl und befolgen Sie die Anweisungen. Sie werden aufgefordert, den Benutzernamen, den Namen und die Beschreibung des Bots einzugeben, eine der Standardkategorien auszuwählen und die Eigentümerschaft des Bots durch Senden des Token zu bestätigen.

Nach einer Weile besteht Ihr Bot den Einreichungsprozess und erscheint in den Storebot-Diagrammen. Jetzt können Sie und Ihre Benutzer abstimmen, Ihren Bot im Bot-Store finden und bewerten, um ihn an die Spitze des Charts zu bringen.

Fazit

Wir haben einen langen Weg zurückgelegt, von der Erstellung eines Baby-Bot bis zur Registrierung in einem Geschäft, um echten Benutzern zur Verfügung zu stehen. Wie Sie sehen, gibt es viele Tools, die Ihnen das Erstellen und Verbreiten Ihres Bot erleichtern, und Sie benötigen nicht viel Code, um einen einfachen Bot zu starten. Jetzt sind Sie bereit, Ihre eigenen zu machen!

Wenn Sie Fragen haben, zögern Sie nicht, Fragen in den Kommentaren des Artikels zu stellen. 

Weiterführende Literatur und verwandte Links

  • Telegramm-Bots
  • BotFather
  • Botan
  • PHP-Telegramm-Bot-API
  • Telegram Bot Store