Как отправить сообщение всем пользователям бота telegram
Перейти к содержимому

Как отправить сообщение всем пользователям бота telegram

  • автор:

Как отправить сообщение всем пользователям бота Telegram?

Я делаю так, просим написать пользователей чтонить в бота (или выполнить /start), далее делаем get запрос:

https://api.telegram.org/bot/getUpdates 

Там список последний сообщений и ID chat, их и подставляем в sendMessage

Отслеживать
ответ дан 6 мар 2018 в 11:55
Aleksandr Skobeltcyn Aleksandr Skobeltcyn
121 3 3 бронзовых знака

Telegram Bot API

Вы должны хранить на своей стороне id всех чатов, когда-либо инициированных пользователями с вашим ботом. Тогда Вы сможете отправить сообщения по всем имеющимся id, то есть всем пользователям. В документации эти параметры являются обязательными: Получить эти данные с серверов телеграмма нет возможности.

Отслеживать
ответ дан 8 дек 2016 в 22:43
user230501 user230501
19 1 1 бронзовый знак
не всем, а только тем, кто ещё не удалил бота
9 дек 2016 в 10:54

@Anatol, всё равно отправлять нужно абсолютно всем — просто для пользователь тех кто удалил чат и забанил бота вернется ошибка 403. При этом, лучше не убирать таких пользователей из списка после этого, а продолжать отправлять сообщения им, т.к. они могут разбанить бота потом, и в этом случае сообщения ему приходить не будут, даже если он это захочет.

8 янв 2017 в 6:57

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

В случае с ботами user_id == chat_id .

При рассылке нужно учитывать лимиты Telegram Bot API:

When sending messages inside a particular chat, avoid sending more than one message per second. We may allow short bursts that go over this limit, but eventually you’ll begin receiving 429 errors.

If you’re sending bulk notifications to multiple users, the API will not allow more than 30 messages per second or so. Consider spreading out notifications over large intervals of 8—12 hours for best results.

Also note that your bot will not be able to send more than 20 messages per minute to the same group.

Судя по документации Telegram Bot API, возможно в будущем будет добавлена возможность делать рассылку:

Unfortunately, at this moment we don’t have methods for sending bulk messages, e.g. notifications. We may add something along these lines in the future.

Отправка сообщений пользователям с бота в Telegram

Woman and phone

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

Надеюсь вы используете библиотеку python-telegram-bot . Если это не так, увы, эта статья не для вас…хотя…вы попробуйте, возможно у вас тоже будет работать данный пример (либо сделаете по аналогии).

Для отправки сообщений создадим новую функцию и назовем её send_message , передадим параметры bot и job .

Далее нам нужно получить chat_id пользователей. (Надеюсь вы подключили к своему боту базу данных, либо записываете в файл chat_id от всех пользователей которые когда-либо пользовались вашим ботом). После чего используя метод sendMessage указываем параметры chat_id пользователя и отправляемый текст text.

В итоге у нас должно получиться:

from telegram.ext import Updater, messagequeue as mq @mq.queuedmessage def send_message(bot, job): for user in get_subscribed(db): text = 'Это тестовое сообщение' bot.sendMessage(chat_id=user['chat_id'], text=text) 

И так, что же мы здесь написали, давайте разберемся:

@mq.queuedmessage — Указываем, что сообщения будут отправлены не сразу все, а в порядке очереди, так как телеграмм ограничивает отправку сообщений в секунду. Если не ошибаюсь, не больше 30 сообщений в секунду. for user in get_subscribed(db) Получаем список пользователей с базы данных, get_subscribed и прохожусь по каждому пользователю циклом вытягивая его chat_id

Пол дела сделано, осталось отправить сообщение. Для этого переходим в главную функцию main() (или как она у вас там называется)

mybot = Updater(settings.API_KEY) # Указываем токен бота mybot.bot._msg_queue = mq.MessageQueue() # Указываем, что будем работать с декораторам очереди mybot.bot._is_messages_queued_default = True # Включаем декоратор очереди mybot.job_queue.run_repeating(send_message, interval=60) # Ставим задачу отправлять сообщение каждые 60 секунд. Бот будет делать это пока вы не уберете эту строку с кода. 

Что бы один раз отправить сообщение я обычно делаю следующее — ставлю интервал в 10 минут, жду пока сообщения отправляться, останавливаю бота и комментирую эту строку, затем снова запускаю бота. Можно конечно сделать это через Условие, на подобии:

send = True If send: mybot.job_queue.run_repeating(send_message, interval=60) send = False 

Но, кому как удобно.

Описание всех методов есть в API от телеграмма

Как отправить сообщение всем пользователям, подписанных на бота?

Есть бот. Как получить список пользователей подписанных на бота? Всё апи перерыл, нашёл только метод getUpdates, который вернёт chat_id последних сообщений. Хочу сделать отравить сообщение всем пользователям, подписанных на бота.

  • Вопрос задан более трёх лет назад
  • 4769 просмотров

Комментировать
Решения вопроса 0
Ответы на вопрос 1

После каждого вызова бота от нового пользователя(которого нет в бд) , можно записывать user_id в БД.
Вместо бд можно использовать обычный файл ( Ну это так себе )

После чего пройтись по всем user_id и выполнить send_message .

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

python

  • Python
  • +4 ещё

Как получить пользователей вступивших в канал по ссылке?

  • 1 подписчик
  • 9 часов назад
  • 50 просмотров

Как отправить сообщение всем, подписанным на бота?

Имеется бот, выполняющий задачу одной из имеющихся фото. Нужно добавить возможность отправки сообщения всем подписанным на бота. Имеются ID всех подписанных. Лежат в базе данных. В идеале я отправляю сообщение боту, а он рассылает это всем, чей ID есть в БД.

  • Вопрос задан более двух лет назад
  • 578 просмотров

10 комментариев

Простой 10 комментариев

edward_freedom

edward_freedom @edward_freedom

Vindicar

Выбрать ID из базы, перебрать циклом for, отправить.
Главное, в лимиты телеги не упереться.
Арсен Дулаев @raijin57 Автор вопроса

Vindicar, в целом да, но как сделать чтобы я вызвал команду(например /message), а затем написал текст который надо отправить. И уже потом цикл и этот текст отправляется всем?

phaggi

Арсен Дулаев @raijin57 Автор вопроса

Алан Гибизов, извините, а что лишнее? Бот на Python в телеграме. С базой данных. Может я что-то не понял просто

phaggi

Арсен Дулаев, а ещё он на сервере работает, давай ещё добавим тег сервер. А сервер — это компьютер. Добавим тег компьютеры. А бот — это программа. Добавим тег программирование…

Арсен Дулаев @raijin57 Автор вопроса
Алан Гибизов, ну так я же так не сделал))

phaggi

Для того, чтобы писать в тег Python, как минимум надо привести свою попытку в виде кода и что в ней ожидали, а что получилось не так. В тег sqlite — показать структуру базы, запросы, ожидания, результаты.
А пока я вижу максимум немножко сведений для тега bot.

phaggi

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

InternetMaster

Totem @InternetMaster
Алан Гибизов, может вместо того, чтобы устраивать базар, ответ дать ему лучше?
Решения вопроса 1
Арсен Дулаев @raijin57 Автор вопроса
Начинающий амбициозный программист
Решил таким образом:

import telebot from telebot import custom_filters bot = telebot.TeleBot('token') @bot.message_handler(chat_id=[''], content_types=['text']) def admin_rep(message): bot.send_message('', message.text) @bot.message_handler(content_types=['text']) def not_admin(message): bot.send_message(message.chat.id, "You are not allowed to use this command") bot.add_custom_filter(custom_filters.ChatFilter()) bot.infinity_polling()

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *