Por qué existen los BSUID
WhatsApp implementará nombres de usuario opcionales en 2026. Cuando un usuario adopta un nombre de usuario, WhatsApp puede mostrar el nombre de usuario en lugar del número de teléfono del usuario y puede omitir el número de teléfono de las cargas útiles de webhook. Cada usuario controla si adopta un nombre de usuario, por lo que las empresas no pueden depender de los números de teléfono como la única forma de identificar a los clientes. Por lo tanto, Meta exige que las empresas y socios de WhatsApp Business Platform, así como los anunciantes de click-to-WhatsApp, admitan BSUID para que puedan continuar procesando mensajes de usuarios que adopten nombres de usuario. Para respaldar este cambio, Meta comenzó a agregar ID de usuario con ámbito de negocio (BSUID) a las cargas útiles de webhook a principios de abril de 2026. Un BSUID es un identificador de backend para un usuario de WhatsApp dentro de un portafolio comercial de Meta. Meta lo incluye en los webhooks de mensajes independientemente de si el usuario ha adoptado un nombre de usuario o no, y se puede utilizar para enviar mensajes al usuario cuando su número de teléfono no esté disponible. Los nombres de usuario y los BSUID tienen ciclos de vida diferentes. Un usuario puede cambiar su nombre de usuario sin cambiar su número de teléfono o BSUID. Si el usuario cambia su número de teléfono, Meta genera un nuevo BSUID. Almacena estos identificadores por separado y actualiza su asociación cuando recibas un evento del sistema de cambio de número de teléfono. Un número de teléfono aún puede aparecer cuando el número de teléfono comercial ha intercambiado un mensaje o llamada con el usuario en los 30 días anteriores, o cuando la libreta de contactos de Meta contiene al usuario. Trata los campos de número de teléfono y nombre de usuario como condicionales, y actualiza los analizadores y el almacenamiento de identidades para aceptar BSUID junto con cualquier otro identificador presente. Esta guía cubre las reglas de identidad de BSUID, solicitudes de mensajes y llamadas, la libreta de contactos de Meta y los campos de webhook que tu integración necesita almacenar.
Comprender los identificadores
Meta genera automáticamente BSUID regulares. Cada BSUID comienza con el código de país de dos letras ISO 3166 alpha-2 del usuario, seguido de un punto y hasta 128 caracteres alfanuméricos. Conserva el valor completo. No elimines ni modifiques el prefijo de país, el punto ni los caracteres del identificador.
Los BSUID tienen las siguientes reglas de ciclo de vida:
- Un BSUID es único para un par de portafolio comercial y usuario.
- El BSUID de un usuario cambia cuando el usuario cambia su número de teléfono.
- Un BSUID principal funciona en los portafolios vinculados para los cuales Meta lo habilitó.
- Un número de teléfono comercial no puede usar un BSUID regular asignado a otro portafolio.
Antes de comenzar
- Almacena tu clave de API de YCloud en
YCLOUD_API_KEY. - Usa un número de teléfono comercial de WhatsApp que pertenezca al mismo portafolio que el BSUID regular.
- Suscribe tu endpoint de webhook a los eventos de WhatsApp que utilice tu integración.
- Trata cada nuevo campo de BSUID, BSUID principal, número de teléfono y nombre de usuario como opcional al deserializar webhooks.
- Almacena el BSUID regular y el BSUID principal de forma independiente cuando ambos estén presentes.
Enviar un mensaje con un BSUID
Ambos endpoints de mensajes de WhatsApp aceptanrecipient:
Establece
recipient en un BSUID regular o en un BSUID principal. Omite to cuando quieras que YCloud se dirija al usuario mediante BSUID.
POST /whatsapp/messages para encolar el mensaje.
Solicitar el número de teléfono de un usuario
Usa un mensaje de solicitud de información de contacto cuando tu flujo de trabajo necesite un número de teléfono que no se incluyó en un webhook. El usuario decide si compartirlo o no.Usar un botón de plantilla
Añade un botónREQUEST_CONTACT_INFO a una plantilla de utilidad o marketing. El texto del botón es fijo como Share Contact Info, y el botón no acepta parámetros al momento del envío.
Usar un mensaje interactivo
Envía un mensaje interactivorequest_contact_info cuando no necesites una plantilla:
Gestionar la respuesta de contacto
Cuando el usuario comparte información de contacto, YCloud envía un eventowhatsapp.inbound_message.received cuyo mensaje type es contacts. Para una respuesta a tu solicitud, contacts[].origin es contact_request.
2xx y procesa el número de teléfono de forma asíncrona. Un contacto compartido directamente desde WhatsApp también puede incluir una vCard.
Comprender la libreta de contactos de Meta
La libreta de contactos de Meta almacena la asociación entre el número de teléfono de un usuario y el BSUID. Con la función habilitada, enviar o recibir un mensaje o una llamada usando el número de teléfono del usuario registra ambos identificadores. Meta puede entonces incluir esa asociación en los webhooks incluso después de que el usuario adopte un nombre de usuario. Las libretas de contactos pertenecen a portafolios comerciales individuales. Los portafolios vinculados no comparten ni sincronizan sus entradas: registra la asociación de forma independiente en cada portafolio. Meta conserva las entradas hasta que desactives la función o desactives tu cuenta. Puedes desactivarla en Meta Business Suite > Configuración del negocio > Información del negocio. Desactivar la función elimina las entradas almacenadas y detiene el registro de nuevas. Volver a habilitarla comienza a recopilar nuevas entradas; no restaura los datos eliminados.
Solicitudes de contacto y Local Storage
Cuando un usuario comparte su número de teléfono a través de un botón de solicitud de información de contacto, Meta añade el número de teléfono a la libreta de contactos si la función está habilitada. Para las empresas que usan Local Storage, Meta extrae el número de teléfono de la vCard compartida y lo almacena en la libreta de contactos en los centros de datos de Meta. El resto de los datos de la vCard no se conservan más allá del período de retención estándar. Meta eliminó el requisito previo de enviar un mensaje por separado para capturar esta asociación. Consulta la documentación oficial de BSUID para conocer el comportamiento actual de Local Storage.Eliminar una entrada de la libreta de contactos de Meta
Elimina una entrada de la libreta de contactos de Meta para un BSUID normal a través de un número de teléfono de WhatsApp Business con:DELETE /whatsapp/phoneNumbers/{wabaId}/{phoneNumber}/contactBook/{bsuid}
.ENT.. Codifica en la URL el signo inicial + en el número de teléfono como %2B cuando construyas la ruta manualmente.
Una respuesta HTTP 200 siempre contiene success: true. Un valor de deleted igual a true significa que Meta eliminó una entrada coincidente. Un valor de false significa que Meta procesó la solicitud pero no encontró ninguna entrada coincidente.
Eliminar la entrada no borra los contactos, mensajes ni registros comerciales de BSUID en YCloud. Tras la eliminación, los eventos de webhook para los números de teléfono comerciales en el mismo portafolio comercial de Meta ya no incluirán el número de teléfono del usuario y el BSUID juntos. La caché de 30 días de Meta aún puede suministrar ambos identificadores, y una interacción posterior puede volver a crear la entrada en la libreta de contactos.
Iniciar una llamada con un BSUID
POST /whatsapp/calls/connect también acepta recipient. Se aplican las mismas reglas de destino: proporciona to o recipient, y to tiene prioridad cuando ambos están presentes.
Procesar los campos de webhook de BSUID
Las siguientes cargas útiles de webhook de YCloud muestran los campos agregados o modificados para la compatibilidad con BSUID. Actualiza tu analizador sintáctico para aceptar los nuevos identificadores y gestionar los números de teléfono de clientes faltantes.
Los ejemplos incluyen la envoltura del evento de YCloud y muestran dónde aparece cada campo. Los campos opcionales siguen las reglas de omisión que se indican a continuación. Elimina los comentarios
// <ADDED> y // <CHANGED> antes de usar una carga útil como datos de prueba en JSON.
Aplica estas reglas de omisión:
- Un campo BSUID principal está ausente cuando los BSUID principales no están habilitados.
- Un campo de destino de llamada o mensaje enviado puede estar ausente cuando te dirigiste al usuario por número de teléfono.
customerProfileaparece en las actualizaciones de mensajessent,deliveredyread, pero no en las actualizacionesfailed.customerProfile.usernameestá ausente cuando el usuario no ha habilitado los nombres de usuario. También está ausente de las actualizaciones de estadosent.- Un número de teléfono puede estar ausente incluso cuando el BSUID correspondiente está presente.
whatsapp.message.updated
whatsapp.message.updated
El ejemplo muestra un mensaje entregado.
<CHANGED> marca to como condicional cuando el número de teléfono no está disponible. El nuevo objeto customerProfile se omite para failed; su username también se omite para sent o cuando el usuario no tiene nombre de usuario.whatsapp.inbound_message.received
whatsapp.inbound_message.received
Almacena los nuevos identificadores de remitente junto con el nombre de perfil existente. El destinatario comercial
to no cambia; el número de teléfono del cliente from se puede omitir. Consulta el ejemplo de cambio de número de teléfono a continuación para un mensaje system.whatsapp.user.preferences
whatsapp.user.preferences
La preferencia permanece bajo
whatsappUserPreference. Utiliza los identificadores de usuario proporcionados incluso cuando contactPhoneNumber esté ausente.whatsapp.call.connect
whatsapp.call.connect
Para llamadas iniciadas por la empresa, los identificadores del cliente son
toUserId y toParentUserId. Para llamadas iniciadas por el usuario, son fromUserId y fromParentUserId. Solo el campo de número de teléfono del cliente puede omitirse en estos ejemplos.- BUSINESS_INITIATED
- USER_INITIATED
whatsapp.call.terminate
whatsapp.call.terminate
Para llamadas iniciadas por la empresa, los identificadores del cliente son
toUserId y toParentUserId. Para llamadas iniciadas por el usuario, son fromUserId y fromParentUserId. Solo el campo de número de teléfono del cliente puede omitirse en estos ejemplos.- BUSINESS_INITIATED
- USER_INITIATED
whatsapp.call.status.updated
whatsapp.call.status.updated
Los identificadores del destinatario son hermanos de
recipientPhone bajo callingStatusUpdated.whatsapp.group.participants_update
whatsapp.group.participants_update
Una actualización de un solo participante puede incluir identificadores directamente bajo
whatsappGroup. Los resultados por lotes los llevan en cada elemento en addedParticipants, removedParticipants o failedParticipants. Procesa el arreglo para la operación en el evento.- added
- removed
- failed
whatsapp.smb.history
whatsapp.smb.history
Conserva el contenedor específico del evento: el historial entrante utiliza
whatsappInboundMessage, mientras que el historial saliente utiliza whatsappMessage. Los campos salientes toUserId y toParentUserId son alias de compatibilidad de recipientUserId y parentRecipientUserId. Estos ejemplos muestran eventos que contienen mensajes; un fragmento de historial solo con metadatos puede omitir ambos objetos de mensaje.- Historial entrante
- Historial saliente
whatsapp.smb.app.state.sync
whatsapp.smb.app.state.sync
Esta carga útil se conserva de la documentación heredada de migración de BSUID. Este evento no aparece en el catálogo público actual de eventos a los que se puede suscribir; no lo agregues a
enabledEvents según este ejemplo. Utiliza la estructura que aparece a continuación al mantener una integración que ya recibe esta carga útil heredada.whatsapp.smb.message.echoes
whatsapp.smb.message.echoes
Estos son mensajes enviados desde la aplicación WhatsApp Business o un dispositivo complementario compatible. Los nombres de campo heredados
toUserId y toParentUserId son alias de compatibilidad de recipientUserId y parentRecipientUserId. Conserva el perfil bajo whatsappMessage.Gestionar el cambio de número de teléfono de un usuario
CuandowhatsappInboundMessage.type es system y system.type es
user_changed_number, los campos de remitente externos identifican la identidad del usuario anterior.
Los campos anidados system contienen los nuevos BSUID y, cuando esté disponible, el
nuevo número de teléfono. Utiliza los nombres de campo user_id y parent_user_id dentro de
system.
parent_user_id como opcional. El nuevo número de teléfono en wa_id también se puede
omitir, así que usa user_id y cualquier parent_user_id proporcionado para actualizar la
asignación de identidades. Conserva los valores antiguos y nuevos el tiempo suficiente para conciliar
las conversaciones existentes y actualizar de manera idempotente tu almacén de identidades.
Nombres de usuario comerciales
Un nombre de usuario comercial ayuda a los clientes a encontrar tu empresa en WhatsApp. No oculta el número de teléfono de tu empresa. Cada número de teléfono puede tener un nombre de usuario, y dos números de teléfono de WhatsApp no pueden compartir un mismo nombre de usuario. El nombre de usuario de un consumidor puede cambiar sin cambiar el BSUID del usuario. Conserva el nombre de usuario como información del perfil en lugar de usarlo como tu clave de identidad. Consulta Reclamar un nombre de usuario comercial para conocer las reglas de formato de 3 a 35 caracteres y el proceso de reclamación y revisión.
Nombres de usuario reservados
Puedes reclamar un nombre de usuario elegible reservado por Meta o elegir otro nombre de usuario para tu marca. Utiliza el Administrador de WhatsApp, Meta Business Suite o la API de nombres de usuario. La aprobación en sí misma no significa que un nombre de usuario esté activo para los clientes. Si el nombre de usuario reservado pertenece a tu página de Facebook o cuenta de Instagram, vincula tu número de teléfono comercial a esa página o cuenta antes de reclamarlo. Puedes vincularlo mientras reclamas el nombre de usuario en Meta Business Suite o WhatsApp Manager, o agregar el número de teléfono a la página o cuenta. Necesitas control total o acceso parcial básico con el permisomanage_phone.
Prioridad de visualización en la ventana de chat
WhatsApp muestra la identidad comercial en este orden:- El nombre guardado en los contactos del cliente.
- El nombre comercial verificado o el nombre de la cuenta comercial oficial.
- El nombre de usuario comercial.
- El número de teléfono.
Lista de verificación para la migración
- Agrega cada campo de webhook relacionado con BSUID a tu modelo de deserialización como un campo opcional.
- Almacena los BSUID regulares y principales por separado de los números de teléfono y nombres de usuario.
- Indexa la identidad del cliente por portafolio y BSUID. No trates un BSUID como un identificador portable globalmente.
- Enruta las solicitudes de mensajes y llamadas mediante
toorecipient, y prueba la regla de precedencia deto. - Prueba usuarios que solo tienen nombre de usuario, números de teléfono ausentes, cambios de número de teléfono, BSUID principales ausentes, webhooks duplicados y la recreación de la libreta de contactos.
Ejemplos de estado de mensajes
Inspecciona los payloads de mensajes enviados, entregados, leídos y fallidos.
Ejemplos de mensajes entrantes
Inspecciona contactos, actualizaciones del sistema y otros payloads entrantes.

