Я пишу бота для Telegram и использую официальный API бота. У меня есть сервер веб-перехватчиков, который обрабатывает запросы и отправляет ответ 200 OK на каждый запрос.
Перед остановкой сервера веб-перехватчик отключается, поэтому Telegram больше не отправляет обновления. Однако всякий раз, когда я включаю бота и снова устанавливаю URL-адрес веб-перехватчика, Telegram начинает заполнять сервер веб-перехватчика старыми обновлениями.
Есть ли способ предотвратить это, не запрашивая повторно /getUpdates , пока не дойду до последнего обновления?
Вот сильно упрощенная версия того, как выглядит мой код:
var http = require(‘http’), unirest = require(‘unirest’), token = ‘***’; // Attach the webhook unirest.post(‘https://api.telegram.org/bot’ + token + ‘/setWebhook’) .field(‘url’, ‘https://example.com/api/update’) .end(); process.on(‘exit’, function() < // Detach the webhook unirest.post(‘https://api.telegram.org/bot’ + token + ‘/setWebhook’) .field(‘url’, ») .end(); >); // Handle requests var server = http.createServer(function(req, res) < res.writeHead(200, < ‘Content-Type’: ‘text/plain’ >) res.end(‘Thanks!’); >); server.listen(80);
user2541873 29 Июл 2015 в 20:28
4 ответа
Лучший ответ
При запуске сервера вы можете записать метку времени, а затем использовать ее для сравнения со значениями date входящего сообщения. Если дата> = отметка времени при запуске . сообщение можно обработать.
Updater и базовый python telegram bot
Я не уверен, есть ли способ сообщить Telegram, что вас интересуют только новые обновления, их механизм повтора — это функция, позволяющая не пропустить сообщения . даже если ваш бот отключен.
Chris Brand 29 Июл 2015 в 19:56
У меня такая же проблема, затем я попытался сбросить веб-перехватчик по умолчанию с помощью
После этого я подтвердил, что текущий запрос getUpdates был теми же старыми обновлениями, но я отправил новые запросы через чат бот телеграммы
Когда я снова настраивал веб-перехватчик, он считывал те же самые старые обновления. Возможно, метод getUpdates не обновляет содержимое JSON.
ПРИМЕЧАНИЕ: в моем случае он работал нормально, пока я не решил изменить / установить настройки бота конфиденциальности от botfather
Mike 8 Мар 2017 в 16:48
В режиме веб-перехватчика серверы Telegram отправляют обновления каждую минуту, пока не получит ответ «ОК» от программы веб-перехватчика. поэтому я рекомендую следующие шаги:
- Убедитесь, что в вашей программе веб-перехватчика вы указали ее адрес в качестве параметра url метода setWebhook . Назовите его адрес в браузере. Он не производит вывод для просмотра, но убирает, что, вероятно, в вашей программе нет ошибки.
- Включите команду, которая создает вывод заголовка «200 OK Status» в вашу программу, чтобы гарантировать, что программа отправит этот заголовок на сервер Telegram.
Alireza Zojaji 31 Июл 2020 в 13:24
Лучше всего использовать update_id , которое представляет собой конкретное число, которое увеличивается при каждом новом запросе (т. Е. Обновлении). Как это реализовать?
Telegram bot: что такое и как пользоваться
Для начала давайте начнем со следующего анонимного класса (используя PHP7):
$lastUpdateId = new class() < const FILE_PATH = «last-update-id.txt»; private $value = 1; public function __construct() < $this->ensureFileExists(); $this->value = filesize(self::FILE_PATH) == 0 ? 0 : (int)(file_get_contents(self::FILE_PATH)); > public function set(int $lastUpdateId) < $this->ensureFileExists(); file_put_contents(self::FILE_PATH, $lastUpdateId); $this->value = $lastUpdateId; > public function get(): int < return $this->value; > public function isNewRequest(int $updateId): bool < return $updateId >$this->value; > private function ensureFileExists() < if (!file_exists(self::FILE_PATH)) < touch(self::FILE_PATH); >> >;
Что делает класс, ясно: обработка последнего update_id через простой файл.
Примечание . Занятия должны быть как можно короче. Он не обеспечивает проверку ошибок. Используйте свою собственную реализацию (например, используйте SplFileObject вместо функций file__contents() ).
Теперь есть два метода получения обновлений: длинный опрос x или веб-перехватчики (проверьте Telegram bot API для подробнее о каждом методе и всех свойствах JSON). Приведенный выше код (или аналогичный) следует использовать в обоих случаях.
Примечание . В настоящее время невозможно использовать оба метода одновременно.
Метод длительного опроса (по умолчанию)
Таким образом, вы отправляете запросы HTTPS в API ботов Telegram и получаете обновления в качестве ответа в объекте в формате JSON. Итак, для получения новых обновлений можно выполнить следующую работу (API, зачем использовать смещение ):
$botToken = «»; $updates = json_decode(file_get_contents(«https://api.telegram.org/bot/getUpdates?offset=get()>»), true); // Split updates from each other in $updates // It is considered that one sample update is stored in $update // See the section below parseUpdate($update);
Метод WebHook (предпочтительно)
Требование поддержки метода HTTPS POST с вашего сервера, лучший способ получать обновления на данный момент.
Изначально вы должны включить WebHooks для своего бота, используя следующий запрос (подробнее) :
https://api.telegram.org/bot/setWebhook?url=
Замените токеном своего бота, а адресом вашего файла, который будет принимать новые запросы. Опять же, это должен быть HTTPS.
ОК, последний шаг — создание файла по указанному URL:
// The update is sent $update = $_POST; // See the section below parseUpdate($update);
Отныне все запросы и обновления вашего бота будут напрямую отправляться в файл.
Реализация parseUpdate()
Его реализация полностью зависит от вас. Однако, чтобы показать, как использовать приведенный выше класс в реализации, это его образец и краткая реализация:
function parseUpdate($update) < // Validate $update, first // Actually, you should have a validation class for it // Here, we suppose that: $update[«update_id»] !== null if ($lastUpdateId->isNewRequest($update[«update_id»])) < $lastUpdateId->set($update[«update_id»]); // New request, go on > else < // Old request (or possible file error) // You may throw exceptions here >>
Источник: question-it.com
Почему обновление ботов Telegram — это настоящий прорыв
Внимательные пользователи Telegram знают, что последнее обновление совершило тихую революцию, причем не только внутри мессенджера, но и в Сети в целом. Правда, пока это никто толком не заметил. Но это пока.
Я, естественно, говорю про новые возможности для создания ботов. Вы скажите: «Ну и что? Боты в Telegram были всегда». Но вот в чём дело: с 2015 по апрель 2022 боты хоть и решали множество задач, но интерфейсом напоминали в лучшем случае текстовый квест из 80-ых. Теперь же это полноценный «стор» приложений или, если хотите, метавселенная.
Нововведение даёт возможность создавать интерфейсы на JavaScript. А это значит, что внутри мессенджера можно делать целые мобильные приложения, сайты, игры — вы ограничены только своей фантазией (и своими кодерами). Это, простите за англицизм, game changer.
Я связался с Александром Корсом, создателем конструктора ботов Botmaker, у которого в конце прошлого года брал интервью для своего канала. И на примере своего конструктора он вживую показал, как может выглядеть реализация подобных ботов.
За всю нашу деятельность мы работали исключительно на базе Telegram, и эта стратегия была и остаётся верной.
Задолго до реализации web-интерфейса мы начали создавать чат-боты для разного бизнеса, которые привлекали, возвращали и повышали качество обслуживания их клиентов. Теперь в наши наработки мы будем внедрять web-интерфейс. Кстати, наш сервис уже готов дать коробочные решения для разных ниш, тем самым мы обеспечим бизнес эффективным инструментом.
С приходом web-интерфейса чат-боты станут полноценной заменой приложениям и станут скорее всего основным инструментом для коммуникации с пользователями.
Павел Дуров никогда ещё не был так близок к тому, чтобы стать, по сути, третьей, альтернативной экосистемой, основанной на принципах Telegram — свободе, открытости, удобстве и простоте. В основе этой экосистемы, как и сейчас, будет месседжинг, но вокруг него тут и там будут возникать различные сервисы и возможности на основе новых ботов. Причём с бесшовным переходом от смартфона к десктопу и от приложения к вебу.
А это уже совершенно новый сценарий пользования смартфоном и ПК. Не говорите потом, что я вас не предупреждал.
Источник: kod.ru
Вышло крупное обновление API для ботов Telegram
Платформа ботов является одной из ключевых функций мессенджера, но в последнее время она не слишком активно развивалась. Появились ошибки и сбои, при этом количество функций не увеличивалось. Но многие программисты все еще полагались на ботов. Компании часто используют их для взаимодействия с клиентами. Причем как для донесения информации, так и для оформления заказов.
В новой версии Bot API появилась возможность разворачивать ботов на собственных серверах, минуя api.telegram.org. Соответственно, все запросы будут попадать напрямую к владельцам ботов.
По данным Telegram.org, ботов научили загружать файлы размером до 2 Гбайт по прямой ссылке. А еще появилась возможность использовать для Webhooks локальный IP-адрес или любой другой HTTP URL-адрес.
В новые API включена поддержка всех новых функций Telegram, включая Live Locations, закрепленные сообщения и прочие возможности, появившиеся с последним обновлением мессенджера.
Источник: timeweb.com