Розробка чат-бот Бітрікс24

Моя попередня стаття про розробку чат-бот Facebook Messenger показала що тема цікава мешканцям Хабра, тому я продовжую.
Сьогодні у нас буде розробка бота для Бітрікс24 месенджера. Мова розробки той же — PHP.

Загальна інформація
Платформа для чат-ботів Битркис24 з'явилася в кінці березня цього року.
На момент написання бота, GitHub не було бібліотеки на PHP, тому я написав свою — github.com/pimax/bitrix24-bot-php

Пишемо код
Найпростіший варіант, виконати клонування репозиторію github.com/pimax/bitrix24-bot-php-example

git clone https://github.com/pimax/bitrix24-bot-php-example.git .
composer install
cp config_example.php config.php

Відкриваємо config.php на редагування і заповнюємо інформацію про своє боте.
Не буду детально зупинятися тут, щоб не роздувати статтю, кожен параметр має коментарем.

Поясню детальніше основну частину демо-бота.
Все, Бітрікс24 передає 4 типи подій на webhook:

ONAPPINSTALL — Установка бота на портал
$bot->install(new Bot(
$config['alias'],
$config['type'],
$config['url_message_add'],
$config['url_welcome_message'],
$config['url_bot_delete'],
$config['data']
));

Тут все елементарно — беремо дані з конфига нашого додатка і реєструємо бота на порталі.
Цей код навряд чи буде змінюватися у вас.

ONIMBOTDELETE — Видалення бота
$bot->uninstall();

Видаляємо бота з порталу.
Аналогічно попередньому, змінюватися навряд чи буде.

ONIMBOTJOINCHAT — Запрошення бота в чат
$bot->send(new Message("Привіт", $_REQUEST['data']['PARAMS']['DIALOG_ID'], [
new Message('[send=/command1]Command 1[/send]'),
new Message('[send=/command2]Command 2[/send]'),
new Message('[send=/command3]Command 3[/send]'),
]));

Ось тут вже можливі варіанти. Хорошим тоном є поведінка, при якому в першому повідомленні бот повідомить свої команди користувачеві. Щоб користувач не вводив команди вручну, в Бітрікс24 передбачили код [send], відправляє повідомлення боту при натисканні на посилання.

Ось так це виглядає:



ONIMBOTMESSAGEADD — Отримання повідомлення від користувача
Основний тип для нас.
В ньому ми повинні зрозуміти, що хоче користувач від бота, підготувати відповідь, і відправити відповідь користувачу.

switch ($_REQUEST['data']['PARAMS']['MESSAGE'])
{
case '/command1':
$bot->send(new Message("Command 1 response", $_REQUEST['data']['PARAMS']['DIALOG_ID']));
break;
case '/command2':
$bot->send(new Message("Command 2 response", $_REQUEST['data']['PARAMS']['DIALOG_ID']));
break;
case '/command3':
$bot->send(new Message("Command 3 response", $_REQUEST['data']['PARAMS']['DIALOG_ID']));
break;
default:
$bot->send(new Message("Привіт", $_REQUEST['data']['PARAMS']['DIALOG_ID'], [
new Message('[send=/command1]Command 1[/send]'),
new Message('[send=/command2]Command 2[/send]'),
new Message('[send=/command3]Command 3[/send]'),
]));
}

Даний код обробляє три команди, а в разі, якщо користувач відправив щось інше, знову виведе список доступних команд.

Розміщення програми
Переходимо в розділ Додатка > Додати додаток свого порталу.

Вказуємо назву програми, відзначаємо галочку «Додаток використовує тільки API».
Права доступу відзначаємо «Створення і управління Чат-ботами».
В поля Вкажіть посилання і вкажіть callback-посилання для події установки вказуємо посилання на нашого бота, наприклад: example.com/apps/bitrix24
Натискаємо кнопку зберегти.

Реальний приклад Бота для фріланс-біржі Job4Joy
Для чистоти експерименту, ми візьмемо ту ж завдання, що і в статті про Facebook Messenger і розробимо чат-бот фріланс-біржі Job4Joy.

Отже, наша мета, реалізувати бота, який за нашим запитом буде видавати нові проекти у відповідній категорії.
Дані будемо отримувати по RSS, використовуючи picoFeed — github.com/fguillot/picoFeed
github.com/SebastianM/GooglShortener для скорочення посилань.

Виконуємо

git clone https://github.com/pimax/bitrix24-bot-php-example.git .
composer install
cp config_example.php config.php

Далі, правимо config.php і додаємо список каналів і токен для goo.gl:

'google_token' => ",

'feeds' => [
'/all' => [
'Title' => 'All jobs',
'Feed' => 'https://job4joy.com/marketplace/rss/'
],
'/webdev' => [
'Title' => 'Web Development',
'Feed' => 'https://job4joy.com/marketplace/rss/?id=3'
],
'/software' => [
'Title' => 'Software Development & IT',
'Feed' => 'https://job4joy.com/marketplace/rss/?id=5'
],
'/design' => [
'Title' => 'Design & Multimedia',
'Feed' => 'https://job4joy.com/marketplace/rss/?id=2'
],
'/mobile' => [
'Title' => 'Mobile Application',
'Feed' => 'https://job4joy.com/marketplace/rss/?id=7'
],
'/server' => [
'Title' => 'Host & Server Management',
'Feed' => 'https://job4joy.com/marketplace/rss/?id=6'
],
'/writing' => [
'Title' => 'Writing',
'Feed' => 'https://job4joy.com/marketplace/rss/?id=8'
],
'/customer' => [
'Title' => 'Customer Service',
'Feed' => 'https://job4joy.com/marketplace/rss/?id=10'
],
'/marketing' => [
'Title' => 'Marketing',
'Feed' => 'https://job4joy.com/marketplace/rss/?id=11'
],
'/business' => [
'Title' => 'Business Services',
'Feed' => 'https://job4joy.com/marketplace/rss/?id=12'
],
'/translations' => [
'Title' => 'Translation & Languages',
'Feed' => 'https://job4joy.com/marketplace/rss/?id=14'
]
]

Створюємо файл messages/ru.php, з наступним вмістом:

<?php
return [
'Hello! I can help you with IT projects.' => 'Привіт! Я допоможу з проектами в сфері ІТ.',
'find work & hire freelancers' => 'Робота в сфері ІТ',
'All jobs' => 'Всі проекти',
'Web Development' => 'Веб-розробка',
'Software Development & IT' => 'Розробка ПЗ',
'Design & Multimedia' => 'Дизайн і мультимедіа',
'Mobile Application' => 'Мобільні додатки',
'Host & Server Management' => 'Хостинг і сервера',
'Writing' => 'Тексти',
'Customer Service' => 'Підтримка клієнтів',
'Marketing' => 'Маркетинг',
'Business Services' => 'Бізнес послуги',
'Translation & Languages' => 'Перекази',
'New projects not a found!' => 'Нові проекти не знайдено!'
];

Базовий мову нашого бота — англійська, але російська ми теж будемо підтримувати.

В index.php додаємо підключення бібліотеки GoogleShortener:

require_once (dirname(__FILE__) .'/GooglShortener.php');
$googl = new GooglShortener($config['google_token']);

Напишемо відразу функцію логування:

/**
* Log
*
* @param mixed $data Data
* @param string $title Title
* @return bool
*/
function writeToLog($data, $title = ")
{
$log = "\n------------------------\n";
$log .= date("Y. m.d G:i:s") . "\n";
$log .= (strlen($title) > 0 ? $title : 'DEBUG') . "\n";
$log .= print_r($data, 1);
$log .= "\n------------------------\n";

file_put_contents(__DIR__ . '/imbot.log', $log, FILE_APPEND);

return true;
}

Далі пишемо функцію привітального повідомлення бота:

/**
* Help Message Send
*
* @param $bot Bot instance
* @return bool
*/
function sendHelpMessage($bot)
{
global $config;
$attach = [];
foreach ($config['feeds'] as $com => $feed)
{
$attach[] = new Message('[send='.$com.']'.$bot->t($feed['Title']).'[/send]');
}
$bot->send(new Message($bot->t('Hello! I can help you with IT projects.'), $_REQUEST['data']['PARAMS']['DIALOG_ID'], $attach));
return true;
}

Далі напишемо функцію, для отримання списку проектів по конкретному фіді і відправлення повідомлень користувачам:

/**
* Get Data Feed
*
* @param $feed data Feed
* @param $bot Bot instance
* @return bool
*/
function getFeed($feed, $bot)
{
global $googl;
try {
$reader = new Reader;
$resource = $reader->завантажити($feed['Feed']);
$parser = $reader->getParser(
$resource->getUrl(),
$resource->getContent(),
$resource->getEncoding()
);
$feed = $parser->execute();
$items = array_reverse($feed->getItems());
if (count($items)) {
foreach ($items as $itm)
{
$url = $googl->shorten($itm->getUrl());
$message = substr(strip_tags($itm->getContent()), 0, 150);
$bot->send(new Message("[B]".$itm->getTitle() . "[/B]\n" . $message . "\n", $_REQUEST['data']['PARAMS']['DIALOG_ID']), [
new Link($url->id, $url->id)
]);
}
} else {
$bot->send(new Message($bot->t('New projects not a found!'), $_REQUEST['data']['PARAMS']['DIALOG_ID']));
}
}
catch (Exception $e) {
writeToLog($e->getMessage(), 'Exception');
}
return true;
}

От і все. Повний код викладений на GitHub — github.com/pimax/job4joy_bitrix24bot

Публікація в каталозі для всіх
Зараз додаток доступний тільки для користувачів вашого порталу.
Для того, щоб опублікувати програми в каталозі для всіх, необхідно стати партнером 1С-Бітрікс.
Детальна інформація з цього процесу наведена тут — www.bitrix24.ru/apps/dev.php

Висновок
В цілому платформа виробляє досить приємні враження, не дивлячись на свій молодий вік.
Найбільший мінус для розробників — це досить тривалий час модерації. Рахунок може йти на тижні без перебільшення. Можливо, це велике навантаження на модераторів і вони не встигають. На сьогодні, проблема характерна для багатьох месенджерів.

Корисні посилання
  1. Стаття на сайті 1С-Бітрікс про платфору для чат-ботів, dev.1c-bitrix.ru/community/blogs/marketplace_apps24/we-present-a-platform-for-chatbots-for-bitrix24.php
  2. Bitrix24 Bot PHP SDK — github.com/pimax/bitrix24-bot-php
  3. Bitrix24 Bot PHP SDK Example — github.com/pimax/bitrix24-bot-php-example
  4. Job4Joy Bot PHP Sources — github.com/pimax/job4joy_bitrix24bot


Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.