Разработка модуля контроля дубликатов контактов в Bitrix24: диагностика проблемы

Я разрабатываю собственный модуль для системы Bitrix24, предназначенный для перехвата и предотвращения создания дубликатов контактов. Модуль должен срабатывать при попытке добавления или изменения контакта, проверяя наличие существующих записей с такими же телефонными номерами или адресами электронной почты.

Структура и реализация модуля

Мною была создана следующая структура файлов в соответствии с требованиями платформы:

  • install/index.php - основной класс модуля с методами установки, удаления и регистрации обработчиков событий.
  • install/version.php - файл с информацией о версии модуля.
  • lang/ru/install/index.php - языковой файл с названием и описанием модуля.
  • lib/contacts.php - класс с бизнес-логикой, содержащий методы-обработчики событий.

Модуль успешно устанавливается в административной панели Bitrix24. В процессе установки не возникает исключений, а обработчики событий OnBeforeCrmContactAdd и OnBeforeCrmContactUpdate регистрируются в системе, что подтверждается логами.

Суть проблемы

Несмотря на корректную установку, основная функциональность модуля не работает. При создании или редактировании контакта в CRM:

  • Методы cancelCrmContactSave и cancelCrmContactUpdate не выполняются.
  • В логах отсутствуют записи от самописной функции wh_log, которая гарантированно работает при прямом вызове.
  • Проверка на дубликаты не происходит, и контакт сохраняется без каких-либо препятствий.

Ключевые вопросы для диагностики

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

  1. Корректность пространства имён и автозагрузки: Убедитесь, что класс Duplicates\Control\Contacts доступен и корректно загружается системой Bitrix в момент вызова события.
  2. Сигнатура методов: Проверьте, что методы cancelCrmContactSave(&$arFields) и cancelCrmContactUpdate(&$arFields) объявлены как публичные и статические, и принимают параметр по ссылке, как того требует API событий.
  3. Механизм событий (Event Manager): Убедитесь, что события OnBeforeCrmContactAdd и OnBeforeCrmContactUpdate действительно вызываются в той версии ядра Bitrix, которую вы используете.
  4. Кэширование: После установки модуля мог потребоваться сброс кэша системы или управляемого кэша (Managed Cache).

Для дальнейшей диагностики рекомендуется добавить более детальное логирование непосредственно в методы класса, проверить наличие ошибок в логах сервера (например, error_log) и убедиться в отсутствии конфликтов с другими модулями.