Отправка сообщений пользователям с бота в Telegram
Если вы читаете данную статью, значит, скорей за все имеете свой бот в телеграмме. Соответственно расписывать и объяснять как создать бота я здесь не буду. (Возможно в будущем создам отдельную статью по этому поводу, но какой в этом смысл, ведь в гугле их пруд пруди).
Надеюсь вы используете библиотеку python-telegram-bot . Если это не так, увы, эта статья не для вас…хотя…вы попробуйте, возможно у вас тоже будет работать данный пример (либо сделаете по аналогии).
Для отправки сообщений создадим новую функцию и назовем её send_message , передадим параметры bot и job .
Далее нам нужно получить chat_id пользователей. (Надеюсь вы подключили к своему боту базу данных, либо записываете в файл chat_id от всех пользователей которые когда-либо пользовались вашим ботом). После чего используя метод sendMessage указываем параметры chat_id пользователя и отправляемый текст text.
В итоге у нас должно получиться:
И так, что же мы здесь написали, давайте разберемся:
@mq.queuedmessage — Указываем, что сообщения будут отправлены не сразу все, а в порядке очереди, так как телеграмм ограничивает отправку сообщений в секунду. Если не ошибаюсь, не больше 30 сообщений в секунду. for user in get_subscribed(db) Получаем список пользователей с базы данных, get_subscribed и прохожусь по каждому пользователю циклом вытягивая его chat_id
Пол дела сделано, осталось отправить сообщение. Для этого переходим в главную функцию main() (или как она у вас там называется)
Что бы один раз отправить сообщение я обычно делаю следующее — ставлю интервал в 10 минут, жду пока сообщения отправляться, останавливаю бота и комментирую эту строку, затем снова запускаю бота. Можно конечно сделать это через Условие, на подобии:
Отправка сообщений в Telegram

И вот одним из популярных мессенджеров является Telegram. На мой взгляд преимуществ у него много. И наверное каждый пользователь хотел бы получать сообщения с формы прямо в телеграмм! Ведь это круто, на дворе то уже 2017 год))
И как раз в данной статье я хочу показать Вам, как я настроил отправку сообщений с формы обратной связи в Telegram. Конечно всё это я реализовал для MODX, это не сложно реализовать и на каком-нибудь PHPMailer.
Схема использования очень проста, и выглядит так:

Первым делом необходимо создать бота в Telegram с помощью этой инструкции
Дальше, после того как Вы создали бота, то у вас есть так называемый токен, который как раз нам и пригодится!
Отправка запросов
Все запросы к Telegram Bot API должны осуществляться через HTTPS в следующем виде:
Все методы доступны в Telegram Bot API
Узнать id чата Telegram
Дальше необходимо узнать id чата, чтобы бот присылал сообщения с формы именно Вам!
Для этого необходимо что-нибудь написать своему боту и воспользоваться методом getUpdates.
После того как Вы написали своему боту, прописываем следующий адрес в браузере:
Вместо <token> необходимо прописать свой токен!
Если всё сделали правильно, то Вы получите ответ в виде массива. Для корректный работы нам необходимо id чата, он как-раз такие есть в этом массиве после «chat»:
Так, id чата успешно получен, теперь попробуем отправить тестовое сообщение своему боту с браузера!
Отправка тестового сообщения
Чтобы отправить сообщение себе через бота, необходимо воспользоваться методом sendMessage. Для этого прописываем следующий адрес в браузере, вместо <token> и <chat_id> необходимо прописать свои данные!
Нажимаем enter и вуаля, наше первое сообщение от нашего бота! Круто!!

Как вы заметили, текст сообщения мы прописали после метода text с типом string.
Отправка сообщений с формы
Ура мы всё настроили, теперь осталось самая главная часть, отправка сообщений с формы
Как я писал выше, предусловием является то, что Вы настроили отправку сообщений и они отправляются к Вам на почту. Неважно через AjaxForm или без него, главное что вы используете Formit.
А отправлять сообщения мы как раз будем с помощью Formit, а именно мы создадим так называемый хук.
Хук – это скрипт, который запускаются после того, как форма прошла валидацию. Каждый хук должен обязательно возвращать true в случае успеха и false в случае ошибки!
Итак, заходим в административную панель и переходим по вкладке элементы и там создаем сниппет FormitTelegram, который содержит следующий код:
Указываем токен и id чата!
Наименование полей с формы у вас могут быть другими, я использовал название полей со статьи, где мы настраивали отправку сообщений с модального окна!
К тому-же данные с формы можно получить сразу с помощью метода $hook ->getValues(); но для наглядности я решил расписать всё подробнее))
Кстати строки в телеграмме я переношу с помощью %0A. Почему-то \n и <br/> не работали(
И так, теперь там где вызывается Formit, прописываем наш хук FormitTelegram в &hooks и проверяем. В итоге получим следующее сообщение:

Чтобы название формы было нормальным, то необходимо в вызове Formit необходимо указать параметр &formName=`Название формы`
Вот и всё, также можно настроить отправку сообщений и себе в ВК!
Если у Вы отправляете форму с помощью PHP, то на блоге smartlanding.biz есть грамотная инструкция, где всё подробно расписано с применением Ajax.
Надеюсь статья понравилась и очень полезная 🙂
Пишите в комментариях, чтобы вы ещё хотели реализовать с помощью ботов для телеграмма!
Телеграм боты и отправка сообщений в Telegram
Создаем Бота в Telegram на базе веб-платформы Falcon Space.
Falcon Space — это платформа для создания веб-решений с управлением через SQL. Все создается и управляется на SQL. Телеграм бот управляется полностью 1 хранимой процедурой на SQL!
На основе Falcon Space вы можете создать систему личных кабинетов на сайте со встроенным телеграм ботом.
1. Находим бота BotFather -> команда /newbot -> даем ему описание, имя (заканчивается на Bot) и картинку. (подробнее — http://aftamat4ik.ru/pishem-bota-telegram-na-c/ ). В итоге получаем token
2. В web.config / AppSettings настраиваем следующие параметры:
- proxyUrl — указываем прокси для Телеграма в таком виде http://45.89.19.84:11498 (если прокси не нужен, то просто оставляем пустыми поля)
- proxyUser, proxyPassword — указываем пользователя и пароль прокси.
- telegramToken — указываем токен, который мы получили при создании бота в Телеграм (в botFather).
- telegramOnlyTextMessages — если 1, то в обработку бота будут попадать только текстовые сообщения.
- @parameters — различные доп параметры (будут впоследствии расширяться)
- @text — текст от пользователя телеграм
- @messageID — идентификатор сообщения от пользователя (можно использовать для указания reply)
- @chatID — ID чата, в который мы потом отправим ответ.
- @messageType — тип сообщения
- @updateType — тип пришедшего обновления от хука бота
- @telegramUsername — логин юзера в телеграм (для нас это идентификатор)
- @firstName — имя пользователя
- SELECT 1 — Result и Msg
- SELECT 2 — набор команд для telegram (актуально если SELECT1.Result=1). Type, Text, ChatID, replyMessageID, DisableNotification, Channel, ButtonsJSON, parseMode
- SELECT 3 — внешние действия, которые могут быть вызваны по команде от телеграм бота.
- Для прокси можно использовать IPv4 и IPv6
- Прокси можно купить здесь — https://proxy.market/
- В as_users добавлены 2 поля telegram и telegramChatID, а также добавлена хранимая процедура [as_user_getUser] (проверьте, что они есть в вашей базе).
- Чтобы работало внешнее действие типа telegram в системе должна быть хранимая процедура as_user_getUser
- В телеграм находим бота (например, наш бот FalconSpaceBot)
- Пишем ему /start для инициализации (осуществляется привязка вашего пользователя к чату).
- Выполняем различные команды, например /getupdates — если команда прописана в чате, то она будет обработана и выдан ответ.
- Для перевода строки в сообщении бота используйте Char(10);
- Проверьте что прокси прописан в web.config
- Проверьте что прокси не просрочен
- Проверьте что бот в целом отвечает.на ваши команды в телеграм (если не отвечает)
- Попробуйте запустить заново бота /Controls/Stuff/StartTelegramBot (либо перезапустите пул приложения в IIS)
- Проверьте as_trace (коды TG и Exception). В нем пишутся ошибки и инициализация и завершение потока бота.
- Сделать as_print в процедуре и посмотреть попадает ли туда бот.
- Бот может остановиться если вы запущена локальная отладка (в этом случае возникает конфликт обновлений, поэтому необходимо отключать бота при локальном запуске — в web.config убирать токен).
- Бот может падать если выключается автоматически пул IIS. Необходимо его настроить так, чтобы он не отключался при простое.
- Text — название кнопки.
- CallbackData — данные для передачи в процедуру
- Url — если указан, то кнопка будет открывать указанный адрес. ВАЖНО! Вводите корректный URL, иначе будет исключение и вся исходная команда не будет работать.
- ResizeKeyboard — Requests clients to resize the keyboard.
- OneTimeKeyboard — Requests clients to hide the keyboard as soon as it’s been used.
- currentCommand — текущая рабочая команда (в рамках которой пользователь вводит данные).
- currentCommandStep — текущий шаг в команде (для определения какой текст вывести в рамках команды).
- currentCommandData — здесь накапливаются данные по выполнению команды.
- заходишь к боту на страницу
- нажимаешь на верхний бар, на название
- дальше опции -> add to group
- и выбираешь любой чат
3. В таблице as_users добавляем 2 поля:
4. Создаем хранимую процедуру такого вида (в разделе Системный SQL / Telegram Bot):
5. Проверяем, что работает бот. Подписываемся на него в telegram и выполняем /start (при этом мы получим отклик Привет. ). Если нет отклика, значит бот не запущен. Попробуйте его перезапустить в разделе Системный SQL (Старт телеграм бот).
6. Чтобы подписать пользователя на некие действия, необходимо сначала чтобы он указал свой телеграм в профиле (поле as_users.telegram). Затем он должен сделать любую команду в телеграме, отправив боту к примеру /start
Хранение привязки чата к пользователю системы
В as_users есть 2 поля: telegram и telegramChatID. При первом обращении, система через хранимую процедуру обновит поле telegramChatID для соответствующего пользователя с заданным telegram. После этого он сможет получать сообщения от telegram.
Использование бота
Включение/выключение бота
Бот включается при запуске всего веб приложения (Global.asax/app_start).
Чтобы его выключить в вручную можно из-под админа использовать команду (перейти на URL) /Controls/Stuff/StopTelegramBot
Для включения — /Controls/Stuff/StartTelegramBot
Детали реализации бота
Реализован в виде отдельного потока, который крутится бесконечно и ожидает приема от бота обновлений. Если есть обновление, то запускает для него процедуру обработки этого обновления (сообщения в нем)
Howto по Telegram боту
Не работает бот Telegram. Что делать?
Как отправить сообщение пользователю в Телеграм
Для этого используем Внешнее действие (в формах и др элементах) с кодом telegram.
Также сообщение можно отправлять через уведомления (если включено Немедленное уведомление).
У пользователя должны быть корректно проставлены поля telegram (заносится сначала вручную для пользователя его логин) и telegramChatID(проставляется автоматически при первом обращении юзера к боту через Телеграм) в as_users. Также можно указать имя в виде ‘@username’ — тогда отправка будет по логину телеграма (если он есть в tg_settings).
buttonsJSON задает настройки кнопок.
parseMode задает формат обработки сообщений (по умолчанию html. Возможные значения html, default, markdown, markdownv2).
ВАЖНО! Необходима реализация процедуры tg_getChatID:
Как отправить сообщение в закрытый чат
Для этого используем символ «—» и chatID в параметре to
Передается chatID. Для групп это отрицательное число, которое можно получить либо экспортом сообщений группы в JSON (и там можно будет найти chat_id), либо через запрос вида:
Примечание: бот необязательно должен быть администратором группы.
Как отправить сообщение в пользователю по chatID
Для этого используем символ «#» и chatID в параметре to
Как отправить сообщение в канал Телеграм
Для этого используем Внешнее действие (в формах и др элементах) с кодом telegram.
Бот должен быть добавлен администратором в канал при этом.
ВАЖНО! Необходима реализация процедуры tg_getChatID
Как сделать рассылку пользователям при сохранении формы.
Указываем всех пользователей в SELECT 2 + связываем с настройками показа данного сообщения (т.е. показываем тем. кто разрашил отправку на этот тип уведомлений. Поля настроек могут меняться). Пример:
Как работать с кнопками Телеграм

Кнопки могут быть либо Inline (в чате при ответе), либо Reply(внизу под чатом).
Кнопки передаются в виде JSON в параметре SELECT 2 ButtonsJSON:
Для Inline кнопок указываем:
Для reply кнопок команда используется в поле text. Также для них есть 2 настройки:
В процедуру для инлайн кнопок будет передаваться как команда поле callbackData, а для reply кнопок — поле text.
Дополнительная информация о кнопках Телеграм:
Использование Эмоджи в сообщениях
Выбираем символ, на страницу символа берем его код UTF16 LE
В SQL используем этот код следующим образом:
Как блокировать телеграм аккаунты в боте
Указываем в начале процедуры action следующий код
В итоге бот ничего не будет отвечать клиенту.
Также вы можете настроить хранение в статуса блокирования как отдельный столбец в таблице tg_settings.
Как выводить html теги в сообщениях
Для этого используется параметр paseMode=’html’ (это значение используется по умолчанию).
Есть альтернативные способы разметки — default, markdown, markdownv2.
ВАЖНО. В html режиме отправка сообщения в телеграм поддерживает только эти теги b,strong,i,em,u,ins,s,strike,a,code,pre. Если будут запрещенные теги, то сообщение не отправится. Детали — https://core.telegram.org/bots/api#html-style
Как быстро подписать пользователя на телеграм бота
Для этого даем ему ссылку вида: https://t.me/FalconSpaceBot?start=1, где FalconSpaceBot — это имя вашего бота.
Пользователь переходит на бота и нажимает там кнопку Запустить. При этом ваша команда /start должна учитывать что в этом случае придет она как /start 1
Т.е. используем left () для определения команды start, а не точное соответствие.
Логирование команд боту от пользователей
В начале процедуры action установите сохранение в trace. В дальнейшем можно анализировать все сообщения через страницу диагностики /diag
Многоступенчатые команды в боте
Для этого используются следующие поля в tg_settings:
Пример кода такой команды:
В примере указан полный код процедуры бота с обработкой start, меню и бизнес-логикой ступенчатой команды. Также в коде есть пример как использовать Эмоджи в боте.
Telegram: отправка ботом личного сообщения
Хочу в телеграмме присылать сам себе личные сообщения, просто перейдя по url с токеном и нужными параметрами. Это возможно? Вот получил токен и он рабочий, и сделал следующий запрос:
Но к сожалению в ответ приходит:
P.S. Пожалуйста, не пинайте если вопрос слишком глупый) Сообщения будет слать роутер))
![]()
Проблема вашего запроса заключалась в том, что вы, пытаясь отправить сообщение в личку, в качестве параметра chat_id передавали логин пользователя. Однако Bot API допускает в этом параметре только логин канала или id чата. Соответственно, чтобы слать сообщения в личку пользователю, вам нужно вначале узнать его id. Вы получаете id каждого пользователя, что напишет вам, в объекте User. Свой id удобно узнавать через специального бота @ShowJsonBot. Он также может показаться вам удобным и для других целей, особенно для отладки.
Вы всё равно можете слать ботом любые сообщения методом sendMessage, даже если к аккаунту вашего бота уже подключены всякие конструкторы для ботов вроде того же @Manybot. Это не помеха.
Сначала создали бота.
После этого создали чат и добавили бота в него :
А потом уже можно скриптом получить id чата через getUpdates (история бота), тут можно почитать https://core.telegram.org/bots/api
Всё ещё ищете ответ? Посмотрите другие вопросы с метками telegram-bot или задайте свой вопрос.
Site design / logo © 2022 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2022.8.30.42948
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.