Руководство администратора
С помощью смарт-действия «Отправить HTTP-запрос» можно автоматизировать общение через бот мессенджера Telegram.
1. Если вы еще не зарегистрированы в Telegram, пройдите регистрацию.
2. Получите идентификатор нового бота : обратитесь к боту @BotFather c требованием создать нового бота (команда /newbot ).
3. Получите идентификатор беседы с ботом :
• Откройте диалог со своим созданным ботом и напишите ему произвольное сообщение,
• Откройте в браузере ссылку
где — идентификатор, полученный от @BotFather,
• В полученном json-ответе найдите значение в параметре result->message->chat->id , это и есть .
URL для отправки сообщения боту формируется по образцу:
https://api.telegram.org/bot < bot_token >/sendMessage?chat_id= < chat_id >&text=
URL для получения последнего сообщения от бота формируется по образцу:
Если возвращается одно сообщение, то json имеет вид:
Чат-бот может вернуть сразу несколько последних ответов — json вида:
Первое непрочитанное ответное сообщение доступно как значение атрибута result.message[0].text , а доступен как значение атрибута result.message[0].chat.id (этот параметр важен, поскольку бот может вести несколько чатов одновременно).
Простейший пример обмена сообщениями с чат-ботом Telegram описан ниже.

Смарт-пакет для отправки сообщения боту.

Смарт-действие для отправки сообщения боту.
Вариант смарт-действия для отправки сообщения боту с использованием двух параметров:

Вариант смарт-действия для отправки сообщения боту с использованием двух параметров.
![]()
Для данного кейса не поддерживаются зашифрованные задачи

Смарт-пакет для работы с курсом валюты в формате JSON.
Обратите внимание на необходимость очистки ответа веб-сервиса от лишних символов, эти объяснения даны здесь. Поэтому во втором смарт-действии для выделения текста сообщения используется выражение TSQL:
select top 1 JSON_VALUE ( @ActionResult8639, ‘$.HttpResponse.ResponseContent.result[0].message.text’ )
Telegram-бот на Pyrogram (Python): Анимация message, режим эха, команда About

Сегодня разберем как можно сделать бота, который будет работать от клиента, то есть от нас. Для чего это может пригодиться? Мы сможем дополнять наши сообщения анимациями по команде, отвечать на какой-то текст от имени пользователей или даже создавать эффект эха (отправлять в ответ то же сообщение). Этот инструмент позволит нам использовать весь функционал Telegram.
Что нам потребуется:
- Компьютер или ноутбук
- Редактор кода (У меня PyCharm)
- Python версии 3.9 и выше
- Соединение с интернетом
Установка
Установка для windows:
pip install pyrogram tgcrypto
pip3 install pyrogram tgcrypto
Получаем ключи для аккаунта
Переходим по ссылке на сайт телеграмм https://my.telegram.org/auth и вводим свой телефон:

Нам приходит код, который нужно вставить и нажать зарегистрироваться:

Дальше выбираем API development tools и нажимаем продолжить:

После регистрации мы попадаем в окно с API_HASH и API_ID, которые нам надо скопировать для работы бота:

Пишем код
Мы получили всё для запуска бота. Приступим!
Открываем объект клиента с помощью with. Внутрь него передаем имя сессии, хеш и айди. Это нужно, чтобы по завершению работы подключение к телеграмму автоматически закрылось.
from pyrogram import Client api_hash = "412379786ba59" api_id = "112312398" with Client(name="my_account", api_hash=api_hash, api_id=api_id) as app: app.send_message("me", "Это я бот")
Как только мы запустили программу, нам предлагается ввести номер телефона, потом код, только после мы сможем пользоваться всеми благами. Как вы могли заметить, у нас появился непонятный файл с расширением session. При подключении к любому сайту, сервису итд, у нас создается сессия. Это удобно — нам не нужно постоянно вводить пароль, мы просто предоставляем сертификат и входим.


После всех действий в избранном появляется сообщение «это я бот»:

Если мы не удалим доступ к сессии в телеграме или сам файл, при повторном запуске нам не потребуется вводить телефон и код (это важный момент, об этом часто забывают).
Разрабатываем функционал телеграм-бота
Анимация текста
Чтобы обрабатывать команды на постоянной основе, конструкция with as не поможет. Она больше подходит для постоянной обработки сообщений. Здесь же мы прибегнем к структуре, похожей на используемую в aiogram:
import time from pyrogram import Client, filters from pyrogram.types import Message from pyrogram.errors import FloodWait api_hash = "412379786ba59" api_id = "112312398" # with Client(name="my_account", api_hash=api_hash, api_id=api_id) as app: # app.send_message("me", "Это я бот") client = Client(name="my_account", api_hash=api_hash, api_id=api_id) @client.on_message(filters.command("type", prefixes='!') & filters.me) def type(client_object, message: Message): input_text = message.text.split("!type ", maxsplit=1)[1] temp_text = input_text edited_text = "" typing_symbol = "⁂" while edited_text != input_text: try: message.edit(edited_text + typing_symbol) time.sleep(0.05) edited_text = edited_text + temp_text[0] temp_text = temp_text[1:] message.edit(edited_text) time.sleep(0.05) except FloodWait: print("Превышен лимит сообщений") client.run()
Выносим в отдельную переменную объект клиента. Дальше с помощью декоратора обрабатываем все сообщения.
Декоратор срабатывает на команду type с префиксом восклицательного знака (выглядит так !type) и реагирует на сообщения, отправленные именно нам. Первый аргумент — объект клиента, к которому мы можем обращаться как глобальному клиенту. А message – само сообщение (подробнее про message в официальной документации телеграмма тут ). Чтобы получить подсветку синтаксиса, мы указываем тип сообщения через двоеточие.
Вначале мы берем текст отправленного сообщения и разделяем его на команду и сам текст для анимации. Дальше сохраняем во временную переменную для работы. Edited_text – текст сообщения для изменения. В него мы будем добавлять новые символы и анимацию со спец символом. Typing_symbol – символ для анимации.
Дальше создаем цикл while с проверкой пока изменяемое сообщение не будет равное исходному. Оборачиваем все в try except, чтобы отслеживать ошибку FloodWait от телеграмма (о слишком частых запросах к телеграмму).
Мы обращаемся к методу сообщения edit, как понятно из названия для изменения сообщения. Добавляем к edited_text по одному символу из изначального сообщения и спец символ и делаем задержку на 500 миллисекунд, чтобы не словить FloodWait.
Как это выглядит в чате:
Режим эхо в Telegram
Разберем простую функцию «эхо».
@client.on_message(filters.private) def echo(client_object, message: Message): client_object.send_message(message.chat.id, f"вы сказали: ")
Для этого будем брать только сообщения из приватных чатов, то есть переписок.
Дальше мы получаем ID чата по сообщению и отправляем в ответ тоже сообщение с припиской «вы сказали:». Это самая проста функция реализации.
Выполнение команды About
@client.on_message(filters.command("about", prefixes='!') & filters.private) def about(client_object, message: Message): text = """ Я программист, котрый разработывает бот для разных меседжеров.\nНапример этого бота для моего аккаунта. """ client_object.send_message(message.chat.id, text)
Мы будем отлавливать команды about, которые отправляет любой человек и высылать заданный текст в ответ. Допустим, это будет описание моей работы или список моих успешных проектов.
Filters.private – этот фильтр будет пропускать через себя только сообщения из приватных чатов (чатов между пользователями).
Внутри функции находится текст ответа в переменной text. Мы обращаемся к нашему клиенту и вызываем метод send_message. Первый аргумент — ID чата, куда мы хотим отправить сообщение, а второй — сам текст ответа.
Как это выглядит:
Заключение
Сегодня мы разобрали библиотеку pyrogram для работы с аккаунтом Telegram. Теперь вы можете выйти на новый уровень взаимодействия с этим месседжером.
Pyrogram позволит создать программу для сбора всех пользователей в группе или канале, сделать рассылку по базе пользователей и автоматизировать множество других полезных вещей.
Telegram bot api Рассылка
Тестировал на боте где в бд не много пользователей, там работает, но там где их много почему-то не работает.
Отслеживать
задан 3 ноя 2018 в 19:18
123 2 2 золотых знака 3 3 серебряных знака 8 8 бронзовых знаков
Что такое «не работает»?
3 ноя 2018 в 19:28
Для тестирования отправлял сам себе сообщение «Успешно»(В цикле), но «Успешно» отправлялось мне только 1 раз. Цикл выглядел так: for i in range(len(allusers)): time.sleep(5) bot.send_message(allusers[i][‘id’], newsletter ) time.sleep(1) bot.send_message(365156441, «Успешно!»)
3 ноя 2018 в 19:33
Все еще ничего непонятно, что у вас в бд лежит?
3 ноя 2018 в 19:36
Если не понимаете мой код, то можете пожалуйста написать с нуля? id для отправки можно достать через команду cursor.execute(«SELECT id` FROM Users_mining «)` и чтобы рассылку мог отправлять только я.
3 ноя 2018 в 19:46
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Проблема была в том, что бот не мог отправить сообщение тем кто заблокировал его, в итоге он просто выходил из цикла. Исправил это так:
@bot.message_handler(commands=["Newsletter"]) def answer(message): if (message.from_user.id == 365156441): newsletter = message.text.split(maxsplit=1)[1] cursor.execute("SELECT `id` FROM `Users_mining`") allusers = cursor.fetchall() for i in range(len(allusers)): try: time.sleep(5) bot.send_message(allusers[i]['id'], newsletter ) except: continue
Чтобы рассылка быстрее отправлялась можно сделать чтобы пауза делалась каждый 20 раз(можно и 30):
@bot.message_handler(commands=["Newsletter"]) def answer(message): if (message.from_user.id == 365156441): newsletter = message.text.split(maxsplit=1)[1] cursor.execute("SELECT `id` FROM `Users_mining`") allusers = cursor.fetchall() for i in range(len(allusers)): try: if i % 20 == 0: time.sleep(1) bot.send_message(allusers[i]['id'], newsletter ) except: continue
Отправка уведомлений в Telegram-бот с помощью FunctionGraph
В этой инструкции описан процесс настройки быстрых уведомлений о состоянии сервисов облака Advanced и отправки их в Telegram-bot. Например, можно организовать работу так, чтобы бот присылал вам уведомления, если потребление vCPU, памяти или диска виртуальной машины превысит заданное пороговое значение.
- Введение
- Архитектура решения
- Создайте топик в сервисе SMN
- Создайте правило в Cloud Eye
- Создайте Telegram-бот
- Создайте функцию в FunctionGraph
Введение
Для настройки и работы быстрых уведомлений потребуются следующие сервисы:
- Cloud Eye
- Simple Message Notification
- FunctionGraph
Архитектура решения
- Cloud Eye — сервис мониторинга, отслеживает состояние облачных ресурсов и оповещает о достижении пороговых значений.
- При достижении пороговых значений аварийный сигнал приходит в Simple Message Notification — сервис для отправки уведомлений о событиях.
- Уведомление из Simple Message Notification становится триггером для запуска функции в FunctionGraph — сервисе для выполнения кода в бессерверной среде.
- FunctionGraph отрабатывает функцию и отправляет запрос в Telegram-бот.
Telegram-бот получает данные, записанные в коде функции, и присылает пользователю уведомление.
Создайте топик в сервисе SMN
В этом примере мы создадим оповещение о превышении пороговых значений CPU в сервисе ECS.
-
Войдите в консоль управления Advanced.
- Инструкция по входу с помощью личного кабинета Cloud.ru
- Инструкция по входу в консоль для IAM-пользователей
- Topic Name — введите название топика, например, «CPU-topic».
- Enterprise Project — выберите нужный проект или оставьте по умолчанию «default».
Создайте правило в Cloud Eye
В этом примере мы создадим политику оповещения, при которой каждые пять минут опрашивается состояние виртуальной машины ECS, и бот присылает уведомление при достижение ВМ пороговых значений.
- В панели управления выберите раздел Management & Deployment → Cloud Eye .
- В меню слева выберите Alarm Management → Alarm Rules .
- Отметьте нужный облачный сервис и нажмите Create Alarm Rule . Задайте название, настройте политику и уведомления аварийных сигналов:
- Name — укажите название сигнала. Например, «CPU-alarm».
- Enterprise Project — выберите нужный проект или оставьте по умолчанию «default».
- Resource Type — выберите нужный тип ресурса. В нашем примере это Elastic Cloud Server.
- Dimension — по умолчанию ECSs .
- Monitoring Scope — выберите Specific Resources . В появившемся окне отметьте и переместите нужные ресурсы во второе окно. В этом примере — это виртуальная машина ECS.
- Мethod — выберите Configure Manually .
- Alarm Policy — установите в поле политику отправки сигналов.
- В колонке Metric Name выберите CPU Usage .
- Alarm Policy — выберите Raw Data , 3 consecutive periods >= 60 % (укажите нужное процентное значение), Every 5 minutes .
- Alarm Severity — оставьте по умолчанию Major .
Прочие настройки оставьте по умолчанию.
Cloud Eye будет опрашивать состояние виртуальной машины каждые пять минут и при достижении порогового значения пользовательских метрик отправит уведомление с помощью сервиса Simple Message Notification.
Создайте Telegram-бот
Создадим бота, в который будут приходить сообщения.
- Установитe BotFather в Telagram.
- Введите команду /newbot.
- Дайте название боту и укажите сокращенное название.
- BotFather пришлет сообщение об успешном создании бота и токен самого бота.
Создайте функцию в FunctionGraph
Для работы с функцией в FunctionGraph потребуется готовый архив c функцией.
- Перейдите в консоль сервиса Computing → FunctionGraph .
- В боковом меню выберите: Functions → Function List .
- Нажмите Import Function .
- Загрузите ранее скачанный zip-архив с готовой функцией, нажав Select File .
- Откроется окно с настройкой функции. Загруженный из архива код отобразится на вкладке Code .
- Перейдите на вкладку Configuration , чтобы добавить токен бота. Заполните поля:
- Enterprise Project — укажите проект. Выберите тот же проект, к которому принадлежат экземпляры SMN и Cloud Eye.
- Environment Variables :
- Нажмите Edit .
- Из BotFather скопируйте токен бота. Токен находится в сообщении об успешном создании бота и написан после слов «Use this token to access the HTTP API:».
- Вставьте токен в поле Value .
- Нажмите Save .

Внимание Бот должен быть добавлен в чат непосредственно перед подстановкой токена в адресную строку браузера. В этом случае отобразится необходимая информация о chat_id.
-
Вставьте следующий запрос:
https://api.telegram.org/botYourBOTToken>/getUpdates
Пример отображения запроса с подставленным токеном:
https://api.telegram.org/bot5555555:AAGspBtbjz4FXTRA1O8sg11hfgfjgT6NWA/getUpdates
Появится текст с данными бота.
- Нажмите Ctrl + F / Cmd + F (для Mac OS) для поиска по слову «сhat». ID групп всегда начинается с минуса — . Например, «-99999999».
- Скопируйте ID вместе со знаком минуса.
- Пролистайте код до конца страницы.
- Найдите строку с текстом «chat_id».
- Вставьте скопированный chat_id в код функции в соответствующей строке. Нажмите Save над окном редактирования.
Пример кода после подстановки chat_id
data = "chat_id": -99999999, #"text": os.environ["TEXT"], "text": text, "parse_mode": "HTML" >
- Выберите Trigger Type — «Simple Message Notification».
- Выберите Topic Name — название ранее созданного топика SMN.
- Нажмите OK .
Функция настроена для отправки оповещений.
Запустите нагрузочное тестирование для нужного параметра, чтобы проверить работу оповещений. Для этого можно использовать инструмент Cloud Performance Test Service.