- Модуль: imbot
- Путь к файлу: ~/bitrix/modules/imbot/lib/bot/supportbox.php
- Класс: BitrixImBotBotSupportBox
- Вызов: SupportBox::onMessageAdd
static function onMessageAdd($messageId, $messageFields)
{
if ($messageFields['SYSTEM'] === 'Y')
{
return false;
}
// check restrictions
if (!self::checkMembershipRestriction($messageFields))
{
(new CIMChat($messageFields['BOT_ID']))->deleteUser($messageFields['CHAT_ID'], $messageFields['BOT_ID']);
return false;
}
if (!self::checkMessageRestriction($messageFields))
{
return false;
}
$dialogId = (string)$messageFields['FROM_USER_ID'];
$isChat = $messageFields['CHAT_ENTITY_TYPE'] === self::CHAT_ENTITY_TYPE;
if ($isChat)
{
$dialogId = 'chat'.(int)$messageFields['CHAT_ID'];
}
if (
self::isEnabledQuestionFunctional()
&& !(self::instanceDialogSession(self::getBotId(), $dialogId)->getSessionId() > 0)
&& !self::allowAdditionalQuestion()
)
{
self::markMessageUndelivered($messageId);
$questionDisallowed = self::getQuestionDisallowMessage();
if ($questionDisallowed)
{
self::sendMessage([
'DIALOG_ID' => $dialogId,
'MESSAGE' => $questionDisallowed,
'KEYBOARD' => self::getQuestionResumeButton(),
'URL_PREVIEW' => 'N',
'SYSTEM' => 'Y',
]);
}
return true;
}
$managedCache = Application::getInstance()->getManagedCache();
$cacheKey = 'telemetry_sent_' . md5($messageFields['BOT_ID'], $messageFields['DIALOG_ID']);
if (!$managedCache->read(86400, $cacheKey))
{
$dialogSession = self::instanceDialogSession((int)$messageFields['BOT_ID'], $messageFields['DIALOG_ID']);
if ($dialogSession->getParam('TELEMETRY_SENT') === 'N')
{
self::sendTelemetry($messageFields);
$dialogSession->update(['TELEMETRY_SENT' => 'Y']);
$managedCache->set($cacheKey, true);
}
}
return parent::onMessageAdd($messageId, $messageFields);
}