Разработка модуля контроля дубликатов контактов в Bitrix24: диагностика проблемы
Я разрабатываю собственный модуль для системы Bitrix24, предназначенный для перехвата и предотвращения создания дубликатов контактов. Модуль должен срабатывать при попытке добавления или изменения контакта, проверяя наличие существующих записей с такими же телефонными номерами или адресами электронной почты.
Структура и реализация модуля
Мною была создана следующая структура файлов в соответствии с требованиями платформы:
- install/index.php - основной класс модуля с методами установки, удаления и регистрации обработчиков событий.
- install/version.php - файл с информацией о версии модуля.
- lang/ru/install/index.php - языковой файл с названием и описанием модуля.
- lib/contacts.php - класс с бизнес-логикой, содержащий методы-обработчики событий.
Модуль успешно устанавливается в административной панели Bitrix24. В процессе установки не возникает исключений, а обработчики событий OnBeforeCrmContactAdd и OnBeforeCrmContactUpdate регистрируются в системе, что подтверждается логами.
Суть проблемы
Несмотря на корректную установку, основная функциональность модуля не работает. При создании или редактировании контакта в CRM:
- Методы
cancelCrmContactSaveиcancelCrmContactUpdateне выполняются. - В логах отсутствуют записи от самописной функции
wh_log, которая гарантированно работает при прямом вызове. - Проверка на дубликаты не происходит, и контакт сохраняется без каких-либо препятствий.
Ключевые вопросы для диагностики
Для решения проблемы необходимо понять, почему зарегистрированные обработчики событий не активируются. Возможные направления для проверки:
- Корректность пространства имён и автозагрузки: Убедитесь, что класс
Duplicates\Control\Contactsдоступен и корректно загружается системой Bitrix в момент вызова события. - Сигнатура методов: Проверьте, что методы
cancelCrmContactSave(&$arFields)иcancelCrmContactUpdate(&$arFields)объявлены как публичные и статические, и принимают параметр по ссылке, как того требует API событий. - Механизм событий (Event Manager): Убедитесь, что события
OnBeforeCrmContactAddиOnBeforeCrmContactUpdateдействительно вызываются в той версии ядра Bitrix, которую вы используете. - Кэширование: После установки модуля мог потребоваться сброс кэша системы или управляемого кэша (Managed Cache).
Для дальнейшей диагностики рекомендуется добавить более детальное логирование непосредственно в методы класса, проверить наличие ошибок в логах сервера (например, error_log) и убедиться в отсутствии конфликтов с другими модулями.