static function onCommandAdd($messageId, $messageFields)
{
$command = static::getCommandByMessage($messageFields);
if (!$command)
{
return false;
}
if ($messageFields['COMMAND'] == self::COMMAND_ACTIVATE)
{
ImBot::startWriting(['BOT_ID' => self::getBotId()], $messageFields['DIALOG_ID']);
if (self::activate())
{
foreach (self::getRecentDialogs() as $dialog)
{
if (
$dialog['MESSAGE_ID'] > 0
&& $dialog['MESSAGE_TYPE'] == IM_MESSAGE_PRIVATE
)
{
CIMMessageParam::set($dialog['MESSAGE_ID'], [self::MESSAGE_PARAM_KEYBOARD => 'N']);
CIMMessageParam::sendPull($dialog['MESSAGE_ID'], [self::MESSAGE_PARAM_KEYBOARD]);
}
}
parent::sendMessage([
'DIALOG_ID' => self::USER_LEVEL_ADMIN,
'MESSAGE' => self::getMessage('ACTIVATION_SUCCESS', Loc::getMessage('SUPPORT_BOX_ACTIVATION_SUCCESS')),
'SYSTEM' => 'N',
'URL_PREVIEW' => 'N'
]);
}
else
{
$error = self::getError();
$helpDeskUrl = '';
if (MainLoader::includeModule('ui'))
{
$helpDeskUrl = BitrixUIUtil::getArticleUrlByCode(self::HELP_DESK_CODE);
}
$message = Loc::getMessage('SUPPORT_BOX_ACTIVATION_ERROR', [
'#ERROR#' => $error->msg,
'#HELP_DESK#' => $helpDeskUrl,
]);
$keyboard = new Keyboard(self::getBotId());
$keyboard->addButton([
'DISPLAY' => 'LINE',
'TEXT' => Loc::getMessage('SUPPORT_BOX_ACTIVATE'),
'BG_COLOR' => '#29619b',
'TEXT_COLOR' => '#fff',
'BLOCK' => 'Y',
'COMMAND' => self::COMMAND_ACTIVATE,
]);
parent::sendMessage([
'DIALOG_ID' => $messageFields['DIALOG_ID'],
'MESSAGE' => $message,
'KEYBOARD' => $keyboard,
'URL_PREVIEW' => 'N',
'SYSTEM' => 'N',
]);
CIMMessageParam::set($messageId, [self::MESSAGE_PARAM_KEYBOARD => 'N']);
CIMMessageParam::sendPull($messageId, [self::MESSAGE_PARAM_KEYBOARD]);
}
return true;
}
elseif ($messageFields['COMMAND'] === self::COMMAND_START_DIALOG)
{
$message = (new CIMChat(self::getBotId()))->getMessage($messageId);
// duplicate message
self::operatorMessageAdd(0, [
'BOT_ID' => self::getBotId(),
'BOT_CODE' => self::getBotCode(),
'DIALOG_ID' => self::getCurrentUser()->getId(),
'MESSAGE' => $message['MESSAGE'],
'PARAMS' => [
self::MESSAGE_PARAM_ALLOW_QUOTE => 'Y',
'IMB_MENU_ACTION' => 'SKIP:MENU', /** @see BitrixImbotBotMixinMESSAGE_PARAM_MENU_ACTION */
],
]);
$userGender = ImUser::getInstance(self::getCurrentUser()->getId())->getGender();
$forward = self::getMessage('START_DIALOG_'. ($userGender == 'F' ? 'F' : 'M'));
if (!$forward)
{
$forward = Loc::getMessage('SUPPORT_BOX_START_DIALOG_'. ($userGender == 'F' ? 'F' : 'M'));
}
CIMMessenger::add([
'MESSAGE_TYPE' => IM_MESSAGE_CHAT,
'SYSTEM' => 'Y',
'FROM_USER_ID' => self::getBotId(),
'TO_CHAT_ID' => $message['CHAT_ID'],
'MESSAGE' => self::replacePlaceholders($forward, self::getCurrentUser()->getId()),
]);
// Send push command to chat switch
ImBot::sendPullOpenDialog(self::getBotId());
self::disableMessageButtons($messageId);
return true;
}
elseif ($messageFields['COMMAND'] === MixinCOMMAND_QUEUE_NUMBER)
{
$sessionId = self::instanceDialogSession(self::getBotId(), $messageFields['DIALOG_ID'])->getSessionId();
if (!$sessionId)
{
$lastMessages = (new CIMMessage())->getLastMessage($messageFields['FROM_USER_ID'], static::getBotId(), false, false);
foreach ($lastMessages['message'] as $message)
{
if ($message['senderId'] != self::getBotId())
{
continue;
}
if (
!$sessionId
&& isset($message['params'], $message['params'][self::MESSAGE_PARAM_SESSION_ID])
&& (int)$message['params'][self::MESSAGE_PARAM_SESSION_ID] > 0 //SESSION_ID
)
{
$sessionId = (int)$message['params'][self::MESSAGE_PARAM_SESSION_ID];
}
if (isset($message['params'], $message['params'][self::MESSAGE_PARAM_IMOL_VOTE]))
{
break;// it is previous session
}
}
}
self::requestQueueNumber([
'MESSAGE_ID' => $messageId,
'BOT_ID' => self::getBotId(),
'DIALOG_ID' => $messageFields['DIALOG_ID'],
'SESSION_ID' => $sessionId,
]);
return true;
}
elseif (
$messageFields['COMMAND'] === self::COMMAND_NETWORK_SESSION
&& $messageFields['COMMAND_PARAMS'] === 'resume' /** @see MixinCOMMAND_RESUME_SESSION */
)
{
if (
self::isEnabledQuestionFunctional()
&& !(self::instanceDialogSession(self::getBotId(), $messageFields['DIALOG_ID'])->getSessionId() > 0)
)
{
self::dropMessage((int)$messageId);
if (!self::allowAdditionalQuestion())
{
$questionDisallowed = self::getQuestionDisallowMessage();
if ($questionDisallowed)
{
self::sendMessage([
'DIALOG_ID' => $messageFields['DIALOG_ID'],
'MESSAGE' => $questionDisallowed,
'KEYBOARD' => self::getQuestionResumeButton(),
'URL_PREVIEW' => 'N',
'SYSTEM' => 'Y',
]);
}
return false;
}
return true;
}
}
return parent::onCommandAdd($messageId, $messageFields);
}