Настройка telegram webhook ошибка
Последовательность действий для создания любого бота одинаковая:
Если все прошло без замечаний со стороны @BotFather, то по итогу вам выведется на экран Token API, если вы его сразу использовать не будете, то можно его куда-нибудь записать. Также его можно запросить снова если вы его забыли или потеряли. Редактировать бота можно у @BotFather, для этого запросите список ваших ботов /mybots , выберите из списка нужного бота и далее при необходимости вы можете отредактировать его информацию, для этого в меню бота выберите Edit Bot :
- Name - Название бота
- About - Что умеет этот бот? (выводится при открытии бота по середине экрана)
- Description - Описание (доступно при просмотре профиля бота)
- Botpic - Картинка - логотип бота
- Commands - набор команд (доступно при вызове в диалоге с ботом командой / )
Обратите внимание, что поменять имя бота (@) в настройках возможности нет.
Методы взаимодействия с Bot API
Независимо от того, какой вариант вы выбрали, вы получите в результате JSON-сериализованные объекты (WIKI).
В случае с webHook обновления вам будут доставляться Bot API по указанному адресу сразу же как только они появятся. Если в ответ API получит статус обработки его запроса не 200 OK, а другой, например, 500 (ошибка сервера) то обновления подвиснут и будут периодически к вам стучатся, и успокоятся только в случае получения в ответ статуса 200 ОК.
Устанавливаем WebHook
Для установки WebHook есть специальный метод setWebHook . Нам просто необходимо в параметре url передать web-адрес где будут обрабатываться данные отправленные Telegram Bot API. Допустим, что у вас такой же хостинг как у меня, и за работу бота будет отвечать файл index.php , который лежит в директории bots в корне сайта.
Если структура файлов у вас совпадает, и у вас есть доменное имя, а также установленный SSL сертификат, тогда назначаем webHook используя вот этот URL:
Вставляем его в адресную строку браузера и переходим, в случае если все прошло без ошибок, на экране у вас выведется вот такая информация:
Это означает, что все прошло хорошо и WebHook установлен. Теперь можно спокойно начать работать над реализацией бота.
Дополнительные настройки WebHook
Также вместе с параметром url в методе setWebHook можно передать:
В случае если будет необходимо переназначить webHook, то нужно вызвать метод setWebHook еще раз и указать в качестве значения параметра url новый адрес обработчика данных от Bot API.
Для удаления webHook и перехода к getUpdates используйте метод deleteWebhook , параметры передавать не требуется.
Для получения, текущего состояние webHook используйте метод getWebhookInfo , параметры передавать не требуется.
Методы вызываются при помощи
Комментарии
Внимание!
Убедитесь, что эта страница открыта в браузере, а не в приложении Telegram. В противном случае авторизация пройдет только в приложении Telegram.
Я тогда давно написал статью про создание Telegram бота, и обещал дополнить её описанием настройки работы через webhook, но так и не дополнил. Вот только сейчас дошли руки.
Как пишут в документации, общаться с серверами Telegram бот может двумя способами:
Разницу можно изобразить следующим образом:
Что нужно сделать:
Сертификат
С доменом и сертификатом просто. Домен у меня уже был, а сертификат я получил по этой инструкции.
Вариант с самоподписанным сертификатом на прямой IP адрес я оставляю вам на самостоятельное изучение.
Серверная часть
Ставим необходимые пакеты:
И сокращённо код бота теперь такой:
Обратите также внимание на отличия от стандартного примера из репозитория:
- в качестве файла сертификата указан fullchain.pem , а не cert.pem ;
- удалён код снятия и установки webhook’а.
Так как бота я запускаю не из-под root’а, сервис начал валиться с такой ошибкой:
То есть, у пользователя, из-под которого выполняется скрипт, нет доступа к /etc/letsencrypt/ , чтобы открыть файл сертификата. Я попытался дать доступ к каталогу для новой группы, включив в неё этого пользователя:
Но он один фиг не мог открыть файлы оттуда, даже простой ls выдавал ошибку доступа. В общем, или мои познания Linux полный отстой, или одно из двух. Пришлось тупо назначить его владельцем:
Тогда сервис запустился нормально.
Теперь осталось самое, как оказалось, сложное - зарегистрировать endpoint бота в Telegram. Сложности возникли потому, что я сначала неправильно понял принцип составления endpoint’а, а также из-за проблем с проверкой сертификата.
Пока я экспериментировал и разбирался с форматом endpoint’а, Telegram возвращал мне нормальный результат:
Но потом я его видимо задолбал, и он стал возвращать мне следующее:
Но оказалось, что это ни на что не влияет, и webhook нормально устанавливается, так что можно даже не дожидаться таймаута, а просто отменять запрос через пару секунд.
Проверить статус webhook’а можно таким запросом:
Если всё нормально, должно вернуть такое:
Как видим, в поле url стоит наш endpoint.
Однако, мне оно сейчас возвращает такое:
Что указывает на некие проблемы с сертификатом. При этом бот работает нормально, то есть эта ошибка ни на что не влияет. Однако, если вместо fullchain.pem оставить cert.pem (как было указано в примере), то бот работать перестанет.
Ну и всё, не так уж и сложно. Если бы в документации (и сторонних манулах из интернетов) была указана такая простая вещь, что для webhook’а всего-то нужен лишь веб-сервер на стороне бота, я бы это сделал уже сто лет назад. Конечно, продвинутым чувакам это скорее всего было очевидно сразу, но мнe - нет.
Ну вот, когда где-нибудь едешь, то в голове столько мыслей, что написать, а когда садишься писать, где вы, все мысли?!
Давно хотел написать что нибудь интересно, но все интересно, что мне поддавалось, было уже давно написано. Про связку телеграм + 1с тоже уже все давно написано, причем раз в несколько недель выходит новая публикация, но мне эта разработка так понравилась, что, пожалуй, напишу еще одну. Но хватит лирики.
P.S. Поскольку вышел там какой то закон, все картинки рисовал сам.
Сказ о том, как телеграм путь к 1С искал.
Однажды я подумал. и понеслось.
А потом думаю - "оповещать покупателей в телеграме, из 1с, о статусах заказов было бы прикольно". Но на деле оказалось все куда интересней. Получение данных из 1с для сотрудников! Эта идея показалась мне очень интересной. Есть один маааааленький минус. телеграм запрещен в РФ. Вайбер? Да, как вариант. Может быть когда нибудь)
"Я смутно помню тот момент, это был не легкий выбор. Все как в туманном сне, я плохо контролирую свое тело, вокруг паника, нужно встать и идти. В голове была одна мысль - нельзя останавливаться. Нужно было выбрать направление. Передо мной появился он. протянув руку и раскрыв кулак, он сказала:
- Выберешь голубую, и история закончится прямо здесь.
На ладони лежали две таблетки - голубая и красная. Это была точка не возврата " (с) bot_telegram
Конечно, для себя я сразу определил, что буду пользоваться вебхуком, когда узнал, что такое возможно) Итак, что нам понадобится для вебхука:
5. Чашечка чая.
6. Две чашечки кофе.
Теперь подробней. По факту я конечно начал с шестого пункта, но здесь пойдем по порядку.
Качаем apach 2.4 и vc_redist (версия apach на момент написания статьи) .
- Разархивируем папку apach24 в корень системного диска. По умолчанию конфигурационный файл настроен на диск C:\, так что если у вас нет такого диска, или у системного диска другая буква, необходимо будет заменить это в файле.
- Установим vc_redist
- Для установки службы, откроем командную строку от имени администратора. Перейдем в каталог bin командой:
и следующей командой установим службу:
Кажись служба установлена, ну зайдем в список служб проверим на всякий случай) Если не получилось, то выполним пункт назначения 5 или 6, на ваше усмотрение, и попробуем еще раз.
Если он уже есть - хорошо, если нет - нужно как то чтобы был. Далее пробрасываем порт на наш сервер apach на порт 8018, чтобы открыв наш адрес через белый ip, мы увидели что It works!
PS Если не получиться, но вы уверены, что все сделали правильно, то проверьте не блокирует ли ваш запрос антивирус или брандмауэр.
IP_VPS - ip ващего виртуального сервера.
Port - порт, который установили в конфигурационном файле telegram.conf.
nginx-selfsigned.crt - сгенерированный сертификат.
Не забудьте указать порт, при установки вебхука, а то я порядком так тупил в этот момент)))
Если кому то интересно, могу продлить аренду еще на пару месяцев, и попробовать пробросить порт на ваш ip, исключительно для тестов. Но не уверен, что у меня это получится) Если что, пишите в лс, можем попробовать))
Ну да ладно, будем откровенны - прямые руки нужны на каждом пункте этой эпопеи. И даже щелчок Таноса здесь не поможет.
Предположим что бота вы уже создали. Это делается довольно просто и есть куча мануалов, а еще есть хорошая статья.
Теперь, в 1с. Запускаем конфигуратор от имени администратора.
В обработчике GET напишем следующий код:
Обновим конфигурацию базы данных. Теперь необходимо опубликовать наш сервис. Переходим на закладку Администрирование - Публикация на веб сервере. Заполняем необходимые данные
Сразу же включим отладку веб сервера. Перейдем на закладку Прочее
Совсем забыл упомянуть, для стран где телеграм заблокирован, нужно использовать прокси. Я нашел один, который стабильно работал на момент написания статьи, и прямо в коде его прописал. Вот очень хорошая статья по этому поводу.
Обновляем конфигурацию, перезапускаем службу apach.
Так же при отправке ответа, формируется статическая клавиатура с командами, ну чтобы не писать их каждый раз. В результате должны получить что то типа такого:
Бот у нас будет не особо доброжелательным. Ну еще бы.
Сформируется три кнопки:
Ну и раз уж на то пошло, тогда давайте напишем обработчик этих команд. Будем указывать путь в файлу, в зависимости от того, что выбрал пользователь.
И процедура отправки файла, которую я честно стырил отсюда и немного переделал (надеюсь не будут судебные иски и вот это вот все)
И получаем то, что выбрали
Получился какой то набор ссылок) Nо возможно этого я и хотел, так как уже при повторном поднятии вебхука, у меня не все получалось)
Мне понравилась это направление, в дальнейшем хочу реализовать отправку отчетов и получение данных из базы 1с. Единственное - не знаю в каком направлении двигаться дальше - какие отчеты отправлять, какие данные получать, для каких конфигураций. На моем предприятии данный функционал не актуален, поэтому если кому то понадобится, или у кого то есть идеи, пишите в лс или в комментарии, буду благодарен.
Конфигурацию прикреплю во вложение.
Разрабатывалось на платформе 8.3.15.1656, но на более низких версиях 8.3 должно работать без проблем.
Поэтому сегодня мы поговорим о том, что такое Telegram Webhook. Также в процессе повествования рассмотрим особенности функционала, а также область применения, методы настройки.
Что такое Telegram Webhook
Webhook – это технология, позволяющая отслеживать протекающие в мессенджере события в режиме реального времени. Главное преимущество такого подхода – доставка данных на указанный адрес через систему eSputnik.
Это позволяет собирать и доставлять информацию без непосредственного реагирования оператора.
Эта технология лучше всего реализуется в работе ботов. Они бывают несколько нескольких типов: игровые, ассистенты, чат-боты и информаторы.
Само взаимодействие организуется следующим образом:
- Пользователь пишет команду в чат с программным кодом.
- Встроенные алгоритмы принимают заявку и отправляют ее на сервера проекта.
- Команда обрабатывается, и передается обратно в понятной для пользователя форме.
- Алгоритм выводит информацию на дисплей.
Такая последовательность действий одинаково работает практически при любом взаимодействии с ботами. А технология Webhook упрощает этот процесс и обеспечивает стабильность протекающих процессов.
Если с этим все понятно, тогда давайте поговорим о том, как прописать бота с подобной технологией.
Как прописать бот на Вебхук
Процедура подключения бота на Вебхук несколько отличается от создания простого автоматизированного алгоритма – она основана на использовании самоподписного сертификата.
Для претворения задуманного в жизнь:
- Устанавливаем пакет openSSI.
- Создаем правильный ключ доступа и самоподписный сертификат.
Как только вы увидите значение этого кода статуса, можно считать процедуру успешно завершенной.
Если с этим пока все понятно, давайте поговорим о возможных проблемах при запуске бота на Вебхук.
Проблемы запуска
- Пропишите команду @Botfather. Она поможет коду избавиться от проблем и ошибок в коде. Если все совсем плохо, будет автоматически создана исправленная копия бота.
- Активируем чат командой /setprivacy. После указания адреса ваших алгоритмов, программа опубликует список ошибок и даст рекомендации по их исправлению.
- Если чат не работает, а bot работает в штатном режиме, обратитесь за разъяснениями в службу технической поддержки.
- Если помощник полностью вышел из строя и не работает, откройте исходный код и проверьте его на предмет ошибок.
Итоги
Взаимодействие с системой представлено связкой: телеграмм-бот-сервер-обработка-бот-чат в Телеграмме. Таким образом можно организовать общение полностью автоматизированным, и отвлекать только изредка.
Сама процедура прикручивания бота к Телеграмму имеет несколько особенный в виде создания дополнительного сертификата, который используется для связи сервера с ботом.
Если у вас возникли проблемы с ботом, проверьте исходный код на предмет ошибок или обратитесь за помощью в службу технической поддержки.
В статье представлена исчерпывающая информация по теме, так что вам, дорогие друзья, остается использовать полученные знания на практике. Пробуйте, и у вас все получится!
Отправка уведомлений из Zabbix в Telegram через Webhook
Исходные данные: Zabbix 4.4
Задача: Сделать отправку уведомлений из Zabbix в Telegram через Webhook
1. Создаем бота у тут
2. Теперь нам нужно узнать собственный идентификатор, чтобы указать его в настройках профиля пользователя в Zabbix
Настройки метода оповещения
Zabbix telegram via webhook test
4. Настройка способа оповещения у пользователя
Теперь перейдите в настройки пользователя который должен получать оповещения, добавьте новое оповещение.
zabbix telegram via webhook user profile
5. Настройка действий
6. Отладка скрипта отправки и логгирование.
Скрипт отправки написан на JavaScript и ведет полное логгирование действий по отправке на уровне 3 (warning), если Вы откроете стандартный лог-файл Zabbix-server по пути /var/log/zabbix/zabbix_server.log, то увидите примерно такое:
Код ответа 200 означает успешную отправку.
Могут быть и ошибки отправки, пример (указан неправильный ID чата):
или указан неправильный токен:
На этом все, до скорых встреч.
Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Читайте также: