- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/lib/V2/Message/Send/PushService.php
- Класс: BitrixImV2MessageSendPushService
- Вызов: PushService::sendPushPrivateChat
public function sendPushPrivateChat(PrivateChat $chat, Message $message, array $counters = []): void
{
if (!$this->isPullEnable())
{
return;
}
$fromUserId = $message->getAuthorId();
$toUserId = $chat->getCompanion()->getId();
$pullMessage = [
'module_id' => 'im',
'command' => 'message',
'params' => (new PushFormat())->formatPrivateMessage($message, $chat),
'extra' => BitrixImCommon::getPullExtra(),
];
$pullMessageTo = $pullMessage;
$pullMessageTo['params']['dialogId'] = $fromUserId;
$pullMessageFrom = $pullMessage;
$pullMessageFrom['params']['dialogId'] = $toUserId;
$pullMessageFrom['params']['counter'] = $counters[$fromUserId] ?? 0;
BitrixPullEvent::add($fromUserId, $pullMessageFrom);
if ($fromUserId != $toUserId)
{
$pullMessageTo['params']['counter'] = $counters[$toUserId] ?? 0;
BitrixPullEvent::add($toUserId, $pullMessageTo);
$pullMessageTo = $this->preparePushForPrivate($pullMessageTo);
$pullMessageFrom = $this->preparePushForPrivate($pullMessageFrom);
if ($this->sendingConfig->sendPush())
{
if ($message->getPushMessage())
{
$pullMessageTo['push']['message'] = $message->getPushMessage();
$pullMessageTo['push']['advanced_params']['senderMessage'] = $message->getPushMessage();
$pullMessageFrom['push']['message'] = $message->getPushMessage();
$pullMessageFrom['push']['advanced_params']['senderMessage'] = $message->getPushMessage();
}
$pullMessageTo['push']['advanced_params']['counter'] = $counters[$toUserId] ?? 0;
BitrixPullPush::add($toUserId, $pullMessageTo);
$pullMessageFrom['push']['advanced_params']['counter'] = $counters[$fromUserId] ?? 0;
BitrixPullPush::add($fromUserId, array_merge_recursive($pullMessageFrom, ['push' => [
'skip_users' => [$fromUserId],
'advanced_params' => [
"notificationsToCancel" => ['IM_MESS'],
],
'send_immediately' => 'Y', // $this->sendingConfig->sendPushImmediately()
]]));
}
}
}