Зачем нужны BSUID
В 2026 году WhatsApp внедряет опциональные имена пользователей. Если пользователь выбирает имя пользователя, WhatsApp может отображать его вместо номера телефона и исключать номер телефона из полезной нагрузки Webhook. Каждый пользователь сам решает, использовать ли имя пользователя, поэтому компании больше не могут полагаться исключительно на номера телефонов для идентификации клиентов. В связи с этим Meta требует от компаний и партнеров WhatsApp Business Platform, а также от рекламодателей click-to-WhatsApp поддерживать BSUID, чтобы продолжать обрабатывать сообщения от пользователей, использующих имена пользователей. В рамках поддержки этих изменений Meta начала добавлять business-scoped user ID (BSUID) в полезную нагрузку Webhook в начале апреля 2026 года. BSUID — это бэкенд-идентификатор одного пользователя WhatsApp в рамках одного бизнес-портфолио Meta. Meta включает его в Webhook сообщений независимо от того, выбрал ли пользователь имя пользователя, и его можно использовать для отправки сообщений, когда номер телефона пользователя недоступен. Имена пользователей и BSUID имеют разные жизненные циклы. Пользователь может изменить имя пользователя, не меняя номер телефона или BSUID. Если пользователь меняет номер телефона, Meta генерирует новый BSUID. Храните эти идентификаторы отдельно и обновляйте их связь при получении системного события смены номера телефона. Номер телефона по-прежнему может отображаться, если бизнес-номер телефона обменивался сообщениями или звонками с пользователем в течение последних 30 дней, или если пользователь есть в адресной книге Meta. Считайте поля номера телефона и имени пользователя условными и настройте парсеры и хранилище идентификаторов для приема BSUID наряду с другими присутствующими идентификаторами. В этом руководстве рассматриваются правила идентификации BSUID, запросы сообщений и звонков, адресная книга Meta и поля Webhook, которые необходимо сохранять вашей интеграции.
Обзор идентификаторов
Meta автоматически генерирует обычные BSUID. Каждый BSUID начинается с двухбуквенного кода страны пользователя по стандарту ISO 3166 alpha-2, за которым следуют точка и до 128 буквенно-цифровых символов. Сохраняйте значение целиком. Не удаляйте и не изменяйте префикс страны, точку или символы идентификатора.
Для BSUID действуют следующие правила жизненного цикла:
- BSUID уникален для пары «бизнес-портфолио — пользователь».
- BSUID пользователя изменяется при смене пользователем своего номера телефона.
- Parent BSUID работает в рамках связанных портфолио, для которых Meta включила эту функцию.
- Бизнес-номер телефона не может использовать обычный BSUID, привязанный к другому портфолио.
Перед началом работы
- Сохраните свой ключ API YCloud в
YCLOUD_API_KEY. - Используйте бизнес-номер телефона WhatsApp, принадлежащий тому же портфолио, что и обычный BSUID.
- Подпишите конечную точку Webhook на события WhatsApp, которые используются вашей интеграцией.
- При десериализации событий Webhook обрабатывайте каждое новое поле BSUID, parent BSUID, номера телефона и имени пользователя как необязательное.
- Сохраняйте обычный BSUID и parent BSUID независимо друг от друга, если присутствуют оба.
Отправка сообщения с помощью BSUID
Обе конечные точки сообщений WhatsApp принимаютrecipient:
Укажите в
recipient обычный BSUID или parent BSUID. Опустите to, если хотите,
чтобы YCloud адресовал сообщение пользователю по BSUID.
POST /whatsapp/messages для постановки сообщения в очередь.
Запрос номера телефона пользователя
Используйте сообщение с запросом контактных данных, когда вашему рабочему процессу требуется номер телефона, который не был передан в Webhook. Пользователь сам решает, делиться ли им.Использование кнопки шаблона
Добавьте кнопкуREQUEST_CONTACT_INFO в сервисный или маркетинговый шаблон. Текст кнопки фиксирован как Share Contact Info, и кнопка не принимает параметры во время отправки.
Использование интерактивного сообщения
Отправьте интерактивное сообщениеrequest_contact_info, если вам не требуется шаблон:
Обработка ответа с контактом
Когда пользователь делится контактной информацией, YCloud отправляет событиеwhatsapp.inbound_message.received, где type сообщения имеет значение contacts. В качестве ответа на ваш запрос поле contacts[].origin содержит contact_request.
2xx и обработайте номер телефона асинхронно. Контакт, отправленный напрямую из WhatsApp, также может содержать vCard.
Принцип работы адресной книги Meta
Адресная книга Meta сохраняет связь между номером телефона пользователя и BSUID. Если эта функция включена, отправка или получение сообщения либо звонка с использованием номера телефона пользователя сохраняет оба идентификатора. После этого Meta может включать эту связь в Webhook-уведомления, даже если пользователь начнет использовать имя пользователя (username). Адресные книги привязаны к отдельным бизнес-портфолио. Связанные портфолио не разделяют и не синхронизируют свои записи: связь сохраняется независимо в каждом портфолио. Meta хранит записи до тех пор, пока вы не отключите эту функцию или не деактивируете аккаунт. Вы можете отключить ее в разделе Meta Business Suite > Настройки компании > Информация о компании. Отключение функции приводит к удалению сохраненных записей и прекращению фиксации новых. Повторное включение начинает сбор новых записей, но не восстанавливает удаленные данные.
Запросы контактов и локальное хранилище
Когда пользователь передает свой номер телефона с помощью кнопки запроса контактных данных, Meta добавляет этот номер в адресную книгу, если функция включена. Для компаний, использующих Local Storage, Meta извлекает номер телефона из переданной vCard и сохраняет его в адресной книге в центрах обработки данных Meta. Остальные данные vCard не сохраняются дольше стандартного срока хранения. Meta отменила действовавшее ранее требование отправлять отдельное сообщение для фиксации этой связи. Ознакомьтесь с официальной документацией по BSUID относительно актуального поведения Local Storage.Удаление записи из адресной книги Meta
Удалите запись из адресной книги Meta для стандартного BSUID через один рабочий номер телефона WhatsApp с помощью:DELETE /whatsapp/phoneNumbers/{wabaId}/{phoneNumber}/contactBook/{bsuid}
.ENT., не поддерживаются. При формировании пути вручную выполните URL-кодирование начального символа + в номере телефона как %2B.
HTTP-ответ 200 всегда содержит success: true. Значение deleted, равное true, означает, что Meta удалила соответствующую запись. Значение false указывает, что Meta обработала запрос, но подходящей записи не нашлось.
Удаление записи не приводит к удалению контактов, сообщений или бизнес-записей BSUID в YCloud. После удаления события Webhook для рабочих номеров телефонов в том же бизнес-портфолио Meta больше не будут содержать номер телефона пользователя вместе с BSUID. 30-дневный кэш Meta по-прежнему может возвращать оба идентификатора, а последующее взаимодействие может создать запись в адресной книге повторно.
Инициация звонка с помощью BSUID
POST /whatsapp/calls/connect также принимает recipient. Действуют те же правила указания получателя: укажите to или recipient, при этом to имеет приоритет, если указаны оба параметра.
Обработка полей Webhook для BSUID
Приведенные ниже полезные нагрузки Webhook от YCloud демонстрируют поля, добавленные или измененные для поддержки BSUID. Обновите свой парсер для поддержки новых идентификаторов и обработки отсутствующих номеров телефонов клиентов.
Примеры содержат оболочку события YCloud и показывают расположение каждого поля. Необязательные поля следуют описанным ниже правилам исключения. Удалите комментарии
// <ADDED> и // <CHANGED> перед использованием данных полезной нагрузки в качестве тестового JSON.
Применяйте следующие правила отсутствия полей:
- Поле родительского BSUID отсутствует, если родительские BSUID не включены.
- Поле целевого получателя отправленного сообщения или звонка может отсутствовать, если вы обращались к пользователю по номеру телефона.
customerProfileпоявляется в обновлениях сообщенийsent,deliveredиread, но не в обновленияхfailed.customerProfile.usernameотсутствует, если пользователь не включил имена пользователей. Оно также отсутствует в обновлениях статусаsent.- Номер телефона может отсутствовать, даже если присутствует соответствующий BSUID.
whatsapp.message.updated
whatsapp.message.updated
В примере показано доставленное сообщение.
<CHANGED> помечает to как условное, если номер телефона недоступен. Новый объект customerProfile опускается для failed; его username также опускается для sent или если у пользователя нет имени пользователя.whatsapp.inbound_message.received
whatsapp.inbound_message.received
Сохраняйте новые идентификаторы отправителя вместе с существующим именем профиля. Идентификатор бизнес-получателя
to не меняется; номер телефона клиента from может быть опущен. Пример смены номера телефона приведен ниже для сообщения system.whatsapp.user.preferences
whatsapp.user.preferences
Настройка остается в
whatsappUserPreference. Используйте предоставленные идентификаторы пользователя, даже если contactPhoneNumber отсутствует.whatsapp.call.connect
whatsapp.call.connect
Для звонков, инициированных бизнесом, идентификаторами клиента являются
toUserId и toParentUserId. Для звонков, инициированных пользователем, это fromUserId и fromParentUserId. Только поле номера телефона клиента может быть опущено в этих примерах.- BUSINESS_INITIATED
- USER_INITIATED
whatsapp.call.terminate
whatsapp.call.terminate
Для звонков, инициированных бизнесом, идентификаторами клиента являются
toUserId и toParentUserId. Для звонков, инициированных пользователем, это fromUserId и fromParentUserId. Только поле номера телефона клиента может быть опущено в этих примерах.- BUSINESS_INITIATED
- USER_INITIATED
whatsapp.call.status.updated
whatsapp.call.status.updated
Идентификаторы получателя находятся на одном уровне с
recipientPhone внутри callingStatusUpdated.whatsapp.group.participants_update
whatsapp.group.participants_update
Обновление одного участника может передавать идентификаторы непосредственно в
whatsappGroup. Пакетные результаты передают их в каждом элементе в addedParticipants, removedParticipants или failedParticipants. Обрабатывайте массив для соответствующей операции в событии.- added
- removed
- failed
whatsapp.smb.history
whatsapp.smb.history
Сохраняйте оболочку конкретного события: входящая история использует
whatsappInboundMessage, а исходящая — whatsappMessage. Исходящие toUserId и toParentUserId являются псевдонимами совместимости для recipientUserId и parentRecipientUserId. В этих примерах показаны события, содержащие сообщения; фрагмент истории, содержащий только метаданные, может опускать оба объекта сообщений.- Входящая история
- Исходящая история
whatsapp.smb.app.state.sync
whatsapp.smb.app.state.sync
Эта полезная нагрузка сохранена из устаревшей документации по миграции на BSUID. Это событие не указано в текущем общедоступном каталоге событий, доступных для подписки; не добавляйте его в
enabledEvents на основе этого примера. Используйте приведенную структуру при поддержке интеграции, которая уже получает эту устаревшую полезную нагрузку.whatsapp.smb.message.echoes
whatsapp.smb.message.echoes
Это сообщения, отправленные из приложения WhatsApp Business или поддерживаемого сопряженного устройства. Устаревшие имена полей
toUserId и toParentUserId являются псевдонимами совместимости для recipientUserId и parentRecipientUserId. Сохраняйте профиль в whatsappMessage.Обработка смены номера телефона пользователем
КогдаwhatsappInboundMessage.type имеет значение system, а system.type —
user_changed_number, внешние поля отправителя определяют старую идентичность пользователя.
Вложенные поля system содержат новые BSUID и, если доступно, новый
номер телефона. Используйте имена полей user_id и parent_user_id внутри
system.
parent_user_id необязательным. Новый номер телефона в wa_id также может
отсутствовать, поэтому используйте user_id и любой предоставленный parent_user_id для обновления
сопоставления идентификаторов. Сохраняйте старые и новые значения достаточно долго, чтобы сопоставить
существующие переписки и идемпотентно обновить хранилище идентификаторов.
Бизнес-имена пользователей
Бизнес-имя пользователя помогает клиентам находить вашу компанию в WhatsApp. Оно не скрывает номер телефона вашей компании. К каждому номеру телефона может быть привязано одно имя пользователя, и одно имя пользователя не может использоваться двумя телефонными номерами WhatsApp одновременно. Имя пользователя клиента может измениться без изменения BSUID пользователя. Сохраняйте имя пользователя как информацию профиля, а не используйте его в качестве ключа идентификации. См. раздел Запрос бизнес-имени пользователя, где описаны правила формата (от 3 до 35 символов), а также процесс запроса и проверки.
Зарезервированные имена пользователей
Вы можете запросить подходящее имя пользователя, зарезервированное Meta, или выбрать другое имя пользователя для своего бренда. Используйте WhatsApp Manager, Meta Business Suite или API имен пользователей. Само по себе одобрение не означает, что имя пользователя уже активно для клиентов. Если зарезервированное имя пользователя принадлежит вашей Странице Facebook или аккаунту Instagram, свяжите рабочий номер телефона с этой Страницей или аккаунтом перед тем, как запросить его. Вы можете связать его во время запроса имени пользователя в Meta Business Suite или WhatsApp Manager, либо добавить номер телефона на Страницу или в аккаунт. Для этого требуется полный контроль или базовый частичный доступ с разрешениемmanage_phone.
Приоритет отображения в окне чата
WhatsApp отображает информацию о компании в следующем порядке приоритета:- Имя, сохраненное в контактах клиента.
- Подтвержденное название компании или имя официального бизнес-аккаунта (Official Business Account).
- Имя пользователя компании.
- Номер телефона.
Контрольный список для миграции
- Добавьте каждое поле вебхука, связанное с BSUID, в свою модель десериализации как необязательное поле.
- Храните обычные и родительские BSUID отдельно от номеров телефонов и имен пользователей.
- Индексируйте идентификаторы клиентов по портфолио и BSUID. Не рассматривайте BSUID как глобально переносимый идентификатор.
- Маршрутизируйте запросы на сообщения и звонки через
toилиrecipient, а также протестируйте правило приоритетаto. - Протестируйте сценарии с пользователями только с именем пользователя, отсутствующими номерами телефонов, сменой номера телефона, отсутствующими родительскими BSUID, дублирующимися вебхуками и повторным созданием контактной книги.
Примеры статусов сообщений
Проверьте полезную нагрузку для отправленных, доставленных, прочитанных и завершившихся ошибкой сообщений.
Примеры входящих сообщений
Проверьте полезную нагрузку для контактов, системных обновлений и других входящих событий.

