Общая информация
Данная статья описывает способ создания простых чат-ботов сервисов Telegram и Slack на примере проверки IP|Email на спам с помощью антиспам-сервиса CleanTalk.
Telegram
Первый шаг — это создание своего бота (в нашем случае @CleanTalkBot) — для этого в Telegram существует бот @BotFather. Добавляем его в Ваш аккаунт Telegram и задаём команду /newbot. Бот попросит Вас ввести название бота — вводим название. После этого вводим имя пользователя бота — мы сделали название бота и имя пользователя бота одинаковыми — при этом имя пользователя должно оканчиваться на bot или Bot — например HabrArticleBot или CleanTalkBot. После ввода имени пользователя бот будет создан и Вам будет выдан токен, который будет использоваться в дальнейшем для идентификации.
![](https://habrastorage.org/getpro/habr/post_images/a28/1ed/4d3/a281ed4d389db4e129455408b540fd9d.png)
Второй шаг — установка так называемого 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.
![](https://habrastorage.org/getpro/habr/post_images/2ed/74c/27e/2ed74c27e785fab27d67052a97d25190.png)
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.
![](https://habrastorage.org/getpro/habr/post_images/84e/698/603/84e6986030ac43b7da7fb3f38dfdf33e.png)
В появившейся форме следующие поля
![](https://habrastorage.org/getpro/habr/post_images/892/441/400/892441400f5de4970b6a260ff7b3ea09.png)
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.
Указанную выше кнопку размещаем на Вашем сайте — по её нажатию открывается следующая картина
![](https://habrastorage.org/getpro/habr/post_images/46d/5f7/69a/46d5f769a63558ab8f0c9b7669ecdd79.png)
Для авторизации нужно выбрать канал, где можно будет пользоваться приложением.
По нажатию на кнопку Authorize Slack редиректит пользователя на страницу Redirect URI(s), которая задаётся Вами (разработчиком) здесь — https://api.slack.com/apps, выбираем Ваше приложение и переходим по ссылке App Credentials — видим следующую картину
![](https://habrastorage.org/getpro/habr/post_images/f95/817/960/f95817960c662d9fad3b28b2d480f862.png)
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 надеется, что данная информация окажется полезной для всех, кто интересуется разработкой чат-ботов.