static function onCommandAdd($messageId, $messageFields)
{
$command = static::getCommandByMessage($messageFields);
if (!$command)
{
return false;
}
if ($messageFields['COMMAND'] === self::COMMAND_SUPPORT24)
{
$messageParams = [];
if ($messageFields['COMMAND_PARAMS'] === self::COMMAND_ACTIVATE_PARTNER)
{
$keyboard = new Keyboard(self::getBotId());
$keyboard->addButton([
"DISPLAY" => "LINE",
"TEXT" => self::getMessage('PARTNER_BUTTON_MANAGE'),
"LINK" => self::getMessage('PARTNER_BUTTON_MANAGE_URL'),
"CONTEXT" => "DESKTOP",
]);
$messageParams[self::MESSAGE_PARAM_KEYBOARD] = $keyboard;
$attach = new CIMMessageParamAttach(null, CIMMessageParamAttach::NORMAL);
$attach->addMessage(self::getMessage('PARTNER_REQUEST_PROCESSED'));
$messageParams[self::MESSAGE_PARAM_ATTACH] = $attach;
$result = Partner24::acceptRequest($messageFields['FROM_USER_ID']);
if (!$result)
{
return false;
}
}
else
{
if ($messageFields['COMMAND_PARAMS'] === self::COMMAND_DEACTIVATE_PARTNER)
{
Partner24::deactivate($messageFields['FROM_USER_ID']);
$attach = new CIMMessageParamAttach(null, CIMMessageParamAttach::NORMAL);
$attach->addMessage(self::getMessage('PARTNER_REQUEST_PROCESSED'));
$messageParams[self::MESSAGE_PARAM_ATTACH] = $attach;
}
elseif ($messageFields['COMMAND_PARAMS'] === self::COMMAND_DECLINE_PARTNER_REQUEST)
{
Partner24::declineRequest($messageFields['FROM_USER_ID']);
$attach = new CIMMessageParamAttach(null, CIMMessageParamAttach::PROBLEM);
$attach->addMessage(self::getMessage('PARTNER_REQUEST_REJECTED'));
$messageParams[self::MESSAGE_PARAM_ATTACH] = $attach;
}
$messageParams[self::MESSAGE_PARAM_KEYBOARD] = 'N';
}
CIMMessageParam::set($messageId, $messageParams);
CIMMessageParam::sendPull($messageId, [self::MESSAGE_PARAM_ATTACH, 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',
MixinMESSAGE_PARAM_MENU_ACTION => 'SKIP:MENU',
],
]);
$userGender = ImUser::getInstance(self::getCurrentUser()->getId())->getGender();
$forward = self::getMessage('START_DIALOG_'. ($userGender == 'F' ? 'F' : 'M'));
if (!$forward)
{
$forward = Loc::getMessage('SUPPORT24_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'] === ItrMenu::COMMAND_MENU)
{
if (
self::isEnabledQuestionFunctional()
&& !(self::instanceDialogSession(self::getBotId(), $messageFields['DIALOG_ID'])->getSessionId() > 0)
)
{
if ($messageFields['COMMAND_PARAMS'] === MixinCOMMAND_RESUME_SESSION)
{
self::dropMessage((int)$messageId);
// restart itr
if (self::hasBotMenu())
{
self::showMenu([
'DIALOG_ID' => $messageFields['DIALOG_ID'],
'FULL_REDRAW' => true,
]);
}
return true;
}
// block only redirect on operator
if (
self::isQuitMenuCommand($messageFields)
&& !self::allowAdditionalQuestion()
)
{
self::resetMenuState($messageFields['DIALOG_ID']);
static::disableMessageButtons((int)$messageId);
$questionDisallowed = self::getQuestionDisallowMessage();
if ($questionDisallowed)
{
self::sendMessage([
'DIALOG_ID' => $messageFields['DIALOG_ID'],
'MESSAGE' => $questionDisallowed,
'KEYBOARD' => self::getQuestionResumeButton(),
'URL_PREVIEW' => 'N',
'SYSTEM' => 'Y',
]);
}
return false;
}
}
self::handleMenuCommand($messageId, $messageFields);
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);
}