Pular para o conteúdo principal
POST
/
v1
/
bots
/
{botId}
/
templates
Crear Plantilla
curl --request POST \
  --url https://api.jelou.ai/v1/bots/{botId}/templates \
  --header 'Authorization: Basic <encoded-value>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "category": "UTILITY",
  "language": "<string>",
  "elementName": "<string>",
  "template": "<string>",
  "isVisible": true,
  "params": [
    {
      "param": "<string>",
      "label": "<string>",
      "example": "<string>"
    }
  ],
  "paramsNumber": 123,
  "displayName": "<string>",
  "type": "HSM",
  "mediaUrl": "<string>",
  "interactiveAction": "NONE",
  "buttons": [
    {
      "text": "<string>",
      "type": "QUICK_REPLY",
      "url": "<string>",
      "phone_number": "<string>",
      "example": "<string>"
    }
  ],
  "header": "<string>",
  "exampleHeader": "<string>",
  "headerParams": [
    {}
  ],
  "example": "<string>",
  "extraSettings": {
    "addSecurityRecommendation": true,
    "codeExpirationMinutes": 45,
    "allowChangeCategory": true
  }
}
'
{
  "message": [
    "<string>"
  ],
  "status": "<string>",
  "data": {}
}
Crie templates HSM personalizados com parâmetros posicionais, botões interativos e mídia. Opcionalmente, envie o template diretamente ao WhatsApp para aprovação.
POST /v1/bots/{botId}/templates
Templates devem ser aprovados pela equipe do WhatsApp antes de poderem ser usados. Siga as diretrizes da Meta para evitar rejeições.

Parâmetros de Path

PropriedadeTipoDescrição
botIdstringID único do bot. Exemplo: 123456789

Parâmetros de Query

PropriedadeTipoDescrição
sendToAprovebooleanDefine se o template deve ser enviado ao WhatsApp para aprovação.

Corpo da Requisição

PropriedadeTipoDescrição
categorystringCategoria do template HSM. Valores: UTILITY, MARKETING, AUTHENTICATION
languagestringIdioma do template.
isVisiblebooleanDefine se o template deve ser exibido para os operadores.
paramsarrayEstrutura de parâmetros. Para a categoria de autenticação, a Meta restringiu a um parâmetro.
paramsNumbernumberNúmero de parâmetros. Para a categoria de autenticação, a Meta restringiu a um parâmetro.
elementNamestringIdentificador único do template. Pode conter apenas letras minúsculas, underscores (_) e números.
displayNamestringNome de exibição do template.
templatestringCorpo do template. Para a categoria de autenticação, a Meta restringiu o conteúdo.
typestringTipo de HSM. Valores: HSM, IMAGE, VIDEO, DOCUMENT
mediaUrlstringURL da mídia. Obrigatório quando o tipo de HSM é IMAGE, VIDEO, DOCUMENT. Não aplicável para a categoria de autenticação.
interactiveActionstringAção interativa do HSM. Valores: NONE, CALL_TO_ACTION, QUICK_REPLY, OTP
buttonsarrayEstrutura de botões. Obrigatório quando a ação interativa do HSM é CALL_TO_ACTION, QUICK_REPLY ou OTP.
headerstringCabeçalho do template. Aplicável apenas para templates do tipo texto. Não aplicável para a categoria de autenticação e tem limite de 60 caracteres.
exampleHeaderstringExemplo de cabeçalho. Obrigatório apenas se o template tiver um cabeçalho.
headerParamsarrayEstrutura de parâmetros. O cabeçalho suporta no máximo um parâmetro.
examplestringExemplo do template. Se o template tiver um parâmetro, ele deve ser substituído por um exemplo.
extraSettingsobjectConfigurações opcionais para o template.

Exemplos de Requisição

curl --request POST \
  --url 'https://api.jelou.ai/v1/bots/BOT_ID/templates?sendToAprove=true' \
  --header 'Authorization: Basic {{Base64EncodedUsername:Password}}' \
  --header 'Content-Type: application/json' \
  --data '{
    "displayName": "text_template_utility",
    "template": "Thank you for your order, {{1}}! Your confirmation number is {{2}}. If you have any questions, contact support.",
    "example": "Thank you for your order, Maria! Your confirmation number is 71936. If you have any questions, contact support.",
    "elementName": "text_template_utility",
    "params": [
      {"param": "1", "label": "customer", "example": "Maria"},
      {"param": "2", "label": "order", "example": "71936"}
    ],
    "paramsNumber": 2,
    "type": "HSM",
    "language": "en",
    "category": "UTILITY",
    "interactiveAction": "NONE"
  }'
curl --request POST \
  --url 'https://api.jelou.ai/v1/bots/BOT_ID/templates?sendToAprove=true' \
  --header 'Authorization: Basic {{Base64EncodedUsername:Password}}' \
  --header 'Content-Type: application/json' \
  --data '{
    "displayName": "template_quick_reply",
    "template": "Thank you for your order, {{1}}! Your confirmation number is {{2}}. Use the buttons to contact us.",
    "example": "Thank you for your order, Maria! Your confirmation number is 57893. Use the buttons to contact us.",
    "elementName": "template_quick_reply",
    "params": [
      {"param": "1", "label": "customer", "example": "Maria"},
      {"param": "2", "label": "order", "example": "57893"}
    ],
    "paramsNumber": 2,
    "type": "HSM",
    "language": "en",
    "category": "UTILITY",
    "interactiveAction": "QUICK_REPLY",
    "buttons": [
      {"text": "Contact Support", "type": "QUICK_REPLY"},
      {"text": "Contact Sales", "type": "QUICK_REPLY"}
    ]
  }'
curl --request POST \
  --url 'https://api.jelou.ai/v1/bots/BOT_ID/templates?sendToAprove=true' \
  --header 'Authorization: Basic {{Base64EncodedUsername:Password}}' \
  --header 'Content-Type: application/json' \
  --data '{
    "displayName": "template_call_action",
    "template": "Thank you for your order, {{1}}! Your confirmation number is {{2}}. Use the buttons to contact us.",
    "example": "Thank you for your order, Maria! Your confirmation number is 67996. Use the buttons to contact us.",
    "elementName": "template_call_action",
    "params": [
      {"param": "1", "label": "customer", "example": "Maria"},
      {"param": "2", "label": "order", "example": "67996"}
    ],
    "paramsNumber": 2,
    "type": "HSM",
    "language": "en",
    "category": "UTILITY",
    "interactiveAction": "CALL_TO_ACTION",
    "buttons": [
      {"text": "Contact Support", "type": "URL", "url": "https://apps.jelou.ai", "example": "https://apps.jelou.ai"},
      {"text": "Call", "type": "PHONE_NUMBER", "phone_number": "+PHONE_NUMBER"}
    ]
  }'
curl --request POST \
  --url 'https://api.jelou.ai/v1/bots/BOT_ID/templates?sendToAprove=true' \
  --header 'Authorization: Basic {{Base64EncodedUsername:Password}}' \
  --header 'Content-Type: application/json' \
  --data '{
    "displayName": "image_template",
    "template": "Hello {{1}}. We invite you to check out our promotions.",
    "example": "Hello Maria. We invite you to check out our promotions.",
    "elementName": "image_template",
    "params": [
      {"param": "1", "label": "customer", "example": "Maria"}
    ],
    "paramsNumber": 1,
    "type": "IMAGE",
    "language": "en",
    "category": "MARKETING",
    "mediaUrl": "https://cdn.example.com/image.jpeg",
    "interactiveAction": "NONE"
  }'
curl --request POST \
  --url 'https://api.jelou.ai/v1/bots/BOT_ID/templates?sendToAprove=true' \
  --header 'Authorization: Basic {{Base64EncodedUsername:Password}}' \
  --header 'Content-Type: application/json' \
  --data '{
    "displayName": "document_template",
    "template": "Hello {{1}}. Please find your requested document attached.",
    "example": "Hello Maria. Please find your requested document attached.",
    "elementName": "document_template",
    "params": [
      {"param": "1", "label": "customer", "example": "Maria"}
    ],
    "paramsNumber": 1,
    "type": "DOCUMENT",
    "language": "en",
    "category": "MARKETING",
    "mediaUrl": "https://cdn.example.com/document.pdf",
    "interactiveAction": "NONE"
  }'
curl --request POST \
  --url 'https://api.jelou.ai/v1/bots/BOT_ID/templates?sendToAprove=true' \
  --header 'Authorization: Basic {{Base64EncodedUsername:Password}}' \
  --header 'Content-Type: application/json' \
  --data '{
    "displayName": "video_template",
    "template": "Hello {{1}}. Watch our new video.",
    "example": "Hello Maria. Watch our new video.",
    "elementName": "video_template",
    "params": [
      {"param": "1", "label": "customer", "example": "Maria"}
    ],
    "paramsNumber": 1,
    "type": "VIDEO",
    "language": "en",
    "category": "MARKETING",
    "mediaUrl": "https://cdn.example.com/video.mp4",
    "interactiveAction": "NONE"
  }'

Respostas

{
  "message": ["Template has been created."],
  "status": "success",
  "data": {
    "template": "Hello! We are *Jelou*. \nWelcome _{{1}}_. Soon {{2}} from the team will reach out to you.",
    "displayName": "Welcome",
    "elementName": "test_hsm_api",
    "params": [
      {"label": "Customer name", "param": "1"},
      {"label": "Agent name", "param": "2"}
    ],
    "paramsNumber": 2,
    "isVisible": false,
    "language": "EN",
    "createdAt": "2021-01-28T15:08:38.492Z",
    "updatedAt": "2021-01-28T15:08:38.492Z",
    "botId": "BOT_ID",
    "companyId": 100,
    "status": "APPROVED"
  }
}
{
  "message": ["Template name already exists"],
  "status": "failed"
}
{
  "message": "Authentication failed"
}
{
  "message": ["The Bot could not be found at the moment."],
  "statusMessage": "failed",
  "error": {
    "code": "E1019",
    "key": "BOT_NOT_FOUND"
  }
}
O campo status na resposta indica se o seu template foi aprovado pelo WhatsApp.

Idioma

O idioma suportado pelo WhatsApp está detalhado na página oficial. Por favor, revise cuidadosamente no seguinte link.

Restrições de Conteúdo (Categoria de Autenticação)

A Meta restringiu o conteúdo para a categoria de autenticação. O conteúdo será de acordo com o idioma do template. A Meta está restrita a um único parâmetro.

Idioma

IdiomaCódigoConteúdo
Inglêsen{{1}} is your verification code.
Português (BR)pt_BRSeu código de verificação é {{1}}.
EspanholesTu código de verificación es {{1}}.

Estrutura de Parâmetros

Use a seguinte estrutura no campo params ao criar um template:
[
  {"label": "Customer name", "param": "1"},
  {"label": "Order number", "param": "2"}
]

Estrutura de Botões

Use a seguinte estrutura no campo buttons quando as ações interativas forem CALL_TO_ACTION, QUICK_REPLY ou OTP.

QUICK_REPLY

Usado para obter respostas rápidas. É um array de objetos e pode ter no máximo 3 botões.
PropriedadeDescrição
textTexto do botão; este valor não pode ser atualizado.
typeTipo do botão. Valor: QUICK_REPLY
[
  {"text": "More information", "type": "QUICK_REPLY"},
  {"text": "Talk to an operator", "type": "QUICK_REPLY"},
  {"text": "Sales", "type": "QUICK_REPLY"}
]

CALL_TO_ACTION

Usado para oferecer uma chamada para ação. Pode ter no máximo 2 botões e no máximo 1 botão de cada tipo.
PropriedadeDescrição
textTexto do botão; este valor não pode ser atualizado.
typeTipo do botão. Valores: PHONE_NUMBER, URL
phone_numberNúmero de telefone do botão.
urlURL do botão.
exampleExemplo de URL. Obrigatório quando o tipo de botão é URL.
[
  {"text": "Sales", "phone_number": "+PHONE_NUMBER", "type": "PHONE_NUMBER"},
  {"type": "URL", "text": "View site", "url": "https://apps.jelou.ai/{{1}}", "example": "https://apps.jelou.ai/offers"}
]

OTP

Usado para obter uma “Senha de Uso Único”. Pode ter no máximo 1 botão.
PropriedadeDescrição
textTexto do botão; este valor não pode ser atualizado.
typeTipo do botão. Valor: OTP
[
  {"text": "COPY CODE", "type": "OTP"}
]

Estrutura de extraSettings

PropriedadeTipoDescrição
addSecurityRecommendationbooleanAdiciona uma mensagem de segurança adicional em templates de autenticação.
codeExpirationMinutesnumberAdiciona uma mensagem de rodapé com o tempo de expiração do código. Valores entre 1 e 90 minutos.
allowChangeCategorybooleanPermite que a Meta atualize a categoria do template se necessário.

Autorizações

Authorization
string
header
obrigatório

Basic authentication using Base64 encoded clientId:clientSecret

Parâmetros de caminho

botId
string
obrigatório

Parâmetros de consulta

sendToAprove
boolean

Corpo

application/json
category
enum<string>
obrigatório
Opções disponíveis:
UTILITY,
MARKETING,
AUTHENTICATION
language
string
obrigatório
elementName
string
obrigatório
Pattern: ^[a-z0-9_]+$
template
string
obrigatório
isVisible
boolean
params
object[]
paramsNumber
integer
displayName
string
type
enum<string>
Opções disponíveis:
HSM,
IMAGE,
VIDEO,
DOCUMENT
mediaUrl
string<uri>
interactiveAction
enum<string>
Opções disponíveis:
NONE,
CALL_TO_ACTION,
QUICK_REPLY,
OTP
buttons
object[]
header
string
Maximum string length: 60
exampleHeader
string
headerParams
object[]
example
string
extraSettings
object

Resposta

Plantilla creada exitosamente

message
string[]
status
string
data
object