Вступление:
/* Всем привет! Сегодня я покажу как создать самого простого telegram bot(а)! Да-да! Настоящего telegram bot(а), которого в будущем можно усложнить, например, чтобы он выполнял различные команды, или, как искусственный интеллект, поддерживал живой диалог с пользователем! Итак, без лишних слов, приступаем к работе! */
/* Также, Вы могли заметить, что я написал "ESP32 (ESP8266)". Да, для работы telegram bot(а) можно использовать один из этих микроконтроллеров. Поэтому, чтобы не писать много слов, я буду писать просто "ESP32". И ещё один момент: «Программа» = «код» = «скетч»*/
Комплектующие:
- ESP32 - для работы с telegram bot(ом) (Так сказать - это основной «мозг»);
- Провод (USB) - для подключения и работы с ESP32;
- Компьютер/Ноутбук (с Arduino IDE) - для загрузки программы в ESP32;
Программа (шаблон для будущего бота):
#define WIFI_SSID "**********"
#define WIFI_PASS "**********"
#define BOT_TOKEN "***********************************************"
#include <FastBot.h>
FastBot bot(BOT_TOKEN);
void setup() {
connectWiFi();
bot.attach(newMsg);
}
void newMsg(FB_msg& msg) {
Serial.print(msg.chatID); // ID чата
Serial.print(", ");
Serial.print(msg.username); // логин
Serial.print(", ");
Serial.println(msg.text); // текст
}
void loop() {
bot.tick();
}
void connectWiFi() {
delay(2000);
Serial.begin(115200);
Serial.println();
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
if (millis() > 15000) ESP.restart();
}
Serial.println("Connected");
}
Давайте разберём код: (данный пункт не обязательный)
/* В данном блоке кода находятся данные: Wi-Fi, пароль от Wi-Fi и токен от telegram bot(а) */
#define WIFI_SSID "**********"
#define WIFI_PASS "**********"
#define BOT_TOKEN "***********************************************"
/* Для работы с telegram я долго искал и пробовал разные библиотеки. Лучше всего для простого бота telegram подошла библиотека от Алекса Гайвер FastBot (Алекс, спасибо тебе большое) */
#include <FastBot.h>
FastBot bot(BOT_TOKEN);
/* Далее в void setup() идёт подключение к Wi-Fi с помощью функции "connectWiFi()", а также инициализация бота*/
void setup() {
connectWiFi();
bot.attach(newMsg);
}
/* Функция вывода информации в последовательный COM-порт о новом сообщении*/
void newMsg(FB_msg& msg) {
Serial.print(msg.chatID); // ID чата
Serial.print(", ");
Serial.print(msg.username); // логин
Serial.print(", ");
Serial.println(msg.text); // текст
}
/* "Цикл" loop (бесконечный цикл) (в нём как раз и выполняется основная программа)*/
void loop() {
bot.tick();
}
/* И конечно же функция подключения к Wi-Fi*/
void connectWiFi() {
delay(2000);
Serial.begin(115200);
Serial.println();
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
if (millis() > 15000) ESP.restart();
}
Serial.println("Connected");
}
Создание telegram bot(а) в Telegram
А теперь мы подошли к самой интересной части в работе с telegram - это создание самого бота, т.е. чата, куда будут поступать наши команды, а ESP32 (с уже загруженной программой) будет их анализировать.
Своего бота я создавал с помощью другого telegram bot(а) "@BotFather". Если вы создаёте (или уже создали) бота в telegram другим способом, то ничего страшного, главное - это токен бота, который надо будет вписать в программу.
Создание бота:
- Заходим в Telegram, находим через поиск бота @BotFather и открываем чат с ним, нажав внизу экрана кнопку Start.
- Запускаем процедуру регистрации нового бота, для чего набираем в чате с @BotFather команду /newbot
- Далее, следуя инструкциям, вводим имя бота. Это просто его название, то, как он будет отображаться в списке контактов. Это имя потом можно будет изменить с помощью команды /setname в чате с BotFather.
- Теперь нужно ввести username. Это уже строковый идентификатор, используемый для ссылок на бота. Его нельзя менять, он должен быть уникальным и должен обязательно заканчиваться на bot. Если вы введёте некорректный username, или такой, который уже есть в системе, BotFather сообщит Вам об этом и предложит ввести другой.
- Если всё пройдёт успешно, BotFather напишет: «Done! Congratulations on your new bot…», и далее сообщит ссылку на аккаунт вашего нового бота t.me/anynamebot, а также токен для авторизации оператора: «Use this token to access the HTTP API: anynamebottoken«.
Работа с telegram bot(ом) и ESP32:
- После того как вы получили токен бота, Вы должны вписать его в поле "BOT_TOKEN" в скетче (программе) в Arduino IDE
- Теперь загружаем скетч (программу в ESP32)(Если вы никогда не загружали скетч в ESP32, то скоро по этой теме выйдет моя статья)
- Далее, в telegram находим своего бота, пишем "/start" и отправляем любое сообщение. В COM-порт должны прийти данные о сообщении и пользователе, который использует вашего бота.
Всё это конечно хорошо… получать данные о пользователях, но давайте научим нашего бота отвечать на эти сообщения!)
Разберём пример скетча для ответа на слово "Hello"!
Программа для ответа на слово "Hello":
#define WIFI_SSID "**********"
#define WIFI_PASS "**********"
#define BOT_TOKEN "***********************************************"
#include <FastBot.h>
FastBot bot(BOT_TOKEN);
void setup() {
connectWiFi();
bot.attach(newMsg);
}
void newMsg(FB_msg& msg) {
String tem = "("+msg.chatID+", "+msg.username+", "+msg.text+")";
if(msg.text == "Hello"){
String otp = "Привет!";
bot.sendMessage(otp, msg.chatID);
Serial.println(tem+otp);
}
Serial.println(tem);
}
void loop() {
bot.tick();
}
void connectWiFi() {
delay(2000);
Serial.begin(115200);
Serial.println();
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
if (millis() > 15000) ESP.restart();
}
Serial.println("Connected");
}
В данном коде изменилась функция "void newMsg(FB_msg& msg)":
void newMsg(FB_msg& msg) {
String tem = "("+msg.chatID+", "+msg.username+", "+msg.text+")";
if(msg.text == "Hello"){
String otp = "Привет!";
bot.sendMessage(otp, msg.chatID);
otp = "На сообщение отправить == "+otp;
Serial.println(tem+otp);
}
Serial.println(tem);
}
Теперь бот отвечает на слово "Hello" словом "Привет!"