Index
- O que é um BSUID?
- O que permanece o mesmo
- O que está mudando
- Preparação
- 1. Alterações na API
- 1.1 Endpoints de contato — BSUID como identificador
- 1.2 Resposta do contato — Novos campos
- 1.3 Webhooks que você recebe do Turn
- 1.4 Envio de mensagens — novo campo destinatário
- 1.5 Exportação CSV de contato — Novas colunas
- 1.6 Bloquear/Desbloquear — Suporte BSUID
- 1.7 Chamadas de saída — novo campo destinatário
Ação necessária: nomes de usuário do WhatsApp e BSUIDs – o que você precisa saber
Atualizado
por Raquel
- O que é um BSUID?
- O que permanece o mesmo
- O que está mudando
- Preparação
- 1. Alterações na API
- 1.1 Endpoints de contato — BSUID como identificador
- 1.2 Resposta do contato — Novos campos
- 1.3 Webhooks que você recebe do Turn
- 1.4 Envio de mensagens — novo campo destinatário
- 1.5 Exportação CSV de contato — Novas colunas
- 1.6 Bloquear/Desbloquear — Suporte BSUID
- 1.7 Chamadas de saída — novo campo destinatário
O WhatsApp está implementando uma grande mudança em 2026: os usuários finais poderão ocultar seu número de telefone ao enviar mensagens para empresas, identificando-se com um nome de usuário (por exemplo, @alice_smith).
Isso significa que o número de telefone do usuário deixará de ser seu identificador principal. A Meta está introduzindo um novo identificador chamado BSUID (Business-Scoped User ID). Nos próximos meses, os BSUIDs começarão a aparecer junto com os números de telefone na API do WhatsApp Business.
Este artigo fornece informações antecipadas sobre: o que está mudando, o que permanece igual e como se preparar para essa mudança, já que isso pode exigir que você faça alterações em seus sistemas.
O que é um BSUID?
Um BSUID é um identificador que representa exclusivamente um usuário em seu portfólio de negócios. É assim:
US.13491208655302741918
IN.26329079733414951
O formato é um código de país (ISO 3166 alfa-2) seguido por uma string alfanumérica.
Algumas propriedades importantes:
- Escopo do portfólio: o mesmo usuário final terá um BSUID diferente para cada portfólio de negócios para o qual ele envia mensagens.
- Estável em alterações de nome de usuário: mesmo se um usuário alterar seu
@nomedeusuário, seu BSUID permanecerá o mesmo. - Regerado na alteração do número de telefone: se um usuário trocar de número de telefone, seu BSUID será reemitido.
- Sempre presente: BSUIDs são incluídos em todos os webhooks, independentemente de o usuário ter escolhido usar um nome de usuário ou não.
O que permanece o mesmo
Nada é interrompido para seus contatos existentes. Você ainda terá os números de telefone das pessoas que já enviaram mensagens para você. Cada contato que você tem hoje continuará funcionando exatamente como antes.
Você também continuará recebendo o número de telefone do usuário em webhooks em muitos cenários comuns, mesmo depois que ele adotar um nome de usuário.
O que está mudando
- Você não terá acesso ao número de telefone de novos usuários que optaram por ocultá-lo.
- O identificador principal dos usuários será o deles.
BSUID, e não owhatsapp_id(seu número de telefone).
No Turn.io, essas mudanças serão implementadas progressivamente:
- Os contatos terão novos campos
- Envio de mensagens por BSUID
- Novas expressões de jornada
- Mudança de comportamento para
@contact.whatsapp_id - Importações e exportações de CSV
- Modelos de autenticação
- Clientes do BigQuery/data warehouse
Preparação
Ao longo dos anos, todos construíram seus serviços presumindo que o identificador principal de um usuário seria seu número de telefone. Isso significa que, em todo o sistema, você pode depender do número de telefone. Aqui está uma lista completa de itens que você deve revisar e como fazer a transição para o uso de BSUIDs.
1. Alterações na API
1.1 Endpoints de contato — BSUID como identificador
Todos os endpoints de contato agora aceitam um BSUID como parâmetro de caminho contact_id, além de números de telefone.
Antes: somente números de telefone eram aceitos.
GET /v1/contacts/918609840467/profile
Depois: Número de telefone ou BSUID aceito. O formato é detectado automaticamente.
GET /v1/contacts/918609840467/profile # por telefone
GET /v1/contacts/IN.26329079733414951/profile # por BSUID
Afetado endpoints:
GET /v1/contacts/<contact_id>— obtenha ou crie um contatoPOST /v1/contacts/<contact_id>— crie um contato por identificadorPUT /v1/contacts/<contact_id>— atualize um contatoGET /v1/contacts/<contact_id>/profile— obter perfil de contatoPUT /v1/contacts/<contact_id>/profile— substituir perfil de contatoPATCH /v1/contacts/<contact_id>/profile— atualização parcial do perfil de contatoDELETE /v1/contacts/<contact_id>/profile— excluir perfil de contatoGET /v1/contacts/<contact_id>/messages— listar mensagens para um contatoGET/POST/PUT/DELETE /v1/contacts/<contact_id>/claim— gerenciar atribuição de bate-papo
1.2 Resposta do contato — Novos campos
GET /v1/contacts/<contact_id> agora inclui o BSUID e o nome de usuário do contato quando conhecido:
{
"id": "uuid",
"type": "DEFAULT",
"is_fallback_active": falso,
"failure_count": 0,
"bsuid": "IN.26329079733414951",
"nome de usuário": "alice_smith"
}Campo | Tipo | Descrição |
bsuid | string, omitido quando não set | O ID de usuário com escopo comercial do usuário |
nome de usuário | string, omitido quando não definido | O nome de usuário do WhatsApp do usuário (por exemplo, alice_smith) |
1.3 Webhooks que você recebe do Turn
Se você consumir os webhooks do Turn, os campos BSUID agora aparecerão nas cargas e os campos baseados em telefone poderão estar ausentes para usuários que ocultaram seu número de telefone. Qualquer código que assume que de, para ou wa_id está sempre presente deve lidar com a falta deles.
1.3.1 Mensagem de entrada webhooks
Campo | Alterar |
| Omitido quando o telefone do remetente está indisponível (era sempre presente) |
| Novo — o BSUID do remetente. Não presente em mensagens recebidas antes do suporte ao BSUID |
| Espelha o formato do Meta: wa_id (telefone) quando disponível, user_id (BSUID) quando disponível, ou ambos |
Exemplo de fragmento de mensagem para um somente BSUID usuário:
{
"id": "wamid.xxx",
"type": "text",
"from_bsuid": "IN.26329079733414951",
"texto": { "corpo": "Olá" }
}com a entrada de contato: { "perfil": { "nome": "Alice" }, "id_usuário": "IN.26329079733414951" }
1.3.2 Webhooks de mensagens de saída
Campo | Alterar |
| nulo quando o destinatário não tem número de telefone (sempre foi o telefone) |
| Novo - o BSUID do destinatário, incluído sempre que a conversa tiver um (pode aparecer ao lado de) |
1.4 Envio de mensagens — novo campo destinatário
POST /v1/messages agora aceita um campo de destinatário para envio baseado em BSUID, como uma alternativa ao campo para.
Antes:
{
"to": "918609840467",
"type": "texto",
"texto": { "corpo": "Olá" }
}Depois — enviar por BSUID:
{
"destinatário": "IN.26329079733414951",
"tipo": "texto",
"texto": { "corpo": "Olá" }
}Depois — enviar com ambos (o telefone tem precedência):
{
"para": "918609840467",
"destinatário": "IN.26329079733414951",
"tipo": "texto",
"texto": { "corpo": "Olá" destinatário aceita BSUIDs apenas1.5 Exportação CSV de contato — Novas colunas
As exportações CSV agora incluem duas colunas adicionais ao lado de whatsapp_phone_number:
Nova coluna | Descrição | Exemplo |
| Usuário com escopo comercial ID | IN.26329079733414951 |
| nome de usuário do WhatsApp | alice_smith |
1.6 Bloquear/Desbloquear — Suporte BSUID
Bloquear e desbloquear contatos agora funciona com identificadores BSUID. A API detecta automaticamente se o identificador é um número de telefone ou BSUID. Ao enviar a solicitação de bloqueio para Meta, o sistema usa user_id (BSUID) quando o telefone não está disponível.
1.7 Chamadas de saída — novo campo destinatário
As chamadas de saída iniciadas pela empresa agora incluem um campo destinatário para início de chamada baseado em BSUID, juntamente com o campo para existente.
2. Alterações na jornada
2.1 Novos campos de contato
Duas novas expressões estão disponíveis nas jornadas:
Expressão | Tipo | Descrição | Exemplo valor |
| string | O valor do usuário BSUID | IN.26329079733414951 |
| string | O WhatsApp do usuário nome de usuário | @alice_smith |
Eles estão disponíveis no construtor Journey no menu Variáveis de contato.
2.2 Novo bate-papo Campo
Expressão | Tipo | Descrição |
| string | O BSUID do chat proprietário |
Disponível no menu de variáveis do bate-papo.

2.3 Mudança de comportamento para @contact.whatsapp_id
@contact.whatsapp_id permanece apenas por telefone. Para contatos somente BSUID (usuários que ocultaram seu número de telefone), esta expressão retorna nulo.
Ação necessária:
@contact.whatsapp_id devem ser atualizadas para usar @contact.bsuid quando apropriado, ou adicionar verificações de nulo. Veja abaixo como.Aqui está um exemplo de expressão para verificar se o whatsapp_id de alguém é nulo:
is_nil_or_empty(@contact.whatsapp_id)
Aqui está um exemplo em uso em um cartão de código:
card CodeBlock_1 do
user_id = if(is_nil_or_empty(@contact.whatsapp_id), @contact.bsuid, @contact.whatsapp_id)
text("ID do usuário: @user_id")
end
3. Solicitar o número de telefone do usuário (em breve)
Para coletar números de telefone de usuários com apenas nome de usuário, o Meta fornece um novo tipo de mensagem chamado Solicitar contato Informações.
Você pode solicitar o número de telefone do usuário em vários locais do produto:
Local | |
Como modelo | ![]() |
Da caixa de entrada | ![]() |
Das jornadas | ![]() |
O resultado é sempre o mesmo: você obtém acesso ao número de telefone do usuário.
4. Modelos de autenticação (OTP)
Os modelos de autenticação não podem usar BSUIDs. A tentativa de enviar um modelo de autenticação para um contato somente BSUID retorna o código de erro Meta 131062. É necessário um número de telefone.
Isso se aplica a todos os tipos de modelo de autenticação:
- Senhas de uso único (OTP)
- Autenticação com um toque
- Autenticação com toque zero
- Autenticação de código de cópia
Esses erros aparecerão nos registros de jornada ou na caixa de entrada ao tentar enviar um modelo de autenticação para um contato sem um número de telefone:


Para enviar modelos de autenticação, você precisa primeiro coletar o número de telefone do usuário usando a mensagem Solicitar informações de contato mencionada anteriormente neste artigo.
5. Alterações no BigQuery/Data Warehouse
5.1 Novas colunas
As novas colunas a seguir são exportadas automaticamente para o BigQuery:
Tabela | Novo Coluna | Tipo | Descrição |
contatos | bsuid | STRING | Usuário com escopo comercial ID |
contatos | nome de usuário | STRING | WhatsApp nome de usuário |
mensagens | from_bsuid | STRING | BSUID do remetente da mensagem — somente mensagens de entrada, NULL em mensagens de saída |
mensagens | urn_bsuid | STRING | BSUID do cliente em ambos os lados da mensagem (remetente para entrada, destinatário para saída) — a contraparte BSUID do urn_phone_number existente; use-o para consultas de junção |
bate-papos | owner_bsuid | STRING | BSUID do proprietário da conversa |
5.2 Campos de telefone anuláveis
Somente para BSUID contatos (usuários que ocultaram seu número de telefone), as colunas baseadas em telefone serão NULL:
Column | Comportamento para contatos somente BSUID |
contacts.urn | NULL (era +telefone) |
messages.from_addr | NULL (era o número de telefone) |
messages.urn_phone_number | NULL para ambas as direções (entrada: nenhum from_addr para derivar; saída: nenhum destinatário de telefone para derivar from) |
chats.owner | NULL (era número de telefone) |
5.3 Impacto em consultas existentes
Consultas que JOIN em campos baseados em telefone não retornarão silenciosamente nenhuma linha para contatos somente BSUID. Você também deve atualizar JOINs para usar os campos BSUID.
(Observação: urn_phone_number e urn_bsuid são colunas desnormalizadas na tabela de mensagens que normalizam os identificadores do cliente nas direções. urn_phone_number: from_addr para entrada, addressees[0] para saída — NULL quando o telefone não está disponível. urn_bsuid: BSUID do remetente para entrada, o BSUID da conversa para saída.)
Antes (apenas telefone JOIN — pausas para contatos somente BSUID):
-- Buscar todas as mensagens de um contato (apenas contas para número de telefone)
SELECT m.*, c.details
FROM mensagens m
JOIN contatos c ON m.urn_phone_number = c.urn
Depois (telefone + BSUID JOIN):
-- Buscar todas as mensagens de um contato (contas para número de telefone e bsuid)
SELECT m.*, COALESCE(cp.details, cb.details) Detalhes AS
FROM mensagens m
-- As mensagens podem ser vinculadas ao contato por qualquer um telefone OU bsuid OU ambos
LEFT JOIN contatos cp ON m.urn_phone_number = cp.urn
LEFT JOIN contatos cb ON m.urn_bsuid = cb.bsuid
-- Opcional: mantenha apenas mensagens que correspondam a um contato
ONDE cp.urn NÃO É NULO OU cb.bsuid NÃO É NULL
Novos recursos de filtragem:
-- Encontre todos os contatos somente BSUID (sem número de telefone)
ONDE contatos.bsuid NÃO É NULO E contatos.urn É NULO
-- Filtrar por BSUID específico
WHERE contatos.bsuid = 'US.13491208655302741918'
-- Todas as mensagens trocadas com um usuário BSUID específico (ambas as direções)
WHERE messages.urn_bsuid = 'US.13491208655302741918'
-- Filtrar por username
WHERE contact.username = 'alice_smith'
Sugerimos que você comece o mais rápido possível a fazer com que seus sistemas utilizem o novo BSUID e sejam resilientes para usuários que optaram por ocultar seus números de telefone.
Enquanto isso, se você tiver dúvidas, entre em contato conosco. Estamos aqui para ajudar.


