9namespace Bitrix\Sender\Integration;
12use Bitrix\Main\Entity as MainEntity;
14use Bitrix\Main\Loader;
15use Bitrix\Main\Localization\Loc;
16use Bitrix\Main\ModuleManager;
17use Bitrix\Sender\ContactTable;
18use Bitrix\Sender\Dispatch;
19use Bitrix\Sender\Entity;
20use Bitrix\Sender\Internals\Model;
21use Bitrix\Sender\Internals\Model\LetterTable;
22use Bitrix\Sender\Message;
23use Bitrix\Sender\PostingRecipientTable;
24use Bitrix\Sender\Security\Agreement;
25use Bitrix\Sender\Security\User;
26use Bitrix\Sender\Templates;
28Loc::loadMessages(__FILE__);
45 if (ModuleManager::isModuleInstalled(
'crm'))
47 $list[] =
'Bitrix\Sender\Integration\Crm\Preset\Segment';
62 if (Loader::includeModule(
'crm'))
79 if (ModuleManager::isModuleInstalled(
'crm'))
84 if (
Bitrix24\Service::isCloud() && $eventData[
'SEND_RESULT'] && $letter->getMessage()->getCode() ===
Message\iBase::CODE_MAIL)
99 if (ModuleManager::isModuleInstalled(
'crm'))
104 foreach ($eventDataArray as $eventData)
106 $event =
new Event(
'sender',
'OnAfterPostingSendRecipient', [$eventData, $letter]);
119 if (
Bitrix24\Service::isCloud() && is_array($eventData))
134 if (Loader::includeModule(
'sale') && !
Bitrix24\Service::isCloud())
136 if (
Templates\Category::class === $className)
158 if (Loader::includeModule(
'sale') && !
Bitrix24\Service::isCloud())
160 foreach (Sale\
Preset\TriggerCampaign::getAll() as $item)
162 foreach ($item[
'CHAIN'] as $letter)
165 'ID' => $letter[
'TEMPLATE_ID'],
166 'TYPE' => $letter[
'TEMPLATE_TYPE'],
167 'CATEGORY' => mb_strtoupper($item[
'CODE']),
168 'MESSAGE_CODE' =>
Message\iBase::CODE_MAIL,
170 'IS_TRIGGER' =>
true,
174 'NAME' => $letter[
'SUBJECT'],
179 'VALUE' => $letter[
'SUBJECT'],
183 'VALUE' => $letter[
'MESSAGE'],
192 return isset($list[$messageType]) ? $list[$messageType] : [];
204 $data[
'CONNECTOR'][] =
'Bitrix\Sender\Integration\Sender\Connectors\Recipient';
205 $data[
'CONNECTOR'][] =
'Bitrix\Sender\Integration\Sender\Connectors\Contact';
206 $data[
'CONNECTOR'][] =
'Bitrix\Sender\Integration\Sender\Connectors\UnSubscribers';
209 if (Loader::includeModule(
'crm'))
211 $data[
'CONNECTOR'][] =
'Bitrix\Sender\Integration\Crm\Connectors\Lead';
212 $data[
'CONNECTOR'][] =
'Bitrix\Sender\Integration\Crm\Connectors\Client';
227 'Bitrix\Sender\Integration\Main\Triggers\UserAuth',
228 'Bitrix\Sender\Integration\Main\Triggers\UserDontAuth',
244 $list[] =
'Bitrix\Sender\Integration\Sender\Mail\MessageMail';
247 if (MessageService\
Sms\Service::canUse())
249 $list[] =
'Bitrix\Sender\Integration\MessageService\Sms\MessageSms';
253 if (
Im\Service::canUse())
255 $list[] =
'Bitrix\Sender\Integration\Im\MessageIm';
261 $list[] =
'Bitrix\Sender\Integration\VoxImplant\MessageCall';
262 $list[] =
'Bitrix\Sender\Integration\VoxImplant\MessageAudioCall';
269 if (Seo\
Ads\Service::canUse())
272 'Bitrix\Sender\Integration\Seo\Ads\MessageYa',
274 'Bitrix\Sender\Integration\Seo\Ads\MessageGa',
276 'Bitrix\Sender\Integration\Seo\Ads\MessageFb',
277 'Bitrix\Sender\Integration\Seo\Ads\MessageMarketingFb',
278 'Bitrix\Sender\Integration\Seo\Ads\MessageMarketingInstagram',
279 'Bitrix\Sender\Integration\Seo\Ads\MessageLookalikeFb',
281 foreach ($adsList as $adsClass)
283 if (!
Bitrix24\Service::isAdVisibleInRegion($adsClass::CODE))
293 if (
Crm\ReturnCustomer\Service::canUse())
295 $list[] =
'Bitrix\Sender\Integration\Crm\ReturnCustomer\MessageLead';
296 $list[] =
'Bitrix\Sender\Integration\Crm\ReturnCustomer\MessageDeal';
299 if (
Bitrix24\Service::isMasterYandexVisibleInRegion())
301 $list[] = \Bitrix\Sender\Integration\Yandex\Master\MessageMasterYandex::class;
303 if(
Bitrix24\Service::isTolokaVisibleInRegion())
305 $list[] =
'Bitrix\Sender\Integration\Yandex\Toloka\MessageToloka';
321 if (Loader::includeModule(
'sale') && !
Bitrix24\Service::isCloud())
323 $list = array_merge($list, Sale\
Preset\TriggerCampaign::getAll());
332 $list[] =
'Bitrix\Sender\Integration\Sender\Mail\ConsentBuilderMail';
333 $list[] =
'Bitrix\Sender\Integration\Sender\Mail\TestConsentBuilderMail';
339 $list[] =
'Bitrix\Sender\Integration\Sender\Mail\ConsentResponseMail';
340 $list[] =
'Bitrix\Sender\Integration\Sender\Mail\TestConsentResponseMail';
353 $list[] =
'Bitrix\Sender\Integration\Sender\Mail\TransportMail';
356 if (MessageService\
Sms\Service::canUse())
358 $list[] =
'Bitrix\Sender\Integration\MessageService\Sms\TransportSms';
362 if (
Im\Service::canUse())
364 $list[] =
'Bitrix\Sender\Integration\Im\TransportIm';
370 $list[] =
'Bitrix\Sender\Integration\VoxImplant\TransportCall';
371 $list[] =
'Bitrix\Sender\Integration\VoxImplant\TransportAudioCall';
378 if (Seo\
Ads\Service::canUse())
380 $list[] =
'Bitrix\Sender\Integration\Seo\Ads\TransportYa';
381 $list[] =
'Bitrix\Sender\Integration\Seo\Ads\TransportGa';
382 $list[] =
'Bitrix\Sender\Integration\Seo\Ads\TransportVk';
383 $list[] =
'Bitrix\Sender\Integration\Seo\Ads\TransportFb';
384 $list[] =
'Bitrix\Sender\Integration\Seo\Ads\TransportMarketingFb';
385 $list[] =
'Bitrix\Sender\Integration\Seo\Ads\TransportMarketingInstagram';
386 $list[] =
'Bitrix\Sender\Integration\Seo\Ads\TransportLookalikeVk';
387 $list[] =
'Bitrix\Sender\Integration\Seo\Ads\TransportLookalikeFb';
388 $list[] = \Bitrix\Sender\Integration\Seo\Ads\TransportLookalikeYandex::class;
392 if (
Crm\ReturnCustomer\Service::canUse())
394 $list[] =
'Bitrix\Sender\Integration\Crm\ReturnCustomer\TransportLead';
395 $list[] =
'Bitrix\Sender\Integration\Crm\ReturnCustomer\TransportDeal';
398 $list[] =
'Bitrix\Sender\Integration\Yandex\Toloka\TransportToloka';
414 if (
Bitrix24\Service::isCloud() && isset(
$data[
'fields'][
'STATUS']))
416 $oldRow = LetterTable::getRowById(
$data[
'primary'][
'ID']);
417 $updatedBy =
$data[
'fields'][
'UPDATED_BY'] ?? $oldRow[
'UPDATED_BY'];
419 if (in_array(
$data[
'fields'][
'STATUS'],
Dispatch\Semantics::getWorkStates()))
422 if (!
$user->isAgreementAccepted())
432 if (is_null($letter))
436 Loc::getMessage(
"SENDER_LETTER_ONBEFOREUPDATE_ERROR_LETTER_NOT_AVAILABLE"),
'FEATURE_NOT_AVAILABLE'
442 if (!$letter->getMessage()->isAvailable())
444 if ($letter->getState()->isWaiting() || $letter->getState()->isSending())
451 Loc::getMessage(
"SENDER_LETTER_ONBEFOREUPDATE_ERROR_FEATURE_NOT_AVAILABLE"),
'FEATURE_NOT_AVAILABLE'
459 if ($isEmail && $isEmailBlocked)
471 $emailFrom = $letter->getMessage()->getConfiguration()->getOption(
'EMAIL_FROM')->getValue();
472 if (!
Sender\AllowedSender::isAllowed($emailFrom, $updatedBy))
476 Loc::getMessage(
"SENDER_LETTER_ONBEFOREUPDATE_ERROR_INVALID_FROM_EMAIL"),
'WRONG_EMAIL_FROM'
493 if (!
$result->isBelongTo(
'sender',
'rcpt'))
501 'STATUS',
'POSTING_ID',
'CONTACT_ID',
502 'CONTACT_IS_SEND_SUCCESS' =>
'CONTACT.IS_SEND_SUCCESS'
504 'filter' => [
'=ID' =>
$result->getEntityId()]
514 if ($row[
'CONTACT_IS_SEND_SUCCESS'] !==
'Y')
528 Model\Posting\RecipientTable::update(
534 Model\PostingTable::update(
static getRow(array $parameters)
static update($primary, array $data)
static createInstanceById($id=null, array $messageCodes=[])
static onAfterPostingSendRecipient(array $eventData, Entity\Letter $letter)
static onAfterPostingSendRecipientMultiple(array $eventDataArray, Entity\Letter $letter)
static onConnectorList(array $data=array())
static onSenderConsentMessageBuildersList()
static onSenderCompanyCard()
static onMailEventMailChangeStatus($result)
static onTriggerList(array $data=[])
static onSenderPresetList()
static onSenderConsentResponseList()
static onAfterPostingSendRecipient(array $eventData, Entity\Letter $letter)
static onSenderMessageList()
static onSenderTriggerCampaignPreset()
static onTemplateList($messageType)
static onConstantList($className)
static onBeforeUpdateLetterTable(MainEntity\Event $event, MainEntity\EventResult $result)
static onAfterPostingRecipientUnsubscribe(array $eventData)
static onSenderTransportList()
static onAfterPostingSendRecipientMultiple(array $eventDataArray, Entity\Letter $letter)
static getTemplateCategories()
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)