pull · Push and Pull 25.400.0 Заметное

pull 25.400.0: массовое удаление каналов и эмодзи, которые ломали очередь пушей

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

Небольшой релиз с двумя очень прикладными вещами: bulk-удаление каналов и push-токенов пачкой и кодирование эмодзи в очереди пушей. Ломающих изменений нет — единственная правка сигнатуры совместима со старыми вызовами.

Удаление каналов пачкой

Появились два публичных метода:

        \CPullChannel::DeleteByUsers(array $userIds, string $channelType = self::TYPE_PRIVATE): void;
\Bitrix\Pull\Model\PushTable::deleteByUsers(array $userIds): void;

    

Оба чистят b_pull_channel и b_pull_push чанками по 500 id, USER_ID = 0 пропускается, статический кэш CPullChannel сбрасывается. PushTable::deleteByUsers пишет прямой DELETE и не поднимает ORM-события удаления — если вы вешали хендлеры на удаление push-токенов, они здесь не сработают.

Сценарий очевиден: увольнение отдела, чистка неактивных, миграция портала. Раньше это был цикл с удалением по одному пользователю — на нескольких тысячах записей заметно.

Важная деталь, прямо прописанная комментарием в коде: уведомление клиентам нужно отправлять до вызова, а не после. После удаления канала слать пуш уже некуда — соединение, которому вы хотели сказать «переподключись», больше не адресуемо.

Порядок в вашем коде должен быть такой: сначала рассылка события клиентам (разлогин, переподключение — что уместно сценарию), затем DeleteByUsers(). Перепутаете — часть клиентов останется висеть на мёртвом канале до собственного таймаута.

Эмодзи в очереди пушей

В CPushManager поля MESSAGE, PARAMS и ADVANCED_PARAMS теперь прогоняются через Emoji::encode() при вставке в b_pull_push_queue и через Emoji::decode() при чтении агентом. Комментарий в коде объясняет причину: таблица может быть в utf8mb3.

Это старая боль MySQL: utf8 в его исторической версии — трёхбайтовый, а эмодзи требует четырёх. Сообщение со смайлом в такой таблице либо обрезается на первом эмодзи, либо валит INSERT ошибкой. Порталы, поднятые давно и не переведённые на utf8mb4, ловили ровно это — пуш с эмодзи не доезжал. Теперь символ хранится в закодированном виде и разворачивается при отправке.

Там же: проверка VoIP переписана с $message["ADVANCED_PARAMS"]["isVoip"] на !empty(...) — чтобы отсутствующий ключ не давал notice.

Сигнатуры

CPullChannel::getMany(array $userIds, ?string $channelType = self::TYPE_PRIVATE) — второй параметр стал nullable. Старые вызовы работают как раньше.

Что делать

  • Замените свои циклы удаления каналов на DeleteByUsers — но не забудьте про порядок: сначала уведомление, потом удаление.
  • Если у вас есть обработчики ORM-событий на PushTable — учтите, что bulk-метод их не вызывает.
  • Если портал на utf8mb3 — обновление лечит пропадающие пуши с эмодзи, но перевести базу на utf8mb4 всё равно стоит.

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

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

Подписаться

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

pull 26.100.0 Ломающее

Pull 26.0.0 и 26.100.0: sendBadges() удалён, protobuf.js в браузере стал minimal

Pull приехал двумя версиями подряд: 26.0.0 (сборка от 22 июля) и 26.100.0 (от 7 августа). Первая удалила `CPushManager::sendBadges()` и превратила `MobileCounter::send()` в заглушку, вторая заменила встроенный protobuf.js 2018 года на 7.6.5 в урезанной minimal-сборке. Читать стоит тем, кто сам шлёт…

2 мин
voximplant 26.900.0 Заметное Свежее

Voximplant 26.900.0: подписанные параметры экспорта статистики

Voximplant 26.900.0 подписывает имя компонента при экспорте детализации статистики. Обновление также исправляет REST-сценарии, отметку пропущенного переадресованного звонка и чтение настроек прокси.

1 мин
superset 26.700.0 Заметное Свежее

Superset 26.700.0: пользовательский контекст и проверяемый act-as

Версия 26.700.0 добавляет пользовательский контекст Superset в публичные провайдеры и команды. Проверяемый act-as для SQL Lab включается явно, поэтому существующие вызовы продолжают работать по-прежнему. Все новые параметры необязательны, прежние значения по умолчанию сохранены.

2 мин
sign 26.1200.0 Ломающее Свежее

Sign 26.1200.0: автоопределение бланков и удаление CRM API

Sign 26.1200.0 упрощает загрузку документов КЭДО, добавляет списки сотрудников в робот и обновляет «Мой сейф» без перезагрузки страницы. Перед обновлением проверьте интеграции с CRM и сервисом бланков: четыре публичные точки API удалены, а `CRM::saveCompanyStamp()` сменил тип результата.

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

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

на связи

пишет…

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

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

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

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

Войти