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

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

3 мин чтения

Небольшой релиз с двумя очень прикладными вещами: 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 всё равно стоит.

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

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

Security 26.200.0 не ставится на маке и Windows: фатал «Cannot redeclare class» прямо в апдейтере

Обновление security 26.200.0 у нас не установилось вообще: апдейтер умирает с фаталом посреди своего скрипта. Если ваш прод на Linux — выдыхайте, вас это не касается. А вот если вы ставите обновления в локальной разработке на macOS или Windows (Docker с bind-mount проектной папки — это ровно тот слу...

4 мин
mail 26.900.0 Заметное Свежее

Mail 26.900.0: общие подписи ломают старый API, а тяжёлые вложения переезжают на Диск

Модуль mail получил один из самых жирных релизов за последнее время: 523 файла, +39 182/−3 131 строк. Внутри — три большие фичи (общие подписи, автоперенос тяжёлых вложений на Диск, избранное с AI-классификацией писем), переработанный IMAP-синк истории и три новые таблицы в БД. Если вы кастомизирова...

4 мин
location 26.300.0 Заметное Свежее

Location 26.300.0: батчевый обратный геокодинг — до 20 координат за один вызов

Релиз от 17 июня 2026 с одной, но цельной темой: в модуль `location` завезли батчевый обратный геокодинг — метод `findByCoordsList`, который превращает список координат в список локаций за один вызов сервиса. Если вы строите интеграции с картами или доставкой и до сих пор дёргали `findByCoords` в ци...

2 мин
main 26.700.0 Заметное Свежее

Main 26.700.0: в ядре появились фича-флаги

Битрикс выкатил main 26.700.0 — и это тот редкий случай, когда в ядре появляется целая новая подсистема: фича-флаги `Bitrix\Main\Config\Feature` с двумя таблицами в БД. Плюс несколько тихих поведенческих изменений, которые стоит проверить, если у вас не-UTF-8 сайт, кастомные фильтры пользователей ил...

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

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

на связи

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

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

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

Войти