messageservice 26.100.0: публичный UI-слой редактора сообщений и селектора каналов
Крупный релиз почти без ломающих изменений: модуль обзавёлся публичным Public\UI — фабрикой, из которой любой модуль собирает редактор сообщения, селектор канала или слайдер подключений. Раньше каждый потребитель (CRM, рассылки, роботы бизнес-процессов) рисовал этот интерфейс сам.
Что решает Factory
Точка входа одна, регистрируется в .settings.php как сервис messageservice.public.ui.factory:
$factory = \Bitrix\Main\DI\ServiceLocator::getInstance()
->get('messageservice.public.ui.factory');
$editor = $factory->createEditor($scene, $context);
$selector = $factory->createSelector($scene, $context);
$slider = $factory->createConnectionsSlider();
Scene и Context — это то, ради чего фабрика вообще нужна: один и тот же редактор должен выглядеть по-разному в карточке сделки, в роботе и в рассылке — разный набор каналов, разные плейсхолдеры, разные ограничения. Вместо копии компонента на каждый случай сцена описывает контекст, а сборку берёт на себя модуль.
Слои:
- Редактор —
MessageEditor\Editor,Layout,Context,Scene(+NullScene),ViewChannelсAppearance/Backend/Icon, каналыChannel\FromиChannel\To, провайдеры контента (ContentProvider\Copilot,Files, интерфейсShowable),NotificationTemplateсPlaceholder,Preferences,PromoBanner. - Селектор каналов —
ChannelSelector\Selector,ViewChannel. - Слайдер подключений —
ConnectionsSliderсо страницамиRecommendationsиSmsи секциями. Компонентbitrix:messageservice.connectionsтеперь просто дёргает фабрику.
Плюс Public\UI\SenderCode с константами SMS_PROVIDER и BITRIX24 — код провайдера перестал быть строковым литералом на стороне вызывающего.
Настройки поведения вынесены в Infrastructure\UI\Message\Editor\GlobalConfig и читаются из опций модуля: message_editor_max_visible_channels (10), message_editor_min_visible_channels (1), message_editor_recommended_max_message_length (200). JS-конфиги расширений берут GlobalConfig из ServiceLocator по FQCN — так что крутить эти числа можно централизованно, без правки бандлов.
Для IDE в модуле появился .phpstorm.meta.php на код сервиса — автодополнение по ServiceLocator::get('messageservice.public.ui.factory') работает.
Единственное изменение поведения существующего API
Sender\Sms\Wazzup::isSupported() больше не проверяет imconnector.feature_wazzup и Bitrix\Crm\Feature\TelegramActivity — остался только parent::isSupported(). Проще говоря, провайдер стал доступен там, где раньше отсекался фичефлагами. Если ваш код завязан на то, что Wazzup недоступен без включённого коннектора, — проверьте, что список провайдеров у вас не поехал.
Ломающих удалений в api.diff нет: релиз только добавляет.
Мелочи, которые видно только в диффе
- У
Wazzupпоявились константыCHANNEL_TYPE_TGAPIиCHANNEL_TYPE_WHATSAPP, а URL контакт-центра берётся черезIntegration\ImOpenLines::getContactCenterUrl()— то же сделано для Edna WhatsAppInformant. Converter::convertOptions()избавился от литералов'smsru'и'twilio'в пользуSmsRu::ID/Twilio::ID.Integration\Notificationsвырос:canSendMessage,isAvailableInRegion,isLimited,isModulesInstalled, переводы шаблонов и константаSCENARIO_CRM_PAYMENT.
Что делать
- Если вы рисуете свой выбор SMS-канала или форму отправки сообщения — посмотрите на
Public\UI\Factoryпрежде чем поддерживать свою копию дальше. Это ровно тот случай, когда самописный компонент можно списать. - Проверьте доступность Wazzup в своих сценариях.
- Новые лимиты редактора настраиваются опциями модуля, а не правкой JS.