Sign inGet started

IDs de usuário com escopo de negócio

Um ID de usuário com escopo de negócio (BSUID) é o identificador da Meta para um usuário do WhatsApp, vinculado a um portfólio de negócios. Ele chega em mensagens recebidas independentemente de o contato usar um nome de usuário do WhatsApp, e permite endereçar um contato cujo número de telefone você não tem.
O Bird o expõe como bsuid nos campos from e to de uma mensagem, aceita-o como to de um envio e filtra a lista de mensagens por ele. A referência de IDs de usuário com escopo de negócio da Meta é a fonte para o próprio rollout e para o que outras superfícies da Meta fazem com o identificador.

Por que um contato chega sem número de telefone

O WhatsApp está implementando nomes de usuário. Um usuário que adota um exibe o nome de usuário em vez do número de telefone no app, e a Meta então omite o número dos payloads que o negócio recebe. O BSUID é a identidade que está sempre presente, e é por isso que uma mensagem recebida pode trazer um BSUID e nenhum phone_number.
A Meta ainda inclui o número de telefone quando você já tem um relacionamento com o contato: quando aquele número de telefone comercial específico enviou mensagens ou ligou para ele, ou recebeu uma mensagem ou ligação dele, nos últimos 30 dias, ou quando ele está no seu catálogo de contatos da Meta. A condição de 30 dias é avaliada por número de telefone comercial, então um contato que escreveu para um dos seus números ainda pode chegar sem número de telefone em outro.
Uma mensagem de um usuário do WhatsApp também traz o perfil que ele publica, em username e display_name no from. Ambos ficam ausentes quando o contato não adotou um nome de usuário ou a mensagem não traz perfil, e nenhum dos dois pode ser usado para endereçar uma mensagem.

Como é um BSUID

Exemplo de código
{
  "from": {
    "bsuid": "US.13491208655302741918",
    "username": "alexr",
    "display_name": "Alex Rivera"
  }
}
Um código de país ISO 3166 alfa-2, um ponto e até 128 caracteres alfanuméricos. Um BSUID pai, no qual um negócio gerenciado pode ser inscrito para que um único identificador funcione em um conjunto de portfólios, insere ENT depois do país: US.ENT.11815799212886844830. O Bird aceita ambas as formas como destinatário.
Três propriedades definem como você armazena e usa um BSUID:
  • Passe o valor inteiro, sem alteração. A Meta rejeita um BSUID modificado, então nenhuma parte dele é opcional: o código de país, o ponto e cada caractere do identificador viajam juntos. O Bird valida o formato antes de aceitar um envio, e o código de país precisa estar em maiúsculas e ser um código ISO 3166 alfa-2 real; um prefixo em minúsculas ou desconhecido é recusado em vez de corrigido. O limite de 128 caracteres se aplica ao identificador depois do código de país e depois do segmento ENT. em um BSUID pai.
  • Ele tem escopo de portfólio de negócios. Qualquer número de telefone comercial no mesmo portfólio pode enviar mensagens para aquele BSUID; um número em um portfólio diferente não pode, e o envio falha.
  • Ele não é permanente. A Meta documenta que o BSUID de um contato é regenerado quando ele troca o número de telefone, então ele identifica um parceiro de conversa em vez de servir como uma chave de cliente durável sua.

Como uma conversa geralmente funciona

Um contato com quem você nunca falou chega pelo BSUID, e a troca que obtém o número dele acontece em três passos:
  1. O contato envia uma mensagem para você. A mensagem recebida traz from.bsuid, e from.phone_number pode estar ausente. Essa mensagem abre a janela de atendimento ao cliente, então você pode responder livremente pelas próximas 24 horas.
  2. Você pede o número. Envie uma solicitação de informações de contato, um botão único que permite ao contato compartilhar um número de telefone. A mesma solicitação pode ir em um template pelo botão request_contact_info, que alcança um contato cuja janela já fechou.
  3. O contato toca no botão. O número divulgado chega como um cartão de contato de entrada com origin definido como contact_request e o número em phone_numbers. Um cartão de contato divulgado pode descrever outra pessoa ou outro número. Armazene essa divulgação separadamente da identidade WhatsApp do remetente; use as identidades efetivamente fornecidas nas mensagens seguintes em vez de sobrescrever o registro do cliente apenas com base no cartão.
Um contato pode recusar. Fechar a tela de compartilhamento não produz mensagem nem webhook, então um fluxo que precisa de um número precisa expirar por conta própria em vez de esperar uma recusa chegar, e precisa continuar funcionando para um contato que nunca compartilha o número.

Enviando para um BSUID

O to aceita um BSUID em qualquer lugar onde aceita um número de telefone:
Exemplo de código
{
  "to": "US.13491208655302741918",
  "from": "+13124495648",
  "text": { "body": "Your order shipped." }
}
Quatro coisas diferem de um envio endereçado por número de telefone:
  • O from precisa estar no portfólio ao qual o BSUID está vinculado. Esse é o mesmo requisito de portfólio que a Meta aplica, e uma incompatibilidade falha no WhatsApp em vez de na aceitação.
  • Templates de código de verificação de uso único precisam de um número de telefone. Um template gerenciado pelo Bird na categoria authentication, ou um que contenha um botão de código de verificação de uso único, é recusado na aceitação com um 422 E15014 WhatsAppRecipientNotSupportedForTemplate. Um template criado pelo seu espaço de trabalho não é verificado na aceitação: a Meta exige um número de telefone para templates de autenticação one-tap, zero-tap e copy-code, então esse envio é aceito e depois falha.
  • Um valor que não é nem um número de telefone nem um BSUID bem formado é recusado na aceitação, com um 422 E15001 WhatsAppInvalidRecipient.
  • O preço é definido pelo prefixo de país do BSUID. Um número de telefone fornece o país contra o qual a mensagem é tarifada, e para um envio por BSUID o prefixo de duas letras fornece esse dado.
Todo o resto do envio permanece igual: a janela de atendimento ao cliente ainda controla o conteúdo livre, e o 202 ainda significa aceito em vez de entregue.
Endereçe o contato pela identidade com a qual ele escreveu para você. O Bird registra uma janela aberta sob cada identidade que a mensagem recebida trouxe, e um envio encontra a janela sob a identidade para a qual é endereçado. Um contato que chegou apenas por BSUID não deixa janela vinculada a telefone, então um envio livre para um número de telefone que você tem de outra fonte pode ser recusado com um 422 E15044 WhatsAppServiceWindowClosed enquanto a Meta ainda considera a conversa aberta. Responder ao from da mensagem dele evita a incompatibilidade.

Lendo e filtrando por BSUID

Toda leitura traz as identidades que a mensagem contém:
  • Em uma mensagem, from e to trazem cada um um phone_number, um bsuid, ou ambos. Uma mensagem recebida nomeia o contato em from; uma enviada o nomeia em to.
  • Em um webhook, os mesmos endereços estão no payload do evento. Consulte eventos do WhatsApp para o envelope.
  • Na lista de mensagens, to e from aceitam cada um um BSUID assim como um número de telefone, e cada um corresponde a uma ponta da mensagem. O filtro bsuid corresponde ao contato em qualquer direção. O filtro mais antigo phone_number está descontinuado: to e from o substituem e correspondem a ambos os tipos de identidade.
Armazene ambas as identidades no seu próprio registro de contato e vincule o registro ao seu próprio identificador em vez de a qualquer um dos da Meta. Um contato pode chegar apenas com BSUID, ganhar um número de telefone ao compartilhá-lo e receber um novo BSUID se trocar de número.

Próximos passos