imbot 26.500.0 Заметное

Imbot 26.500.0: REST-боты получают событие отправки формы, Bot.update перестал стирать непереданные поля

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

В imbot 26.500.0 ботам v2 пришло событие OnImBotV2FormSubmit, imbot.v2.Bot.update больше не затирает поля профиля, которые вы не передали, а к действию «Отправить сообщение от чат-бота» можно прикрепить кнопки.

Новое

Ловите отправку формы в боте

Модуль зарегистрировал REST-событие OnImBotV2FormSubmit. Его генерирует im 26.1000.0 и новее, когда пользователь отправляет форму из сообщения бота, а imbot отдаёт его в REST. Бот в режиме WEBHOOK подписывается на события v2 при регистрации, и событие придёт на тот же WEBHOOK_URL, что и OnImBotV2MessageAdd. В список подписки OnImBotV2FormSubmit попал только в im 26.1000.0, поэтому если бот зарегистрирован раньше и событие не приходит, вызовите imbot.v2.Bot.update с текущим webhookUrl. Этот вызов пересоздаёт подписку на все события v2. Боты в режиме FETCH забирают событие через imbot.v2.Event.get, тип ONIMBOTV2FORMSUBMIT.

В payload приходит блок bot с полями id, code и auth бота, а кроме него:

  • actionId, blockId, buttonId с идентификаторами действия, блока и кнопки формы;
  • values с введёнными значениями;
  • message, chat и user: сообщение с формой, чат и отправитель;
  • language и additionalMessages. В additionalMessages лежит исходное сообщение, если сообщение с формой было ответом на него.

Имя события приходит в верхнем регистре, так что обработчику на WEBHOOK_URL достаточно ветки для ONIMBOTV2FORMSUBMIT:

        <?php declare(strict_types=1);

use Bitrix\Main\Config\Option;
use Bitrix\Main\Context;

function handleFormSubmit(array $data): void
{
    $actionId = (string)($data['actionId'] ?? '');
    $values = (array)($data['values'] ?? []);
    // по $actionId решаем, куда отдать $values; сами значения в лог не пишем
}

$request = Context::getCurrent()->getRequest();
$auth = (array)($request->getPost('auth') ?? []);
$expected = Option::get('vendor.bot', 'application_token');

if ($expected === '' || !hash_equals($expected, (string)($auth['application_token'] ?? ''))) {
    return;
}

match ((string)$request->getPost('event')) {
    'ONIMBOTV2FORMSUBMIT' => handleFormSubmit((array)($request->getPost('data') ?? [])),
    default => null,
};

    

Остальные события v2 приходят на тот же адрес, и их ветки добавляются в этот же match. auth[application_token] сверяйте с токеном своего приложения, у бота с собственным botToken это строка custom + botToken.

Бизнес-процессы: кнопки в сообщении бота и время срабатывания триггера

У действия «Отправить сообщение от чат-бота» (CBPImBotMessageActivity) появилось свойство buttons. Каждая запись описывает кнопку полями COMMAND, COMMAND_PARAMS, TEXT и CONTEXT, из них собирается клавиатура \Bitrix\Im\Bot\Keyboard. Кнопка без COMMAND или TEXT пропускается, CONTEXT по умолчанию ALL. Если не собралось ни одной кнопки, клавиатура не прикрепляется, и сообщение уходит как раньше.

В диалоге настройки действия этого свойства нет. По комментарию в коде, его заполняет шаблон, который строит генератор ИИ-агента. Если открыть такой шаблон в дизайнере и сохранить вручную, кнопки не пропадут.

Триггер «Получено сообщение в чат-бот» возвращает новое поле EventDateTime (тип DATETIME) со временем срабатывания.

Что сломается

null в Bot.update больше не очищает поле

imbot.v2.Bot.update раньше подставлял пустую строку вместо каждого непереданного поля из name, lastName, color, workPosition и gender. Пустые имя и цвет im пропускает, а остальное доходило до профиля. Запрос, который менял только аватар или только имя, стирал фамилию и пол, а должность сбрасывал на «Чат-бот». Теперь в обновление попадают только переданные ключи, и такой запрос меняет одну должность:

        {
  "botId": 1234,
  "fields": {
    "properties": {
      "workPosition": "Помощник отдела кадров"
    }
  }
}

    

При этом null теперь тоже считается непереданным значением. Если интеграция очищала фамилию или пол через null, поле останется прежним. Передавайте пустую строку, например "lastName": "". Пустая workPosition, как и раньше, превращается в «Чат-бот», а имя и цвет пустой строкой не очистить. imbot.v2.Bot.register работает по-старому и заполняет отсутствующие поля пустыми значениями.

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

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

Подписаться

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

socialnetwork 26.200.0 Безопасность Свежее

Socialnetwork 26.200.0: XSS в заявках и списке участников, копирование проекта по праву редактирования и курсор в log.blogpost.get

Socialnetwork 26.200.0 закрывает XSS в списке участников проекта и в заявках в группы, подмену ссылок через название группы и утечку задач в контекст AI. Копировать проект теперь можно только с правом на редактирование. Администраторам, у которых стояли 26.100.0 или 26.150.0, стоит проверить права с…

2 мин
sign 26.800.0 Безопасность Свежее

Sign 26.800.0: закрыли доступ к чужим документам, к приглашению на подпись можно дописать текст

Sign 26.800.0 для коробочного Битрикс24 закрывает несколько дыр в проверке прав: часть AJAX-экшенов модуля не проверяла, есть ли у пользователя доступ к конкретному документу, группе или участнику. Если на портале подписывают документы, с сотрудниками или с клиентами, обновляйтесь. Из нового — текст…

2 мин
search 26.100.0 Ломающее Свежее

Search 26.0.0–26.100.0: новые атрибуты Sphinx, переиндексация из консоли и исправленная проверка прав

Модуль поиска обновился сразу на две версии: 25.200.0 → 26.0.0 → 26.100.0. Без правки sphinx.conf индексация на Sphinx перестанет работать, а у встроенного движка и FULLTEXT MySQL/PostgreSQL, судя по коду, заголовки новых записей больше не попадают в индексируемый текст. В 26.100.0 закрыли пропуск п…

2 мин
rest 26.800.0 Ломающее Свежее

Rest 26.700.0–26.800.0: отложенная установка приложений, строгий bool в REST 3.0 и вебхуки со сроком действия

В БУС вышли подряд две версии `rest`: 26.700.0 и 26.800.0. В 26.700.0 у входящих вебхуков появился срок действия, а сотрудник без права установки может попросить администратора поставить приложение. В 26.800.0 поменялось время срабатывания `OnRestAppInstall`, REST 3.0 стал строже проверять входные д…

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

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

на связи

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

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

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

Войти