2declare(strict_types=1);
4namespace Bitrix\Landing\Copilot\Connector\Chat;
6use Bitrix\AI\Chatbot\Dto\MessageDto;
7use Bitrix\AI\Chatbot\Enum\MessageType;
8use Bitrix\AI\Chatbot\Message\CreateSiteGreetingMessage;
9use Bitrix\AI\Chatbot\Message\DefaultMessage;
10use Bitrix\AI\Chatbot\Message\Message;
11use Bitrix\AI\Chatbot\Message\SystemMessage;
12use Bitrix\Landing\Copilot\Data\Wishes;
13use Bitrix\Landing\Copilot\Generation;
14use Bitrix\Landing\Copilot\Data;
15use Bitrix\Main\LoaderException;
16use Bitrix\Main\Localization\Loc;
17use Bitrix\Main\SystemException;
24 private const WELCOME_STAGE =
'welcome';
25 private const CREATE_SITE_STAGE =
'createSite';
26 private const RESTART_SITE_STAGE =
'restartSite';
27 private const START_OVER_STAGE =
'startOver';
31 $message =
new CreateSiteGreetingMessage(
'');
34 Loc::getMessage(
'LANDING_CHATBOT_SITE_CREATE_SITE'),
35 ChatBotCommands::startGeneration->value,
37 $this->sendAnswer($chatId,
$message);
49 $this->startWriting(
$message->chatId);
57 $commandParams = is_array($command[1]) ? $command[1] : [];
58 $currentStage = $this->getCurrentScenarioStage($chatId,
$message);
60 switch ($currentStage)
62 case self::CREATE_SITE_STAGE:
64 $this->handleCreateSiteStage($chatId);
68 case self::RESTART_SITE_STAGE:
70 $this->handleRestartSiteStage($chatId, $commandParams);
74 case self::START_OVER_STAGE:
76 $this->handleStartOver($chatId, $commandParams);
92 $this->stopWriting($chatId);
101 private function getCurrentScenarioStage(
int $chatId, MessageDto $userMessage): string
103 if ($userMessage->type === MessageType::ButtonClicked)
105 $userMessageCommand = $userMessage->params[
'command'][0] ??
'';
107 if ($userMessageCommand === ChatBotCommands::startGeneration->value)
109 return self::CREATE_SITE_STAGE;
112 if ($userMessageCommand === ChatBotCommands::restartGeneration->value)
114 return self::RESTART_SITE_STAGE;
119 return self::START_OVER_STAGE;
123 $messages = $this->getMessages($chatId, 0);
126 if ($messagesCount === 2)
128 return self::CREATE_SITE_STAGE;
131 return self::WELCOME_STAGE;
140 private function handleStartOver(
int $chatId,
array $params = []): void
144 new DefaultMessage(Loc::getMessage(
'LANDING_CHATBOT_SITE_START_OVER_SITE_MESSAGE'))
146 $this->stopWriting($chatId,
false);
156 private function handleCreateSiteStage(
int $chatId): void
158 $wishes = $this->getWishesForSiteGenerating($chatId);
159 $generator =
new Generation();
162 ->setScenario(
new Generation\Scenario\CreateSite())
169 'generationId' => $generator->getId(),
179 private function getWishesForSiteGenerating(
int $chatId): Data\Wishes
182 $wishes =
new Data\Wishes();
187 $buttonId =
$messages[1]->params[
'buttonId'] ??
null;
188 if ($buttonId ===
null)
194 if (empty($wishes->getWishes()))
196 $wishes->setDemoWishes();
209 private function handleRestartSiteStage(
int $chatId,
array $params = []): void
216 $generationId =
$params[
'generationId'] ?? 0;
217 if ($generationId <= 0)
222 $generation =
new Generation();
223 if ($generation->initById($generationId))
227 $generation->clearErrors()->execute();
231 $this->stopWriting($chatId,
false);
240 $errorText =
$message->params[
'errorText'] ??
'';
241 $answer =
new SystemMessage($errorText);
244 Loc::getMessage(
'LANDING_CHATBOT_SITE_RETRY_CREATE_SITE_BUTTON'),
245 Loc::getMessage(
'LANDING_CHATBOT_SITE_CREATE_SITE'),
246 ChatBotCommands::restartGeneration->value,
248 'generationId' =>
$message->generationId ??
null,
260 $answer =
new SystemMessage(Loc::getMessage(
'LANDING_CHATBOT_SITE_ERROR_RESTRICTED_REQUEST'));
262 Loc::getMessage(
'LANDING_CHATBOT_SITE_START_OVER_SITE_BUTTON'),
263 Loc::getMessage(
'LANDING_CHATBOT_SITE_START_OVER_SITE_BUTTON'),
266 'generationId' =>
$message->generationId ??
null,
278 $answer =
new SystemMessage(Loc::getMessage(
'LANDING_CHATBOT_SITE_ERROR_VENDOR'));
280 Loc::getMessage(
'LANDING_CHATBOT_SITE_RETRY_CREATE_SITE_BUTTON'),
281 Loc::getMessage(
'LANDING_CHATBOT_SITE_RETRY_CREATE_SITE_BUTTON'),
282 ChatBotCommands::restartGeneration->value,
284 'generationId' =>
$message->generationId ??
null,
296 $answer =
new SystemMessage(Loc::getMessage(
'LANDING_CHATBOT_SITE_ERROR_B24'));
298 Loc::getMessage(
'LANDING_CHATBOT_SITE_RETRY_CREATE_SITE_BUTTON'),
299 Loc::getMessage(
'LANDING_CHATBOT_SITE_RETRY_CREATE_SITE_BUTTON'),
300 ChatBotCommands::restartGeneration->value,
302 'generationId' =>
$message->generationId ??
null,
314 return new DefaultMessage(Loc::getMessage(
'LANDING_CHATBOT_SITE_START_SITE_GENERATING'));
322 return new DefaultMessage(Loc::getMessage(
'LANDING_CHATBOT_SITE_FINISH_SITE_GENERATING'));
sendFrontendEvent(ChatBotCommands $command, array $params=[])
onMessageAdd(MessageDto $message, ?array $command=null)
onChatStart(int $chatId, array $parameters=[])
sendGenerationEndMessage(ChatBotMessageDto $message)
getB24ErrorMessage(ChatBotMessageDto $message)
getQuotaExceededMessage(ChatBotMessageDto $message)
getStartGenerationMessage()
getFinishGenerationMessage()
getVendorErrorMessage(ChatBotMessageDto $message)
getRestrictedRequestMessage(ChatBotMessageDto $message)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']