Как сделать webhook Telegram

Настроить webhook довольно просто. Вам нужно знать только две вещи: ваш токен API (вы должны получить его с первого шага) и URL-адрес, по которому вы будете размещать своего бота. URL-адрес будет выглядеть примерно так: https://yourdomain.com/yourbot.php. Убедитесь, что вы включили https в начале URL; в противном случае Telegram не отправит вебхук.
Теперь в обычном веб-браузере перейдите по адресу https://api.telegram.org/bot/setwebhook?url=https://yourdomain.com/yourbot.php Вуаля, ваш webhook теперь работает!

  • Шаг третий: пишем логику для бота.

Время для веселья! На данный момент у вас есть все, что нужно, чтобы написать логику для своего бота Telegram. Вот как я буду продолжать . Я слишком мало занимаюсь программированием, чтобы даже иметь IDE на своем компьютере, поэтому я просто открою Блокнот и буду писать свой код там. Так как это PHP, убедитесь, что вы обрамили логику в . Первое, что нужно сделать, это инициализировать переменную, которая облегчит нам вызов API Telegram. Просто добавить код $path=»https://api.telegram.org/bot «;

Уведомления о заявках в Telegram. Action, вебхуки и Integromat

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

Поскольку мы будем получать обновления с помощью вебхука, давайте создадим и заполним массив этими данными обновления: $update = json_decode (file_get_contents («php: // input»), TRUE);

(когда мы настраивали бота в первом шаге, мы пользовались функцией getupdate и телеграм выдавал массив данных, который содержал кучу информации в том числе и ID чата, данные пользователя, а так же текст отправленного последнего сообщения. Весь этот массив сейчас записывается в переменную $ update)

Теперь, для удобства, давайте извлечем две важные части данных из этого обновления (как я говорил массив данных)- идентификатор чата и сообщение (если обновление не вызвано новым сообщением, это поле может быть пустым, и мы будем писать код для этого позже)

$chatId = $update[«message»][«chat»][«id»];
$message = $update[«message»][«text»];
(то есть $chatId это ID чата $message — текст сообщения которое юзер отправил боту)

Если вы еще не догадались, что этот бот должен делать, я хочу, чтобы он сообщал мне текущую погоду для моего выбора. Для этого я создам команду / weather [location].Чтобы сделать это, давайте создадим оператор if, чтобы увидеть, начинается ли сообщение с / weather. Мы можем сделать это с помощью функции strpos (), которая сообщает нам положение подстроки в строке:
if (strpos($message, «/weather») == 0) >

В фигурных скобках оператора if напишем код для извлечения местоположения, отрубив первые девять символов сообщения (сколько символов используется командой / weather, а также пробел, который последует за ним):
if (strpos($message, «/weather») == 0) $location = substr($message, 9);

Telegram Bot — Part 5 — Set Webhook


>

(то есть если условие выполнено и бот увидел слово /weather он начнет искать место, где смотреть погоду, и чтобы это сделать он берет из текста (помните он у нас записан в переменной $message) остальные символы кроме 9 которые относятся к команде /weather.И весь этот текст он записывает в переменную $location)

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

Теперь мы получим данные о погоде для этого местоположения из OpenWeatherMap:

(обратите внимание что для выделения данных из ответа сервера погоды используется такая же конструкция как и для api telegram. И да, на сервере погоды нужно получить свой токен для использования их API)

Здесь мы должны реализовать какую-то обработку ошибок, но я не буду беспокоиться. Вместо этого давайте надеяться на лучшее и соберем ответ нашего бота с помощью Telegram API:

file_get_contents($path.»/sendmessage?chat_id=».$chatId.».$location.»: «. $.weather);

полный код будет выглядеть так:

  • Шаг четвертый: загрузи бота на сервак

UPDATE: проверил все на практике и появилось несколько уточнений. В конструкции if с функцией strpos лучше использовать не двойное равно ==, а тройное ===, тогда можно добавить несколько аналогичных конструкций для разных условий. Я например тупо добавил боту команды (через отца бота) и теперь конкретная команду показывает погоду в конкретном городе. Удобно тем что не нужно вводить команду и локацию, а можно тупо щелкнуть по подсказке команды и сразу получить результат.
В API сайта погоды, можно извлечь температуру, для этого нужно в квадратных скобках поместить [«main»][«temp»], а для того чтобы температура отображалась в цельсиях, то в адрес нужно добавить еще и lang=ru
Можно нагуглить json decode online и подсунуть туда все то, что выдает api сайта погоды. Все это потом появится на выходе декодера в структурированном виде и потом будет проще понять как извлечь эти данные. Кстати в той статье в самом начале(ссылка на инструкцию на русском языке) эти расшифровки json кода даются и уже прочитав статью второй раз я многое из нее понял. И даже добавил из нее конструкцию по сохранению входящего запроса в текстовый файл. Буквально 4 строчки кода, которые тупо копипастятся:

Источник: boolkin.blogspot.com

Чат-бот Telegram и QlikView Qlik Sense. Интеграция через PHP

Чат бот телеграм

В этой статье я расскажу как создавать закрытый Telegram-канал, в который будут приходить важные оповещения. Плюс расскажу, как можно получать данные из QlikView и Qlik Sense с помощью чат-бота, которому Вы например пишите что хотите получить. Например, «Продажи за вчерашний день по Москве». И система Вам автоматически присылает отчет — картинку или Excel-файл.

qlikview

Чат-бот Telegram и QlikView Qlik Sense. Интеграция через PHP

Статья будет писаться постепенно и кусками. Подписывайтесь на мой Telegram-канал https://t.me/qlik_insight, чтобы не пропустить новую литературу по QlikView и Qlik Sense, а также самые «мощные», с технологической точки зрения, статьи.
Структура статьи будет выглядеть примерно так:

  1. Создание системы уведомлений в закрытом телеграм-канале (telegram канал, робот, отправка сообщений);
  2. Создание простого чат-бота (раскрою структуру приема и отправки сообщений);
  3. Создание команды для получения данных из приложения QlikView (с помощью API);
  4. Создание команды для получения данных из приложения Qlik Sense (с помощью API).

Создание системы уведомлений в закрытом Telegram-канале с применением QlikView или Qlik Sense

Процедура отправки сообщений в Telegram канал довольно простая. Нужно выполнить несколько действий, после которых станет доступным «интерфейс» отправки текстовых сообщений в телеграм-канал.

Краткий обзор шагов:

  1. Создать Telegram-канал;
  2. Создать бота;
  3. Получить все необходимые параметры объектов;
  4. Собрать URL-строку;
  5. Отправить в браузере сообщение (тестирование);
  6. Отправить сообщение из скрипта QlikView.

А теперь пройдемся более подробнее по шагам.

qlikview

Шаг 1 — создаем закрытый телеграм-канал

Заходим в мобильное приложение Telegram и создаем закрытый телеграм-канал (все как на картинках).

Создание закрытого телеграм канала для получения уведомлений по QlikView и Qlik Sense

Нажимаем «New Channel»:

Заполняем наименование канала и его описание:

Создание закрытого телеграм канала для получения уведомлений по QlikView и Qlik Sense

Выбираем «Private Channel», чтобы в канал можно было зайти только по ссылке:

Создание закрытого телеграм канала для получения уведомлений по QlikView и Qlik Sense

qlikview

Закрытый телеграм создан:

Создание закрытого телеграм канала для получения уведомлений по QlikView и Qlik Sense

Для Telegram канала выбираем фотографию:

Создание закрытого телеграм канала для получения уведомлений по QlikView и Qlik Sense
Должен получиться вот такой вот закрытый Telegram-канал, в который мы будем посылать сообщения через чат-бота.
Создание закрытого телеграм канала для получения уведомлений по QlikView и Qlik Sense

Шаг 2 — регистрируем чат-бота

Далее нам необходимо создать чат-бота. Для этих целей внутри самого Telegram есть системный чат-бот BotFather:

Чат-бот пришлет вариации команд, в том числе /newbot для создания бота. Выбираем эту команду:

BotFather предлагает ввести имя нашего бота (то, которое будет отображаться, можно на кириллице):

Далее нам необходимо ввести USERNAME Бота, которое должно оканчиваться на bot:

Если имя занято, то BotFather предложит сделать попытку снова (пока не попадется свободный username):

Кликаем на наш бот и нажимаем START:

/start — это название команды. В дальнейшем в бот можно ввести список команд и каждой команде на стороне backend (на сервере) задать последовательность тех или иных действий.

При регистрации бота команда /start пустая:

qlikview

Помните, чат бот BotFather выдал нам token? Это ключевая строка, без которой мы не сможем взаимодействовать с ботом. Скопируйте ее себе куда-нибудь. Если вдруг потеряете, то всегда сможете вернуться к BotFather и попросить прислать его токен снова.

Шаг 3 — Добавляем бота в качестве администратора в Telegram-канале (через мобильное приложение)

Чтобы бот смог присылать сообщения в телеграм-канал, его необходимо добавить в администраторы канала. Заходим в настройки канала и кликаем на Administrators:

Добавляем бота в качестве администратора в Telegram-канале (через мобильное приложение)

Add Administrator — выбираем пункт «Добавить администратора»

Добавляем бота в качестве администратора в Telegram-канале (через мобильное приложение)

Добавляем бота в качестве администратора в Telegram-канале (через мобильное приложение)

Все — бот добавлен в качестве администратора в закрытый Telegram канал:

Добавляем бота в качестве администратора в Telegram-канале (через мобильное приложение)

Шаг 4 — Получаем ID закрытого телеграм-канала для отправки сообщений через чат-бот и структура ссылки

Получаем chat_id Для приватного телеграм-канала

Для приватного телеграм канала необходимо взять цифры без буквы «c» и до знака «_». И добавить префикс -100.

https://api.telegram.org/bot######################/sendMessage?chat_id=-100#######################128578;

Шаг 6 — Отправляем сообщение в telegram-канал из QlikView 12

Теперь отправим простое сообщение из QlikView Script. Копируем наш URL, переходим в приложение QlikView 12 и выбираем Web Files:

Отправляем сообщение в telegram-канал из QlikView 12

Вбиваем наш URL:

Отправляем сообщение в telegram-канал из QlikView 12

Получаем строку. Эта строка будет каждый раз разная, но для начала мы формируем структуру запроса:

Отправляем сообщение в telegram-канал из QlikView 12

После того, как структура запроса сформирована, меняем название поля на *. Далее это поле можно назвать по человечески, но эту задачу здесь я решать пока не буду. В этой статье я раскрываю только принципы организации работы с чат ботом и телеграм каналом.

qlikview

В чат пришли два сообщения — первое, которое пришло после создания структуры скрипта, а второе после перезагрузки скрипта.

Отправляем сообщение в telegram-канал из QlikView 12

Специальные символы для текстовой строки (перенос строки и т.д.)

Если Вам необходимо в сообщении перенести строку, то необходимо использовать спецсимволы. Ниже приведен их список:

Вне контура Qlik: отправка сообщения через PHP в телеграм-канал

Токен и chatID неправильный (исправил символы).

Источник: ivan-shamaev.ru

Как создать бота в Телеграм?

Как создать бота в телеграмм?

Webhook — метод, благодаря которому ваш бот делает POST-запрос к указанному URL, содержащий JSON-объект.

Если вы хотите, убедиться, что запрос-Webhook приходит именно от телеграмм, рекомендуется использовать секретный ключ в URL, например https://www.example.com/ . Так как никто не знает token вашего бота, вы можете быть уверены, что запрос пришел именно от телеграмм.

Как указать боту URL на который необходимо делать запросы?

Чтобы указать URL-адрес своему боту, достаточно в браузере сделать запрос:

https://api.telegram.org/bot/ setWebhook ?url=http s ://

После этого действия, все обновления происходящие в боте, будут в виде объекта JSON отправлены POST-запросом на ваш URL.

Напишем небольшой скрипт, который на запрос бота, будет отдавать весь этот JSON-объект.

[pastacode lang=»php» manual=»%24content%20%3D%20file_get_contents(%22php%3A%2F%2Finput%22)%3B%20%2F%2F%D0%97%D0%B0%D0%BF%D0%B8%D1%81%D1%8B%D0%B2%D0%B0%D0%B5%D1%82%20%D1%81%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D0%BC%D0%BE%D0%B5%20%D0%B2%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%83%D1%8E%0A%24token%3D’357651260%3AAAGoiiNiQGLmagsL9GPfAYbFQ6-1uSXJwk5’%3B%20%2F%2F%D0%A2%D0%BE%D0%BA%D0%B5%D0%BD%0A%24update%20%3D%20json_decode(%24content%2C%20TRUE)%3B%0A%24chat_id%20%3D%20%24update%5B’message’%5D%5B’chat’%5D%5B’id’%5D%3B%20%2F%2Fid%20%D1%87%D0%B0%D1%82%D0%B0%0A%24parameters%20%3D%20%5B’chat_id’%3D%3E%20%24chat_id%2C’parse_mode’%3D%3E’HTML’%2C’text’%20%3D%3E%20%24content%5D%3B%0A%24url2%20%3D%20’https%3A%2F%2Fapi.telegram.org%2Fbot’.%24token.’%2FsendMessage%3F’.http_build_query(%24parameters)%3B%0Afile_get_contents(%24url2)%3B» message=»» highlight=»» provider=»manual»/]

Отправим слово « test » нашему боту.

Чтобы придать содержимому более читабельный вид, воспользуемся сервисом и вставим туда полученные данные.

  • « update_id « : 585420345 ,
  • « message « : <
  • « message_id « : 2 ,
  • « from « : <
  • « id « : 276583657 ,
  • « first_name « : «» ,
  • « username « : «username» ,
  • « language_code « : «ru»
  • « id « : 276583657 ,
  • « first_name « : «» ,
  • « username « : «username» ,
  • « type « : «private»

Отлично, все работает.

Создание скрипта для получения цены

В таблице нас интересует два столбца: price и art

  • Необходимо создать скрипт, который получает артикул (art) посредством метода GET.
  • Ищем в базе данных строку с данным артикулом.
  • Выводим цену (price)

[pastacode lang=»php» manual=»if(isset(%24_GET%5B’art’%5D))%7B%24art%20%3D%20htmlspecialchars(%24_GET%5B’art’%5D)%3B%7D%20%2F%2F%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B0%D0%B5%D0%BC%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5%0A%0A%24query%20%3D%20mysqli_query(%24db%2C%22SELECT%20%60price%60%20FROM%20%60product%60%20where%20%60art%60%20%3D%20’%24art’%22)%3B%20%2F%2F%D0%98%D1%89%D0%B5%D0%BC%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D1%83%20%D0%BF%D0%BE%20%D0%B0%D1%80%D1%82%D0%B8%D0%BA%D1%83%D0%BB%D1%83%0A%24row%20%3D%20mysqli_fetch_array(%24result%2C%20MYSQLI_ASSOC)%3B%20%0Aecho%20%24row%5B’price’%5D.’%D1%80.’%3B%20%2F%2F%D0%92%D1%8B%D0%B2%D0%BE%D0%B4%D0%B8%D0%BC%20%D1%86%D0%B5%D0%BD%D1%83″ message=»» highlight=»» provider=»manual»/]

Сделаем запрос указав артикул:

/scrip.php? art=ART002

В таблице, артикулу «ART002» соответствует цена «9500», поэтому данный запрос выдаст нам 9500р.

Соединяем бота и скрипт

[pastacode lang=»php» manual=»%24chat_id%20%3D%20%24update%5B’message’%5D%5B’chat’%5D%5B’id’%5D%3B%20%2F%2F%20id%20%D1%87%D0%B0%D1%82%D0%B0%0A%24message%20%3D%20%24update%5B’message’%5D%5B’text’%5D%3B%20%2F%2F%D0%A2%D0%B5%D0%BA%D1%81%D1%82%20%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B9%20%D0%BF%D1%80%D0%B8%D1%81%D0%BB%D0%B0%D0%BB%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%0A%0Aif(isset(%24message))%7B%24art%20%3D%20htmlspecialchars(%24message)%3B%7D%20%2F%2F%20%D0%97%D0%B0%D0%BD%D0%BE%D1%81%D0%B8%D0%BC%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%20%D0%B2%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%83%D1%8E%0A%0A%24query%20%3D%20mysqli_query(%24db%2C%22SELECT%20%60price%60%20FROM%20%60product%60%20where%20%60art%60%20%3D%20’%24art’%22)%3B%20%2F%2F%D0%98%D1%89%D0%B5%D0%BC%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D1%83%20%D1%81%20art%20%3D%20%24art%0A%24row%20%3D%20mysqli_fetch_array(%24result%2C%20MYSQLI_ASSOC)%3B%20%0A%24price%20%3D%20%24row%5B’price’%5D.’%D1%80.’%3B%0A%24parameters%20%3D%20%5B’chat_id’%3D%3E%20%24chat_id%2C’parse_mode’%3D%3E’HTML’%2C’text’%20%3D%3E%20%24price%20%5D%3B%0A%24url2%20%3D%20’https%3A%2F%2Fapi.telegram.org%2Fbot’.%24token.’%2FsendMessage%3F’.http_build_query(%24parameters)%3B%0Aif(%24row%5B’price’%5D)%7B%0A%09file_get_contents(%24url2)%3B%20%2F%2F%20%D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC%20%D0%BE%D1%82%D0%B2%D0%B5%D1%82%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8E%0A%7D%0A» message=»» highlight=»» provider=»manual»/]

Теперь, если мы отправим боту строчку — ART002, то в ответ он выведет нам цену на товар.

Это простейший пример, а не полноценный бот, который требует больше кода, больше логики и условий. Данный пример всего лишь показывает как бот взаимодействует с нашим скриптом.

Источник: tgrm.su

Оцените статью
Добавить комментарий