Коротко — причина в том, что «комментарии в чате задачи» могут храниться и обрабатываться разными модулями/механизмами в Bitrix(24): forum, socialnetwork (лента/соц. лог), im (новый чат в задачах) или старый tasks-комментарий. Поэтому обработчик OnAfterCommentAdd из модуля tasks может просто не срабатывать — потому что комментарий пришёл не через модуль tasks.
Что сделать — порядок действий и варианты решений.
1) Уточните тип установки
- Bitrix24 Cloud (saas) — PHP-обработчики нельзя вешать, нужно использовать REST-уведомления/webhooks/placement или события IM через REST.
- Самостоятельный (on‑premise) — можно вешать PHP-обработчики в init.php / через EventManager.
2) Выясните, в каком модуле сохраняется комментарий
Добавьте тест‑комментарий и посмотрите, куда пошли строки в БД: проверьте последние записи в таблицах
- b_tasks_comment,
- b_forum_message,
- b_sonet_log_comment / b_sonet_log,
- b_im_message
Это однозначно покажет, откуда нужно ловить событие.
3) Варианты обработчиков (самостоятельный сервер)
a) Если комментарии через социальную ленту (socialnetwork)
(самый частый случай для «комментариев в задаче» — запись в лог соцсети)
Пример в init.php:
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler('socialnetwork', 'OnAfterSocNetLogCommentAdd', 'MyOnAfterSocNetLogCommentAdd');
function MyOnAfterSocNetLogCommentAdd($commentId, $arFields)
{
// Получаем комментарий
$comment = CSocNetLogComments::GetByID($commentId);
if (!$comment) return;
// Получаем запись ленты
$log = CSocNetLog::GetByID($comment['LOG_ID']);
if (!$log) return;
// Фильтруем по сущности — задача
if (strtoupper($log['ENTITY_TYPE']) === 'TASK' || $log['ENTITY_TYPE'] === 'tasks')
{
$taskId = (int)$log['ENTITY_ID'];
// Делаем нужную логику
}
}
b) Если комментарии через форум (forum)
Обработчик для форума сообщений (названия событий различаются по версии, но общий пример):
$eventManager->addEventHandler('forum', 'onAfterMessageAdd', 'OnAfterForumMessageAdd');
function OnAfterForumMessageAdd($messageId, $arFields)
{
// Проверить, что сообщение связано с задачей (например, $arFields['PARAMS'] или ENTITY_TYPE)
// и выполнить логику
}
c) Если это новый «чат» (IM) внутри задачи
Тогда комментарий — это сообщение IM (таблица b_im_message). Для on‑prem можно ловить события модуля im (название события зависит от версии, в документации ищите события модуля im). В cloud такое можно ловить через REST событие im.message.add (webhook / app).
4) Если вы используете Bitrix24 Cloud
Вы не можете вешать PHP‑обработчики. Решения:
- Используйте REST‑событие/вебхук (например, события IM или socialnetwork через REST if available).
- Сделайте приложение (Webhook/REST subscription) и подпишитесь на нужное событие (im.message.add, tasks.comment.add — смотрите список REST-событий в вашей версии).
5) Диагностика, если текущий код не срабатывает
- Проверьте, что init.php действительно подключается и код выполняется (вставьте простую запись в лог/file).
- Убедитесь, что вы вешаете обработчик на правильный модуль и событие (см. выше).
- Посмотрите, где данные реально сохраняются (DB) и в ответе REST/JS смотрите payload.
Если хотите, помогу точнее — скажите:
- Bitrix24 Cloud или On‑Premise?
- Какая запись появляется в БД при добавлении комментария (в какую таблицу)?
- Приведите пример того, как вы добавляете комментарий (через UI, REST, API?). Тогда дам конкретный код обработчика.