Добавление собственного типа коннекторов

Урок 426 из 741
Автор: Роберт Басыров
Сложность урока:
4 уровень - сложно, требуется сосредоточиться, внимание деталям и точному следованию инструкции.
4 из 5
Просмотров: 20709
Дата изменения: 21.08.2024
Недоступно в лицензиях:
Текущую редакцию Вашего 1С-Битрикс можно просмотреть на странице Обновление платформы (Marketplace > Обновление платформы).
Ограничений нет

Регистрация обработчика

Обработчик события OnImConnectorBuildList модуля imconnector регистрируется либо в init.php, либо при установке модуля.

Пример обработчика:

\Bitrix\Main\EventManager::getInstance()->addEventHandler("imconnector", "OnImConnectorBuildList", Array("MyClass", "OnImConnectorBuildListHandler"));

class MyClass
{
  function OnImConnectorBuildListHandler()
  {
     return array(
        //ID коннектора
        'ID' => 'baseconnector',
        //Имя коннектора
        'NAME' => 'Базовый коннектор',
        //Описание иконки
        'ICON' => array(
           'DATA_IMAGE' => 'data:image/svg+xml;charset=US-ASCII,%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20x%3D%220px%22%20y%3D%220px%22%0A%09%20viewBox%3D%220%200%2070%2071%22%20style%3D%22enable-background%3Anew%200%200%2070%2071%3B%22%20xml%3Aspace%3D%22preserve%22%3E%0A%3Cpath%20fill%3D%22%230C99BA%22%20class%3D%22st0%22%20d%3D%22M34.7%2C64c-11.6%2C0-22-7.1-26.3-17.8C4%2C35.4%2C6.4%2C23%2C14.5%2C14.7c8.1-8.2%2C20.4-10.7%2C31-6.2%0A%09c12.5%2C5.4%2C19.6%2C18.8%2C17%2C32.2C60%2C54%2C48.3%2C63.8%2C34.7%2C64L34.7%2C64z%20M27.8%2C29c0.8-0.9%2C0.8-2.3%2C0-3.2l-1-1.2h19.3c1-0.1%2C1.7-0.9%2C1.7-1.8%0A%09v-0.9c0-1-0.7-1.8-1.7-1.8H26.8l1.1-1.2c0.8-0.9%2C0.8-2.3%2C0-3.2c-0.4-0.4-0.9-0.7-1.5-0.7s-1.1%2C0.2-1.5%2C0.7l-4.6%2C5.1%0A%09c-0.8%2C0.9-0.8%2C2.3%2C0%2C3.2l4.6%2C5.1c0.4%2C0.4%2C0.9%2C0.7%2C1.5%2C0.7C26.9%2C29.6%2C27.4%2C29.4%2C27.8%2C29L27.8%2C29z%20M44%2C41c-0.5-0.6-1.3-0.8-2-0.6%0A%09c-0.7%2C0.2-1.3%2C0.9-1.5%2C1.6c-0.2%2C0.8%2C0%2C1.6%2C0.5%2C2.2l1%2C1.2H22.8c-1%2C0.1-1.7%2C0.9-1.7%2C1.8v0.9c0%2C1%2C0.7%2C1.8%2C1.7%2C1.8h19.3l-1%2C1.2%0A%09c-0.5%2C0.6-0.7%2C1.4-0.5%2C2.2c0.2%2C0.8%2C0.7%2C1.4%2C1.5%2C1.6c0.7%2C0.2%2C1.5%2C0%2C2-0.6l4.6-5.1c0.8-0.9%2C0.8-2.3%2C0-3.2L44%2C41z%20M23.5%2C32.8%0A%09c-1%2C0.1-1.7%2C0.9-1.7%2C1.8v0.9c0%2C1%2C0.7%2C1.8%2C1.7%2C1.8h23.4c1-0.1%2C1.7-0.9%2C1.7-1.8v-0.9c0-1-0.7-1.8-1.7-1.9L23.5%2C32.8L23.5%2C32.8z%22/%3E%0A%3C/svg%3E%0A',
           'COLOR' => '#1900ff',
           //Возможно
           'SIZE' => '90%',
           'POSITION' => 'center'
        ),
        'ICON_DISABLED' => array(
           'DATA_IMAGE' => 'data:image/svg+xml;charset=US-ASCII,%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20x%3D%220px%22%20y%3D%220px%22%0A%09%20viewBox%3D%220%200%2070%2071%22%20style%3D%22enable-background%3Anew%200%200%2070%2071%3B%22%20xml%3Aspace%3D%22preserve%22%3E%0A%3Cpath%20fill%3D%22%235c6470%22%20class%3D%22st0%22%20d%3D%22M34.7%2C64c-11.6%2C0-22-7.1-26.3-17.8C4%2C35.4%2C6.4%2C23%2C14.5%2C14.7c8.1-8.2%2C20.4-10.7%2C31-6.2%0A%09c12.5%2C5.4%2C19.6%2C18.8%2C17%2C32.2C60%2C54%2C48.3%2C63.8%2C34.7%2C64L34.7%2C64z%20M27.8%2C29c0.8-0.9%2C0.8-2.3%2C0-3.2l-1-1.2h19.3c1-0.1%2C1.7-0.9%2C1.7-1.8%0A%09v-0.9c0-1-0.7-1.8-1.7-1.8H26.8l1.1-1.2c0.8-0.9%2C0.8-2.3%2C0-3.2c-0.4-0.4-0.9-0.7-1.5-0.7s-1.1%2C0.2-1.5%2C0.7l-4.6%2C5.1%0A%09c-0.8%2C0.9-0.8%2C2.3%2C0%2C3.2l4.6%2C5.1c0.4%2C0.4%2C0.9%2C0.7%2C1.5%2C0.7C26.9%2C29.6%2C27.4%2C29.4%2C27.8%2C29L27.8%2C29z%20M44%2C41c-0.5-0.6-1.3-0.8-2-0.6%0A%09c-0.7%2C0.2-1.3%2C0.9-1.5%2C1.6c-0.2%2C0.8%2C0%2C1.6%2C0.5%2C2.2l1%2C1.2H22.8c-1%2C0.1-1.7%2C0.9-1.7%2C1.8v0.9c0%2C1%2C0.7%2C1.8%2C1.7%2C1.8h19.3l-1%2C1.2%0A%09c-0.5%2C0.6-0.7%2C1.4-0.5%2C2.2c0.2%2C0.8%2C0.7%2C1.4%2C1.5%2C1.6c0.7%2C0.2%2C1.5%2C0%2C2-0.6l4.6-5.1c0.8-0.9%2C0.8-2.3%2C0-3.2L44%2C41z%20M23.5%2C32.8%0A%09c-1%2C0.1-1.7%2C0.9-1.7%2C1.8v0.9c0%2C1%2C0.7%2C1.8%2C1.7%2C1.8h23.4c1-0.1%2C1.7-0.9%2C1.7-1.8v-0.9c0-1-0.7-1.8-1.7-1.9L23.5%2C32.8L23.5%2C32.8z%22/%3E%0A%3C/svg%3E%0A',
           //'COLOR' => '#1900ff',
           //Возможно
           'SIZE' => '90%',
           'POSITION' => 'center'
        ),
        //ID компонент
        'COMPONENT' => 'bitrix:imconnector.baseconnector',
        //Можно ли удалять пришедшие сообщения
        'DEL_EXTERNAL_MESSAGES' => true,
        //Может ли оператор редактировать свои сообщения
        'EDIT_INTERNAL_MESSAGES' => true,
        //Может ли оператор удалять свои сообщения
        'DEL_INTERNAL_MESSAGES' => true,
        //Можно ли использовать канал для рассылки?
        'NEWSLETTER' => true,
        //Можно ли отправлять системные сообщения в канал?
        'NEED_SYSTEM_MESSAGES' => true,
        //Стоит ли отправлять в канал подпись в самом тексте сообщения?
        'NEED_SIGNATURE' => true,
        //Является ли чат групповым?
        'CHAT_GROUP' => false,
     );
  }
}

Обработчик должен вернуть массив со следующими параметрами:

Возвращаемые параметры
Параметр Описание
ID ID коннектора, который будет уникальный на всю систему. Обязательный. Лучше предварять своим префиксом дабы избежать пересечения с текущими и возможными будущими ID коннекторов. Можно использовать: цифры, буквы и знак подчеркивания.
NAME Отображаемое имя коннектора. Обязательный.
ICON Массив описания иконки коннектора. Обязательный. Ключи массива:
  • DATA_IMAGE - DATA представление иконки SVG. Обязательный
  • COLOR - цвет
  • SIZE - размер
  • POSITION - позиция svg
COMPONENT ID компонента с указанием имени пространства имен компонентов. Обязательный.
DEL_EXTERNAL_MESSAGES Можно ли удалять входящие сообщения? По умолчанию: да.
EDIT_INTERNAL_MESSAGES Можно ли редактировать свои сообщения? По умолчанию: да.
DEL_INTERNAL_MESSAGES Можно ли удалять свои сообщения? По умолчанию: да.
NEWSLETTER Можно ли использовать канал для CRM рассылки? По умолчанию: да.
NEED_SYSTEM_MESSAGES Можно ли отправлять системные сообщения в канал? Например: приветствие, завершающая реплика и т. п. По умолчанию: да.
NEED_SIGNATURE Можно ли отправлять подпись в самом сообщении? По умолчанию: да. Например: перед текстом сообщения добавляется строка с именем оператора.
CHAT_GROUP Является ли чат данного канала с внешней стороны групповым, т. е. могут ли разные люди писать из вне в один чат? По умолчанию: нет.

Настройка канала:

Тип коннектора работает в рамках настроенной открытой линии. Со своей стороны необходимо хранить информацию об ID открытой линии, которая настроена.

В состав модуля включён компонент imconnector.baseconnector, который можно использовать как основу для кастомизации и создания собственного компонента настройки.

Собственный компонент должен работать в режиме ajax и не приводить к перезагрузке страницы. Также в компонент передается параметр $this->arParams['LINE'], в котором передается ID открытой линии.

В компоненте производится настройка, которая важна и нужна для вашего кода, запрашиваются дополнительные параметры (либо же не запрашиваются, а вы просто при включении канала регистрируете еще одну ОЛ.

Системе важно, чтобы вы правильно установили статусы. За это отвечает класс \Bitrix\ImConnector\Status.

Получить объект статуса можно вызовом:

 $this->status = \Bitrix\ImConnector\Status::getInstance($this->connector, $this->arParams['LINE']);

$this->status->isStatus(); - метод возвращает, готов ли коннектор к работе.
$this->status->getActive() - активирован ли канал.
$this->status->getConnection() - успешно ли прошло соединение.
$this->status->getRegister() - успешно ли прошла регистрация.
$this->status->getError() - есть ли ошибка в работе (блокирующая).

Канал считается готовым к работе, если канал для данной Открытой Линии активен, успешно прошло тестовое соединение и успешно зарегистрирован. А так же отсутствует ошибка.

Активировать канал можно вызовом $this->status->setActive(true);
Установить статус успешной проверки подключения: $this->status->setConnection(true);
Установить статус успешной регистрации: $this->status->setRegister(true);
Сбросить ошибку (чтобы канал возобновил работу) можно с помощью $this->status->setError(false);.

При удалении коннектора (отключении) нужно вызвать статический метод:

\Bitrix\ImConnector\Status::delete($this->connector, $this->arParams['LINE']);

При любых изменениях настроек нужно сбрасывать кеш информации о каналах:

$cache = \Bitrix\Main\Data\Cache::createInstance();
$cache->clean($this->arParams['LINE'], \Bitrix\ImConnector\Library::CACHE_DIR_INFO_CONNECTORS_LINE);

Либо можно использовать метод cleanCache из примера в компоненте.

Работа с сообщениями

После настройки канала для работы с сообщениями используйте методы класса CustomConnectors.

Так же используйте события для новых сообщений, их изменений или удаления.


Нам жаль это слышать… Но мы постараемся быть лучше!

Мы благодарны Вам за помощь в улучшении документации.

Спасибо, мы рады что смогли помочь Вам. Ниже Вы можете оставить свой отзыв или пожелание :)
Мы стараемся сделать документацию понятнее и доступнее,
и Ваше мнение важно для нас
Курсы разработаны в компании «1С-Битрикс»