im · Веб-мессенджер 26.1150.0 Заметное

Im 26.1150.0: коллабы в режиме новых проектов и запросы, которые больше не виснут после invalid_authentication

3 мин чтения
Узнавайте о ломающих изменениях Битрикса раньше, чем они доедут до прода: свежие разборы — в канале @bxmax_updates

Im 26.1150.0 вышел в один день с intranet 26.1750.0 и socialnetwork 26.275.0, публичный API в нём не менялся. Мессенджер иначе решает, когда показывать коллабы в режиме новых проектов, объясняет отказ в приглашении и больше не зависает на запросе, который повторяется после invalid_authentication. Коллабам нужны модули intranet и extranet, которых в БУС нет, поэтому на БУС из этого заметят только исправление запросов.

Новое

В режиме новых проектов коллабы видны без настроенного экстранета

Bitrix\Im\V2\Integration\Socialnetwork\Collab\Collab::isAvailable() теперь спрашивает CollabFeature::isAvailableForOpening() из socialnetwork 26.275.0. В режиме новых проектов (опция socialnetwork:new_projects = Y) хватает установленных обязательных модулей коллаб. Включённую фичу (CollabFeature::isOn()), инструмент в настройках портала и настроенный экстранет-сайт в этом режиме больше не проверяют. От isAvailable() зависят папка коллаб, коллабы в «Недавних» и флаг collabAvailable, так что на таком портале пользователи увидят коллабы в мессенджере.

Создание коллаб осталось строгим. Collab::isCreationAvailable() больше не опирается на isAvailable() и сам проверяет фичу, настройку портала, Requirement::check() и права пользователя.

Пригласить гостя в такую коллабу без настроенного экстранета тоже не выйдет: префильтр intranet 26.1750.0 ответит COLLAB_INVITE_EXTRANET_NOT_CONFIGURED. Текст ошибки выведет поле приглашения из intranet.

Отказ в приглашении с текстом сервера

Если при копировании или обновлении ссылки-приглашения сервер вернул один из семи кодов COLLAB_INVITE_*, уведомление мессенджера покажет текст ошибки, пропущенный через Text.encode, а для прочих кодов общий IM_NOTIFIER_DEFAULT_ERROR. За это отвечают CollabNotifier.onCopyLinkError(error), который теперь принимает ошибку, и новый onUpdateLinkError(error). Ошибка без кода при копировании ссылки даёт прежнее сообщение. Коды и пример такой же обработки в своём интерфейсе есть в разборе intranet 26.1750.0.

В окне добавления в коллабу ошибка приглашения гостей больше не оставляет кнопку в состоянии загрузки, повторный клик во время приглашения игнорируется.

Запрос после invalid_authentication больше не зависает

runAction() из im.v2.lib.rest один раз повторяет запрос, если сервер ответил invalid_authentication. Повтор запускался из .catch внутри executor’а new Promise через return handleErrors(...), но возврат из колбэка внешний промис не завершает. Действие, попавшее на протухшую авторизацию, висело: await не возвращал ни результат, ни ошибку. Вдобавок счётчик попыток retryCounter был переменной модуля, общей для всех одновременных запросов. Теперь повтор идёт через resolve(handleErrors(...)), остаток попыток передаётся параметром, а reject отбрасывает из errors всё, что не объект.

В своём коде ту же ошибку сделать легко:

        const runWithRetry = (action, config) => new Promise((resolve) => {
	BX.ajax.runAction(action, config)
		.then(resolve)
		.catch(() => resolve(retry(action, config))); // без resolve промис повиснет
});

    

Мелочи и находки

Свежий socialnetwork мессенджеру не нужен. Collab::isAvailable() проверяет method_exists(CollabFeature::class, 'isAvailableForOpening') и держит копию той же логики на случай, если метода нет. На эталоне БУС im 26.1150.0 встал раньше socialnetwork 26.275.0, и метода в тот момент ещё не было, так что модуль работает при любом порядке установки. Тот же приём подойдёт своему модулю, который завязан на свежий метод соседнего:

        <?php

declare(strict_types=1);

namespace Vendor\Portal\Collab;

use Bitrix\Main\Loader;
use Bitrix\Socialnetwork\Collab\CollabFeature;
use Bitrix\Socialnetwork\Collab\Requirement;

final class CollabGate
{
    public static function canShowCollabs(): bool
    {
        if (!Loader::includeModule('socialnetwork')) {
            return false;
        }

        if (method_exists(CollabFeature::class, 'isAvailableForOpening')) {
            return CollabFeature::isAvailableForOpening(); // socialnetwork 26.275.0+
        }

        // старый socialnetwork: показываем, только если всё настроено
        return CollabFeature::isOn()
            && CollabFeature::isFeatureEnabledInPortalSettings()
            && Requirement::check()->isSuccess();
    }
}

    

Новая версия вышла — разбор уже в Telegram

В канале @bxmax_updates публикуем каждый свежий разбор: что сломается, что устарело и что появилось в API. Узнаете до того, как обновите прод.

Подписаться

Читайте дальше

im 26.1100.0 Ломающее Свежее

Im 26.1000.0–26.1100.0: формы в сообщениях ботов, список команд и новый ответ delete/update

За один прогон в эталон приехали три версии im: 26.1000.0, 26.1050.0 и 26.1100.0. Боты получили формы прямо в сообщении и REST со списком команд чата, а `im.v2.Chat.Message.delete` и `update` теперь отвечают объектом вместо `true`. В 26.1100.0 закрыты две дыры, одна из них открывала доступ к файлам…

1 мин
im 26.900.0 Ломающее

im 26.900.0 + socialnetwork 26.150.0: инициатор в событиях внешних чатов и установщик на миграциях

В im 26.900.0 папки чатов научились работать с dialogId, мобильная синхронизация узнаёт об уволенных сотрудниках, у чата появился бэкенд навигации по датам, а установщик модуля переехал с SQL-файлов на `UpdateSystem\Migration`. Ломаются конструкторы десяти событий внешних чатов, несколько флагов в `…

1 мин
im 26.800.0 Заметное

im 26.800.0 + socialnetwork 26.100.0: чаты крепятся к проекту, markdown в сообщениях, учёт входов по ссылке

Большой парный релиз: `im` и `socialnetwork` едут одним батчем, потому что делают одну вещь — сращивают чаты с проектами. Чат теперь можно прикрепить к проекту как дочерний, лента знает о своих IM-сообщениях, а прочтение в одном месте гасит счётчик в другом. Плюс markdown и учёт участников шаринг-сс…

5 мин
im 26.700.0 Безопасность

im 26.700.0: гостевой доступ переписан с нуля — REST-метод joinByCode удалён

Вход гостя в чат по ссылке перестал быть «REST-методом плюс правилом в urlrewrite» и стал полноценной областью авторизации на уровне ядра. Заодно у гостевых ссылок появился срок жизни, а у неактивных гостей — агент очистки. Если вы что-то строили поверх гостевых чатов, этот релиз ломающий.

4 мин
Мы используем файлы cookie для улучшения работы сайта. Продолжая использовать сайт, вы соглашаетесь с нашей политикой конфиденциальности.
AI Домовой

AI Домовой История

на связи

пишет…

Можно закрыть чат и перейти на другую страницу. Когда ответ будет готов, на кнопке Домового появится отметка.

Нет истории чатов
AI Домовой

Нужна авторизация

Войдите, чтобы задавать вопросы AI Домовому.

Войти