Дата последнего изменения: 31.10.2023
Cоздание чат-бота для Открытых линий аналогично созданию обычного чат-бота, за исключением нескольких примечаний:
O
.
OPENLINE => Y
, тогда чат-бот будет работать в гибридном режиме.
CHAT_ENTITY_TYPE => LINES
.Во всем остальном, это привычный и уже знакомый чат-бот.
Для более тесной интеграции с Открытыми линиями необходимо иметь права доступа на scope imopenlines.
Имея такие права, будут доступны команды:
В качестве примера чат-бота для открытых линий мы подготовили чат-бот ITR Bot. Cкачать его можно:
\Bitrix\ImBot\Bot\OpenlinesMenuExample
.Данный чат-бот выступает в качестве первой линии поддержки - сначала все сообщения будут поступать к нему, а только потом сотрудникам в очередь через промежуток времени, который указан в настройках открытой линии. Также в него добавлен класс для построения многоуровневого меню в чатах.
Так что вы уже сейчас можете взять код примера чат-бота выше, выложить на своем сервере и запустить чат-бота на своем портале в качестве локального приложения, не публикуя его через Маркет:
0
(цифра "ноль") или выбрав пункт меню 0. Wait operator answer. Вообще, пользователь может нажать на 0 при любом чат-боте и пользователь будет перенаправлен на оператора, обрабатывать дополнительно это не требуется./** * Run ITR menu * * @param $portalId * @param $dialogId * @param $userId * @param string $message * @return bool */ function itrRun($portalId, $dialogId, $userId, $message = '') { if ($userId <= 0) return false; $menu0 = new ItrMenu(0); $menu0->setText('Main menu (#0)'); $menu0->addItem(1, 'Text', ItrItem::sendText('Text message (for #USER_NAME#)')); $menu0->addItem(2, 'Text without menu', ItrItem::sendText('Text message without menu', true)); $menu0->addItem(3, 'Open menu #1', ItrItem::openMenu(1)); $menu0->addItem(0, 'Wait operator answer', ItrItem::sendText('Wait operator answer', true)); $menu1 = new ItrMenu(1); $menu1->setText('Second menu (#1)'); $menu1->addItem(2, 'Transfer to queue', ItrItem::transferToQueue('Transfer to queue')); $menu1->addItem(3, 'Transfer to user', ItrItem::transferToUser(1, false, 'Transfer to user #1')); $menu1->addItem(4, 'Transfer to bot', ItrItem::transferToBot('marta', true, 'Transfer to bot Marta', 'Marta not found :(')); $menu1->addItem(5, 'Finish session', ItrItem::finishSession('Finish session')); $menu1->addItem(6, 'Exec function', ItrItem::execFunction(function($context){ $result = restCommand('imbot.message.add', Array( "DIALOG_ID" => $_REQUEST['data']['PARAMS']['DIALOG_ID'], "MESSAGE" => 'Function executed (action)', ), $_REQUEST["auth"]); writeToLog($result, 'Exec function'); }, 'Function executed (text)')); $menu1->addItem(9, 'Back to main menu', ItrItem::openMenu(0)); $itr = new Itr($portalId, $dialogId, 0, $userId); $itr->addMenu($menu0); $itr->addMenu($menu1); $itr->run(prepareText($message)); return true; }