Разработка чат-ботов для Telegram и Slack c помощью PHP

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту
Архив новостей

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


Общая информация


Данная статья описывает способ создания простых чат-ботов сервисов Telegram и Slack на примере проверки IP|Email на спам с помощью антиспам-сервиса CleanTalk.


Telegram


Первый шаг - это создание своего бота (в нашем случае @CleanTalkBot) - для этого в Telegram существует бот @BotFather. Добавляем его в Ваш аккаунт Telegram и задаём команду /newbot. Бот попросит Вас ввести название бота - вводим название. После этого вводим имя пользователя бота - мы сделали название бота и имя пользователя бота одинаковыми - при этом имя пользователя должно оканчиваться на bot или Bot - например HabrArticleBot или CleanTalkBot. После ввода имени пользователя бот будет создан и Вам будет выдан токен, который будет использоваться в дальнейшем для идентификации.



Второй шаг - установка так называемого webhook - проще говоря обработчика запросов, поступающих в чат-бот от пользователей. Когда пользователь задаёт команду Вашему чат-боту, Telegram обращается к адресу, который был задан в качестве webhook, передаёт сообщение пользователя и служебную информацию, Ваш обработчик формирует ответ и передаёт обратно Telegram, после чего Telegram отдаёт ответ пользователю. Делается это с помощью команды curl в терминале -


curl -d "url=https://example.com/telegramwaiter.php" https://api.telegram.org/botYOUR_TELEGRAM_TOKEN/setWebhook

где YOUR_TELEGRAM_TOKEN - тот самый токен, который был выдан Вам ботом @BotFather ранее, а https://example.com/telegramwaiter.php - это тот адрес, по которому будет обращаться Telegram с запросами. В ответ Telegram должен вернуть json строку типа


{"ok":true,"result":true,"description":"Webhook is set"}

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


Здесь нужно добавить, что Telegram работает только по https - если у Вас сертификат, выпущенный специальными организациями (не самоподписанный), то всё отлично, если же Вы желаете использовать самоподписанные сертификаты - обратитесь к документации здесь https://core.telegram.org/bots/self-signed .


Третий шаг - остается написать сам обработчик запросов от Telegram telegramwaiter.php - примерный скрипт на языке PHP выглядит так


<?php set_time_limit(0); // Установка токена $botToken = "YOUR_TELEGRAM_TOKEN"; $website = "https://api.telegram.org/bot".$botToken; // Получаем запрос от Telegram $content = file_get_contents("php://input"); $update = json_decode($content, TRUE); $message = $update["message"]; // Получаем внутренний номер чата Telegram и команду, введённую пользователем в чате $chatId = $message["chat"]["id"]; $text = $message["text"]; // Пример обработки команды /start if ($text == '/start') { $welcomemessage = 'Welcome!!! Check IP/Email for spam giving "check IP/Email" command'; // Отправляем сформированное сообщение обратно в Telegram пользователю file_get_contents($website."/sendmessage?chat_id=".$chatId."&text=".$welcomemessage); } ?>

Порядок такой - получаем в переменной $text команду от пользователя в чате, формируем в соответствии с нужной логикой сообщение и отдаём обратно пользователю с помощью функции file_get_contents().


Как всё это работает можно посмореть добавив бота @CleanTalkBot в Telegram - вводим команду check IP|Email и получаем информацию о том, является ли указанный IP|Email спамным.


Пример ответа


Email stop_email@example.com is BLACKLISTED. Frequency 999. Updated Apr 24 2019. https://cleantalk.org/blacklists/stop_email@example.com.

Slack


У сервиса Slack немного другой подход к созданию чат-ботов.


Идём сюда - https://api.slack.com/apps/new - и создаём новое приложение Slack.



AppName - название приложения.
Short description - краткое описание приложения.
Describe what your app does on Slack - полное описание приложения.
Link to clear instructions on how to install your Slack app.
Link to support for your Slack app
- две ссылки на страницы с описанием установки и использования данного приложения.


В списке приложений https://api.slack.com/apps выбираем наше приложение и переходим в меню справа по ссылке Slash Commands и жмём кнопку Create new command.



В появившейся форме следующие поля



Command - вводим команду, начинающуюся с / - например /ctcheck.


Request URL - URL обработчика запроса команды - аналог webhook Telegram (например https://cleantalk.org/slackwaiter.php).


Short description - краткое описание, что с помощью создаваемой команды можно сделать.


Сохраняем команду. Обратите внимание - Ваш сайт должен работать по https - при этом самоподписанные сертификаты НЕ ПОДДЕРЖИВАЮТСЯ сервисом Slack.


Токен для идентификации Вы можете получить на странице списка команд - под списком команд есть поле Verification token - далее он фигурирует как YOUR_SLACK_TOKEN.


Пишем обработчик slackwaiter.php на языке PHP


<?php set_time_limit(0); // Проверяем входящий от Slack токен на соответствие выданному в панели управления Slack if ($_POST['token'] == 'YOUR_SLACK_TOKEN') { // $param - это тот текст, который идёт за командой // например если команда /ctcheck 127.0.0.1 // то $param = 127.0.0.1 $param = $_POST['text']; // Далее в соответствии с внутренней логикой формируется ответ $slackresponse = -Здесь ответ на команду-; } else $slackresponse = -Ошибка-; $response = array(); $response['text'] = $slackresponse; header('Content-Type: application/json'); echo json_encode($response); ?>

Далее идём сюда https://api.slack.com/docs/slack-button и в разделе Add the Slack button ставим галочки incoming webhook и commands - Slack формирует html-код кнопки, по нажатию на которую другие команды смогут интегрировать Ваше приложение в свой аккаунт Slack.


Указанную выше кнопку размещаем на Вашем сайте - по её нажатию открывается следующая картина



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


По нажатию на кнопку Authorize Slack редиректит пользователя на страницу Redirect URI(s), которая задаётся Вами (разработчиком) здесь - https://api.slack.com/apps, выбираем Ваше приложение и переходим по ссылке App Credentials - видим следующую картину



Slack не просто редиректит пользователя на данную страницу, а добавляет GET-переменную code со значением, которая позже должна быть обработано скриптом - например


https://cleantalk.org/authscript.php?code=Slack_Code

Далее приведём примерный код скрипта authscript.php. CLIENT_ID и CLIENT_SECRET берём из соответствующих полей на предыдущем изображении.


<?php if (isset($_GET['code'])) { $client_id = 'CLIENT_ID'; $client_secret = 'CLIENT_SECRET'; $code = $_GET['code']; $response = file_get_contents("https://slack.com/api/oauth.access?client_id=".$client_id."& client_secret=".$client_secret."&code=".$code); $responsearr = json_decode($response, true); if (isset($responsearr['team_name'])){ header('Location: https://'.$responsearr['team_name'].'.slack.com'); exit(); } else { echo 'Ошибка.'; exit(); } } else exit(); ?>

Порядок такой - получаем от Slack GET переменную code и ещё с двумя параметрами - client_id и client_secret - отправляем GET запросом на страницу https://slack.com/api/oauth.access. В ответ Slack пришлёт json-строку с множеством полей - что-то типа такого


{-ok-: true, -team_name-: -your_team_name-}

после чего просто получаем имя команды и редиректим пользователя на главную страницу его команды https://your_team_name.slack.com - приложение авторизовано, можно пользоваться командами приложения.


Команда сервиса Cleantalk надеется, что данная информация окажется полезной для всех, кто интересуется разработкой чат-ботов.


Источник: habrahabr.ru

Комментарии: