Preços baseados em conversa mudaram. Consulte Preços para saber como nosso novo modelo de preços baseado em conversa funciona.

Além disso, a visibilidade de metric_types mudou desde 1º de julho de 2023. Consulte a tabela Análises de conversas para ver mais detalhes.

Como criar e gerenciar modelos

Modelos de autenticação

A partir de 1º de abril de 2024, não será mais possível enviar, editar nem fazer apelações para modelos de autenticação existentes que não sejam modelos de autenticação com botões de senha descartável.

Os modelos de autenticação ficarão disponíveis na Índia em 1º de julho de 2024.


Os modelos são usados ao enviar modelos de mensagem com a API de Nuvem (hospedada pela Meta) ou a API Local. A API de Nuvem usa aprendizado de máquina para analisar os modelos e os parâmetros variáveis e a fim de proteger a segurança e a integridade dos serviços. Durante essa análise, nenhuma informação é compartilhada com o WhatsApp.

Eles podem ser criados usando a API de Gerenciamento do WhatsApp Business ou o Gerenciador de Negócios do WhatsApp. O número de modelos que uma conta do WhatsApp Business pode ter é determinado pela empresa principal. Caso a conta principal não tenha sido verificada, cada uma das contas do WhatsApp Business pode ter 250 modelos. Entretanto, se a conta principal tiver sido verificada e pelo menos uma das contas tiver um número de telefone comercial com um nome de exibição aprovado, cada conta do WhatsApp Business poderá ter até 6.000 modelos.

Antes de começar

Você precisará do seguinte:

  • Um token de acesso de usuário do sistema vinculado à empresa.
  • A identificação da conta do WhatsApp Business da empresa.
  • O nome de usuário do ativo de mídia cujos documentos e arquivos de imagem ou vídeo serão usados no modelo de mídia. Para obter o nome de usuário, carregue o ativo de mídia por meio da API de Carregamento Retomável.

Limitações

  • O campo de nome do modelo de mensagem tem um limite de 512 caracteres.
  • O campo de conteúdo do modelo de mensagem tem um limite de 1.024 caracteres.
  • Os modelos podem ser editados apenas quando estiverem no estado Aprovado, Rejeitado ou Pausado. É possível editar cada modelo de mensagem somente uma vez por dia, até 10 vezes por mês.
  • As contas do WhatsApp Business podem criar apenas 100 modelos de mensagem por hora.
  • Os modelos que forem compostos por 4 ou mais botões, ou 1 botão de resposta rápida e 1 ou mais botões de outro tipo, não poderão ser visualizados no WhatsApp para computador. Os usuários do WhatsApp que receberem um desses modelos serão solicitados a abrir a mensagem no smartphone.

Localização

Ao criar um modelo de mensagem, você pode adicionar um idioma específico. Esses modelos serão contabilizados no seu limite. Forneça traduções consistentes. Consulte Por que estou recebendo erros do tipo "estrutura indisponível" no meu retorno de chamada? para ver mais informações.

Como criar modelos

Envie uma solicitação POST ao ponto de extremidade Conta do WhatsApp Business > Modelos de mensagem para criar um modelo.

Sintaxe da solicitação

POST /<WHATSAPP_BUSINESS_ACCOUNT_ID>/message_templates

Corpo da publicação

{
  "name": "<NAME>",
  "category": "<CATEGORY>",
  "allow_category_change": <ALLOW_CATEGORY_CHANGE>,
  "language": "<LANGUAGE>",
  "components": [<COMPONENTS>]
}

Propriedades do corpo

Espaço reservadoDescriçãoExemplo de valor

<NAME>

String

Obrigatório.


O nome do modelo.

Máximo de 512 caracteres.

order_confirmation

<CATEGORY>

Enumeração

Obrigatório.


A categoria do modelo.

Consulte Categorias de modelo abaixo.

UTILITY

<ALLOW_CATEGORY_CHANGE>

Booliano

Opcional.


Defina como "true" para permitir a atribuição automática de categoria. Se esse valor for omitido, o modelo poderá ser rejeitado por categorização incorreta.

true

<LANGUAGE>

Enumeração

Obrigatório.


O código de localidade e idioma do modelo.

en_US

<LIBRARY_TEMPLATE_NAME>

String

Opcional.


O nome exato do modelo da Biblioteca de Modelos de Utilidade.

Aprenda a criar modelos usando a Biblioteca de Modelos de Utilidade.

delivery_update_1

<LIBRARY_TEMPLATE_BUTTON_INPUTS>

Matriz de objetos

Opcional.


O site e/ou o número de telefone da empresa usado no modelo.


Observação: para modelos de utilidade que contêm botões, esta propriedade não é opcional.

Aprenda a criar modelos usando a Biblioteca de Modelos de Utilidade.

“[ {'type': 'URL', 'url': {'base_url' : 'https://www.example.com/{{1}}', 'url_suffix_example' : 'https://www.example.com/demo'}}, {type: 'PHONE_NUMBER', 'phone_number': '+16315551010'} ]"

<COMPONENTS>

Matriz de objetos

Obrigatório.


Componentes que fazem parte do modelo.

Consulte Componentes do modelo abaixo.

Consulte Componentes do modelo abaixo.

Categorias de modelo

Os modelos precisam ser categorizados usando uma das categorias a seguir. As categorias influenciam no preço, e a opção definida por você será validada no momento da criação do modelo.

  • AUTHENTICATION
  • MARKETING
  • UTILITY

Consulte o documento Categorização de modelos para determinar qual categoria usar ao criar um modelo.

Componentes do modelo

Conforme as necessidades da empresa, os modelos podem incluir texto, mídia e componentes interativos. Consulte a lista com todas as possibilidades de componentes e os respectivos requisitos, além de amostras e exemplos de consulta em Componentes do modelo.

Ao criar um modelo, defina os componentes atribuindo uma matriz de objetos à propriedade "components" no corpo da solicitação.

Por exemplo, esta matriz contém um componente de corpo com texto contendo duas variáveis e exemplos de valores, um componente de botão de número de telefone e um componente de botão de URL:

[
  {
    "type": "BODY",
    "text": "Thank you for your order, {{1}}! Your confirmation number is {{2}}. If you have any questions, please use the buttons below to contact support. Thank you for being a customer!",
    "example": {
      "body_text": [
        [
          "Pablo","860198-230332"
        ]
      ]
    }
  },
  {
    "type": "BUTTONS",
    "buttons": [
      {
        "type": "PHONE_NUMBER",
        "text": "Call",
        "phone_number": "15550051310"
      },
      {
        "type": "URL",
        "text": "Contact Support",
        "url": "https://www.luckyshrub.com/support"
      }
    ]
  }
]

Consulte a lista com todas as possibilidades de componentes e os respectivos requisitos, além de amostras e exemplos de consulta em Componentes do modelo.

Observe que os modelos categorizados como AUTHENTICATION têm requisitos únicos de componente. Consulte Modelos de autenticação com botões de senha descartável.

Validação de categoria

Quando você envia uma solicitação de criação de modelo, validamos imediatamente a categoria usando nossas diretrizes de categorização de modelos.

  • Se concordarmos com a categoria escolhida por você, criaremos o modelo com um status de PENDING. Isso significa que o modelo passará por um processo de análise.
  • Se não concordarmos com a escolha de categoria, criaremos o modelo com um status de REJECTED e dispararemos um webhook de atualização de status do modelo de mensagem com o reason definido como INCORRECT_CATEGORY. Recomendamos que você detecte esse webhook para identificar modelos rejeitados ou solicite o campo rejected_reason em modelos recém-criados, que terão o valor TAG_CONTENT_MISMATCH.

Em ambos os casos, o status inicial do modelo é retornado como parte da resposta da API.

Caso o status do seu modelo tenha sido definido como REJECTED na validação de categoria, você terá várias opções:

Categorização automática

É possível incluir a propriedade allow_category_change na sua solicitação para que atribuamos automaticamente uma categoria com base no conteúdo do seu modelo e nas nossas diretrizes de categorização. Isso pode evitar que o status do seu modelo seja imediatamente definido como REJECTED devido à categorização incorreta.

Só é possível solicitar a categorização automática no momento da criação do modelo.

Análise do modelo

Os modelos com um status de PENDING passarão por um processo de análise. Analisaremos o conteúdo de cada modelo recém-criado ou editado para garantir que ele siga nossas diretrizes e políticas de conteúdo. Com base no resultado desse processo, alteraremos automaticamente o status do modelo para APPROVED ou REJECTED, o que disparará um webhook de atualização de status do modelo de mensagem.

Status do modelo

Após a conclusão dos processos de validação de categoria e de análise do modelo, definiremos o status do modelo como um destes valores:

  • APPROVED: o modelo foi aprovado no processo de análise e pode ser enviado em mensagens de modelo.
  • PENDING: o modelo foi aprovado na validação de categoria e está passando pelo processo de análise.
  • REJECTED: o modelo não foi aprovado na validação de categoria nem no processo de análise. Você pode solicitar o campo "rejected_reason" no modelo para saber o motivo.

Consulte a referência do ponto de extremidade WhatsApp Message Template para ver todos os campos e status possíveis.

Resposta

Se a solicitação for bem-sucedida, a API responderá com o ID, o status e a categoria do modelo recém-criado. Há três resultados possíveis:

  • Concordamos com a categoria escolhida por você, e agora o modelo está passando pelo processo de análise (o status é PENDING).
  • Discordamos da categoria escolhida por você (o status é REJECTED).
  • Aprovamos automaticamente o modelo (o status é APPROVED). Isso só acontecerá em modelos de autenticação com botões de senha descartável.
{
    "id": "<ID>",
    "status": "<STATUS>",
    "category": "<CATEGORY>"
}

Propriedades da resposta

Espaço reservadoDescriçãoExemplo de valor

<ID>

O ID do modelo.

572279198452421

<STATUS>

O status do modelo.

PENDING

<CATEGORY>

A categoria do modelo designada por você ou atribuída por nós.

MARKETING

Exemplo de solicitação

Veja um exemplo de solicitação para criar um modelo de promoção sazonal com os seguintes componentes:

  • Um cabeçalho com texto
  • Um corpo com texto
  • Um rodapé
  • Dois botões de resposta rápida

Veja mais exemplos aqui.

curl 'https://graph.facebook.com/v19.0/102290129340398/message_templates' \
-H 'Authorization: Bearer EAAJB...' \
-H 'Content-Type: application/json' \
-d '
{
  "name": "seasonal_promotion",
  "language": "en_US",
  "category": "MARKETING",
  "components": [
    {
      "type": "HEADER",
      "format": "TEXT",
      "text": "Our {{1}} is on!",
      "example": {
        "header_text": [
          "Summer Sale"
        ]
      }
    },
    {
      "type": "BODY",
      "text": "Shop now through {{1}} and use code {{2}} to get {{3}} off of all merchandise.",
      "example": {
        "body_text": [
          [
            "the end of August","25OFF","25%"
          ]
        ]
      }
    },
    {
      "type": "FOOTER",
      "text": "Use the buttons below to manage your marketing subscriptions"
    },
    {
      "type":"BUTTONS",
      "buttons": [
        {
          "type": "QUICK_REPLY",
          "text": "Unsubscribe from Promos"
        },
        {
          "type":"QUICK_REPLY",
          "text": "Unsubscribe from All"
        }
      ]
    }
  ]
}'

Exemplo de resposta

{
    "id": "572279198452421",
    "status": "PENDING",
    "category": "MARKETING"
}

Como enviar modelos

Use a API de Nuvem ou a API Local para enviar um modelo em uma mensagem.

Boas práticas para modelos de marketing

Botão para desativação de marketing

Recomendamos incluir um botão de resposta rápida em mensagens categorizadas como MARKETING para que os usuários possam cancelar com facilidade o recebimento de mensagens de marketing. Assim, os clientes terão a opção de desativar essas mensagens sem precisar bloquear sua empresa. Como resultado, será possível dimensionar o volume de mensagens com mais rapidez. Consulte este artigo para ver mais informações sobre os benefícios do botão para desativação em modelos de marketing.

Sua empresa deve realizar as ações necessárias com o objetivo de parar de enviar mensagens de marketing a clientes que desativaram o recebimento delas. Caso isso não seja feito, a taxa de bloqueio e a pontuação de qualidade serão impactadas negativamente.

Como obter modelos

Envie uma solicitação GET ao ponto de extremidade de Conta do WhatsApp Business > Modelos de mensagem para obter uma lista dos modelos de propriedade de uma conta do WhatsApp Business.

Sintaxe da solicitação

GET /<WHATSAPP_BUSINESS_ACCOUNT_ID>/message_templates
  ?fields=<FIELDS>
  &limit=<LIMIT>

Parâmetros da string de consulta

Espaço reservadoDescriçãoExemplo de valor

<FIELDS>

Lista separada por vírgulas

Opcional.


A lista de campos de modelo que você quer que sejam retornados.

name,status

<LIMIT>

Número inteiro

Opcional.


O número máximo de modelos que você quer que sejam retornados em cada página de resultados.

10

Exemplo de solicitação

curl 'https://graph.facebook.com/v19.0/102290129340398/message_templates?fields=name,status&limit=3' \
-H 'Authorization: Bearer EAAJB...'

Exemplo de resposta

{
  "data": [
    {
      "name": "seasonal_promotion_text_only",
      "status": "APPROVED",
      "id": "564750795574598"
    },
    {
      "name": "seasonal_promotion_video",
      "status": "PENDING",
      "id": "1252715608684590"
    },
    {
      "name": "seasonal_promotion_image_header",
      "status": "PENDING",
      "id": "1372429296936443"
    }
  ],
  "paging": {
    "cursors": {
      "before": "MAZDZD",
      "after": "MgZDZD"
    },
    "next": "https://graph.facebook.com/v19.0/102290129340398/message_templates?fields=name%2Cstatus&limit=3&after=MgZDZD"
  }
}

Exemplo de resposta (modelos rejeitados)

É possível fazer com que somente modelos com um valor de campo específico sejam retornados ao incluir o campo e o valor desejado na solicitação. Por exemplo, inclua status=REJECTED para obter somente modelos rejeitados.

curl 'https://graph.facebook.com/v19.0/104996122399160/message_templates?fields=name,status&status=REJECTED' \
-H 'Authorization: Bearer EAAJB...'

Exemplo de resposta

{
  "data": [
    {
      "name": "seasonal_promotion_text_only_v4",
      "status": "REJECTED",
      "id": "564750795574598"
    },
    {
      "name": "discount_qualifier",
      "status": "REJECTED",
      "id": "163917509772674"
    },
    {
      "name": "limited_time_offer_tuscan_getaway_2023",
      "status": "REJECTED",
      "id": "202389039167147"
    },
    {
      "name": "2023_mar_promo_2",
      "status": "REJECTED",
      "id": "1116034925734553"
    },
    {
      "name": "2023_mar_promo",
      "status": "REJECTED",
      "id": "952600926095321"
    }
  ]
}

Recuperar o namespace de um modelo

O namespace do modelo de mensagem é obrigatório para enviar mensagens com modelos.

Para receber esse namespace, envie uma solicitação GET para o ponto de extremidade /{whatsapp-business-account-ID} e inclua o campo message_template_namespace.

Exemplo de solicitação

Texto formatado para facilitar a leitura.
curl -i -X GET "https://graph.facebook.com/v19.0/{whatsapp-business-account-ID}
  ?fields=message_template_namespace
  &access_token={system-user-access-token}"

Se a solicitação for bem-sucedida, um objeto JSON com a identificação da conta do WhatsApp Business e o namespace será retornado:

{
    "id": "1972385232742141",
    "message_template_namespace": "12abcdefghijk_34lmnop" 
}

Editar modelos

Envie uma solicitação POST ao ponto de extremidade de modelo de mensagem do WhatsApp para editar um modelo. Também é possível editar um modelo manualmente usando o painel Gerenciador do WhatsApp > Ferramentas da conta > Modelos de mensagem.

Limitações

  • É possível editar somente os modelos com status APPROVED, REJECTED ou PAUSED.
  • É possível editar somente a category ou os components de um modelo.
  • Não é possível editar a category de um modelo aprovado.
  • Os modelos aprovados podem ser editados até 10 vezes dentro de 30 dias ou uma vez dentro de 24 horas. Não há restrição para o número de edições de modelos rejeitados ou pausados.
  • Depois de editar um modelo aprovado ou pausado, ele será aprovado automaticamente, a não ser que seja reprovado na análise do modelo.

Sintaxe da solicitação

POST /<WHATSAPP_MESSAGE_TEMPLATE_ID>

Corpo da publicação

{
  "category": "<CATEGORY>",
  "components": [<COMPONENTS>]
}

Propriedades

Espaço reservadoDescriçãoExemplo de valor

<CATEGORY>

String

Obrigatório se a propriedade dos componentes for omitida.


A categoria do modelo.

AUTHENTICATION

<COMPONENTS>

Matriz

Obrigatório se a propriedade da categoria for omitida.


Uma matriz de objetos de componentes do modelo.

Consulte Exemplo de solicitação (editando componentes) abaixo.

Exemplo de solicitação (editando componentes)

Exemplo de solicitação para alterar o corpo do texto de um modelo de conteúdo de marketing e utilidade para somente conteúdo de marketing:

curl 'https://graph.facebook.com/v19.0/564750795574598' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer EAAJB...' \
-d '
{
  "components": [
    {
      "type": "HEADER",
      "format": "TEXT",
      "text": "Our {{1}} is on!",
      "example": {
        "header_text": [
          "Spring Sale"
        ]
      }
    },
    {
      "type": "BODY",
      "text": "Shop now through {{1}} and use code {{2}} to get {{3}} off of all merchandise.",
      "example": {
        "body_text": [
          [
            "the end of April",
            "25OFF",
            "25%"
          ]
        ]
      }
    },
    {
      "type": "FOOTER",
      "text": "Use the buttons below to manage your marketing subscriptions"
    },
    {
      "type": "BUTTONS",
      "buttons": [
        {
          "type": "QUICK_REPLY",
          "text": "Unsubcribe from Promos"
        },
        {
          "type": "QUICK_REPLY",
          "text": "Unsubscribe from All"
        }
      ]
    }
  ]
}'

Exemplo de solicitação (editando somente a categoria)

Exemplo de solicitação para alterar a categoria de um modelo de UTILITY para MARKETING:

curl 'https://graph.facebook.com/v19.0/1252715608684590' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer EAAJB...' \
-d '
{
  "category": "MARKETING"
}'

Exemplo de resposta

Exemplo de resposta caso a solicitação seja bem-sucedida:

{
  "success": true
}

Excluir modelos

Use o ponto de extremidade WhatsApp Business Account > Message Templates para excluir um modelo por nome ou ID.

Observações

  • Se você excluir um modelo enviado em uma mensagem que ainda não foi entregue (por exemplo, porque o telefone do cliente está desligado), o status do modelo será definido como PENDING_DELETION, e tentaremos entregar a mensagem por 30 dias. Depois disso, você verá um erro de "Estrutura indisponível", e o cliente não receberá a mensagem.
  • Os nomes de modelos aprovados que foram excluídos não poderão ser usados novamente por 30 dias.

Exclusão por nome

Ao excluir um modelo por nome, você removerá todos os modelos com essa nomenclatura. Isso significa que modelos com o mesmo nome, mas idiomas diferentes, também serão excluídos.

Sintaxe da solicitação

DELETE /<WHATSAPP_BUSINESS_ACCOUNT_ID>/message_templates
  ?name=<NAME>

Exemplo de solicitação

curl -X DELETE 'https://graph.facebook.com/v16.0/102290129340398/message_templates?name=order_confirmation' \
-H 'Authorization: Bearer EAAJB...'

Exemplo de resposta

{
  "success": true
}

Exclusão por ID

Para excluir um modelo por ID, inclua a identificação junto com o nome do modelo na sua solicitação. Apenas o modelo com esse ID será excluído.

Sintaxe da solicitação

DELETE /<WHATSAPP_BUSINESS_ACCOUNT_ID>/message_templates
  ?hsm_id=<HSM_ID>,
  &name=<NAME>

Exemplo de solicitação

curl -X DELETE 'https://graph.facebook.com/v19.0/102290129340398/message_templates?hsm_id=1407680676729941&name=order_confirmation' \
-H 'Authorization: Bearer EAAJB...'

Exemplo de resposta

{
  "success": true
}

Próximas etapas