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

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

  • автор:

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

Woman and phone

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

Надеюсь вы используете библиотеку 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 и вуаля, наше первое сообщение от нашего бота! Круто!!

Отправка тестового сообщения боту Telegram

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

Отправка сообщений с формы

Ура мы всё настроили, теперь осталось самая главная часть, отправка сообщений с формы

Как я писал выше, предусловием является то, что Вы настроили отправку сообщений и они отправляются к Вам на почту. Неважно через AjaxForm или без него, главное что вы используете Formit.

А отправлять сообщения мы как раз будем с помощью Formit, а именно мы создадим так называемый хук.

Хук – это скрипт, который запускаются после того, как форма прошла валидацию. Каждый хук должен обязательно возвращать true в случае успеха и false в случае ошибки!

Итак, заходим в административную панель и переходим по вкладке элементы и там создаем сниппет FormitTelegram, который содержит следующий код:

Указываем токен и id чата!

Наименование полей с формы у вас могут быть другими, я использовал название полей со статьи, где мы настраивали отправку сообщений с модального окна!

К тому-же данные с формы можно получить сразу с помощью метода $hook ->getValues(); но для наглядности я решил расписать всё подробнее))

Кстати строки в телеграмме я переношу с помощью %0A. Почему-то \n и <br/> не работали(

И так, теперь там где вызывается Formit, прописываем наш хук FormitTelegram в &hooks и проверяем. В итоге получим следующее сообщение:

Отправка сообщения с формы в Telegram

Чтобы название формы было нормальным, то необходимо в вызове 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 настраиваем следующие параметры:

    1. proxyUrl — указываем прокси для Телеграма в таком виде http://45.89.19.84:11498 (если прокси не нужен, то просто оставляем пустыми поля)
    2. proxyUser, proxyPassword — указываем пользователя и пароль прокси.
    3. telegramToken — указываем токен, который мы получили при создании бота в Телеграм (в botFather).
    4. telegramOnlyTextMessages — если 1, то в обработку бота будут попадать только текстовые сообщения.

    3. В таблице as_users добавляем 2 поля:

    4. Создаем хранимую процедуру такого вида (в разделе Системный SQL / Telegram Bot):

    • @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 — внешние действия, которые могут быть вызваны по команде от телеграм бота.

    5. Проверяем, что работает бот. Подписываемся на него в telegram и выполняем /start (при этом мы получим отклик Привет. ). Если нет отклика, значит бот не запущен. Попробуйте его перезапустить в разделе Системный SQL (Старт телеграм бот).

    6. Чтобы подписать пользователя на некие действия, необходимо сначала чтобы он указал свой телеграм в профиле (поле as_users.telegram). Затем он должен сделать любую команду в телеграме, отправив боту к примеру /start

    Хранение привязки чата к пользователю системы

    В as_users есть 2 поля: telegram и telegramChatID. При первом обращении, система через хранимую процедуру обновит поле telegramChatID для соответствующего пользователя с заданным telegram. После этого он сможет получать сообщения от telegram.

    1. Для прокси можно использовать IPv4 и IPv6
    2. Прокси можно купить здесь — https://proxy.market/
    3. В as_users добавлены 2 поля telegram и telegramChatID, а также добавлена хранимая процедура [as_user_getUser] (проверьте, что они есть в вашей базе).
    4. Чтобы работало внешнее действие типа telegram в системе должна быть хранимая процедура as_user_getUser

    Использование бота

    • В телеграм находим бота (например, наш бот FalconSpaceBot)
    • Пишем ему /start для инициализации (осуществляется привязка вашего пользователя к чату).
    • Выполняем различные команды, например /getupdates — если команда прописана в чате, то она будет обработана и выдан ответ.

    Включение/выключение бота

    Бот включается при запуске всего веб приложения (Global.asax/app_start).

    Чтобы его выключить в вручную можно из-под админа использовать команду (перейти на URL) /Controls/Stuff/StopTelegramBot

    Для включения — /Controls/Stuff/StartTelegramBot

    Детали реализации бота

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

    • Для перевода строки в сообщении бота используйте Char(10);

    Howto по Telegram боту

    Не работает бот Telegram. Что делать?

    1. Проверьте что прокси прописан в web.config
    2. Проверьте что прокси не просрочен
    3. Проверьте что бот в целом отвечает.на ваши команды в телеграм (если не отвечает)
    4. Попробуйте запустить заново бота /Controls/Stuff/StartTelegramBot (либо перезапустите пул приложения в IIS)
    5. Проверьте as_trace (коды TG и Exception). В нем пишутся ошибки и инициализация и завершение потока бота.
    6. Сделать as_print в процедуре и посмотреть попадает ли туда бот.
    7. Бот может остановиться если вы запущена локальная отладка (в этом случае возникает конфликт обновлений, поэтому необходимо отключать бота при локальном запуске — в web.config убирать токен).
    8. Бот может падать если выключается автоматически пул IIS. Необходимо его настроить так, чтобы он не отключался при простое.

    Как отправить сообщение пользователю в Телеграм

    Для этого используем Внешнее действие (в формах и др элементах) с кодом 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 кнопок указываем:

    • Text — название кнопки.
    • CallbackData — данные для передачи в процедуру
    • Url — если указан, то кнопка будет открывать указанный адрес. ВАЖНО! Вводите корректный URL, иначе будет исключение и вся исходная команда не будет работать.

    Для reply кнопок команда используется в поле text. Также для них есть 2 настройки:

    • ResizeKeyboard — Requests clients to resize the keyboard.
    • OneTimeKeyboard — Requests clients to hide the keyboard as soon as it’s been used.

    В процедуру для инлайн кнопок будет передаваться как команда поле 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:

    1. currentCommand — текущая рабочая команда (в рамках которой пользователь вводит данные).
    2. currentCommandStep — текущий шаг в команде (для определения какой текст вывести в рамках команды).
    3. currentCommandData — здесь накапливаются данные по выполнению команды.

    Пример кода такой команды:

    В примере указан полный код процедуры бота с обработкой start, меню и бизнес-логикой ступенчатой команды. Также в коде есть пример как использовать Эмоджи в боте.

    Telegram: отправка ботом личного сообщения

    Хочу в телеграмме присылать сам себе личные сообщения, просто перейдя по url с токеном и нужными параметрами. Это возможно? Вот получил токен и он рабочий, и сделал следующий запрос:

    Но к сожалению в ответ приходит:

    P.S. Пожалуйста, не пинайте если вопрос слишком глупый) Сообщения будет слать роутер))

    user avatar

    Проблема вашего запроса заключалась в том, что вы, пытаясь отправить сообщение в личку, в качестве параметра chat_id передавали логин пользователя. Однако Bot API допускает в этом параметре только логин канала или id чата. Соответственно, чтобы слать сообщения в личку пользователю, вам нужно вначале узнать его id. Вы получаете id каждого пользователя, что напишет вам, в объекте User. Свой id удобно узнавать через специального бота @ShowJsonBot. Он также может показаться вам удобным и для других целей, особенно для отладки.

    Вы всё равно можете слать ботом любые сообщения методом sendMessage, даже если к аккаунту вашего бота уже подключены всякие конструкторы для ботов вроде того же @Manybot. Это не помеха.

    Сначала создали бота.

    После этого создали чат и добавили бота в него :

    • заходишь к боту на страницу
    • нажимаешь на верхний бар, на название
    • дальше опции -> add to group
    • и выбираешь любой чат

    А потом уже можно скриптом получить 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.

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

Ваш адрес email не будет опубликован.