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

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

  • автор:

Отправляем сообщения в Telegram из C#

TLSharp rocks!

С# — развитый язык с большим количеством библиотек, но среди них нет ни одной работающей реализации Telegram API. Эту ситуацию я хочу исправить с помощью своей небольшой библиотеки TLSharp. В статье будет много кода и один котик.

Сразу хочу оговорить детали, будет рассмотрена отсылка сообщения с использованием Telegram API, а не Telegram Bot API. В чем разница?
Telegram Bot API — это API для создания ботов, соответственно оно имеет бОльшие ограничения. Например, нельзя отправить сообщение пользователю пока тот не добавил вашего бота. С Telegram API таких ограничений нет, все официальные клиенты используют именно его.

Создаем сессию

Сначала инициализируем библиотеку и создадим хранилище сессий.

Соединимся с сервером.

Теперь мы можем создавать сессию. Для этого выполним следующий код:

Немного о параметрах методов:

  • phoneNumber — ваш номер телефона в интернациональном формате (например, 79184981723)
  • code — код который вы получите от Telegram, после выполнения метода SendCodeRequest
Отправляем сообщение

Для отправки сообщения импортируем контакт по номеру телефона или юзернейму.

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

Cats in Telegram

На данный момент в библиотеке реализованы только самые необходимые методы. Код библиотеки еще не готов для использования в продакшене, поэтому я не стал выкладывать ее как nuget пакет. Чтобы добавить библиотеку к себе в проект надо стянуть исходники с GitHub, скомпилировать их и добавить референс TLSharp.Core.dll.

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

Как отправить сообщение в Telegram

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

Если вы хотите отправлять сообщения не в личные сообщения, а в группу в Telegram, то обратитесь к этой инструкции.

Как настроить отправку сообщений

Постройте сценарий

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

Пройдите этот урок для построения сценария.

После прохождения урока, у вас будут 5 переменных:

  • для имени
  • для фамилии
  • для телефона
  • для email
  • для вида услуги

Опубликуйте бота в Telegram

Чтобы опубликовать бота в Telegram, следуйте инструкции.

Если вы уже опубликовали бота в Telegram, переходите к следующему пункту.

Получите chat_id

Для того чтобы получить сообщение в Telegram, бот должен знать, кому его отправлять. Вы можете получить chat_id своего аккаунта (или аккаунта человека, которому вы хотите отправлять данную информацию), чтобы затем с помощью бота отправлять сообщения.

Чтобы получить chat_id , создайте в сценарии новый экран с текстом:

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

Опубликуйте бота

Нажмите Опубликовать и дождитесь сообщения о том, что сценарий опубликован на канале Telegram.

/>

Протестируйте бота

Теперь перейдите к своему боту в Telegram (не в тестовом виджете!) и отправьте боту:

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

Бот пришлет вам нужное значение:

Скопируйте и вставьте в блокнот число, которое прислал бот.

Удалите экран с текстом $rawRequest.message.from.id . Он больше не нужен.

Отправьте данные

Следующий шаг — отправить данные, полученные от клиента. Для этого в сценарии, после сбора всей нужной информации, должен быть блок HTTP-запрос. С помощью одного запроса можно передать сразу несколько переменных:

Блок должен быть оформлен следующим образом:

Метод GET

Формирование URL

Для создания URL скопируйте в блокнот строку: https://api.telegram.org/bot<token>/sendMessage

Затем перейдите в Telegram в канал BotFather и скопируйте токен вашего бота, который был сгенерирован, когда вы публиковали канал:

В блокноте выделите <token>

И вместо вставьте токен из Telegram:

Получится примерно следующий адрес:

Теперь выделите строку целиком и вставьте ее в поле URL HTTP-запроса в Aimylogic

Оформление поля BODY

В BODY нам нужно указать:

  • значение chat_id , которое мы получили ранее

  • все переменные, которые мы до этого собрали в сценарии.

Если вы повторили урок по сбору контактных данных, то в сценарии вы получили следующую информацию:

Ваше имя: $name Ваша фамилия: $lastname Ваш телефон: $PHONE Ваш email: $EMAIL Вид услуги: $service

Поэтому сейчас мы используем именно эти переменные.

Итак, нужно вставить значение chat_id и перечислить переменные, которые были в сценарии до отправки.

Обратите внимание на отступы и знаки препинания! Рекомендуем не набирать текст, а скопировать и вставить.

Нажмите Сохранить.

Готово, мы оформили Http-запрос для отправки данных.

Проверьте статус отправки

От логики «Завершен успешно» добавляем связь к новому экрану, содержащему сообщение об успешной отправке данных. Например, “Спасибо, ваши данные успешно отправлены!”

От логики “Завершен с ошибкой” делаем связь с экраном, содержащим текстовый блок “Ошибка $httpStatus ”. Данный блок поможет нам понять, в чем неполадка, если http-запрос не будет успешным.

Протестируйте сценарий

Нажмите Тестировать и поговорите с ботом.

По итогу диалога нужная информация должна прийти в Telegram.

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

Возможные неполадки

Вы нажимаете Тестировать, и бот выдает ошибку.

Проверьте, не используете ли вы в сценарии $rawRequest для получения имени. Если да, то тестировать нужно в канале Telegram. В тестовом виджете ошибка будет ожидаемо выпадать, так как бот пытается получить информацию из канала, которого нет.

«Ошибка -1»

Проверьте правильность URL в http-запросе. Возможно, в самом URL или в конце URL есть пробел либо по ошибке вставлен неверный символ.

«Ошибка 400»

Проверьте правильность оформления http-запроса. Попробуйте удалить Telegram-бота в BotFather, создать заново и использовать заново сгенерированный токен.

Проверьте правильность оформления поля BODY (синтаксис).

Образец правильного оформления поля BODY :

Первая и последняя строчка должны содержать только фигурные скобки

Должны быть отступы (можете нажать Tab либо нажать пробел четыре раза)

«chat_id»: должно быть написано именно так (проверьте на наличие опечаток, а лучше скопируйте и вставьте):

Значение chat_id должно быть не 123456789, а реальное значение, которое вы скопировали на шаге 3 (123456789 это пример для урока)

Строка, содержащая «chat_id»: должна оканчиваться запятой

После двоеточий должны быть пробелы

Значение передаваемого текста сообщения должно быть в таких кавычках: » «

Телеграм боты и отправка сообщений в 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 с помощью php

    Отправка сообщений в telegram с помощью php

    Telegram уже давно перестал быть мессенджером для террористов, РКН от него отстал. И все больше людей начинают общаться в телеграм как по работе, так и в личных переписках. Для многих этот мессенджер стал не просто чатом, а еще и соц.сетью со своими новостными и развлекательными каналами. Так же удобные боты телеграмм позволяют добавить интерактивности в чаты и каналы. Вот и я решил немного углубиться в функциональное использование telegram. Первая идея – это получать уведомления с сайтов. Как настроить телеграм и как написать скрипт, который будет отправлять сообщения в чат постараюсь объяснить в этой статье.

    Создание и настройка telegram бота для отправки сообщений

    Напрямую скриптом отправлять сообщения в телеграм нельзя, но можно делать запросы к api ботов. Бот же в свою очередь будет делать то, что нам нужно – отправлять пользователю сообщения. Поэтому перед тем, как писать скрипт, нужно создать бота. В телеграм эта процедура занимает всего пару минут. Для создания и настроек есть официальный верифицированный бот: @BotFather. Откройте его в телеграм и отправьте команду «/newbot». Далее нужно будет придумать название и логин своему боту. Это все выполняется прямо в чате телеграм, ниже можете увидеть скрин переписки с ботом. После успешного создания и настроек, BotFather пришлет токен созданного бота. Токен потребуется для отправки запросов к api.

    Создание и настройка telegram бота для отправки сообщений

    На этом настройка бота закончена. Но остался один момент – получение id пользователя телеграм, которому будет отправляться уведомления. Чтобы узнать свой id можно также воспользоваться ботами, их много. Я нашел вот такой: @getmyid_bot. Просто запустите бота и в ответ он напишет ваш ID.
    У телеграм есть документация с описанием всех методов api, которые можно использовать. Документацию можно почитать тут: api ботов telegram.
    В нашем случае всю документацию читать не придется, достаточно только одного метода – sendmessage. Он позволяет отправлять сообщения пользователям, которые начали диалог с ботом. У метода всего два обязательных параметра chat_id – ID пользователя или канала, который получит уведомление и text – текст сообщения. В скрипте я использовал еще третий параметр — parse_mode, он не обязательный, позволяет задать способ форматирования текста. По дефолту текст сообщения никак не форматируется. Parse_mode может принимать несколько значений: Markdown, MarkdownV2 и HTML. Пользоваться разметкой Markdown и MarkdownV2 я не умею, это телеграмовские теги. Поэтому выбрал HTML. Только обратите внимание, что это не полноценный html, теги поддерживаются не все. Подробнее можно почитать в документации.
    На этом подготовка завершена, остается только написать код. Не забудьте открыть диалог со своим, только что созданным, ботом и запустить его. Если этого не сделать, то сообщения приходить не будут, а api в ответ на запросы будет присылать ошибки.

    Php код для отправки сообщения в telegram

    Ну а теперь самое интересное – код отправки запроса к api. В коде добавлены подробные комментарии, должно быть все понятно.

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

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