Почему не работает телеграм бот даже из примера?

pavelcdn
Offline
Зарегистрирован: 24.08.2019

по готовому примеру из UniversalTelegramBot подставил токен бота и свою wifi сеть , к роутеру подключило но сообщение в телегу не пришло , токен не стал менять он настоящий , может у вас выйдет?

что я делаю не так(

/*******************************************************************
*  An example of bot that show bot action message.                *
*                                                                 *
*                                                                 *
*                                                                 *
*  written by Vadim Sinitski                                      *
 *******************************************************************/
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>

// Initialize Wifi connection to the router
char ssid[] = "aspire";     // your network SSID (name)
char password[] = "123456789"; // your network key

// Initialize Telegram BOT
#define BOTtoken "1064128638:AAGNFhb53Y-giulXwgBb3PzH9ZxJf411W5E"  // your Bot Token (Get from Botfather)

WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);

int Bot_mtbs = 1000; //mean time between scan messages
long Bot_lasttime;   //last time messages' scan has been done
bool Start = false;

void handleNewMessages(int numNewMessages) {
  Serial.println("handleNewMessages");
  Serial.println(String(numNewMessages));

  for (int i=0; i<numNewMessages; i++) {
    String chat_id = String(bot.messages[i].chat_id);
    String text = bot.messages[i].text;

    String from_name = bot.messages[i].from_name;
    if (from_name == "") from_name = "Guest";

    if (text == "/send_test_action") {
        bot.sendChatAction(chat_id, "typing");
        delay(4000);
        bot.sendMessage(chat_id, "Did you see the action message?");

        // You can't use own message, just choose from one of bellow

        //typing for text messages
        //upload_photo for photos
        //record_video or upload_video for videos
        //record_audio or upload_audio for audio files
        //upload_document for general files
        //find_location for location data

        //more info here - https://core.telegram.org/bots/api#sendchataction
    }

    if (text == "/start") {
      String welcome = "Welcome to Universal Arduino Telegram Bot library, " + from_name + ".\n";
      welcome += "This is Chat Action Bot example.\n\n";
      welcome += "/send_test_action : to send test chat action message\n";
      bot.sendMessage(chat_id, welcome);
    }
  }
}


void setup() {
  Serial.begin(115200);

  // Set WiFi to station mode and disconnect from an AP if it was Previously
  // connected
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);

  // attempt to connect to Wifi network:
  Serial.print("Connecting Wifi: ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  if (millis() > Bot_lasttime + Bot_mtbs)  {
    int numNewMessages = bot.getUpdates(bot.last_message_received + 1);

    while(numNewMessages) {
      Serial.println("got response");
      handleNewMessages(numNewMessages);
      numNewMessages = bot.getUpdates(bot.last_message_received + 1);
    }

    Bot_lasttime = millis();
  }
}

 

Araris
Offline
Зарегистрирован: 09.11.2012

Да, BOTtoken рабочий.

Уж не знаю, зачем sendChatAction() понадобилась, я начинал в своё время с EchoBot.ino.

pavelcdn пишет:

 сообщение в телегу не пришло 

Имеется в виду сообщение из строки 58 ?

pavelcdn
Offline
Зарегистрирован: 24.08.2019

Araris пишет:

Да, BOTtoken рабочий.

Уж не знаю, зачем sendChatAction() понадобилась, я начинал в своё время с EchoBot.ino.

pavelcdn пишет:

 сообщение в телегу не пришло 

Имеется в виду сообщение из строки 58 ?

и 40 строка тоже , я пытаюсь хоть как то заставить работать код чтоб уже дальше от чего то отталкиватся 

negavoid
Offline
Зарегистрирован: 09.07.2016

А с вашего компьютера, в той же сети, где ардуина с ботом, простым браузером открывается http://telegram.org или http://api.telegram.org ?

pavelcdn
Offline
Зарегистрирован: 24.08.2019

negavoid пишет:

А с вашего компьютера, в той же сети, где ардуина с ботом, простым браузером открывается http://telegram.org или http://api.telegram.org ?

да , я с Украины , у нас нет блокировки

negavoid
Offline
Зарегистрирован: 09.07.2016

На роутере никакой фаервол не включен? Другие примеры работают, хотя бы один? На гитхабе последние изменения в этой библиотеке больше двух лет назад, есть вероятность, что api телеграма обновилось без обратной совместимости.

pavelcdn
Offline
Зарегистрирован: 24.08.2019

negavoid пишет:

На роутере никакой фаервол не включен? Другие примеры работают, хотя бы один? На гитхабе последние изменения в этой библиотеке больше двух лет назад, есть вероятность, что api телеграма обновилось без обратной совместимости.

может есть пример какой то попроще? Просто чтоб сообщение пришло в телеграмм и все?

Araris
Offline
Зарегистрирован: 09.11.2012

negavoid пишет:

На гитхабе последние изменения в этой библиотеке больше двух лет назад, есть вероятность, что api телеграма обновилось без обратной совместимости.

Исключаем, у меня работают и версия 07.02.2017 на ESP8266, и версия 21.03.2018 на ESP32.

Araris
Offline
Зарегистрирован: 09.11.2012

1. Запустите в браузере https://api.telegram.org/bot1064128638:AAGNFhb53Y-giulXwgBb3PzH9ZxJf411W5E/getMe , проверьте, есть ли ответ {"ok":true,"result":{"id":1064128638,"is_bot":true,"first_name":"adrduino1848","username":"adrduino1848_bot"}}

2. Найдите строку bool _debug = false; в UniversalTelegramBot.h и поменяйте false на true, будет больше информации. 

pavelcdn пишет:

может есть пример какой то попроще? Просто чтоб сообщение пришло в телеграмм и все?

Вставьте в setup() строку bot.sendMessage(chat_id, "Some text");

chat_id (адресата, то есть свой) можно узнать разными способами, например, https://nastroyvse.ru/programs/review/telegram-id-kak-uznat-zachem-nuzhno.html

Из браузера это же самое будет выглядеть как https://api.telegram.org/bot1064128638:AAGNFhb53Y-giulXwgBb3PzH9ZxJf411W5E/sendMessage?chat_id=0000000000&text=TEST , меняем 0000000000 на реальное значение chat_id

pavelcdn
Offline
Зарегистрирован: 24.08.2019

Araris пишет:

1. Запустите в браузере https://api.telegram.org/bot1064128638:AAGNFhb53Y-giulXwgBb3PzH9ZxJf411W5E/getMe , проверьте, есть ли ответ {"ok":true,"result":{"id":1064128638,"is_bot":true,"first_name":"adrduino1848","username":"adrduino1848_bot"}}

2. Найдите строку bool _debug = false; в UniversalTelegramBot.h и поменяйте false на true, будет больше информации. 

pavelcdn пишет:

может есть пример какой то попроще? Просто чтоб сообщение пришло в телеграмм и все?

Вставьте в setup() строку bot.sendMessage(chat_id, "Some text");

chat_id (адресата, то есть свой) можно узнать разными способами, например, https://nastroyvse.ru/programs/review/telegram-id-kak-uznat-zachem-nuzhno.html

Из браузера это же самое будет выглядеть как https://api.telegram.org/bot1064128638:AAGNFhb53Y-giulXwgBb3PzH9ZxJf411W5E/sendMessage?chat_id=0000000000&text=TEST , меняем 0000000000 на реальное значение chat_id

спасибо , нашел пример рабочий https://github.com/witnessmenow/Simple-Home-Automation-With-Telegram

спасибо за пример из браузера очень полезно

Memfis09
Offline
Зарегистрирован: 21.11.2018

Такая же ситуация: работает только из https://github.com/witnessmenow/Simple-Home-Automation-With-Telegram

Спасибо за обратные связи!

ПОдскажите, почему всё таки первые примеры не работают? а конкретно почему не работает из примеров амперки?

Спасибо!

nik182
Offline
Зарегистрирован: 04.05.2015

Может быть на амперке спросить?

Memfis09
Offline
Зарегистрирован: 21.11.2018

а в чем проблема получить ответ здесь?

Хотя могу попробовать ответить самому... здесь вряд ли можно конкретно и четко решить вопрос: либо будет не по теме сообщение, либо "умные гуру" будут сводить к базарной коммерции...

Если не напишешь максимум информации, то ковыряют с разными корявыми сравнения; если даёшь максимум информации, то снова отправляют без конкретики по вопросу...

И так, между прочим, с данного ресурса идёт прямая отсылка на магазин амперки, так что можно предположить, что и здесь можно спросить про железки и уроки с Амперки. Хотя даже без этого нет смысла отсылать к ним, потому что для специалиста это будет просто как дополнительная информация...

Прошу без обид тех пользователей, которые искренне делятся своим опытом по задаваемым вопросам. Благодарю за понимание.

nik182
Offline
Зарегистрирован: 04.05.2015

Наверно потому что бот телеграмм совершенно не подходит под тематику форума? Там писали, там и ответ дать могут. Как связаны ардуино и бот?

Memfis09
Offline
Зарегистрирован: 21.11.2018

Связаны также как лампочка и ардуино, с помощью которой ей управляют. 

Проблема именно в скетче, который связывается и управляет использую телеграмм. Знающие специалисты явно понимают о чем речь.

nik182
Offline
Зарегистрирован: 04.05.2015

Лампочка, реле, ардуина - вижу связь между сайтом , скетчем, средой. Всё описано.

ESP8266, WiFi, телеграмм - вижу сайт esp8266, интернет технологии, скетча не вижу, потому что поддержка в среде сделана сторонними производителями и большинство строк Вашего скетча не имеют объяснения на уровне нелпа сайта. 

Ну да. Знающие могут и сюда зайти и даже дать ответ.   

sangeek
Offline
Зарегистрирован: 20.07.2020

Автор на гитхабе предупреждает.

Installing
....
You also have to install the ArduinoJson library written by Benoît Blanchon. Search for it on the Arduino Library manager or get it from here.

В коде рабочего примера подключена библиотека парсера

#include ArduinoJson.h

sangeek
Offline
Зарегистрирован: 20.07.2020

...

flex0r
Offline
Зарегистрирован: 29.12.2020

pavelcdn пишет:

по готовому примеру из UniversalTelegramBot подставил токен бота и свою wifi сеть , к роутеру подключило но сообщение в телегу не пришло , токен не стал менять он настоящий , может у вас выйдет?

что я делаю не так(

/*******************************************************************
*  An example of bot that show bot action message.                *
*                                                                 *
*                                                                 *
*                                                                 *
*  written by Vadim Sinitski                                      *
 *******************************************************************/
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>

// Initialize Wifi connection to the router
char ssid[] = "aspire";     // your network SSID (name)
char password[] = "123456789"; // your network key

// Initialize Telegram BOT
#define BOTtoken "1064128638:AAGNFhb53Y-giulXwgBb3PzH9ZxJf411W5E"  // your Bot Token (Get from Botfather)

WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);

int Bot_mtbs = 1000; //mean time between scan messages
long Bot_lasttime;   //last time messages' scan has been done
bool Start = false;

void handleNewMessages(int numNewMessages) {
  Serial.println("handleNewMessages");
  Serial.println(String(numNewMessages));

  for (int i=0; i<numNewMessages; i++) {
    String chat_id = String(bot.messages[i].chat_id);
    String text = bot.messages[i].text;

    String from_name = bot.messages[i].from_name;
    if (from_name == "") from_name = "Guest";

    if (text == "/send_test_action") {
        bot.sendChatAction(chat_id, "typing");
        delay(4000);
        bot.sendMessage(chat_id, "Did you see the action message?");

        // You can't use own message, just choose from one of bellow

        //typing for text messages
        //upload_photo for photos
        //record_video or upload_video for videos
        //record_audio or upload_audio for audio files
        //upload_document for general files
        //find_location for location data

        //more info here - https://core.telegram.org/bots/api#sendchataction
    }

    if (text == "/start") {
      String welcome = "Welcome to Universal Arduino Telegram Bot library, " + from_name + ".\n";
      welcome += "This is Chat Action Bot example.\n\n";
      welcome += "/send_test_action : to send test chat action message\n";
      bot.sendMessage(chat_id, welcome);
    }
  }
}


void setup() {
  Serial.begin(115200);

  // Set WiFi to station mode and disconnect from an AP if it was Previously
  // connected
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);

  // attempt to connect to Wifi network:
  Serial.print("Connecting Wifi: ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  if (millis() > Bot_lasttime + Bot_mtbs)  {
    int numNewMessages = bot.getUpdates(bot.last_message_received + 1);

    while(numNewMessages) {
      Serial.println("got response");
      handleNewMessages(numNewMessages);
      numNewMessages = bot.getUpdates(bot.last_message_received + 1);
    }

    Bot_lasttime = millis();
  }
}

 

Реанимирую старый пост, чтобы кому эта тема выдалась в поиске нашел решение.

Чтобы ответить на вопрос, почему во втором примере работает, а в первом нет, нужно обратиться к функции void setup()

void setup()
{
  Serial.begin(115200);

  // Set WiFi to station mode and disconnect from an AP if it was Previously
  // connected
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);

  // attempt to connect to Wifi network:
  Serial.print("Connecting to Wifi SSID ");
  Serial.print(WIFI_SSID);
  Serial.print(" ");
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  //secured_client.setTrustAnchors(&cert); // Add root certificate for api.telegram.org
  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.print(".");
    delay(500);
  }
  Serial.println();

  Serial.print("WiFi connected. IP address: ");
  Serial.println(WiFi.localIP());
  secured_client.setInsecure();
}

Закомментим строку secured_client.setTrustAnchors(&cert); // Add root certificate for api.telegram.org, а в конце добавим secured_client.setInsecure();

В этом отличие, либо другой вариант - https://github.com/witnessmenow/Universal-Arduino-Telegram-Bot/issues/100

reodos
Offline
Зарегистрирован: 24.07.2016

= flex0r пишет:

Закомментим строку secured_client.setTrustAnchors (& cert); // Добавляем корневой сертификат для api.telegram.org, в конце добавим secured_client.setInsecure ();

у меня строка "secured_client.setInsecure ();" не работает, но работает другая строка - "client.setInsecure();"

b707
Offline
Зарегистрирован: 26.05.2017

reodos пишет:

у меня строка "secured_client.setInsecure ();" не работает, но работает другая строка - "client.setInsecure();"

может потому что обьект по другому называется? :)

clawham
Offline
Зарегистрирован: 26.03.2020

игрался весь вечер с ботом - просто пример - работает - переношу всё в свой проект - не работает - тишина.

В общем оказалось две причины - мало памяти и библиотека mDNS - её надо исключить.

А мало оперативки лечится фрагментацией - client.setBufferSizes(512, 512);

но тут надо проверять влезут ли ваши сообщения в этот буффер и может ли сайт это делать - на данный момент телеграм может обходиться такими буферами.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

А если корневой сертификат закинуть в файловую систему?

clawham
Offline
Зарегистрирован: 26.03.2020

не могу сказать - не в сертификате дело - у меня insecure - тоесть просто хоть както передать строку. всеравно не хватает оперативки. 

Servifed
Offline
Зарегистрирован: 26.11.2021

clawham пишет:

не хватает оперативки. 

Странно. Я довольно много засунул помимо бота и всё работает успешно, даже с сертификатом или с отпечатком.
С сертификатом только уж очень медленно, пришлось остаться на отпечатке.
Свободной оперативы ещё 30-32 кБ.
Почему-то никто не говорит о том, что ни сертификат, ни отпечаток не позволят установить защищенное соединение без актуального времени на esp. Это очень важно! После установки соединения с wifi выполните код:
 

// TZ_IN_SEC - смещение вашей time zone в секундах, если не важно - то 0
configTime(TZ_IN_SEC, 0, "pool.ntp.org");
{
   time_t now = time(nullptr);
   while (now < 24 * 3600){
      delay(100);
      now = time(nullptr);
   }
}

 

clawham
Offline
Зарегистрирован: 26.03.2020

откуда в esp8266 под ардуино 32 кила свободного? простое включение вайфая и поднятие ота сервера - уже 27 оставляет.вот на 27 килах свободного heap - работает. а у меня было 21 кил свободного heap - и всё - не взлетело. пока буферы не ограничил. Про время ничего не понял - специально отключил RTC и  синхронизацию - время вышло 2165 год - прекрасно соединяется и отправляет - правда я не проверяю тупо ничего insecure=true - мне побоку что ктото увидит цыфарки с температурами и счетчики

 

Servifed
Offline
Зарегистрирован: 26.11.2021

clawham пишет:

откуда в esp8266 под ардуино 32 кила свободного? простое включение вайфая и поднятие ота сервера - уже 27 оставляет.вот на 27 килах свободного heap - работает. а у меня было 21 кил свободного heap - и всё - не взлетело. пока буферы не ограничил. Про время ничего не понял 

места надо знать :) . Идём в настройки платы->MMU->16 кэш+48 iRam+2nd Heap. И будет счастье. ОТА у меня поднимается только по требованию и тогда Бот в Телегу не лезет. 
У меня есть тестовый бот, открытый для всех @rtu5024_gate_bot - там можно запросить свободную память командой

/system memory

Сами смотрите. Бот реально на wemos D1 mini и реально рабочий. Я тут тему создал по нему, пока модераторы решили не прикрывать. И бот при этом ещё файликами ворочает под 100кБ. И соединение у него секюрное, хоть и с отпечатком. Буферы не ограничивал, там для инлайн клавы  1500 байт обязательно нужно. Но саму библиотеку "причесал" немного.
Вот сразу после перезагрузки у Бота

Free memory: 34512
Max free block size:34328

 
Про время - это только для секюрного соединения SSL, если insecure - то пофиг. При секюрном соединение проверяется сертификат или его отпечаток, а сертификат имеет срок действия. Если время не выставить, то проверка не пройдёт и соединение не установится. Если отладку включить у библиотеки, то это прекрасно видно.
 

clawham
Offline
Зарегистрирован: 26.03.2020

а можете поделиться технологией? вы с ардуины прошиваете через ота или надо перед этим чтото на девайсе сделать?

не обновлял давно SDK  MMU у меня небыло - по идее вы 16 кил от кэша откусили - скорость не упала? флешка живет?

Servifed
Offline
Зарегистрирован: 26.11.2021

Портал с настройками и web-прошивкой поднимается либо после нажатия кнопки на gpio4, либо по двойному ресету, либо по команде самому боту. 
ОТА  - не нравится. Либо прошиваю по проводу.
Да. 16К от кэша отдал в iRAM. Скорость упала, конечно, но не катастрофично. Тут уж надо решать что важнее. Флешка - это что? Карточкой не пользуюсь, а LittleFs пашет за милую душу.

Servifed
Offline
Зарегистрирован: 26.11.2021

clawham пишет:

не обновлял давно SDK  MMU у меня небыло - по идее вы 16 кил от кэша откусили - скорость не упала? флешка живет?

MMU доступен в настройках только для Generic ESP8266, если стоит что-либо другое, то его нет.

clawham
Offline
Зарегистрирован: 26.03.2020

а ну так неинтересно я думал вы как-то по лайтовому детектите начало ота и потом запускаете штатный модуль...ну...мне ота тоже не всегда нравится но извините - 6 выключателей в дозах очень проблематично доставать для перерпошивки или например есть у меня пара модулей в цеху в станках и вот иногда я их во время работы прошиваю когда идлиоты механики не могут настроить станок - приходится делать всякие шаговые режимы и прочие тупости на один день-до конца смены дожить - а там пар вода холод с ноутом особо не побегаеш да и режимный обьект - с ноутом туда не пустять:) но то такое.

флешка имеется ввиду винбонд где код. она ж и кешируется.

Спасибо. было приятно пообщаться :)

ivan_fly
Offline
Зарегистрирован: 19.10.2017

Может кому поможет... Два дня бился, писал тут просьбу о помощи, но разобрался сам ))

У меня CH340 NodeMcu V3 Lua WIFI.
Никак не хотела в бот посылать сообщения. И в мониторе порта были "кракозяблы".
Чего я только не делал... Оказалось - надо обновить Arduino IDE - и все заработало )))))

Обычно не обновляю, т.к. зачем торогать то, что и так работает?..
К тому же был случай - скетч на старом компилировался, а на новом - нет...

Теперь у меня два ArduinoIDE )))