Answer the question
In order to leave comments, you need to log in
How to make a trigger in a trigger mailing?
Добрый день!
Как правильно сделать триггер для триггерной рассылки в битриксе, который будет запускаться не по событию, а сам, периодически?
Я так понимаю, нужно унаследоваться от TriggerConnectorClosed и определить метод filter.
Официальной документации нет, примеров тоже нет, есть пару статей в интернете, который прочитал вдоль и поперек.
Суть в том, что не запускается триггер! Хоть ты тресни! Отлаживать очень сложно, так как по времени должен быть запуск.
По агентам не работает, по крону не работает.
Работают лишь только те триггеры, которые запускаются по событию.
Что делать?
Answer the question
In order to leave comments, you need to log in
Есть хорошая статья на эту тему. Немного устарела, но суть осталась прежняя: https://dev.1c-bitrix.ru/community/blogs/silaev/ma...
Отлаживать очень сложно, так как по времени должен быть запуск
AddEventHandler("sender", "OnTriggerList", ["EventListener", "onTriggerList"]);
use Bitrix\Main\Event;
class EventListener
{
public static function OnTriggerList(Event $event): Event
{
Handlers\Sender\MyTrigger::addTriggerInList($event);
return $event;
}
}
namespace Handlers\Sender;
use Bitrix\Main\Event;
use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\EventResult;
use Bitrix\Sender\Trigger\TriggerConnectorClosed;
Loc::loadMessages(__FILE__);
Loader::includeModule('sender');
class MyTrigger extends TriggerConnectorClosed
{
public static function addTriggerInList(Event &$event): Event
{
$event->addResult(new EventResult(0, [
'TRIGGER' => [
'Handlers\Sender\MyTrigger'
]
]));
return $event;
}
public function getName(): string
{
return 'TriggerName';
}
public function getCode(): string
{
return 'my_trigger';
}
public static function canBeTarget(): bool
{
return false;
}
public function filter(): bool
{
$this->recipient = [];
// Тут какая-то логика на поиск людей по нужным параметрам
$this->recipient[] = [
'EMAIL' => $user['EMAIL'],
'NAME' => $user['NAME'],
'USER_ID' => $user['ID'],
];
if (!empty($this->recipient)) {
return true;
} else {
return false;
}
}
public function getForm(): string
{
return ' '; // Тут форма с параметрами которые можно выбирать при создании триггера, если нужно.
}
public function getRecipient()
{
return $this->recipient;
}
public static function getPersonalizeList(): array
{
return [];
}
}
$_SERVER["DOCUMENT_ROOT"]
- иначе не будет отрабатывать триггер.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question