Vibecodeconnector 26.1000.0: «Доступы» и «Публичная ссылка» в каталоге, чат в настройках приложения и доступ по живой оргструктуре
В меню приложения в каталоге Вайбкода пункт «Поделиться» разделён на «Доступы к приложению» и «Публичную ссылку», переключатель чата переехал в «Настройки приложения», а доступ по отделам проверяется по текущей оргструктуре. Баланс Вайбкода для виджета тарифа уже лежит в модуле, но выключен флагом. Версия пришла вместе с intranet 26.2000.0 (разбор) и humanresources 26.700.0 (разбор), прошлый разбор модуля — Vibecodeconnector 26.300.0–26.450.0.
Новое
Ищите доступы и ссылку в разных пунктах меню
«Доступы к приложению» открывает выбор аудитории, «Публичная ссылка» открывает тот же диалог сразу на экране ссылки, а если ссылки ещё нет, там будет кнопка «Создать ссылку». Переключатель «Разрешить участникам писать в чат» теперь стоит в «Настройках приложения» рядом с названием и описанием. Если остальные поля не сохранились, модуль откатывает и настройку чата, а когда не удаётся и откат, пишет «Настройка чата сохранена, остальные изменения — нет».
Пункт «Редактировать в Вайбкод» переименован в «Открыть в Вайбкод», порядок пунктов теперь постоянный: закрепить, настройки, доступы, ссылка, Вайбкод, чат, создать чат, скрыть, удалить. Открыть приложение всем, у кого есть Битрикс24, или всем без авторизации нельзя, пока портал не узнал состояние публичной ссылки и пока владелец не подтвердил удаление действующей ссылки.
Боты пропали из окна каталога и из Public\Provider\CatalogProvider::listAccessibleToUser() во всех состояниях (active, hidden, all, favorite), isEmptyForUser() их тоже не учитывает. Вкладка «Новые» показывала только приложения и раньше.
Выдавайте доступ отделу без пересчёта прав
К кодам доступа из b_user_access модуль добавляет коды отделов D<n> и DR<n>, подтверждённые через humanresources по текущей оргструктуре, для DR проверяются вышестоящие отделы сотрудника. Приложение, открытое отделу, сотрудник видит сразу, без ожидания пересчёта b_user_access. При открытии, запуске, превью, избранном, скрытии и закреплении модуль проверяет только отделы из ACL этого приложения. Список отделов из доступов приложений кешируется на 300 секунд, изменение доступа кеш сбрасывает. Если запрос к оргструктуре падает на ошибке SQL или соединения, модуль проверяет доступ по сохранённым кодам и не чистит отметки «скрыто». Отделы ищет новый NodeService::getNodeIdsGroupedByAccessCode() из humanresources 26.700.0.
Точка VibecodePort\Structure::match, через которую сервер Вайбкода сопоставляет отделы, теперь разворачивает DR<n> в отдел со всеми подотделами, раньше такой код попадал в unresolved. Отделы при шаринге модуль передаёт серверу кодами доступа (D7, DR7), в JS портала они по-прежнему приходят ID из диалога.
Различайте ошибки по data-error-code
Для ACCESS_DENIED и ITEM_NOT_FOUND слайдер приложения показывает один экран: «Нет доступа к приложению» и «Чтобы получить доступ, обратитесь к владельцу приложения». Шапка скрыта, кнопки помечены inert. Удалённое приложение от закрытого отличает только атрибут data-error-code с настоящим кодом.
Встройки модуля открываются общим слайдером BX.Vibecodeconnector.Embed.openEmbedSlider() из расширения vibecodeconnector.embed, на него переехала и встройка создания приложения. Пустой html в ответе vibecodeconnector.Embed.openLayout теперь даёт экран ошибки вместо пустого окна, в ответ добавлен ключ origin.
Включите баланс Вайбкода флагом
Баланс закрыт флагом Bitrix\Vibecodeconnector\Internal\Config\Feature\VibeBalance, по умолчанию выключенным. Галки для него в настройках модуля нет, включается он через Main\Config\Feature:
<?php declare(strict_types=1);
use Bitrix\Main\Config\Feature;
use Bitrix\Main\Loader;
use Bitrix\Vibecodeconnector\Internal\Config\Feature\VibeBalance;
if (Loader::includeModule('vibecodeconnector')) {
Feature::enable(VibeBalance::class);
}
Из консоли то же делает php bitrix/bitrix.php main:feature:enable 'Bitrix\Vibecodeconnector\Internal\Config\Feature\VibeBalance'. Флаг работает только вместе с «Видимостью на портале» в настройках модуля (опция is_ready). В коробке она по умолчанию N, и пока её не отметить, каталог и баланс скрыты. Баланс видят только сотрудники интранета.
Сервер Вайбкода сообщает о новой версии баланса через VibecodePort\Balance::changed, портал ставит сообщение в очередь Messenger vibecodeconnector.balance_pull, забирает баланс методом balance.get и хранит его в опции vibe_balance_state. Первый запрос уходит при регистрации подключения. С выключенным флагом changed отвечает успехом и в очередь ничего не ставит.
Для своего виджета данные берите у Public\Provider\VibeBalanceProvider:
<?php declare(strict_types=1);
namespace Vendor\Portal\Vibecode;
use Bitrix\Main\Loader;
use Bitrix\Vibecodeconnector\Public\Provider\VibeBalanceProvider;
final class BalanceBadge
{
/** @return array{balance: string, alert: string}|null */
public function forCurrentUser(): ?array
{
if (!Loader::includeModule('vibecodeconnector')) {
return null;
}
$data = (new VibeBalanceProvider())->getForCurrentUser()->toArray();
if (!$data['isAvailable'] || $data['balanceState'] !== 'available') {
return null;
}
return ['balance' => $data['balance'], 'alert' => $data['balanceAlert']];
}
}
balance приходит десятичной строкой, модуль сравнивает и форматирует её без float. balanceAlert равен negative при минусе и low при нуле или балансе ниже порога: 500 для лицензий ru, by, kz, uz и 5 для остальных. Кнопку выбирайте по action (purchase, request, requested или none), рядом лежат purchaseUrl, dashboardUrl и lastFetchedAt. Если баланс ни разу не запрашивали, первый вызов провайдера сам поставит запрос в очередь.
purchase получает тот, кто может купить сам. В коробке это администратор (Bitrix\Intranet\CurrentUser::isAdmin()), в облаке администратор портала или любой сотрудник, кроме интегратора, если покупать лицензию разрешено всем. Коробочная ссылка покупки ведёт на сайт 1С-Битрикс для ru, by, kz, uz и в store.bitrix24.com для остальных, с публичным хешем лицензии в параметре. Остальным виджет предлагает попросить пополнение у администраторов:
BX.ajax.runAction('vibecodeconnector.VibeBalance.requestTopUp')
.then(({ data }) => {
// data.requestState: 'created' или 'already_requested'
})
.catch(({ errors }) => {
// VIBECODE_UNAVAILABLE, TOP_UP_REQUEST_NOT_ALLOWED, BALANCE_UNAVAILABLE, TOP_UP_REQUEST_FAILED
});
Действие принимает только POST, runAction так и отправляет.
Запрос рассылает всем администраторам уведомление от имени сотрудника (CIMNotify::Add, тег VIBECODE_TOP_UP_REQUEST_<userId>), и если хоть одно не ушло, ответом будет TOP_UP_REQUEST_FAILED. TOP_UP_REQUEST_NOT_ALLOWED получит тот, кто может купить сам, BALANCE_UNAVAILABLE вернётся, пока портал не получил баланс. Закрывает запрос только рост баланса.
Повторяемые ошибки balance_pull (сеть, HTTP не 200, RATE_LIMITED, занятая блокировка) приёмник откладывает сам, max_retries они не расходуют. Пауза растёт до 6 часов, при RATE_LIMITED её задаёт сервер. Десять попыток из .settings.php тратят только прочие исключения.
Учтите, что сервер Вайбкода получает список администраторов
VibecodePort\Portal::adminList и VibecodePort\Balance::changed принимают только POST с Bearer JWT сервера Вайбкода, сессия пользователя им не нужна. adminList отдаёт создателя портала и активных администраторов с ID на портале, ID в Битрикс24.Network, логином, именем и фамилией. Отвечает он на любой валидный JWT, флаг VibeBalance и is_ready не проверяет. В коробке без модуля bitrix24 creator равен null. Тот же список в своём коде даёт Public\Provider\PortalAdminListProvider::get().
Найдите в настройках экран «Коворк/Код»
В настройках модуля появилась галка «Экран „Коворк/Код“ в Битрикс24» (embed_cowork_admin_enabled, по умолчанию Y). Судя по подсказке, на этом экране подписки распределяют между сотрудниками, а кнопка должна стоять в виджете «Мой тариф» у администраторов. Открывается экран только администратору при включённой «Видимости на портале», со снятой галкой ответ будет SCREEN_DISABLED. Расширение vibecodeconnector.cowork-admin с BX.Vibecodeconnector.openCoworkAdmin() и проверка Public\Service\EmbedScreenAvailability::isCoworkAdminAvailable($userId) уже есть, но в этом обновлении их никто не подключает.
openVibecodeCabinet() из vibecodeconnector.app-creation открывает кабинет Вайбкода в новой вкладке с opener = null, а cabinetUrl получает каждый, кому доступен каталог, даже без права создавать приложения. Название и ссылку для пункта Вайбкода в левом меню intranet отдают VibecodeBrandProvider::getDisplayName() и VibecodeUrlProvider::getDashboardUrl().
БД
Таблица b_vibecodeconnector_top_up_request хранит запросы пополнения, по строке на сотрудника: ID, USER_ID и STATUS (active или closed).
Мелочи и находки
- Ссылка покупки тарифа в коробке берётся из
Main\License\UrlProvider::getPriceTableUrl(). Дляru,by,kzэто/buy/products/b24.php, для остальных/prices/self-hosted.php, а раньше для СНГ ссылка вела наkey_update.phpмагазина. Public\Service\ProvisioningService::issueApplicationKey()бросаетHandlerUrlSchemeForbiddenException, если схемаhandlerUrlнеhttpи неhttps.- Слайдеры встроек принимают postMessage только от своего iframe, кроме
event.originпроверяется иevent.source.