- Модуль: imconnector
- Путь к файлу: ~/bitrix/modules/imconnector/lib/Controller/Openlines.php
- Класс: BitrixImConnectorControllerOpenlines
- Вызов: Openlines::createAction
public function createAction(
string $connectorId,
string $botToken,
?int $lineId = null,
array $userIds = [],
bool $withQr = false
): ?array
{
$config = new Config();
if (!$lineId)
{
$lineId = $config->create([
'QUEUE' => array_merge([$this->getCurrentUser()->getId()], $userIds),
]);
}
else
{
$info = Connector::infoConnectorsLine($lineId);
if ($info && isset($info[$connectorId]))
{
$this->addError(new Error(
Openlines::ERROR_CONNECTOR_ALREADY_EXISTS['message'],
Openlines::ERROR_CONNECTOR_ALREADY_EXISTS['code']
));
return null;
}
}
$connectorOutput = new Output($connectorId, $lineId);
$status = Status::getInstance($connectorId, $lineId);
$saveResult = $connectorOutput->saveSettings([
'api_token' => $botToken,
]);
if (!$saveResult->isSuccess())
{
$this->addErrors($saveResult->getErrors());
return null;
}
$testConnect = $connectorOutput->testConnect();
if (!$testConnect->isSuccess())
{
$this->addErrors($testConnect->getErrors());
return null;
}
$register = $connectorOutput->register();
if (!$register->isSuccess())
{
$this->addErrors($register->getErrors());
return null;
}
Cache::createInstance()->cleanDir(Library::CACHE_DIR_COMPONENT);
$status
->setActive(true)
->setConnection(true)
->setRegister(true)
->setError(false)
;
if (!is_array($status->getData()))
{
$status->setData([]);
}
$status->save();
Status::addBackgroundTasks($connectorId, $lineId);
Connector::cleanCacheConnector($lineId, Connector::getCacheIdConnector($lineId, $connectorId));
$connectInfo = InfoConnectors::addInfoConnectors($lineId);
$connectInfoData = $connectInfo->getResult();
$botName = $botUrl = '';
if (!empty($connectInfoData[$connectorId]))
{
$botCode = $connectInfoData[$connectorId][self::CONNECTORS[$connectorId]['usernameField']];
$botName = $connectInfoData[$connectorId][self::CONNECTORS[$connectorId]['titleField']];
$botUrl = self::CONNECTORS[$connectorId]['urlPrefix'] . $botCode;
}
else
{
$connectorOutput = new Output($connectorId, $lineId);
$infoConnect = $connectorOutput->infoConnect();
if ($infoConnect->isSuccess())
{
$connectInfoData = $infoConnect->getData();
$botName = $connectInfoData[self::CONNECTORS[$connectorId]['titleField']];
$botUrl = $connectInfoData['url'];
}
}
if (empty($botUrl))
{
$messengerUrl = Connector::getImMessengerUrl($lineId, $connectorId);
if ($messengerUrl)
{
$botUrl = $messengerUrl['web'];
}
}
$line = $config->get($lineId);
$result = [
'lineId' => $lineId,
'lineName' => $line['LINE_NAME'],
'userIds' => array_map('intval', $line['QUEUE'] ?? []),
'botName' => $botName,
'url' => $botUrl,
];
if (
Loader::includeModule('ui')
&& $withQr
&& $result['url']
)
{
$urlQR = (new Barcode())
->option('w', self::QR_WIDTH)
->option('h', self::QR_HEIGHT)
->render($result['url']);
$result['qr'] = base64_encode($urlQR);
}
return $result;
}