3namespace Bitrix\Im\V2\Message;
7use Bitrix\Im\V2\Chat\PrivateChat;
8use Bitrix\Im\V2\Entity\User\NullUser;
9use Bitrix\Im\V2\Entity\User\User;
10use Bitrix\Im\V2\Message;
11use Bitrix\Im\V2\MessageCollection;
12use Bitrix\Im\V2\Result;
13use Bitrix\Main\Engine\Response\Converter;
14use Bitrix\Main\Loader;
15use Bitrix\Main\Type\DateTime;
16use Bitrix\Im\V2\Common\ContextCustomer;
23 private const MAX_CHAT_MESSAGE_TIME = 600;
24 private const DND_USER_STATUS =
'dnd';
34 $chat = $this->message->
getChat();
35 $chatLegacyFormat = $chat->toPullFormat();
37 $notify = !empty($chat->getRecentSections());
40 'chatId' => $chat->getChatId(),
41 'dateLastActivity' =>
$message->getDateCreate(),
43 'chat' => $chat instanceof
PrivateChat ? [] : [$chat->getId() => $chatLegacyFormat],
44 'copilot' =>
$message->getCopilotData(),
46 'multidialog' => $chat->getMultidialogData(),
48 'userBlockChat' => [$chat->getId() => $chatLegacyFormat[
'mute_list'] ?? []],
49 'users' => $users ?:
null,
53 'templateFileId' =>
$message->getFileUuid(),
55 'chatId' => $chat->getChatId(),
56 'senderId' =>
$message->getActionContextUserId(),
57 'recipientId' => $chat->getDialogId(),
58 'system' => (
$message->isSystem() ?
'Y':
'N'),
59 'date' => DateTime::createFromTimestamp(time()),
62 'params' =>
$message->getEnrichedParams()->toPullFormat(),
64 'isImportant' =>
$message->isImportant(),
65 'importantFor' =>
$message->getImportantFor(),
69 'counterType' => $chat->getCounterType()->value,
70 'recentConfig' => $chat->getRecentConfig()->toPullFormat(),
71 'files' =>
$message->getFiles()->toRestFormat([
'IDS_AS_KEY' =>
true]),
73 'messagesAutoDeleteConfigs' => $chat->getMessageAutoDeleteConfigs()->toRestFormat(),
79 if ($this->message->getChat() instanceof
PrivateChat)
84 $userIds = $this->message->getChat()->getRelations()->getUserIds();
86 return [$this->message->getChatId() => array_values($userIds)];
91 $pushParams = $this->message->getPushParams();
92 $extraParamContext = $pushParams[
'CONTEXT'] ??
null;
99 $contextUserId = $this->message->getActionContextUserId();
102 if ($this->message->getChat() instanceof
PrivateChat)
104 $toUser = $this->message->getChat()->getCompanion($contextUserId);
114 [$lineId,
$userId] = explode(
'|', $this->message->getChat()->getEntityId() ??
'');
115 $userCode =
'livechat|' . $lineId .
'|' . $this->message->getChatId() .
'|' .
$userId;
116 $operatorInfo = \Bitrix\ImOpenLines\Connector::getOperatorInfo(
117 $this->message->getPushParams()[
'LINE_ID'],
118 $this->message->getAuthor()?->getId() ?? 0,
122 return [$this->message->getAuthor()?->getId() => $operatorInfo];
132 foreach ($users as
$user)
157 $converter =
new Converter(Converter::KEYS | Converter::TO_LOWER | Converter::RECURSIVE);
160 $services =
$user->getServices();
163 $result[
'services'] = empty($services) ? null : $services;
164 $result[
'profile'] = \CIMContactList::GetUserPath(
$user->getId());
172 $additionalEntitiesAdapter = new \Bitrix\Im\V2\Rest\RestAdapter();
173 $additionalPopupData = new \Bitrix\Im\V2\Rest\PopupData([]);
188 $additionalEntitiesAdapter->addEntities(
$messages);
189 $additionalEntitiesAdapter->setAdditionalPopupData($additionalPopupData);
190 return $additionalEntitiesAdapter->toRestFormat([
191 'WITHOUT_OWN_REACTIONS' =>
true,
192 'MESSAGE_ONLY_COMMON_FIELDS' =>
true,
198 $userId = $chat->getContext()->getUserId();
201 'command' =>
'startRecordVoice',
206 'userName' => $chat->getContext()->getUser()->getName()
218 'command' =>
'messageUpdate',
221 'type' =>
$message->getChat()->getType() === Chat::IM_TYPE_PRIVATE ?
'private' :
'chat',
222 'text' =>
$message->getParsedMessage(),
225 'senderId' =>
$message->getAuthorId(),
226 'params' =>
$message->getEnrichedParams()->toPullFormat([
'IS_EDITED',
'URL_ID',
'ATTACH',
'DATE_TEXT',
'DATE_TS']),
237 $toUser =
$message->getChat()->getCompanion();
238 $toUserStatus = $toUser->getStatus(
true);
240 if (!(
$message->getAuthorId() === $this->getContext()->getUserId()))
250 $timestampTimeNow = DateTime::createFromTimestamp(time())->getTimestamp();
251 if (!($timestampTimeNow -
$message->getDateCreate()->getTimestamp() <= self::MAX_CHAT_MESSAGE_TIME))
256 if (!($toUserStatus === self::DND_USER_STATUS))
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
const ENTITY_TYPE_LIVECHAT
static parse($text, $params=Array())
static parseLegacyFormat($text, $params=Array())
static getInstance($userId=null)
getDialogId(?int $contextUserId=null)
const INFORM_TIMEOUT_ERROR
const INFORM_USER_STATUS_ERROR
const INFORM_USER_CONTEXT_ERROR
const INFORM_VIEWED_ERROR
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)