Componentes do modelo
Os modelos são feitos de quatro componentes principais, definidos no momento da criação: cabeçalho, corpo, rodapé e botões. Estes componentes são escolhidos com base nas necessidades dos seus negócios, sendo que o único componente obrigatório é o corpo.
Alguns componentes são compatíveis com variáveis, cujos valores você pode fornecer ao usar a API de envio de mensagem de notificação. Quando as variáveis forem usadas, será preciso incluir valores de exemplo para elas no momento da criação do modelo.
Cabeçalhos
Os cabeçalhos são componentes opcionais que aparecem na parte superior dos modelos de mensagem. Eles são compatíveis com texto, mídia (imagens, vídeos, documentos) e localizações. Os modelos podem ter apenas um componente de cabeçalho.
Cabeçalhos com texto
{
"type": "HEADER",
"format": "TEXT",
"text": "<TEXT>",
# Required if <TEXT> string contains variables
"example": {
"header_text": [
"<HEADER_TEXT>"
]
}
}
| Espaço reservado | Descrição | Exemplo de valor |
|---|---|---|
| HEADER_TEXT | Exemplo de cabeçalho com texto. | Summer Sale |
| TEXT | Texto a ser exibido no cabeçalho do modelo enviado. Compatível com 1 variável. Se a string contiver uma variável, você deverá incluir a propriedade example e um valor de exemplo. Pode ter, no máximo, 60 caracteres. | Our {{1}} is on! |
Exemplo
{
"type": "HEADER",
"format": "TEXT",
"text": "Our {{1}} is on!",
"example": {
"header_text": [
"Summer Sale"
]
}
}
Cabeçalhos com mídia
O cabeçalho com mídia pode ser uma imagem, um vídeo ou um documento, como um PDF. Todas as mídias devem ser carregadas com a API de envio de mídia. A sintaxe para definir um cabeçalho com mídia é a mesma para todos os tipos de mídia.
{
"type": "HEADER",
"format": "<FORMAT>",
"example": {
"header_handle": [
<HEADER_HANDLE>
]
}
}
| Espaço reservado | Descrição | Exemplo de valor |
|---|---|---|
| FORMAT | Indica o tipo de ativo de mídia. Defina como IMAGE, VIDEO ou DOCUMENT. | IMAGE |
| HEADER_HANDLE | Identificador do ativo de mídia carregado. Use a API de envio de mídia para gerar um identificador de ativo. | 4::aW... |
Exemplo
{
"type": "HEADER",
"format": "IMAGE",
"example": {
"header_handle": [
4::aW...
]
}
}
Cabeçalhos com localização
Os cabeçalhos com localização aparecem como mapas genéricos na parte superior do modelo e são úteis para rastreamento de pedidos, atualizações sobre entregas, embarque e desembarque no transporte por caronas, localização de lojas físicas etc. Quando o usuário toca neles, o app de mapas padrão do usuário é aberto e carrega a localização especificada. As localizações são especificadas quando você envia o modelo usando a API de envio de notificação.
Os cabeçalhos com localização só podem ser usados em modelos categorizados como UTILITY ou MARKETING. A localização em tempo real não é compatível.
{
"type": "HEADER",
"format": "LOCATION"
}
Exemplo
{
"type": "HEADER",
"format": "LOCATION"
}
2. Corpo
Os componentes do tipo corpo são somente de texto e são obrigatórios em todos os modelos. Os modelos podem ter apenas um componente de corpo.
{
"type": "BODY",
"text": "<TEXT>",
# Required if <TEXT> string contains variables
"example": {
"body_text": [
[
<BODY_TEXT>
]
]
}
}
| Espaço reservado | Descrição | Exemplo de valor |
|---|---|---|
| BODY_TEXT | Matriz de exemplos de strings. O número de strings deve corresponder ao número de variáveis incluídas na string. | "the end of August","25OFF","25%" |
| TEXT | String de texto. Compatível com mais de uma variável. Se a string contiver variáveis, você deverá incluir a propriedade example e valores de exemplo. Pode ter, no máximo, 1.024 caracteres. | Shop now through {{1}} and use code {{2}} to get {{3}} off of all merchandise. |
Exemplo
{
"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%"
]
]
}
}
3. Rodapé
Os rodapés são componentes opcionais somente de texto que são exibidos imediatamente após o componente corpo. Os modelos podem ter apenas um componente de rodapé.
{
"type": "FOOTER",
"text": "<TEXT>"
}
| Espaço reservado | Descrição | Exemplo de valor |
|---|---|---|
| TEXT | Texto a ser exibido no rodapé do modelo enviado. Pode ter, no máximo, 60 caracteres. | Use the buttons below to manage your marketing subscriptions |
Exemplo
{
"type": "FOOTER",
"text": "Use the buttons below to manage your marketing subscriptions"
}
4. Botões
Os botões são componentes interativos opcionais que executam ações específicas quando tocados. Os modelos podem combinar até 10 componentes de botão no total, embora haja limitações para botões do mesmo tipo, bem como para combinações. Essas limitações estão descritas abaixo.
Se o modelo tiver mais de três botões, dois deles aparecerão na mensagem entregue e os restantes serão substituídos por um botão Ver todas as opções. Os botões restantes são exibidos quando o usuário toca em Ver todas as opções.
Botões de número de telefone
Botões de número de telefone ligam para os telefones comerciais especificados quando o usuário do app clica neles. Os modelos podem ter apenas um componente de botão de número de telefone.
{
"type": "BUTTONS",
"buttons": [
{
"type": "PHONE_NUMBER",
"text": "<TEXT>",
"phone_number": "<PHONE_NUMBER>"
}
]
}
| Espaço reservado | Descrição | Exemplo de valor |
|---|---|---|
| PHONE_NUMBER | String alfanumérica. O número de telefone comercial a ser chamado (número de telefone de exibição) quando o usuário toca no botão. Pode ter, no máximo, 20 caracteres. | 15550051310 |
| TEXT | Texto da etiqueta do botão. Pode ter, no máximo, 25 caracteres. | Call |
Exemplo
{
"type": "BUTTONS",
"buttons": [
{
"type": "PHONE_NUMBER",
"text": "Call",
"phone_number": "15550051310"
}
]
}
Botões URL
Botões URL carregam a URL especificada no navegador da web padrão do dispositivo quando o usuário do app clica neles. Os modelos podem ter até dois botões URL.
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "<TEXT>",
"url": "<URL>",
# Required if <URL> contains a variable
"example": [
"<EXAMPLE>"
]
}
]
}
| Espaço reservado | Descrição | Exemplo de valor |
|---|---|---|
| EXAMPLE | URL do site. Compatível com 1 variável. Se usar uma variável, adicione um exemplo de propriedade de variável ao final da string da URL. A URL é carregada no navegador da web para celular padrão do dispositivo quando o cliente toca no botão. Pode ter, no máximo, 2.000 caracteres. | https://www.luckyshrub.com/shop?promo=summer2023 |
| TEXT | Texto da etiqueta do botão. Compatível com 1 variável. Se usar uma variável, você deverá incluir a propriedade "example" e um valor de exemplo. Pode ter, no máximo, 25 caracteres. | Shop Now |
| URL | URL do site que é carregada no navegador da web para celular padrão do dispositivo quando o usuário do app toca no botão. Compatível com 1 variável, adicionada ao final da string da URL. Pode ter, no máximo, 2.000 caracteres. | https://www.luckyshrub.com/shop?promo={{1}} |
Exemplo
{
"type": "BUTTONS",
"buttons": [
{
"type": "URL",
"text": "Shop Now",
"url": "https://www.luckyshrub.com/shop?promo={{1}}",
"example": [
"summer2023"
]
}
]
}
Botões de resposta rápida
Os botões de resposta rápida são botões personalizados somente de texto que, quando tocados pelo usuário, enviam imediatamente a você uma mensagem com a string especificada. Um caso de uso comum é um botão para o usuário cancelar com facilidade a assinatura de mensagens de marketing.
Os modelos podem ter até 10 botões de resposta rápida. Caso você use botões de resposta rápida com outros tipos de botão, será preciso organizá-los em dois grupos: botões de resposta rápida e outros botões. Se eles forem agrupados incorretamente, a API retornará um erro informando uma combinação inválida.
Exemplos de agrupamentos válidos:
- Resposta rápida, resposta rápida
- Resposta rápida, resposta rápida, URL, telefone
- URL, telefone, resposta rápida, resposta rápida
Exemplos de agrupamentos inválidos:
- Resposta rápida, URL, resposta rápida
- URL, resposta rápida, URL Se você enviar um modelo que tenha mais de um botão de resposta rápida, utilize a propriedade "index" para definir a ordem em que os botões aparecerão no modelo de mensagem.
{
"type":"BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "<TEXT>"
}
}
| Espaço reservado | Descrição | Exemplo de valor |
|---|---|---|
| TEXT | Texto da etiqueta do botão. Pode ter, no máximo, 25 caracteres. | Unsubscribe |
Exemplo Este exemplo inclui dois botões de resposta rápida.
{
"type":"BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Unsubscribe from Promos"
},
{
"type":"QUICK_REPLY",
"text": "Unsubscribe from All"
}
]
}
Botões de senha descartável
Os botões de senha descartável são um tipo especial de botão URL usado com modelos de autenticação. Consulte Modelos de autenticação.
Depois de ser criado, o type do botão de um modelo de autenticação será definido como URL. Para verificar essa configuração, solicite o campo type no modelo de autenticação recém-criado.
Exemplos de solicitação
Promoção sazonal
Um exemplo de solicitação para criar um modelo de marketing com os seguintes componentes:
- Um cabeçalho com texto com uma variável e um valor de exemplo
- Um corpo com texto com variáveis e valores de exemplo
- Um rodapé com texto
- Dois botões de resposta rápida
curl -L 'https://api.whatsapp.serpro.gov.br/waba/{wabaId}/v2/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" } ] } ] }'
Oferta por tempo limitado
Um exemplo de solicitação para criar um modelo de marketing com os seguintes componentes:
- Um cabeçalho com imagem com um valor de exemplo
- Um corpo com texto com variáveis e valores de exemplo
- Um rodapé com texto
- Um botão de número de telefone
- Um botão URL
curl -L 'https://api.whatsapp.serpro.gov.br/waba/{wabaId}/v2/templates' \ -H 'Authorization: Bearer EAAJB...' \ -H 'Content-Type: application/json' \ -d ' { "name": "limited_time_offer_tuscan_getaway_2023", "language": "en_US", "category": "MARKETING", "components": [ { "type": "HEADER", "format": "IMAGE", "example": { "header_handle": [ "4::aW..." ] } }, { "type": "BODY", "text": "Hi {{1}}! For a limited time only you can get our {{2}} for as low as {{3}}. Tap the Offer Details button for more information.", "example": { "body_text": [ [ "Pablo","Tuscan Getaway package","800" ] ] } }, { "type": "FOOTER", "text": "Offer valid until May 31, 2023" }, { "type": "BUTTONS", "buttons": [ { "type": "PHONE_NUMBER", "text": "Call", "phone_number": "15550051310" }, { "type": "URL", "text": "Shop Now", "url": "https://www.luckyshrub.com/shop?promo={{1}}", "example": [ "summer2023" ] } ] } ] }'
Confirmação de pedido
Um exemplo de solicitação para criar um modelo de utilidade com os seguintes componentes:
- Um cabeçalho com documento com um valor de exemplo
- Um corpo com texto com variáveis e valores de exemplo
- Um botão de número de telefone
- Um botão URL
curl -L 'https://api.whatsapp.serpro.gov.br/waba/{wabaId}/v2/templates' \ -H 'Authorization: Bearer EAAJB...' \ -H 'Content-Type: application/json' \ -d ' { "name": "order_confirmation", "language": "en_US", "category": "UTILITY", "components": [ { "type": "HEADER", "format": "DOCUMENT", "example": { "header_handle": [ "4::YX..." ] } }, { "type": "BODY", "text": "Thank you for your order, {{1}}! Your order number is {{2}}. Tap the PDF linked above to view your receipt. 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" } ] } ] }'
Atualização sobre entrega do pedido
Um exemplo de solicitação para criar um modelo de utilidade com os seguintes componentes:
- Um cabeçalho com localização
- Um corpo com texto com variáveis e valores de exemplo
- Um rodapé
- Um botão de resposta rápida
curl 'https://api.whatsapp.serpro.gov.br/waba/{wabaId}/v2/templates' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer EAAJB...' \ -d ' { "name": "order_delivery_update", "language": "en_US", "category": "UTILITY", "components": [ { "type": "HEADER", "format": "LOCATION" }, { "type": "BODY", "text": "Good news {{1}}! Your order #{{2}} is on its way to the location above. Thank you for your order!", "example": { "body_text": [ [ "Mark", "566701" ] ] } }, { "type": "FOOTER", "text": "To stop receiving delivery updates, tap the button below." }, { "type":"BUTTONS", "buttons": [ { "type": "QUICK_REPLY", "text": "Stop Delivery Updates" } ] } ] }'