Задать вопрос
@djacode

Как поймать событие добавления комментария к чату задачи в bitrix24?

Ни как не могу поймать событие добавления комментария в чате задачи. Ничто не отрабатывает :
$eventManager->addEventHandler('tasks', 'OnAfterCommentAdd', function($eventType, $eventId, $arFields) {
    //if (strpos($eventType, 'TASK') !== false || strpos($eventType, 'COMMENT') !== false) {
        wicd(__DIR__, "OnAfterEventAdd → Тип: {$eventType} | ID: {$eventId}");
    //}
});

$eventManager->addEventHandler('forum', 'OnAfterCommentAdd', function($eventType, $eventId, $arFields) {
    //if (strpos($eventType, 'TASK') !== false || strpos($eventType, 'COMMENT') !== false) {
        wicd(__DIR__, "OnAfterMessagesAdd → Тип: {$eventType} | ID: {$eventId}");
        wicd(__DIR__, $arFields);
    //}
});

$eventManager->addEventHandler('im', 'OnAfterMessagesAdd', function(\Bitrix\Main\Event $event) {
    wicd(__DIR__, 'dddd');
});
  • Вопрос задан
  • 113 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Onskills
    Битрикс24: работа с платформой
    1 месяц
    Далее
  • Академия Эдюсон
    Коммерческий директор
    4 месяца
    Далее
  • НАДПО
    Руководитель отдела продаж. Повышение квалификации
    3 месяца
    Далее
Решения вопроса 2
gromdron
@gromdron Куратор тега Битрикс24
Работаю с Bitrix24
После выхода "Задач 2.0" комментарии были упразднены в пользу чата, поэтому отдельного события на добавление комментария к задаче больше нет и вместо этого следует подписываться на события чата и определять к какому чату идет сообщение.

$eventManager->addEventHandlerCompatible(
	"im",
	"OnAfterMessagesAdd",
	function($messageId, $messageFields) {
		if (
			!array_key_exists("CHAT_ENTITY_TYPE", $messageFields)
			|| $messageFields["CHAT_ENTITY_TYPE"] != "TASKS_TASK"
		) {
			return;
		}

		// Task id = $messageFields['CHAT_ENTITY_ID']

		return;
	}
);
Ответ написан
Комментировать
alfalyxx
@alfalyxx
Full-stack PHP developer (Bitrix)
Можно попробовать послушать js события
Сейчас посмотрел, стреляет событие onPullEvent-tasks

(function () {
    const original = BX.addCustomEvent;

    BX.addCustomEvent = function (eventName, handler) {
        console.log('%c[REGISTER EVENT]', 'color: green', eventName);
        return original.apply(this, arguments);
    };

    const fireOriginal = BX.onCustomEvent;

    BX.onCustomEvent = function (eventObject, eventName, eventParams, secureParams) {
        console.log('%c[FIRE EVENT]', 'color: red', eventName, eventParams);
        return fireOriginal.apply(this, arguments);
    };

    console.log(' Event debugger started');
})();


Можно вот это самому в консоль закинуть и смотреть, какие события стреляют по действию с параметрами.
и потом разбирай его

BX.addCustomEvent('onPullEvent-tasks', function (command, data, extra) {

    if (command !== 'comment_add') {
        return;
    }
    console.log('Комментарий к задаче:', data);
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Судя по комментариям в коде модулей, есть вариант, что оно попросту не вызывается:
if (
    !$aux // create task from livefeed
    || $auxData <> '' // tasks commentposter, add to livefeed
)
{
    $event = new Event("forum", "OnAfterCommentAdd", array(
            $this->getEntity()->getType(),
            $this->getEntity()->getId(),
            array(
                "TOPIC_ID" => $this->topic["ID"],
                "MESSAGE_ID" => $mid,
                "PARAMS" => $params,
                "MESSAGE" => $this->getComment(),
                "AUX_DATA" => $auxData
            ))
    );
    $event->send();
}

Вроде как в Живую ленту прикрутили свой, новый API форума. Есть грубый метод: прикрутить отладочный лог в функцию GetModuleEvents() и в метод send() класса Event. И посмотреть
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы