pull · 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 всё равно стоит.

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

calendar 25.195.0 Заметное Свежее

calendar 25.195.0: активность БП считает минуты встреч и перестала терять последний день

Точечный релиз вокруг одной активности бизнес-процессов — «Получить информацию из календаря». Она научилась отдавать списки заголовков и суммарные минуты встреч, а заодно у неё поправили границу выборки. Публичного PHP API релиз не меняет.

3 мин
calendar 25.197.0 Заметное Свежее

calendar 25.197.0: тип события call_sync и чат, который создаётся сам

У события календаря появился собственный тип, и первый его пользователь — синхронизированные созвоны: при создании такого события автоматически поднимается чат с гостевой ссылкой. Ломающих изменений нет, все правки сигнатур совместимы.

3 мин
bizprocdesigner 26.500.0 Заметное Свежее

bizprocdesigner 26.500.0: фильтр ноды приехал выключенным

Крупный UI-релиз редактора схем плюс новый тип конструкции — фильтр ноды. Ломающих изменений нет: все правки контроллера и DTO совместимы со старыми вызовами. Главное, что стоит знать заранее: фича спрятана за опцией и по умолчанию выключена.

3 мин
calendar 25.200.0 Ломающее Свежее

calendar 25.200.0: таймзона пользователя переехала в b_user.TIME_ZONE — и это ломающий релиз

Самый «ломающий» календарный релиз батча. Часовой пояс пользователя перестал быть настройкой календаря и стал полем пользователя, из-за чего у AJAX-экшена сохранения настроек изменилась сигнатура. Плюс вырезаны два метода `SynchronizationFeature`. Обновление стоит смотреть внимательно, если вы что-т...

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

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

на связи

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

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

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

Войти