Более того, IM_NEW_NOTIFY посылает предыдущее письмо. То есть, я добавил коммент с текстом "ааа". Затем добавил коммент "ббб". Тогда пользователю придёт мыло с текстом "Кто-то там добавил комментарий с текстом "ааа"".
Спасибо, разобрался как работают эвенты без крона. Если пользователей немного, то быстрых уведомлений ожидать не стоит ):
Насчёт дублей. Как их проверить? В моём коллбеке я делаю CEvent::Send('EMAIL_TEST', $siteId, $message, 'Y', $templateId); (см. скриншот ) и моё письмо приходит раза в два быстрее, чем IM_NEW_NOTIFY. Если закомментировать эту строку (№34), то не приходит вообще ни одно письмо, даже не моё.
К тому же, на некоторые события (например, коммент в задаче) приходит IM_NEW_NOTIFY, а на другие (например, коммент к фото или лайк) приходят только мои и никакие больше. Каким образом узнать пошлёт сам Битрикс письмо или нет внутри моего коллбека?
Разобрался, поправил. Но теперь каждое уведомление рассылает письма для нового события и всех предыдущих. Где теперь нужно вставить свой код чтобы проверять данную ситуацию и можно было обновлять Битрикс?
Вместо & # 9 1 ; и & # 9 3 ; должны быть квадратные скобки, но, к сожалению, я не нашёл способа обойти парсер, который их ломает в коде. Забавно, что вне тега code они не ломаются.
В $message передаётся нужный тест MESSAGE_OUT и остальные параметры. Send() возвращает id нового сообщения и совпадает с добавленной записью в b_event. Через некоторое время (кстати, каким образом оно работает, если я в crontab ничего не писал? И как уменьшить эту задержку?) статус SUCCESS_EXEC обновляется со значением "O" и почта не отправляется.
Подскажите, пожалуйста, почему так происходит и, может, как это исправить? Спасибо.
Хм, если я неправильно изначально понял логику, то вот другой пример что сделал: 1. В настройках пользователя отключил уведомления по всем направлениям (сайт/приложение и внешние клиенты), оставил только email. 2. Из-под другого пользователя лайкнул комментарий и ответил на него (под загруженной фото). Письмо не пришло.
При лайке отправляется запрос на http://bitrixtest.local/bitrix/components/bitrix/rating.vote/vote.ajax.php Дебаггером выяснил, что запрос проходит через: 1. vote.ajax.php 2. CRatings::AddRatingVote() 3. Внутри него вызывается GetModuleEvents("main", "OnAddRatingVote", true), в котором содержится уже CIMEvent: :o nAddRatingVote() (из модуля 'im') 4. При этом, CIMMail (внутри modules/im/mail/) нигде не вызывается, хотя именно он должен отправлять уведомление по почте, если я правильно понял.
К сожалению, уже запутался.. Есть задача: отправлять уведомления по почте, если пользователь в настройках поставил галочку об этом, но оно не работает. Где ещё посмотреть или что сделать дабы восстановить работоспособность уведомлений по почте?
Насчёт того, что событие модуля main, а не im это верно, спасибо за поправку, я был невнимателен. Коллбек теперь выполняется, да. Однако в $arFields передаётся int (o.0) Подскажите, пожалуйста, каким образом в этом обработчике получить текст уведомления и отправить письмо по почте пользователя? Или где конкретно об этом прочесть, если "из коробки" оно не работает?
nukemonk пишет: ну, я вам объяснил, как действует эта настройка :) только сейчас посмотрел на ваш обработчик. где вы такое событие взяли?
Хорошо. Тогда каким образом переопределить поведение данной настройки?
Событие я взял из двух источников: 1. Документация (http://dev.1c-bitrix.ru/api_help/main/events/#rating) 2. Исходный код (bitrix\modules\im\classes\general\im_event.php, метод \Bitrix\Im\CIMEvent: :o nAddRatingVote() )
nukemonk пишет: политика такова, что мыло - крайний канал для отправки уведомлений, когда их не удалось доставить другими способами. и в этом есть своя логика, иначе пользователи могут взвыть из-за количества почтового спама
У пользователей ведь есть настройка, которая позволяет гибко управлять уведомлениями: http://cl.ly/Xx56 Проблема в том, что при установленных флагах (самим пользователем) никаких уведомлений нет. Пробовал найти почему так происходит, однако концов не смог найти, кроме того, что методы из класса CIMMail не вызываются вообще нигде в коде. По этой причине решил добавить на необходимые события обработчик, который бы проверял настройку и, если она включена, отправлял бы письмо). Однако, обработчик события тоже не работает. Теперь я в смятении и необходима помощь более опытных в Битриксе коллег.
В настройках уведомлений пользователя везде установлены галочки "отправлять по email" (http://cl.ly/Xx56) При новых комментариях или лайках на сайте уведомления появляются, однако почта не приходит. Отправка других email (например, восстановление пароля) работает.
Каким образом добавить обработчик события, который бы отправлял на почту это уведомление? Чтобы обновление ничего не сломало.
Пробовал сделать в init.php примерно такое: [CODE] AddEventHandler('im', "OnAddRatingVote", "OnAfterImHandler" ;) ; function OnAfterImHandler($arFields) { die('Sup'); } [/CODE] Но увы, код внутри коллбека не выполняется. Нашёл пост на форуме без единого ответа от 12 года и только.
Далее, внутри bitrix/modules/im/classes/general/im_mail.php есть метод MailMessageAgent(), внутри которого есть строка: [CODE] $arUnsendMessage = CIMMessage::GetUnsendMessage(); [/CODE] Но она всегда возвращает пустое количество сообщений ибо к моменту данного запроса уведомление новое уже отправлено и установлен флаг успеха.