• Модуль: 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()
			]]));
		}
	}
}