Примеры как зарегистрировать бота в Telegram, описание и взаимодействие с основными методами API. Документация на core.telegram.org и tlgrm.ru (неофициальный, на русском).
Все запросы к API должны осуществляться по HTTPS, подойдет бесплатный сертификат «Let’s Encrypt».
Регистрация бота
Следующим сообщением отправляем название для бота, обязательно на конце имени должно быть слово «bot» или «_bot». Ответным сообщением получим токен:
Что такое Webhook за 12 минут
Тут же можно настроить описание и аватарку:
/setname | Имя |
/setdescription | Краткое описание |
/setabouttext | Описание бота |
/setuserpic | Юзерпик |
Далее нужно поставить «Webhook» чтобы все сообщения из Telegram приходили на PHP скрипт ( https://example.com/bot.php ). Для этого нужно пройти по ссылке в которой подставлены полученный токен и адрес скрипта.
В ответе будет
При смене токена, установку вебхука нужно повторить.
Входящие сообщения
Сообщения приходят POST-запросом, с типом application/json . Получить его в PHP можно следующим образом:
$data = file_get_contents(‘php://input’); $data = json_decode($data, true);
Чтобы посмотреть входящие данные, их придется дампить в файл:
file_put_contents(__DIR__ . ‘/message.txt’, print_r($data, true));
Текстовое сообщение
Запрос от Телеграм:
Array ( [update_id] => 17584194 [message] => Array ( [message_id] => 26 [from] => Array ( [id] => 123456789 [is_bot] => [first_name] => UserName [language_code] => ru-US ) [chat] => Array ( [id] => 123456789 [first_name] => UserName [type] => private ) [date] => 1541888068 [text] => Привет бот! ) )
Получим текст сообщения:
if(!empty($data[‘message’][‘text’]))
Фотографии
При отправки фото боту, на скрипт приходит массив превьюшек, последним элементом будет оригинальное фото. Максимальный размер файла 20МБ.
Запрос от Телеграм:
Array ( [update_id] => 17584194 [message] => Array ( [message_id] => 38 [from] => Array ( [id] => 123456789 [is_bot] => [first_name] => UserName [language_code] => ru-US ) [chat] => Array ( [id] => 123456789 [first_name] => UserName [type] => private ) [date] => 1541924962 [photo] => Array ( [0] => Array ( [file_id] => AgADAgADUqexG7u8OEudBvlhgMzKC1agOQ8ABC6Bx26USA7Mw3gAAgI [file_size] => 1196 [width] => 51 [height] => 90 ) [1] => Array ( [file_id] => AgttAgADUqoxG7u8OEudBvlhgMzKC1agOQ8ABKwp_3jDPrIlxHgAAgI [file_size] => 21146 [width] => 180 [height] => 320 ) [2] => Array ( [file_id] => AgADAgADUqyxG7u8OEudBvlhgMzKC1agOQ8ABAN8gJWpUT1MxXgAAgI [file_size] => 90940 [width] => 449 [height] => 800 ) [3] => Array ( [file_id] => AgADAgADUqouu7u8OEudBvlhgMzKC1agOQ8ABIqVC1nEpbLDwngAAgI [file_size] => 114363 [width] => 719 [height] => 1280 ) ) ) )
Чтобы скачать файл нужно отправить POST или GET запрос на получение c параметром file_id изображения по URL:
1. Создание Telegram бота с Webhook’ом на Python. Подготовка.
https://api.telegram.org/bot/getFile
В ответ придет информация о файле:
Array ( [ok] => 1 [result] => Array ( [file_id] => AgADAgADUqoxG5u88E0dBvlhgMzKC1agOQ8ABIqVC1nEpbLDwngAAgI [file_size] => 114363 [file_path] => photos/file_1.jpg ) )
Далее его можно скачать по ссылке:
В PHP сохранение файла на сервер можно реализовать следующим образом:
$token = ‘123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11’; if (!empty($data[‘message’][‘photo’])) < $photo = array_pop($data[‘message’][‘photo’]); $ch = curl_init(‘https://api.telegram.org/bot’ . $token . ‘/getFile’); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, array(‘file_id’ =>$photo[‘file_id’])); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); curl_close($ch); $res = json_decode($res, true); if ($res[‘ok’]) < $src = ‘https://api.telegram.org/file/bot’ . $token . ‘/’ . $res[‘result’][‘file_path’]; $dest = __DIR__ . ‘/’ . time() . ‘-‘ . basename($src); copy($src, $dest); >>
Документ
Запрос от Телеграм:
Array ( [update_id] => 17474201 [message] => Array ( [message_id] => 44 [from] => Array ( [id] => 123456789 [is_bot] => [first_name] => UserName [language_code] => ru-US ) [chat] => Array ( [id] => 123456789 [first_name] => UserName [type] => private ) [date] => 1541925844 [document] => Array ( [file_name] => IMG_7947.JPG [mime_type] => image/jpeg [thumb] => Array ( [file_id] => AAQCABMNv_QOAATwQugveIZBldZ3AAIC [file_size] => 2644 [width] => 67 [height] => 90 ) [file_id] => BQADAgADtQEAAqu9OEhzn2cEz8LpkgI [file_size] => 1976218 ) ) )
Скачивание файлов происходит по такой же схеме как у фотографий.
if (!empty($data[‘message’][‘document’])) < $file_id = $data[‘message’][‘document’][‘file_id’]; $ch = curl_init(‘https://api.telegram.org/bot’ . $token . ‘/getFile’); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, array(‘file_id’ =>$file_id)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); curl_close($ch); $res = json_decode($res, true); if ($res[‘ok’]) < $src = ‘https://api.telegram.org/file/bot’ . $token . ‘/’ . $res[‘result’][‘file_path’]; $dest = __DIR__ . ‘/’ . time() . ‘-‘ . basename($src); copy($src, $dest); >>
Ответы бота
Отправка текста
$response = array( ‘chat_id’ => $data[‘message’][‘chat’][‘id’], ‘text’ => ‘Хай!’ ); $ch = curl_init(‘https://api.telegram.org/bot’ . $token . ‘/sendMessage’); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $response); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_exec($ch); curl_close($ch);
Отправка картинки
$response = array( ‘chat_id’ => $data[‘message’][‘chat’][‘id’], ‘photo’ => curl_file_create(__DIR__ . ‘/image.png’) ); $ch = curl_init(‘https://api.telegram.org/bot’ . $token . ‘/sendPhoto’); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $response); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_exec($ch); curl_close($ch);
Отправка файла
Пример скрипта
Скрипт простейшего бота. Он отвечает на вопросы и сохраняет файлы и изображение на сервере.
define(‘TOKEN’, ‘123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11’); // Функция вызова методов API. function sendTelegram($method, $response) < $ch = curl_init(‘https://api.telegram.org/bot’ . TOKEN . ‘/’ . $method); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $response); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); curl_close($ch); return $res; >// Прислали фото. if (!empty($data[‘message’][‘photo’])) < $photo = array_pop($data[‘message’][‘photo’]); $res = sendTelegram( ‘getFile’, array( ‘file_id’ =>$photo[‘file_id’] ) ); $res = json_decode($res, true); if ($res[‘ok’]) < $src = ‘https://api.telegram.org/file/bot’ . TOKEN . ‘/’ . $res[‘result’][‘file_path’]; $dest = __DIR__ . ‘/’ . time() . ‘-‘ . basename($src); if (copy($src, $dest)) < sendTelegram( ‘sendMessage’, array( ‘chat_id’ =>$data[‘message’][‘chat’][‘id’], ‘text’ => ‘Фото сохранено’ ) ); > > exit(); > // Прислали файл. if (!empty($data[‘message’][‘document’])) < $res = sendTelegram( ‘getFile’, array( ‘file_id’ =>$data[‘message’][‘document’][‘file_id’] ) ); $res = json_decode($res, true); if ($res[‘ok’]) < $src = ‘https://api.telegram.org/file/bot’ . TOKEN . ‘/’ . $res[‘result’][‘file_path’]; $dest = __DIR__ . ‘/’ . time() . ‘-‘ . $data[‘message’][‘document’][‘file_name’]; if (copy($src, $dest)) < sendTelegram( ‘sendMessage’, array( ‘chat_id’ =>$data[‘message’][‘chat’][‘id’], ‘text’ => ‘Файл сохранён’ ) ); > > exit(); > // Ответ на текстовые сообщения. if (!empty($data[‘message’][‘text’])) < $text = $data[‘message’][‘text’]; if (mb_stripos($text, ‘привет’) !== false) < sendTelegram( ‘sendMessage’, array( ‘chat_id’ =>$data[‘message’][‘chat’][‘id’], ‘text’ => ‘Хай!’ ) ); exit(); > // Отправка фото. if (mb_stripos($text, ‘фото’) !== false) < sendTelegram( ‘sendPhoto’, array( ‘chat_id’ =>$data[‘message’][‘chat’][‘id’], ‘photo’ => curl_file_create(__DIR__ . ‘/image.jpg’) ) ); exit(); > // Отправка файла. if (mb_stripos($text, ‘файл’) !== false) < sendTelegram( ‘sendDocument’, array( ‘chat_id’ =>$data[‘message’][‘chat’][‘id’], ‘document’ => curl_file_create(__DIR__ . ‘/test.txt’) ) ); exit(); > >
- ← Как сбросить root-пароль Linux-сервера
- Авторизация на сайте через Google →
Источник: it-stories.ru
Чат-бот Telegram и QlikView Qlik Sense. Интеграция через PHP
В этой статье я расскажу как создавать закрытый Telegram-канал, в который будут приходить важные оповещения. Плюс расскажу, как можно получать данные из QlikView и Qlik Sense с помощью чат-бота, которому Вы например пишите что хотите получить. Например, «Продажи за вчерашний день по Москве». И система Вам автоматически присылает отчет — картинку или Excel-файл.
Чат-бот Telegram и QlikView Qlik Sense. Интеграция через PHP
Статья будет писаться постепенно и кусками. Подписывайтесь на мой Telegram-канал https://t.me/qlik_insight, чтобы не пропустить новую литературу по QlikView и Qlik Sense, а также самые «мощные», с технологической точки зрения, статьи.
Структура статьи будет выглядеть примерно так:
- Создание системы уведомлений в закрытом телеграм-канале (telegram канал, робот, отправка сообщений);
- Создание простого чат-бота (раскрою структуру приема и отправки сообщений);
- Создание команды для получения данных из приложения QlikView (с помощью API);
- Создание команды для получения данных из приложения Qlik Sense (с помощью API).
Создание системы уведомлений в закрытом Telegram-канале с применением QlikView или Qlik Sense
Процедура отправки сообщений в Telegram канал довольно простая. Нужно выполнить несколько действий, после которых станет доступным «интерфейс» отправки текстовых сообщений в телеграм-канал.
Краткий обзор шагов:
- Создать Telegram-канал;
- Создать бота;
- Получить все необходимые параметры объектов;
- Собрать URL-строку;
- Отправить в браузере сообщение (тестирование);
- Отправить сообщение из скрипта QlikView.
А теперь пройдемся более подробнее по шагам.
Шаг 1 — создаем закрытый телеграм-канал
Заходим в мобильное приложение Telegram и создаем закрытый телеграм-канал (все как на картинках).
Нажимаем «New Channel»:
Заполняем наименование канала и его описание:
Выбираем «Private Channel», чтобы в канал можно было зайти только по ссылке:
Закрытый телеграм создан:
Для Telegram канала выбираем фотографию:
Должен получиться вот такой вот закрытый Telegram-канал, в который мы будем посылать сообщения через чат-бота.
Шаг 2 — регистрируем чат-бота
Далее нам необходимо создать чат-бота. Для этих целей внутри самого Telegram есть системный чат-бот BotFather:
Чат-бот пришлет вариации команд, в том числе /newbot для создания бота. Выбираем эту команду:
BotFather предлагает ввести имя нашего бота (то, которое будет отображаться, можно на кириллице):
Далее нам необходимо ввести USERNAME Бота, которое должно оканчиваться на bot:
Если имя занято, то BotFather предложит сделать попытку снова (пока не попадется свободный username):
Кликаем на наш бот и нажимаем START:
/start — это название команды. В дальнейшем в бот можно ввести список команд и каждой команде на стороне backend (на сервере) задать последовательность тех или иных действий.
При регистрации бота команда /start пустая:
Помните, чат бот BotFather выдал нам token? Это ключевая строка, без которой мы не сможем взаимодействовать с ботом. Скопируйте ее себе куда-нибудь. Если вдруг потеряете, то всегда сможете вернуться к BotFather и попросить прислать его токен снова.
Шаг 3 — Добавляем бота в качестве администратора в Telegram-канале (через мобильное приложение)
Чтобы бот смог присылать сообщения в телеграм-канал, его необходимо добавить в администраторы канала. Заходим в настройки канала и кликаем на Administrators:
Add Administrator — выбираем пункт «Добавить администратора»
Все — бот добавлен в качестве администратора в закрытый Telegram канал:
Шаг 4 — Получаем ID закрытого телеграм-канала для отправки сообщений через чат-бот и структура ссылки
Для приватного телеграм канала необходимо взять цифры без буквы «c» и до знака «_». И добавить префикс -100.
https://api.telegram.org/bot######################/sendMessage?chat_id=-100#######################128578;
Шаг 6 — Отправляем сообщение в telegram-канал из QlikView 12
Теперь отправим простое сообщение из QlikView Script. Копируем наш URL, переходим в приложение QlikView 12 и выбираем Web Files:
Вбиваем наш URL:
Получаем строку. Эта строка будет каждый раз разная, но для начала мы формируем структуру запроса:
После того, как структура запроса сформирована, меняем название поля на *. Далее это поле можно назвать по человечески, но эту задачу здесь я решать пока не буду. В этой статье я раскрываю только принципы организации работы с чат ботом и телеграм каналом.
В чат пришли два сообщения — первое, которое пришло после создания структуры скрипта, а второе после перезагрузки скрипта.
Специальные символы для текстовой строки (перенос строки и т.д.)
Если Вам необходимо в сообщении перенести строку, то необходимо использовать спецсимволы. Ниже приведен их список:
Вне контура Qlik: отправка сообщения через PHP в телеграм-канал
Токен и chatID неправильный (исправил символы).
Источник: ivan-shamaev.ru
Подключаем webhooks для репозитория
![]()
Вебхуки (Webhooks) позволяют настроить репозиторий для отправки различных запросов и сообщений на удалённый сервер при возникновении на репозитории определённых событий.
Вебхук состоит из следующих компонентов:
- Субъект — ресурс, в котором создаётся вебхук, то есть собственно репозиторий.
- Одно или несколько событий — события, посылаемые вебхуком при срабатывании триггера (у большинства репозиториев событием по умолчанию является push).
- URL — конечная точка, куда вебхук должен отправить данные.
После создания вебхука для определенного события, каждый раз, когда это событие будет происходить, вебхук будет срабатывать и отправлять информацию на заданный URL. Таким образом, можно рассматривать вебхуки как систему уведомлений.
Создание сервера
Перед тем, как создать вебхук в репозитории, нам нужен сервер, который будет принимать данные. Особенность вебхуков заключается в том, что их можно интегрировать в различные приложения или сервисы (Telegram, Битрикс24 и так далее).
Для примера воспользуемся месседжером Discord, который также поддерживает интеграцию вебхуков. Создадим в нём новый сервер, который будет получать данные от репозитория.
Затем на созданном сервере нажмём на его название и в открывшемся меню выберем Настройки сервера.
В открывшемся окне настроек выберем раздел Вебхуки, где будет предложено создать новый вебхук.
В появившемся окне будет предложено задать следующие данные для вебхука:
- Имя вебхука, которое будет отображаться в сообщениях.
- Канал, в который будут приходить сообщения (по умолчанию, в Discord создаётся канал #general, при желании вы можете создать новый канал специально для вебхука и задать его в параметрах).
- Иконка для вебхука.
В поле URL вебхука автоматически сгенерируется URL, который нужно скопировать. Этот URL затем будет использоваться в качестве конечной точки при отправки вебхука.
Введя все нужные данные, сохраняем и завершаем создание вебхука. После этого вебхук будет отображаться в списке вебхуков, где его можно будет отредактировать.
Создание вебхука на репозитории
Теперь нужно создать вебхук на стороне репозитория, который будет отправлять данные на сервер. Воспользуемся для этого репозиторием GitHub.
В уже имеющемся проекте откроем вкладку Settings. Зайдём в раздел Webhooks и нажмём Add webhook, чтобы создать новый вебхук.
Здесь, аналогично созданию вебхука на сервере, нужно задать значения следующим полям:
Payload URL — собственно конечная точка, адрес сервера, куда нужно отправлять данные. Сюда нужно скопировать URL, который был сгенерирован в Discord при создании вебхука.
Примечание: в официальной документации говорится, что для взаимодействия между Discord и GitHub крайне важно добавить в конец URL ‘/github‘. Например:https://discordapp.com/api/webhooks/424423662137901059/45LkPViOlhf7HEtpG_Pm8C-_B7Q_9ykWp9luUxP35XrM3kl8BVxPzKG3-oq-gzGzJksF/github
Введя все необходимые данные, сохраним вебхук, нажав Add webhook. Если всё сделано правильно, в списке вебхуков рядом с созданным вебхуком появится галочка, означающая, что соединение с сервером работает.
На этом подключение вебхуков завершено. Теперь, когда мы будем выполнять push в этот репозиторий, в Discord будут приходить соответствующие сообщения.
Добавление вебхука через Telegram
В Telegram существует большое количество ботов для автоматизации выполнения определённых операций. Одним из таких ботов является Integram, который позволяет интегрировать в Telegram различные сервисы в пару кликов.
Подключив Integram, можно увидеть диалог, предлагающий выбрать, что именно необходимо подключить.
Выберем GitHub, после чего откроется диалог с одноимённым ботом, который предложит ряд команд для работы с ним.
Пропишем команду /connect. Бот сгенерирует ссылку, по которой нужно пройти, чтобы связать бота с аккаунтом на GitHub.
После того, как соединение между ними будет установлено, нужно ввести команду /newintegration для того, чтобы интегрировать вебхук в нужный репозиторий.
Здесь будет предложено выбрать, какой репозиторий необходимо подключить. Далее нужно будет выбрать, куда отправлять данные: в личные сообщения или в группу.
После завершения интеграции можно увидеть сообщение о том, что репозиторий подключен. Если зайти в его настройки на GitHub, то в списке вебхуков будет созданный ботом вебхук.
В результате в Telegram будут приходить уведомления, отправленные этим вебхуком.
Источник: android-tools.ru