Webhook
Quando o cliente enviar uma mensagem a você, o cliente da API do WhatsApp Business enviará uma notificação de solicitação HTTP POST à URL do Webhook com os detalhes que estão descritos neste manual.
Webhooks são retornos de chamada de HTTP definidos pelo usuário que são acionados por eventos específicos. Sempre que ocorrer um evento de acionamento, o cliente da API do WhatsApp Business verá o evento, coletará os dados e imediatamente enviará uma notificação (solicitação HTTP) ao URL do WhatsApp especificado nas configurações do aplicativo atualizando o status das mensagens enviadas ou indicando quando você receber uma mensagem.
É importante que seu Webhook retorne uma resposta HTTPS 200 OK às notificações. Caso contrário, o cliente da API do WhatsApp Business considerará essa notificação uma falha e tentará novamente após um atraso.

Definir configurações de notificações

webhooks: forneça o URL para seu Webhook. OBRIGATÓRIO quando você estiver usando Webhooks. Se a URL do Webhook não estiver definida, os retornos de chamada serão removidos.
Nome
conteúdo do objeto
messages
Notificações de mensagens de entrada
statuses
Atualizações de status das mensagens
errors
Erros sérios fora da banda
Sempre que possível, os nomes serão mantidos constantes nas funções. (Por exemplo, todos os registros de data e hora são denominados timestamp.

Formato do Webhook de notificações

Todos os campos possíveis do Webhook de notificações são mostrados abaixo.
Exemplo
1
POST / { "contacts": [ { "profile": { "name": "sender-profile-name" }, "wa_id": "wa-id-of-contact" } ], "messages": [ "context": { "from": "sender-wa-id-of-context-message", "group_id": "group-id-of-context-message", "id": "message-id-of-context-message", "mentions": [ "wa-id1", "wa-id2" ] }, "from": "sender-wa-id", "group_id": "group-id", "id": "message-id", "timestamp": "message-timestamp", "type": "audio | document | image | location | system | text | video | voice", # Se houver algum erro, o campo de erros (matriz) estará presente. # O campo de erros pode ser retornado como parte de qualquer evento de retorno de chamada. "errors": [ { ... } ], "audio": { "file": "absolute-filepath-on-coreapp", "id": "media-id", "link": "link-to-audio-file", "mime_type": "media-mime-type", "sha256": "checksum" } "document": { "file": "absolute-filepath-on-coreapp", "id": "media-id", "link": "link-to-document-file", "mime_type": "media-mime-type", "sha256": "checksum", "caption": "document-caption" } "image": { "file": "absolute-filepath-on-coreapp", "id": "media-id", "link": "link-to-image-file", "mime_type": "media-mime-type", "sha256": "checksum", "caption": "image-caption" } "location": { "address": "1 Hacker Way, Menlo Park, CA, 94025", "latitude": latitude, "longitude": longitude, "name": "location-name" } "system": { "body": "system-message-content" } "text": { "body": "text-message-content" } "video": { "file": "absolute-filepath-on-coreapp", "id": "media-id", "link": "link-to-video-file", "mime_type": "media-mime-type", "sha256": "checksum" } "voice": { "file": "absolute-filepath-on-coreapp", "id": "media-id", "link": "link-to-audio-file", "mime_type": "media-mime-type", "sha256": "checksum" } ] }
Copied!

Erros de notificações

Quando houver erros fora da banda que ocorrerem na operação normal do aplicativo, a matriz errors fornecerá uma descrição do erro. Esse tipo de erro pode ser provocado por erros de conectividade de rede temporários, credenciais inválidas, controladores de gerenciamento com status indisponível e assim por diante. Se você receber um erro, consulte Mensagens de erro e status para obter mais informações.
Exemplo
1
POST / { "errors": [ { "code": <error-code>, "title": "<error-title>", "details": "<error-description>", "href": "location for error detail" }, { ... } ] }
Copied!
O objeto errors O objeto errors contém os seguintes parâmetros:
Nome do campo
Descrição
Tipo
code
Código de erro
Numérico
title
Título do erro
Cadeia de caracteres
details
Opcional. Detalhes do erro fornecidos, se disponíveis/aplicáveis
Cadeia de caracteres
href
Opcional. Detalhes da localização do erro.
Cadeia de caracteres

Notificações de mensagens de entrada

Você recebe uma notificação quando sua empresa recebe uma mensagem. A seção do objeto messages abaixo apresenta todas as informações que podem ser recebidas sobre uma mensagem de entrada.

Exemplo: Mensagem recebida Text

1
{
2
"contacts": [ {
3
"profile": {
4
"name": "Kerry Fisher"
5
},
6
"wa_id": "16315551234"
7
} ],
8
"messages":[{
9
"from": "16315551234",
10
"id": "ABGGFlA5FpafAgo6tHcNmNjXmuSf",
11
"timestamp": "1518694235",
12
"text": {
13
"body": "Hello this is an answer"
14
},
15
"type": "text"
16
}]
17
}
Copied!

Exemplo: Mensagem de localização estática recebida

1
{
2
"contacts": [ {
3
"profile": {
4
"name": "Kerry Fisher"
5
},
6
"wa_id": "16315551234"
7
} ],
8
"messages":[{
9
"from":"16315551234",
10
"id":"ABGGFlA5FpafAgo6tHcNmNjXmuSf",
11
"location":{
12
"address":"Main Street Beach, Santa Cruz, CA",
13
"latitude":38.9806263495,
14
"longitude":-131.9428612257,
15
"name":"Main Street Beach",
16
"url":"https://foursquare.com/v/4d7031d35b5df7744"},
17
"timestamp":"1521497875",
18
"type":"location"
19
}]
20
}
Copied!

Exemplo: Mensagem com contatos recebida

1
{
2
"contacts": [ {
3
"profile": {
4
"name": "Kerry Fisher"
5
},
6
"wa_id": "16315551234"
7
} ],
8
"messages": [
9
{
10
"contacts": [
11
{
12
"addresses": [
13
{
14
"city": "Menlo Park",
15
"country": "United States",
16
"country_code": "us",
17
"state": "CA",
18
"street": "1 Hacker Way",
19
"type": "WORK",
20
"zip": "94025"
21
}
22
],
23
"birthday": "2012-08-18",
24
"contact_image": "/9j/4AAQSkZJRgABAQEAZABkAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCABgAGADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD1NLloxyc0j3bNUHDGgoCMVNkBbhutvVqc9yGHNZ3kOW4Wn/ZnQZzSsgLLXAA61Xn1O2t4zLcyJHGvV3OAKMADmvOviLq9m11a2bO/l2xLzoqnliF2j9f1NTLRXHGHM7Hb2vivSL+8e0s7yKaVeyHg/Q9D+FXWuHPOzivFodT0WZkeF44bheVdE2EH+Rr2+zuVuNPt7gqh86JX+TkcjPFTCdy6lNQ2dyr5+G5WpRe4HTFWWSOQfwioZbCIn5XNaXRmQPegjmqrKLh+...",
25
"emails": [
26
{
27
"email": "[email protected]",
28
"type": "WORK"
29
}
30
],
31
"ims": [
32
{
33
"service": "AIM",
34
"user_id": "kfish"
35
}
36
],
37
"name": {
38
"first_name": "Kerry",
39
"formatted_name": "Kerry Fisher",
40
"last_name": "Fisher"
41
},
42
"org": {
43
"company": "Facebook"
44
},
45
"phones": [
46
{
47
"phone": "+1 (940) 555-1234",
48
"type": "CELL"
49
},
50
{
51
"phone": "+1 (650) 555-1234",
52
"type": "WORK",
53
"wa_id": "16505551234"
54
}
55
],
56
"urls": [
57
{
58
"url": "https://www.facebook.com",
59
"type": "WORK"
60
}
61
]
62
}
63
],
64
"from": "16505551234",
65
"id": "ABGGFlA4dSRvAgo6C4Z53hMh1ugR",
66
"timestamp": "1537248012",
67
"type": "contacts"
68
}
69
]
70
}
Copied!

Notificações de mensagens de mídia de entrada

Quando a mensagem com mídia é recebida, o cliente da API do WhatsApp Business baixa a mídia. Uma notificação é enviada ao seu Webhook quando a mídia é baixada. Essa mensagem contém informações que identificam o objeto de mídia e possibilitam que você encontre e recupere o objeto. Use o ponto de extremidade de mídia com o id da mídia para recuperá-la.

Exemplo: Mensagem com imagem recebida

1
{
2
"messages":[{
3
"from":"16315551234",
4
"id":"ABGGFlA5FpafAgo6tHcNmNjXmuSf",
5
"image":{
6
"file":"/usr/local/wamedia/shared/b1cf38-8734-4ad3-b4a1-ef0c10d0d683",
7
"id":"b1c68f38-8734-4ad3-b4a1-ef0c10d683",
8
"mime_type":"image/jpeg",
9
"sha256":"29ed500fa64eb55fc19dc4124acb300e5dcc54a0f822a301ae99944db"
10
"caption": "Check out my new phone!"},
11
"timestamp":"1521497954",
12
"type":"image"
13
}]
14
}
Copied!

Exemplo: Mensagem com documento recebida

1
{
2
"messages":[{
3
"from":"16315551234",
4
"id":"ABGGFlA5FpafAgo6tHcNmNjXmuSf",
5
"timestamp":"1522189546",
6
"type":"document",
7
"document":{
8
"caption":"80skaraokesonglistartist",
9
"file":"/usr/local/wamedia/shared/fc233119-733f-49c-bcbd-b2f68f798e33",
10
"id":"fc233119-733f-49c-bcbd-b2f68f798e33",
11
"mime_type":"application/pdf",
12
"sha256":"3b11fa6ef2bde1dd14726e09d3edaf782120919d06f6484f32d5d5caa4b8e"}
13
}]
14
}
Copied!

Exemplo: Mensagem com mensagem de voz recebida

1
{
2
"messages":[{
3
"from": "16315551234",
4
"id": "ABGGFlA5FpafAgo6tHcNmNjXmuSf",
5
"timestamp": "1521827831",
6
"type": "voice",
7
"voice": {
8
"file": "/usr/local/wamedia/shared/463e/b7ec/ff4e4d9bb1101879cbd411b2",
9
"id": "463eb7ec-ff4e-4d9b-b110-1879cbd411b2",
10
"mime_type": "audio/ogg; codecs=opus",
11
"sha256": "fa9e1807d936b7cebe63654ea3a7912b1fa9479220258d823590521ef53b0710"}
12
}]
13
}
Copied!

Exemplo: Mensagem com figurinha recebida

1
{
2
"messages":[{
3
"from": "16315551234",
4
"id": "ABGGFlA5FpafAgo6tHcNmNjXmuSf",
5
"timestamp": "1521827831",
6
"type": "sticker",
7
"sticker": {
8
"id": "b1c68f38-8734-4ad3-b4a1-ef0c10d683",
9
"metadata": {
10
"sticker-pack-id": "463eb7ec-ff4e-4d9b-b110-1879cbd411b2",
11
"sticker-pack-name" : "Happy New Year",
12
"sticker-pack-publisher" : "Kerry Fisher",
13
"emojis": ["🐥", "😃"],
14
"ios-app-store-link" : "https://apps.apple.com/app/id3133333",
15
"android-app-store-link" : "https://play.google.com/store/apps/details?id=com.example",
16
"is-first-party-sticker" : 0 | 1 # integer
17
},
18
"mime_type": "image/webp",
19
"sha256": "fa9e1807d936b7cebe63654ea3a7912b1fa9479220258d823590521ef53b0710"
20
}
21
}]
22
}
Copied!

Respostas de entrada a mensagens enviadas

Os usuários podem responder a uma mensagem específica no WhatsApp. Para que a empresa entenda o contexto da resposta a uma mensagem, incluímos o objeto context. Esse objeto context fornece o id da mensagem à qual o cliente respondeu e o ID do WhatsApp do remetente da mensagem original.

Exemplo: Cliente respondeu à sua mensagem

1
{
2
"contacts": [ {
3
"profile": {
4
"name": "Kerry Fisher"
5
},
6
"wa_id": "16315551234"
7
} ],
8
"messages":[{
9
"context":{
10
"from":"16315558011",
11
"id":"ABGGFlA5FpafAgo6tHcNmNjXmuSf"
12
},
13
"from":"16315551234",
14
"id":"gBGGFlA5FpafAgkOuJbRq54qwbM",
15
"text":{"body":"Yes, count me in!"},
16
"timestamp":"1521499915",
17
"type":"text"
18
}]
19
}
Copied!

Mensagens de entrada do sistema

As mensagens de sistema são geradas quando algum evento acontece, por exemplo, um usuário adicionou/removeu outro usuário ou saiu de um grupo etc. Veja a seção do objeto system a seguir para mais informações.
1
{
2
"messages": [
3
{
4
"from": "16506448470",
5
"group_id": "16315558032-1530825318",
6
"id": "ACELFjFVWAMqFTCCUxgDM3N5cy0xNjMxNTU1ODAzMi0xNTMwODI1MzE4QGcudXMtMTUzMDgyNTU4NzI5OS1hZGQtMBGGFlBkSEcP",
7
"system": {
8
"body": "+1 (650) 387-5246 added +1 (650) 644-8470",
9
"group_id": "16315558032-1530825318",
10
"operator": "16503875246",
11
"type": "group_user_joined",
12
"users": [
13
"16506448470"
14
]
15
},
16
"timestamp": "1530825587",
17
"type": "system"
18
}
19
]
20
}
Copied!
Por exemplo, as mensagens do sistema a seguir foram recebidas (1) quando um usuário entrou em um grupo e (2) quando um administrador adicionou um ícone ao grupo.
1
Message received: {"messages":[{"from":"12345678901","group_id":"16315558011-1521728362","id":"gBEGkYiEB1VXAglK1ZEqA1YKPrU","system":{"body":"‎‎+1 (234) 567-8901 was added‎"},"timestamp":"1521739514","type":"system"}]}
2
3
Message received: {"messages":[{"from":"16315558011","group_id":"16315558011-1521728362","id":"ABGGFlA5FpafAgo6tHcNmNjXmuSf","system":{"body":"‎‎+1 (631) 555-8011 changed this group's icon‎"},"timestamp":"1521745780","type":"system"}]}
Copied!

Documentação oficial WhatsApp Business API

A Positus segue os padrões de API exatamente igual ao padrão oficial do Facebook / WhatsApp. A documentação completa e atualizada pode ser encontrada no link abaixo:
Last modified 1yr ago