Immobile 26.1100.0–26.1200.0: команды ботов по «/», AI-задачи из сообщений и папка «Вайбкод»
Модуль immobile обновился в коробочном Битрикс24 трижды: 26.1100.0 (в одной поставке с im 26.1000.0), 26.1150.0 и 26.1200.0 (вместе с im 26.1100.0 и call 26.800.0). PHP-API модуля только вырос: четыре метода Settings и класс вкладки VibecodeApp. Почти всё новое включается опциями im или immobile и нативными флагами приложения, так что на портале с настройками по умолчанию большей части изменений пользователи не увидят.
Новое
Команды бота открываются по «/» (26.1200.0)
Если набрать «/» в поле ввода, приложение покажет панель команд ботов этого чата. Список приходит из im.v2.Chat.Command.list, кешируется на телефоне по чату и языку и обновляется при каждом открытии панели. Экстранет-пользователь не увидит команды с EXTRANET_SUPPORT = 'N', гостю панель не показывается совсем. На портале панель включает опция im/chat_bot_commands_available (по умолчанию N), а кнопке «/» нужна ещё свежая сборка приложения.
Проверьте, как регистрируются ваши команды. Если флаг EXTRANET_SUPPORT не передан, Command::register() пишет 'N'. Команда модуля без METHOD_LANG_GET получает HIDDEN = 'Y' и в панель не попадёт ни у кого. Команда без BOT_ID в панель тоже не попадёт. Без COMMON = 'Y' команда видна только в чатах, где есть бот. Бот, с которым работает экстранет, регистрирует команду так:
<?php
declare(strict_types=1);
use Bitrix\Im\Command;
use Bitrix\Main\Loader;
use Vendor\Helpdesk\Bot\TicketCommand;
Loader::requireModule('im');
Command::register([
'MODULE_ID' => 'vendor.helpdesk',
'BOT_ID' => $botId,
'COMMAND' => 'ticket',
'EXTRANET_SUPPORT' => 'Y',
'CLASS' => TicketCommand::class,
'METHOD_COMMAND_ADD' => 'onCommandAdd',
// получает код команды и язык, возвращает ['TITLE' => ..., 'PARAMS' => ...]
'METHOD_LANG_GET' => 'onCommandLang',
]);
Пример собран по коду ядра, в приложении мы его не запускали.
Задача из переписки (26.1100.0)
В меню сообщения появился пункт «Создать задачу с AI», в режиме выделения есть такая же кнопка для нескольких сообщений. Приложение отправляет их id в im.v2.Chat.Task.createByAi, а ход создания показывает панель над чатом по pull-событиям autoTaskStatus. Пункт появится, если включена опция im/ai_task_creation_from_messages_available (по умолчанию N) и на портале доступна текстовая модель модуля ai. Только тогда и удаление переезжает в «Ещё».
BitrixGPT: стоп, файлы, план рассуждений (26.1100.0, 26.1200.0)
Пока BitrixGPT генерирует ответ, кнопка отправки работает как «стоп» и вызывает im.v2.Copilot.Generation.stop (26.1100.0). Ограничения на файлы для BitrixGPT теперь приходят с сервера (расширения, размер, сколько файлов в одном сообщении), и приложение отсекает неподходящие файлы ещё до прикрепления. HEIC с айфона проходит, если разрешён jpg, потому что большие фото нативный загрузчик сам перекодирует в jpg. В 26.1200.0 пустой экран BitrixGPT здоровается по времени суток и дню недели с учётом выходных портала, а в «простом режиме», пока ответ готовится, в сообщении-заглушке сменяются шаги плана рассуждений, который присылает сервер.
Формы в сообщениях бота (26.1100.0)
Приложение научилось отправлять интерактивные формы из блочных сообщений. Кнопка формы шлёт значения полей в im.v2.Chat.Message.Block.Form.submit, на время запроса форма блокируется, и повторный тап второй запрос не создаёт. Кнопку отправки приложение принимает только внутри элемента form, тап по такой же кнопке в другом элементе игнорируется. Пока на портале выключена опция im/message_form_block_available (так по умолчанию), форма рисуется заглушкой неподдерживаемого блока. Серверную часть смотрите в разборе im.
Папка «Вайбкод» с чатами приложений (26.1100.0–26.1200.0)
В 26.1150.0 приложение научилось показывать системную папку im с чатами приложений Вайбкода. Папку включает опция im/vibecode_apps_folder_available (по умолчанию N), вкладку описывает новый класс Bitrix\ImMobile\NavigationTab\Tab\VibecodeApp. Такой чат нельзя скрыть или переложить в личную папку, поэтому в меню строки остались только «без звука», закрепление и отметка о прочтении. В сайдбаре чата приложения есть кнопка, которая открывает само приложение. Опция immobile/vibecode_app_chat_send_permission_available (по умолчанию Y) запрещает писать в чат приложения, если права чата этого не дают.
С 26.1100.0 на кнопке Вайбкода в шапке мессенджера вместо точки стоит число новых приложений. Когда включена папка, коннектор может этот счётчик убрать (Settings::isVibecodeNewAppsBadgeAvailable(), 26.1150.0). В 26.1200.0 опция immobile/vibecode_recent_action_available (по умолчанию N) добавляет кнопку открытия приложения прямо в строку списка чатов.
Что ещё заметит пользователь
- «Прочитать все» заработало во вложенных вкладках: задачи, чаты коллаба, BitrixGPT проекта, календарь (26.1100.0).
- Роль «Администраторы» в чатах теперь называется «Модераторы» (26.1100.0).
- Основную быструю реакцию можно выбрать, она хранится на сервере (
im.v2.Settings.General.listиupdate) и расходится по устройствам pull-событиемsettingsUpdate(26.1200.0). - Если упомянуть человека не из чата, приложение предложит его добавить. Включается опцией
im/mention_add_to_chat_popup_available(26.1200.0). - У видеокружков появилась скорость воспроизведения под опцией
im/video_note_playback_rate_available(26.1200.0).
Мелочи и находки
- Кнопку Вайбкода больше не включить одной опцией
immobile/is_vibecode_button_available(26.1100.0).Settings::isVibecodeButtonAvailable()спрашивает модуль vibecodeconnector, без него возвращаетfalse, а экстранет-пользователям кнопка не показывается. - Аудиопанель в 26.1200.0 смотрит на флаг
Bitrix\Mobile\Feature\AudioPlayerV2Featureвместо опцииim/can_use_audio_panel, и старая опция больше ничего не включает. В mobile 26.1200.0 этот класс уже удалён, а его замены в immobile 26.1200.0 ещё нет, поэтому на нашем эталоне с этими двумя версиями аудиопанель выключена. Вместе с ней не виден и новый аудиоплеер 26.1200.0 для голосовых и вкладки «Аудио» в сайдбаре, потому что приложение берёт его, только когда аудиопанель включена. Про переезд флагов написано в разборе mobile. - Фразы про модераторов получили новые ключи с суффиксом
_MSGVER_1. Если вы переопределяли старые ключи вuser_lang, переводы придётся перенести. CopilotChat::getFileUploadPolicyPublicData()(26.1100.0) иGreetingProvider(26.1200.0) модуль вызывает только подLoader::includeModule('im'), хотяSettings::isVideoNotePlaybackRateAvailable()в 26.1200.0 версию im черезmethod_existsпроверяет. Первый появился в im 26.1000.0, второй в im 26.1100.0, в более старых версиях im их нет.