Блог Вадима Гареева

Собственный чат открытой линии в Битрикс24. Без REST API

19.04.2024

В этой статье мы создадим собственный коннектор открытой линии и чат для него, используя только API ядра Битрикс24, без применения REST API.

1. Создание коннектора открытой линии

Создадим новую запись в таблице b_imconnectors_custom_connectors.

Создание коннектора
<?php
use Bitrix\ImConnector\Model\CustomConnectorsTable;
use Bitrix\Main\Loader;

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

Loader::includeModule('imopenlines');
Loader::includeModule('imconnector');

$params = [
    'ID_CONNECTOR' => 'site_chat',
    'NAME' => 'Чат ЛК сайта',
    ...
];

$result = CustomConnectorsTable::add($params)->isSuccess();
?>

Затем активируем коннектор для нужной открытой линии (ID = 5):

$status = StatusConnector::getInstance('site_chat', 5);
$status
    ->setActive(true)
    ->setConnection(true)
    ->setRegister(true)
    ->setError(false);
$status->save();

2. Отправка первого сообщения

Пример отправки тестового сообщения от пользователя:

$data = [[
    'user' => [
        'id' => 1,
        ...
    ],
    'message' => [
        'text' => 'Тестовое сообщение',
        ...
    ],
]];

$mess = Bitrix\ImConnector\CustomConnectors::sendMessages('site_chat', 5, $data);
Автосвязывание с клиентом

3. Ответы из Битрикс24

Обрабатываем исходящие сообщения с помощью события OnSendMessageCustom:

AddEventHandler("imconnector", "OnSendMessageCustom", "OnSendMessageCustomHandler");

function OnSendMessageCustomHandler($connector, $line, $data)
{
    $statusDelivery = [];

    foreach ($data as $message) {
        $statusDelivery[] = [
            'im' => $message['im'],
            ...
        ];
    }

    if (!empty($statusDelivery)) {
        \Bitrix\ImConnector\CustomConnectors::sendStatusDelivery($connector, $line, $statusDelivery);
        \Bitrix\ImConnector\CustomConnectors::sendStatusReading($connector, $line, $statusDelivery);
    }
}

sendStatusDelivery — статус «доставлено»
sendStatusReading — статус «прочитано»


Теперь у вас есть собственный коннектор для открытых линий без REST API, полностью на ядре.

Категории: Битрикс

Комментарии (0)

Добавить комментарий