- Модуль: messageservice
- Путь к файлу: ~/bitrix/modules/messageservice/lib/message.php
- Класс: BitrixMessageServiceMessage
- Вызов: Message::sendDirectly
public function sendDirectly(): ResultSendMessage
{
global $USER;
$checkResult = $this->checkFields();
if (!$checkResult->isSuccess())
{
$result = new ResultSendMessage();
return $result->addErrors($checkResult->getErrors());
}
if ($this->checkRestrictions)
{
$restrictionManager = new RestrictionManager($this);
if (!$restrictionManager->isCanSendMessage())
{
return (new ResultSendMessage)->addError(
new Error(Loc::getMessage('MESSAGESERVICE_MESSAGE_ERROR_RESTRICTION'))
);
}
}
$sender = $this->getSender();
if (!SenderLimitation::checkDailyLimit($sender->getId(), $this->getFrom()))
{
$result = new ResultSendMessage();
$result->addError(new Error(Loc::getMessage('MESSAGESERVICE_MESSAGE_ERROR_LIMITATION')));
$result->setStatus(MessageStatus::DEFERRED);
return $result;
}
$headers = $this->getHeaders();
$messageFields = [
'TYPE' => $this->getType(),
'SENDER_ID' => $sender->getId(),
'AUTHOR_ID' => $this->getAuthorId(),
'MESSAGE_FROM' => $this->getFrom(),
'MESSAGE_TO' => $this->getTo(),
'MESSAGE_HEADERS' => count($headers) > 0 ? $headers : null,
'MESSAGE_BODY' => $this->getBody(),
'CLUSTER_GROUP' => defined('BX_CLUSTER_GROUP') ? BX_CLUSTER_GROUP : null
];
$sender->setSocketTimeout(5);
$sender->setStreamTimeout(15);
$result = $sender->sendMessage($messageFields);
$messageFields['DATE_EXEC'] = new DateTime();
$messageFields['SUCCESS_EXEC'] = $result->isSuccess() ? 'Y' : 'N';
if ($result->getExternalId() !== null)
{
$messageFields['EXTERNAL_ID'] = $result->getExternalId();
}
if ($result->getStatus() !== null)
{
$messageFields['STATUS_ID'] = $result->getStatus();
}
$addResult = InternalEntityMessageTable::add($messageFields);
if (!$addResult->isSuccess())
{
$result->addErrors($addResult->getErrors());
$result->setStatus(MessageStatus::ERROR);
return $result;
}
$this->id = $addResult->getId();
$result->setId($this->id);
if (MainConfigOption::get('messageservice', 'event_log_message_send', 'N') === 'Y')
{
$userId = is_object($USER) ? $USER->getId() : 0;
CEventLog::Log('INFO', 'MESSAGE_SEND', 'messageservice', $userId, $this->getTo());
}
return $result;
}