Ошибка bad request chat not found

I have the following code in Python to send a message to myself from a bot.

import requests

token = '123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHI'
method = 'sendMessage'
myuserid = 1949275XX
response = requests.post(
    url='https://api.telegram.org/bot{0}/{1}'.format(token, method),
    data={'chat_id': myuserid, 'text': 'hello friend'}
).json()
print(response)

but this returns {'description': 'Bad Request: chat not found', 'error_code': 400, 'ok': False}

What am I doing wrong? I got myuserid by sending /getid to @myidbot and I got my token from @BotFather

PythoNic's user avatar

PythoNic

3035 silver badges13 bronze badges

asked Dec 15, 2016 at 23:10

Bijan's user avatar

6

As @maak pointed out, you need to first send a message to the bot before the bot can send messages to you.

Muhammed Rahif's user avatar

answered Dec 22, 2016 at 21:07

Bijan's user avatar

BijanBijan

7,46918 gold badges86 silver badges147 bronze badges

2

I was using prefix @ before the value of chat_id as suggested everywhere. I removed it and it started working.
Note: if your chat id is 12345678 then you need to prefix it with -100 such that it is -10012345678.
Example Postman call:

/sendMessage?chat_id=-10012345678&text=Let's get together

answered Jan 30, 2021 at 6:51

NKM's user avatar

NKMNKM

5921 gold badge5 silver badges18 bronze badges

3

If your trying to send messages to a group, you must add a ‘-‘ in front of your chat ID.
For example:

TELEGRAM_REG_CHAT_ID="1949275XX"

should be

TELEGRAM_REG_CHAT_ID="-1949275XX"

answered Jul 10, 2020 at 13:12

Dan Walters's user avatar

Dan WaltersDan Walters

1,1781 gold badge16 silver badges28 bronze badges

3

There is a way to send notifications messages to telegram. It’s a bit tricky but the tutorial is great!

http://bernaerts.dyndns.org/linux/75-debian/351-debian-send-telegram-notification

I just sended a message of my apache state to a privat channel.
Works also on public channel but it’s not what i wantet. As you call a script (bash) you can prepare the parameters in any script language.

Hope that helps.

answered Mar 28, 2018 at 8:44

Martin S.'s user avatar

Martin S.Martin S.

2561 silver badge10 bronze badges

1

For me it worked only with @ prefix before channel id

answered May 14, 2021 at 19:47

kashlo's user avatar

kashlokashlo

2,2451 gold badge28 silver badges39 bronze badges

If you want to use a bot message to the channel, you can refer step here

Steps:

  1. Create a Telegram public channel
  2. Create a Telegram BOT (for example x_bot) via BotFather
  3. Set the x_bot as an administrator in your channel

the chat_id is @x_bot, it’s a part of https://t.me/x_bot that does not add your channel name.

answered Nov 25, 2021 at 7:32

Tan Nguyen's user avatar

Tan NguyenTan Nguyen

8677 silver badges8 bronze badges

I had some trouble with this after upgrading to a supergroup. The chat_id was updated and it was a bit harder to find this new id.

In the end I solved this with this by following this comment: https://stackoverflow.com/a/56078309/14213187

answered Dec 7, 2022 at 9:36

StevenMalai's user avatar

1

Telegram bots can’t send messages to user, if that user hasn’t started conversation with bot yet, or bot is not present in chat (if it’s a group chat). This issue is not related to the library, this is simply Telegram restriction, so that bots can’t spam users without their permission.

you need to first send a message to the bot before the bot can send messages to you.

answered Jan 18 at 9:02

Subhash Sukumaran Nair's user avatar

If you use a username, it does not require any prefix. That means the following are incorrect:

https://t.me/vahid_esmaily_ie
t.me/vahid_esmaily_ie

And this is the correct case:

vahid_esmaily_ie

joanis's user avatar

joanis

10.4k13 gold badges30 silver badges40 bronze badges

answered Jul 5, 2021 at 12:12

vahid esmaily's user avatar

@mdtanjilhasan

@irazasyed

Please check the bot token is correct and that you’ve messaged & obtained the chat id from the same bot which is configured.

Chat IDs are unique to each bot for every user and cannot be shared/reused.

@mdtanjilhasan

I have tried with another bot chat id, i have got same error. The token is
correct cause, i can send text via bot api.

@irazasyed

You can’t use «another bot» chat id. I just tested this on a fresh project and I can send the notification without issues.

Here’s how it should be:

  • Bot A Token is configured.
  • You message Bot A.
  • You save the chat ID of the user gotten to your Bot A.
  • You use that chat ID to send notifications from your Bot A.

Do not mix with different bots.

Also, what version of Laravel and this channel lib you’re using?

@mdtanjilhasan

I have done the steps appropriately. Laravel 7 and latest version on the
package

On Thu, Sep 24, 2020, 6:59 PM Irfaq Syed ***@***.***> wrote:
You can’t use «another bot» chat id. I just tested this on a fresh project
and I can send the notification without issues.

Here’s how it should be:

— Bot A Token is configured.
— You message Bot A.
— You save the chat ID of the user gotten to your Bot A.
— You use that chat ID to send notifications from your Bot A.

Do not mix with different bots.

Also, what version of Laravel and this channel lib you’re using?


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<#92 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AKGKSF3QH7EDPXB3NGN5Q3LSHM7DXANCNFSM4RX526UQ>
.

@winter-ice

@punyflash

Telegram bots can’t send messages to user, if that user hasn’t started conversation with bot yet, or bot is not present in chat (if it’s a group chat). This issue is not related to the library, this is simply Telegram restriction, so that bots can’t spam users without their permission.

@winter-ice

Telegram bots can’t send messages to user, if that user hasn’t started conversation with bot yet, or bot is not present in chat (if it’s a group chat). This issue is not related to the library, this is simply Telegram restriction, so that bots can’t spam users without their permission.

Just use Http request can send messages,but use this package not work

@gorkau

You can use a Telegram bot named @userinfobot to get the ID of a user. Beware, there are many accounts named @userinfobot, use them only if they are a bot.

@Ryllaz

Telegram bots can’t send messages to user, if that user hasn’t started conversation with bot yet, or bot is not present in chat (if it’s a group chat). This issue is not related to the library, this is simply Telegram restriction, so that bots can’t spam users without their permission.

Just use Http request can send messages,but use this package not work

Same issue.

@gorkau your advice working, sending to user_id works fine.

But I think that package should send messages by user’s login as well

@nguyentranchung

ошибка при запуске кода через консоль.
вот ошибка
2022-08-18 19:02:59,880 (__init__.py:660 MainThread) ERROR — TeleBot: «Threaded
polling exception: A request to the Telegram API was unsuccessful. Error code: 4
00. Description: Bad Request: chat not found»
2022-08-18 19:02:59,881 (__init__.py:662 MainThread) ERROR — TeleBot: «Exception
traceback:
Traceback (most recent call last):
File «D:UsersUserAppDataLocalProgramsPythonPython37-32libsite-package
stelebot__init__.py», line 651, in __threaded_polling
self.worker_pool.raise_exceptions()
File «D:UsersUserAppDataLocalProgramsPythonPython37-32libsite-package
stelebotutil.py», line 147, in raise_exceptions
raise self.exception_info
File «D:UsersUserAppDataLocalProgramsPythonPython37-32libsite-package
stelebotutil.py», line 93, in run
task(*args, **kwargs)
File «D:botsbdo.py», line 8, in start_message
bot.send_message(msg.id, «Напиши мне Привет)»)
File «D:UsersUserAppDataLocalProgramsPythonPython37-32libsite-package
stelebot__init__.py», line 1009, in send_message
entities, allow_sending_without_reply, protect_content=protect_content))
File «D:UsersUserAppDataLocalProgramsPythonPython37-32libsite-package
stelebotapihelper.py», line 267, in send_message
return _make_request(token, method_url, params=payload, method=’post’)
File «D:UsersUserAppDataLocalProgramsPythonPython37-32libsite-package
stelebotapihelper.py», line 152, in _make_request
json_result = _check_result(method_name, result)
File «D:UsersUserAppDataLocalProgramsPythonPython37-32libsite-package
stelebotapihelper.py», line 179, in _check_result
raise ApiTelegramException(method_name, result, result_json)
telebot.apihelper.ApiTelegramException: A request to the Telegram API was unsucc
essful. Error code: 400. Description: Bad Request: chat not found
«
вот сам код
import anime_images_api
import telebot

token = ‘5543568252:AAHhk8Tol3AStv3jB0EFfxlt39k1pA14Jy4’
bot = telebot.TeleBot(token)

am = anime_images_api.Anime_Images()

@bot.message_handler(commands=[«start»])
def start_message(message):
bot.send_message(message.id, am)
if message.text == «привет»:
bot.send_message(message.id, «я запущен»)
else:
bot.send_message(message.id, «я тебя не понимаю»)

bot.polling(none_stop=True, interval=0)

/public/img/default_profile_50.png

Статья была полезной?

Если при отправке сообщения через Telegram оно не было доставлено пользователю, то такое сообщение получает статус «Ошибка».

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

Сообщения со статусом «Ошибка» можно просмотреть из статистики каждой отправленной рассылки.

Детали ошибки (её описание) можно увидеть в колонке «Статус»:

Также информацию по полученной ошибке можно будет увидеть при переходе в конкретное письмо:

Открытое таким образом сообщение содержит в себе текст в том виде, в котором оно было отправлено пользователю.

Наиболее распространённые ошибки и их значения:

  • user is deactivated — пользователь удалил свой номер телефона на стороне телеграм или его номер телефона находится в процессе деактивации.
  • phone number invalid — пользователь неверно указал свой номер телефона на стороне телеграм.
  • bad request chat not found — пользователь не написал ничего в ваш телеграм бот. Пользователю нужно написать сообщение в бот, прежде чем бот сможет написать сообщение пользователю.
  • [400]Bad Request: wrong HTTP URL — возникает при неверном указании ссылки в рассылке telegram. Чаще всего это связано с опечаткой в ссылке.
  • [400]Bad Request: can’t parse entities: Unexpected end tag at byte offset — может возникать в случае, если в теле письма были не закрыты какие-либо HTML-теги.
  • [400]Bad Request: MEDIA_CAPTION_TOO_LONG — Эта ошибка связана с ограничением в количестве символов в подписи к медиафайлам (1024 символа, включая пробелы).
  • [400]Bad Request: message is too long — говорит о том, что количество используемых символов в тексте письма превысило 4096 символов. Данное значение установлено самим Телеграмом.
  • [400]Bad Request: wrong file identifier/HTTP URL specified — ссылается на неверный идентификатор файла. Обратите внимание, что при использовании «image url» изображение должно быть в формате «.jpeg».
  • [400]Bad Request: failed to get HTTP URL content или Bad Request: wrong file identifier/HTTP URL specified — могут возникать в случае, если превышен максимальный размер вложения (5 мб для картинок и 20 мб для других типов файлов).
  • [400]Bad Request: unsupported URL protocol — возникает из-за неправильного указания ссылки в синтаксисе кнопки. Например, при наличии лишнего пробела.
  • bot was blocked by the user — пользователь удалил чат с ботом на стороне телеграм, таким образом отписавшись от получения сообщений.
  • bad request chat not found — пользователь не написал ничего в ваш телеграм бот. Пользователю нужно написать сообщение в бот, прежде чем бот сможет написать сообщение пользователю.

После получения указанных выше ошибок происходит автоматическая отписка пользователя от вашего телеграм-бота. Статус его подписки изменяется с «Подключен» на «Отключен».

Содержание

  1. Отправка уведомлений из Zabbix в Telegram через Webhook
  2. Zabbix 5 — настраиваем уведомления в Telegram
  3. Создание бота в Telegram
  4. Отправка уведомления в Telegram пользователю
  5. Отправка уведомления в Telegram группе
  6. Отправка уведомлений и графиков из zabbix в telegram
  7. Введение
  8. Создание бота в telegram
  9. Отправка уведомлений в telegram через webhook
  10. Настройка zabbix на отправку графиков в telegram
  11. Разные оповещения о разных событиях
  12. Оповещения в telegram со ссылками на график и триггер
  13. Заключение

Отправка уведомлений из Zabbix в Telegram через Webhook

Не так давно вышел Zabbix 4.4 в котором появилось много всего интересного. Например, добавлена возможность использования web-хуков и собственных обработчиков действий и уведомлений при выявлении сбоев проверяемых сервисов. Обработчики можно создавать на JavaScript и применять для обращения к внешним службам доставки уведомлений или системами отслеживания ошибок. Например, можно написать обработчик для отправки сообщений о проблемах в корпоративный чат.

В данной статье я расскажу как можно из Zabbix 4.4 (а так же из 5.0) отправлять сообщения в Телеграм без использования дополнительных скриптов.

Исходные данные: Zabbix 4.4
Задача: Сделать отправку уведомлений из Zabbix в Telegram через Webhook

Для того чтобы отправлять сообщения в Телеграм необходим доступ до api.telegram.org на порт 443 с Вашего Zabbix-сервера.

1. Создаем бота у @botfather, официальная инструкция тут

Команда для создания бота /newbot
Далее вводим имя желаемого бота обязательно маленькими буквами и в конце префикс _bot, например: myxxxxxxx_bot
Если имя не занято, то botfather скажет «Done! Congratulations on your new bot» и далее выдаст ссылку на бота, вида: t.me/myxxxxxxx_bot
А так же кроме всего прочего после слов «Use this token to access the HTTP API:» выдаст API-ключ нашего бота, он нам пригодиться дальше.

Нам нужно перейти по ссылке на нашего бота и нажать ЗАПУСТИТЬ или ввести /start, если этого не сделать, то сообщения Вам приходить не будут. Данную ссылку Вы можете давать всем кто будет получать оповещения.

2. Теперь нам нужно узнать собственный идентификатор, чтобы указать его в настройках профиля пользователя в Zabbix

Самый простой способ узнать свой ID — это подключиться к боту @get_id_bot, нажать ЗАПУСТИТЬ и он выдаст вам Ваш ID. Дополнительную информацию о боте можно узнать здесь.

3. Импорт нового способа оповещения:

Открываем Zabbix, переходим в «Администрирование» -> «Способы оповещений», наживаем «Импорт» и выбираем файл zbx_export_mediatypes.xml

У нас появляется новый способ оповещения «Telegram via Webhook», редактируем его и в строку с именем token вводим Ваш API-ключ бота из п.1

Далее Вы можете изменить 3 дополнительных параметра отправки сообщений, это parse_mode, disable_web_page_preview и disable_notification

Параметр parse_mode задает режим разметки сообщений, может иметь значения HTML, Markdown или MarkdownV2, более детально о разметке сообщений можно почитать в официальной документации.

Параметр disable_web_page_preview дает возможность отключить предпросмотр ссылок в сообщениях, может иметь значения true или false. Иногда имеет смысл ставить его в false, выбирать Вам.

Параметр disable_notification дает возможность отключить уведомления о приходе сообщения, может иметь значения true или false.

Параметр HTTPProxy используется только в пропатченой версии zabbix-server v4.4, которая позволяет отправлять сообщения в Телеграм через HTTP-прокси. Не заполняйте это поле в стандартной версии zabbix v4.4! О том как пересобрать zabbix-server с поддержкой HTTPProxy для Web-хуков я описал тут
В Zabbix v5.0 реализована работа вебхуков через прокси и патч не требуется, поэтому Вы можете использовать параметр HTTPProxy и указать в нем адрес прокси-сервера.
Формат параметра HTTPProxy: schema://user:[email protected]:port
где
schema — это протокол, может быть http, https или socks5h
user и password — это логин и пароль пользователя если на прокси используется авторизация (не обязательные поля)
ip — это IP адрес или доменное имя
port — это порт прокси
Пример:
http://123.45.67.89:3128
или
socks5h://vasua:[email protected]:1080

Установленная галочка «Включить запись меню события» (Include event menu entry) позволяет добавлять в алармы на странице «Проблемы» ссылку с именем указанном в поле «Имя записи меню» (Menu entry name) при выборе которой будет открываться страница указанная в «URL записи меню» (Menu entry URL). Поле «URL записи меню» установлено в специально, это позволяет вместе с включенной опцией «Обработка тегов» формировать правильные ссылки на сообщения в чате.

Пример настройки, маркировки тегом и вид меню перехода к сообщению:

Настройки метода оповещения

Пример маркировки тегами и меню перехода к сообщению в Телеграм

Zabbix telegram via webhook test

4. Настройка способа оповещения у пользователя

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

Тип выберите «Telegram via Webhook», в поле «Отправлять на» введите ID пользователя из п.2, пример на картинке ниже:

zabbix telegram via webhook user profile

5. Настройка действий

Теперь можно настроить непосредственно действия по отправке уведомления при наступлении определенных событий, для этого перейдите в Zabbix в «Настройка» -> «Действия», выберите Источник событий — Триггеры и нажмите кнопку «Создать действие».

6. Отладка скрипта отправки и логгирование.

Скрипт отправки написан на JavaScript и ведет полное логгирование действий по отправке на уровне 3 (warning), если Вы откроете стандартный лог-файл Zabbix-server по пути /var/log/zabbix/zabbix_server.log, то увидите примерно такое:

Код ответа 200 означает успешную отправку.

Могут быть и ошибки отправки, пример (указан неправильный ID чата):

или указан неправильный токен:

В отправляемых сообщениях можно использовать эмодзи символы, коды символов смотрим тут, колонка Unicode. Перед кодом нужно использовать обратный слэш для экранирования.

Внимание! Отправка эмодзи с указанием unicode-кода будет работать только в Zabbix v4.4, в 5-й версии Zabbix нужно использовать непосредственно сами картинки, их можно вставлять в нужные места сообщений (смотрите скриншоты ниже).

Пример отправки сообщения с эмодзи в Zabbix v4.4:

Пример отправки сообщения с эмодзи в Zabbix v4.4

Пример отправки сообщения с эмодзи в Zabbix v5:

Пример отправки сообщения с эмодзи в Zabbix v5

На этом все, до скорых встреч.

Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.

Источник

Zabbix 5 — настраиваем уведомления в Telegram

Настраиваем уведомления из Zabbix 5 в Telegram. В разделе Administration → Media types (Администрация → Типы оповещений) уже есть куча предустановленных вебхуков, в том числе и Telegram, осталось его только настроить.

На самом деле есть несколько способов отправлять сообщения из Zabbix в Telegram, но здесь я рассмотрю только отправку с помощью вебхуков.

Нам понадобится создать бота для отправки сообщений. Бот может отправлять сообщения пользователям или в группу.

Создание бота в Telegram

Создадим бота, через которого Zabbix будет отправлять сообщения. Для управления ботами есть специальный бот @BotFather, добавляем его себе в контакты и пишем ему:

Выводится справка по командам. Для создания бота пишем:

Нам предлагают указать для бота name (имя), я пишу:

Нам предлагают указать для бота username (логин), он должен оканчиваться на «bot» или «Bot» я пишу:

Бот создан, получаем токен «Use this token to access the HTTP API». Копируем его и вставляем в Zabbix в разделе Administration → Media types → Telegram → Parameters → Token.

Сохраняем изменения. Кстати, в описании также приводится краткая инструкция по настройке Telegram:

Отправка уведомления в Telegram пользователю

Если вы хотите отправить личное сообщение пользователю, то в его профиле в разделе Media нужно указать chat id пользователя из Telegram.

Для получения chat id пользователю нужно в Telegram добавить бота @myidbot и отправить команду:

На самом деле таких ботов, которые возвращают идентификаторы довольно много.

Можно протестировать отправку сообщения в Telegram ссылкой «test».

Sending failed: Bad Request: chat not found.

Это нормально, ботам нельзя отправлять сообщения пользователям без их согласия. Нахожу созданного бота Zabbix internet-lab.ru и отправляю ему команду:

Проверяю ещё раз.

Отправка уведомления в Telegram группе

Для отправки уведомления в группу нужно эту группу создать, добавить в неё созданного бота и отправить уведомление на id группы.

ПРИМЕЧАНИЕ: если вы сделаете группу «супергруппой», то у неё сменится идентификатор.

Создаю группу, добавляю в неё бота.

Для получения group id в Telegram добавляю бота @myidbot в группу и отправляю команду:

Получаем идентификатор группы, заметьте, что он отрицательный, не теряем минус.

Можно протестировать отправку сообщения в Telegram.

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

Источник

Отправка уведомлений и графиков из zabbix в telegram

Я чаще всего использую стандартные уведомления от zabbix на почтовый ящик, это позволяет спокойно спать. Тем не менее, решил пойти в ногу со временем и попробовать настроить отправку оповещений из zabbix в популярный мессенджер telegram. К тому же я постоянно активно пользуюсь этим мессенджером и считаю его очень удобным.

Введение

Способов настройки уведомлений из заббикса в телеграм существует несколько. Их можно разделить по информативности:

  • Отправка только текстовых оповещений.
  • Отправка графиков.

Так же можно разделить по типу реализации:

  • Использовать встроенный webhook в zabbix.
  • Написать свой простой скрипт для уведомлений.
  • Взять готовую реализацию уведомлений в telegram на github.

Я постараюсь разобрать все возможные варианты. Идти будем от простого к сложному. Сначала настроим текстовые оповещения, потом добавим графики. Отправлять будем как в личку, так и в группу.

Я буду настраивать все в zabbix 5.0, установленный на Centos 8. Принципиального значения это не имеет, решение будет одинаково работать практически на всех дистрибутивах linux.

Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:

То же самое на Debian 10, если предпочитаете его:

Создание бота в telegram

Первым делом создадим бота, через которого будем слать оповещения из заббикса. Для этого добавляем себе в контакты @BotFather и пишем ему сначала /start, потом /newbot.

Мы создали бота для оповещений и получили для него token, который нам понадобится далее. Теперь нужно добавить в свой список контактов созданного бота. Для этого найдите его по имени. В моем случае имя @serveradminru_bot.

Теперь проверим, как работает отправка уведомлений через нашего бота. Для этого в консоли сервера набираем примерно такую команду:

Бот пришлет оповещение.

В моем запросе изменяемые данные следующие:

210806260 id моего аккаунта. Чтобы его узнать, добавьте бота @my_id_bot и напишите ему /start
Проверяю работу бота Текст сообщения
bot1393668911:AAHDfgghTHgfhdfyX28R-wxKfvH1WR6-vdNw Слово bot и дальше token бота. Пишется все в одно слово.

Если все в порядке, двигаемся дальше. Это самая простая часть, тут не должно быть затруднений.

Отправка уведомлений в telegram через webhook

Начиная с 5-й версии, в Zabbix из коробки работают уведомления в telegram через механизм webhook. Чтобы настроить его, переходите в Администрирование -> Способы оповещений и выбирайте там Telegram.

Внутри увидите некоторые параметры. Можно так же посмотреть текст скрипта, который используется для отправки оповещений. В целом, тут сейчас не обязательно что-то менять. Дефолтные настройки полностью рабочие. Надо только указать токен бота.

Тут же можете шаблоны поправить так, как вам нравится. Это нововведение 5-й версии Zabbix — правка шаблонов оповещений в настройках самих оповещений. Это позволяет создавать для каждого типа свои шаблоны. Очень удобно.

Давайте теперь проверим отправку уведомлений через этот способ. Нажимайте Тест.

Я указал текст сообщения, заголовок, свой id и token бота. В итоге мне в личку пришло сообщение от бота.

Если хотите отправить оповещение в группу, то сначала создайте ее, а потом добавьте туда бота. Не потеряйте минус в id группы. Его тоже нужно указывать. Я сначала не понял этого и копировал id группы без минуса. В итоге, оповещения в группу не отправлялись.

Итак, убедились, что сообщения в telegram нормально отправляются. С технической стороны проблем нет. Теперь настроим отправку уведомлений по событиям. Я обычно для этого использую тестовый триггер. В стандартном шаблоне zabbix для OS Linux есть элемент данных Number of logged in users, который считает количество залогиненных пользователей. Я для него делаю триггер, чтобы он срабатывал, когда пользователей 2 и более. И с его помощью тестирую уведомления, просто подключаясь на сервер по ssh двумя подключениями одновременно.

Теперь идем в настройки пользователя и добавляем ему способ оповещений через telegram.

Если у вас ранее не работали никакие уведомления, то не забудьте активировать Действия.

У нас все настроено для отправки оповещений в telegram. Добейтесь срабатывания триггера и проверяйте телеграм канал, в который настроили отправку сообщений.

Все работает. Если вам достаточно такого функционала, то можно оставлять и пользоваться. Но как по мне, так бледновато эти уведомления выглядят. Можно немного шаблоны изменить, чтобы было более читаемо. Так же есть возможность все настроить более красиво и наглядно, да еще и с графиками. Дальше я расскажу еще 2 разных способа отправки уведомлений из zabbix в telegram с графиками и готовыми ссылками на события.

Настройка zabbix на отправку графиков в telegram

Для отправки графиков в telegram предлагаю воспользоваться известным скриптом на питоне — https://github.com/ableev/Zabbix-in-Telegram. Пользуясь случаем, передаю благодарность автору за его создание. Копируем исходники себе.

Нам нужно будет установить несколько модулей python, перечисленные в requirements.txt. Для этого нам понадобится pip. Ставим его и модули.

Копируем в директорию /usr/lib/zabbix/alertscripts файлы zbxtg.py и zbxtg_settings.example.py из скачанного с github проекта. Последний переименовываем в zbxtg_settings.py. Назначаем пользователя zabbix владельцем этих файлов.

Приводим содержимое zbxtg_settings.py примерно к такому виду.

Жирным я выделил те параметры, что нужно поменять. Вам необходимо указать token от бота, который мы ранее создавали, полный url адреса сервера с zabbix. Обратите внимание на этот урл. Не факт, что у вас по localhost/zabbix/ будет открываться web интерфейс Zabbix. Это зависит от настроек Web сервера. Лично я указал просто http://localhost. Дальше указываете учетную запись мониторинга. Лучше всего сделать отдельную учетку с доступом только на чтение. Она нужна для получения графиков. И в конце нужно будет указать параметры доступа к базе данных заббикса. При желании, можете и иконки emoji изменить. Я меняю местами PROBLEM и WARNING. Желтый треугольник на проблемах смотрится более наглядно.

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

Проверим из консоли работу скрипта.

В личку телеграма должно прийти тестовое сообщение. Если получите ошибку на тему того, что python не найдет, то поменяйте в файле zbxtg.py в самой первой строке python на python3 или создайте символьную ссылку.

А в консоли появится примерно такой вывод.

То же самое проделаем с группой.

Если все в порядке, двигаемся дальше. В случае ошибок, сразу разбирайтесь, в чем может быть проблема.

Идем в web интерфейс и добавляем 2 новых способа оповещений с помощью скрипта. Один для персональных сообщений, второй для групповых. Во втором случае надо добавить ключ —group, все остальное идентичное.

Так же нам нужно настроить шаблоны оповещений. Я предлагаю следующий вариант. Тип сообщений Проблема.

Тема по умолчанию <> — :
Сообщение по умолчанию Последнее значение: ()
zbxtg;graphs
zbxtg;graphs_period=1800
zbxtg;itemid:
zbxtg;title: —
Важность триггера:
Host: ()
Описание:

  • <> — макрос для выставления иконки emoji с восклицательным знаком
  • zbxtg;graphs — указывает, что будем отправлять график
  • zbxtg;itemid: — параметр автоматически определяет itemid для графика на основании информации об итеме в триггере, можно указать нужный itemid вручную
  • zbxtg;title — задает имя для заголовка графика

Все остальное понятно по смыслу, так как относится к стандартным макросам zabbix. Вот полный список параметров, которые поддерживает скрипт:

zbxtg;graphs включает отправку графиков
zbxtg;graphs_period=10800 период за который строится график
zbxtg;graphs_width=700 ширина графика
zbxtg;graphs_height=300 высота графика
zbxtg;itemid: выбор itemid для графика на основе триггера
zbxtg;title: — заголовок графика
zbxtg;debug включает режим отладки, некоторая дополнительная информация сохраняется в tmp_dir
zbxtg;channel включает возможность отправки оповещения в telegram channel
zbxtg;to:username1,username2,username3 можно сразу в шаблоне указать, кому будут отправляться оповещения
zbxtg;to_group:Group то же самое, что выше, только для групп

Для операции восстановления шаблон попроще.

Тема по умолчанию <> — :
Сообщение по умолчанию Server: ()
Описание:
Проблема устранена!
Время устранения проблемы:

И для подтверждения.

Тема по умолчанию <> — :
Сообщение по умолчанию подтвердил проблему со следующим сообщением:
Текущее состояние проблемы

Разные оповещения о разных событиях

Далее показываю на примере, как можно слать уведомления в личку и в группу, одновременно и по отдельности, в зависимости от настроенных условий. По каким-то действиям пишем в личку, по каким-то в группу. Достаточно просто сделать 2 отдельных пользователя для этого. Одному настроить в качестве способа оповещений личные сообщения, а второму указать группу. Затем в действиях, указывая, какому пользователю отправлять сообщение, выбирать способы уведомлений.

Перед созданием пользователя надо добавить новую группу и дать ей необходимые права. Вы можете очень гибко этим управлять.

Если учетка техническая, только для оповещений, то доступ к веб интерфейсу можно не делать. Даем ей права доступа на чтение только к группе Zabbix servers, так как будем слать уведомления только по триггерам этого хоста.

Теперь добавляем пользователя и помещаем его в эту группу.

Добавляем ему telegram группу в способы оповещения. Добавлять можно не по id, а по имени группы, так удобнее.

Так же добавим персональные уведомления telegram пользователю admin. Здесь уже указываем id учетной записи .

Настраиваем действия. В данном примере я делаю отправку всех уведомлений пользователю Admin, у которого в способах оповещений указана личка telegram. А сообщения по конкретному триггеру Zabbix server: Zabbix agent is not available (for 3m) пользователю tg-group, у которого указана группа telegram.

Думаю, идею вы поняли. Можно очень гибко настроить уведомления в Zabbix и это очень круто и удобно. И работает из коробки. Проверим теперь, как будут выглядеть оповещения в telegram. Останавливаем на сервере zabbix-agent и ждем работы триггера с оповещениями.

Проверяем телеграм и видим там одинаковые уведомления и в группе, и в личке.

После обновления проблемы или закрытия, придут свои оповещения.

При этом, если сработает любой другой триггер, уведомление придет только в личку. В группу ничего не будет отправлено.

Шаблоны и графики в уведомлениях можете настраивать по своему вкусу. Обращаю внимание на графики. Они приходят в отдельных сообщениях. Далее я покажу еще один скрипт для уведомлений в telegram. Он немного по-другому работает — прикрепляет сразу ссылки на историю и триггер, а так же вкладывает графики в то же сообщение, что и текст.

Если у вас возникают ошибки с отправкой графиков, то проверить их работу можно в консоли. Вот пример запроса.

Это нормальный вывод ошибки, которая указывает на то, что выбран itemid 23301, которого либо не существует, либо к нему нет доступа, либо для него нет графика. Если выбрать правильный itemid, то после выполнения скрипта никакого вывода не будет, а в телеграм будет отправлен выбранный график.

Оповещения в telegram со ссылками на график и триггер

Расскажу про еще один интересный скрипт для отправки красивых и функциональных оповещений в telegram, в котором помимо всего прочего сразу же публикуются ссылки на триггер, график и некоторые другие полезности. Вот он на гитхабе — https://github.com/xxsokolov/Zabbix-Notification-Telegram. Инструкция от автора в некоторых местах не очень понятная, так что я немного повозился, прежде чем все получилось. В основном c xml были проблемы, но обо всем по порядку.

Клонируем к себе репозиторий.

Копируем в /usr/lib/zabbix/alertscripts папку zbxTelegram_files и файлы _config.yml, zbxTelegram.py, .requirements и zbxTelegram_config.example.py. Последний переименовываем в zbxTelegram_config.py.

Делаем пользователя zabbix владельцем этих файлов и разрешаем исполнение скрипта.

Автор скрипта предлагает запускать его в виртуальном окружении, поэтому поставим пакет virtualenv.

Переходим в /usr/lib/zabbix/alertscripts, создаем виртуальное окружение и активируем его.

Ставим зависимости и деактивируем окружение.

Редактируем конфигурационный файл zbxTelegram_config.py. Список параметров, которые нужно поменять.

В url на конце должен обязательно быть слеш. Дальше делаем все то же самое, что и ранее. Идем в Способы оповещений и добавляем новый тип, где в качестве скрипта указываем zbxTelegram.py.

Шаблоны тем сообщений можете настроить как вам больше нравится. Автор предлагает такие:

  • — мапинг значений ProblemResolvedUpdate в emoji (config: zabbix_status_emoji_map)
  • <> — мапинг значений Severity в emoji (config: zabbix_status_emoji_map)

В поле Сообщение копируется xml конфиг полностью, который приведен в файле actions.example. Копируйте его 1 в 1.

Во все шаблоны можете его вставить без изменений. Я немного попытался его править, но каждый раз потом получал ошибку парсинга xml. В итоге бросил. Автор перечисляет значение каждого парметра, так что можете попытаться настроишь шаблоны на свой вкус.

  • — прикреплять график (TrueFalse)
  • True — прикрепить ссылку url на History (TrueFalse)
  • True

    — прикрепить ссылку url из триггера (TrueFalse)

  • True — прикрепить теги (TrueFalse)
  • — период графика в секундах
  • — передача itemid
  • — передача triggerid
  • — передача eventid
  • — заголовок графика —
  • — передача url из триггера
  • — передача списка тэгов из триггера

Проверим работу уведомлений. Сначала через консоль.

В данном случае слова test менять нельзя. Именно они инициируют отправку тестового сообщения. Вот как оно выглядит.

То же самое можно сделать через web интерфейс.

Если все в порядке, подключайте данный тип уведомлений к пользователю, указывайте его в действиях и проверяйте. Уже не буду это подробоно описывать, так как устал. Материал и так очень объемный получился. В итоге уведомления в телеграме от этого скрипта будут выглядеть вот так:

Текст более информативен по дефолту и выглядит приятнее, графики в одном сообщении с текстом. В последней строке есть готовые ссылки на триггер, историю по итему. Только имейте ввиду, что url для ссылок берется из конфига и если у вас там указан localhost, то только с него и можно будет их посмотреть. Так что указывайте внешний, а не локальный url. Из минусов отмечу тоненькие графики без заливки. В скрипте от ableev они более наглядные.

Заключение

Теперь у нас zabbix работает современно, модно, молодежно 🙂 Использует telegram для отправки оповещений с графиками, ссылками и т.д. Функционал удобный и настраивается достаточно просто. У меня практически не было затруднений, когда разбирал тему. Беру себе на вооружение и использую по необходимости. Хотя сам не люблю оповещения в телеграме, и чаще всего их отключаю, как и от остальных программ. Не нравится, когда меня в каждую минуту могут отвлечь какие-то события. Проверка почты раз в 30 минут самая подходящая интенсивность для меня.

Тем не менее, при работе коллектива, оповещения в общую группу могут быть очень удобны. Особенно, если только на мониторинге сидят отдельные люди, в чью задачу входит оперативная реакция на события.

Источник

айди группы или канала начинается с -100..

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

# Отладка
import logging

logger = telebot.logger
telebot.logger.setLevel(logging.DEBUG)
  • добавьте бота в группу/канал
  • запустите бота
  • напишите сообщение в группу/канал (со своего аккаунта)

в консоли вы увидите похожее:

(apihelper.py:111 PollingThread) DEBUG — TeleBot: «The server
returned:
‘b'{«ok»:true,»result»:[{«update_id»:389450237,n»channel_post»:{«message_id»:24,»sender_chat»:{«id»:-100…,»title»:»test
bot channel»,»type»:»channel»},»chat»:{«id»:-100…,»title»:»test bot
channel»,»type»:»channel»},»date»:1611661758,»text»:»asd»}}]}»

где chat":{"id":-100... и будет айди вашего канала/группы.

Либо вы можете отправить сообщение от своего аккаунта, нажать на него правой кнопкой -> Копировать ссылку на сообщение.
https://t.me/c/136.../25 значение между c/ и /** и есть айди, просто добавьте в начало -100.

Home>2021-09-08 04:10

python : Error Code: 400. Description: Bad Request: Chat NOT FOUND

Help correct the error that occurs when performing

def news

. Code itself:

Users= sqlite3.connect ('Users', check_same_thread= false)
Users.cursor ()
Users.Execute ("" "CREATE TABLE IF Not Exists Users (Usersid Text)" ")
Users.commit ()
@ Bot.Message_Handler (Commands= ["Start"])
Def Welcome (Message):
    IF Not Str (Message.chat.ID) in users.Execute ("Select * from Users"):
        Users.Execute (F "Insert Into Users Values ​​(?)", (Message.chat.ID,))
        Users.commit ()
@ Bot.Message_Handler (Commands= ['New'])
DEF NEWS (Message):
    For user in users.execute ('SELECT * from Users'):
        Bot.Send_Message (User, Message.Text [Message.text.find (''):])

after using the function

new

I get a mistake, although the code continues to work:

Error -Telebot: "A Request to the Telegram API WAS Unsuccessful. Error Code: 400. Description: Bad Request: Chat NOT Found"

UPD: I forgot to mention that user ID is already recorded, so users have already started a dialogue with a bot

Related questions

  • python : Issue with sqlite3 data output
  • Getting data into python variable, telebot
  • python : Pyrogram -does not change the nickname on the button
  • python : Sending PIL.Image image as document via pyTelegramBotApi
  • python : how to fix bug in telebot
  • python : make sure that the buttons are not detected
  • python : Bot gives error: missing 1 required positional argument: ‘member’
  • python : After the first iteration, the data is not written to the database
  • python : Can I get a TrueFalse response instead of a value in Sqlite?
  • python : How to send a message with a delay in a telegram bot?

{«ok»:false,»error_code»:400,»description»:»Bad Request: chat not found»}»

Following this guide to try and make a Telegram bot to message me for notifications regarding home security. I have done all of this successfully and now I am onto this guide. I’m stuck on the «To test***, create a Telegram HTTP Web Request URL****.»* step. I keep getting a «{«ok»:false,»error_code»:400,»description»:»Bad Request: chat not found»}» error. I tried every chat id that is shown when you do «https://api.telegram.org/bottelegramAPIkey*/getUpdates*« but I’m at a loss. I came across this link that recommended adding -100 to the chat id, only to no avail.

This is my first time creating a bot and doing anything of this scale. Am I missing something basic?

Profile picture for user Олег

Zabbix

Настраиваем уведомления из Zabbix 5 в Telegram. В разделе Administration → Media types (Администрация → Типы оповещений) уже есть куча предустановленных вебхуков, в том числе и Telegram, осталось его только настроить.

На самом деле есть несколько способов отправлять сообщения из Zabbix в Telegram, но здесь я рассмотрю только отправку с помощью вебхуков.

Нам понадобится создать бота для отправки сообщений. Бот может отправлять сообщения пользователям или в группу.

telegram

Создание бота в Telegram

Создадим бота, через которого Zabbix будет отправлять сообщения. Для управления ботами есть специальный бот @BotFather, добавляем его себе в контакты и пишем ему:

/start

telegram

Выводится справка по командам. Для создания бота пишем:

/newbot

Нам предлагают указать для бота name (имя), я пишу:

Zabbix internet-lab.ru

Нам предлагают указать для бота username (логин), он должен оканчиваться на «bot» или «Bot» я пишу:

zabbix_internet_lab_ru_bot

telegram

Бот создан, получаем токен «Use this token to access the HTTP API». Копируем его и вставляем в Zabbix в разделе Administration → Media types → Telegram → Parameters → Token.

zabbix

Сохраняем изменения. Кстати, в описании также приводится краткая инструкция по настройке Telegram:

https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/telegram

1. Register bot: send "/newbot" to @BotFather and follow instructions
2. Copy and paste the obtained token into the "Token" field above
3. If you want to send personal notifications, you need to get chat id of the user you want to send messages to:
    3.1. Send "/getid" to "@myidbot" in Telegram messenger
    3.2. Copy returned chat id and save it in the "Telegram Webhook" media for the user
    3.3. Ask the user to send "/start" to your bot (Telegram bot won't send anything to the user without it)
4. If you want to send group notifications, you need to get group id of the group you want to send messages to:
    4.1. Add "@myidbot" to your group
    4.2. Send "/getgroupid@myidbot" in your group
    4.3. Copy returned group id save it in the "Telegram Webhook" media for the user you created for  group notifications
    4.4. Send "/start@your_bot_name_here" in your group (Telegram bot won't send anything to the group without it)

Отправка уведомления в Telegram пользователю

Если вы хотите отправить личное сообщение пользователю, то в его профиле в разделе Media нужно указать chat id пользователя из Telegram.

telegram

Для получения chat id пользователю нужно в Telegram добавить бота @myidbot и отправить команду:

/getid

telegram

На самом деле таких ботов, которые возвращают идентификаторы довольно много.

telegram

Можно протестировать отправку сообщения в Telegram ссылкой «test».

telegram

Проверяю.

telegram

Ошибка.

Sending failed: Bad Request: chat not found.

Это нормально, ботам нельзя отправлять сообщения пользователям без их согласия. Нахожу созданного бота Zabbix internet-lab.ru и отправляю ему команду:

/start

telegram

Проверяю ещё раз.

telegram

Media type test successful.

Сообщение пришло.

telegram

Отправка уведомления в Telegram группе

Для отправки уведомления в группу нужно эту группу создать, добавить в неё созданного бота и отправить уведомление на id группы.

ПРИМЕЧАНИЕ: если вы сделаете группу «супергруппой», то у неё сменится идентификатор.

Создаю группу, добавляю в неё бота.

telegram

Для получения group id в Telegram добавляю бота @myidbot в группу и отправляю команду:

/getgroupid@myidbot

telegram

Получаем идентификатор группы, заметьте, что он отрицательный, не теряем минус.

Можно протестировать отправку сообщения в Telegram.

telegram

Сообщение отправлено.

telegram

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

Понравилась статья? Поделить с друзьями:
  • Ошибка be2 на стиральной машине samsung
  • Ошибка bad pool header windows 10
  • Ошибка be1 на ресивере мтс
  • Ошибка bad player name dayz
  • Ошибка be на стиральной машине samsung устранение ошибки