ATENÇÃO
O PlugMessage não aceita webhooks que não sejam HTTPS
Atualizando Webhook
Para atualizar a rota do webhook é possível fazer isso pela API ou pelo painel administrativo.
API
/update-webhook-delivery
Tipo | URL |
PUT |
https://api.plugzapi.com.br/instances/SUA_INSTANCIA/token/SEU_TOKEN/update-webhook-received |
Request Body:
{
"value": "https://endereco-do-seu-sistema.com.br/instancia/SUA_INSTANCIA/receive"
}
Painel Administrativo
Atributos
Obrigatórios
Atributos | Tipo | Descrição |
---|---|---|
phone | string | Número de telefone, ou do grupo que enviou a mensagem. |
participantPhone | string | Número de telefone do membro do grupo que enviou a mensagem. |
messageId | string | Idetificador da mensagem na conversa. |
status | string | Status que a mensagem se encontra no momento do envio (PENDING, SENT, RECEIVED, READ ou PLAYED). |
referenceMessageId | string | Referência a mensagem que foi respondida para o caso da mensagem recebida ser uma resposta a uma mensagem da conversa. |
momment | integer | Momento em que a mensagem foi recebida ou do erro. |
type | string | Tipo do evento da instância, nesse caso será "ReceivedCallBack". |
photo | string | Url da foto do usuário que enviou a mensagem. |
text.message | string | Texto da mensagem. |
image.caption | string | Leganda da foto. |
image.imageUrl | string | Url da foto. |
image.thumbnailUrl | string | Url da thumbnail da foto. |
image.mimeType | string | MimeType da imagem. |
audio.mimeType | string | MimeType do áudio. |
audio.audioUrl | string | Url do áudio. |
video.caption | string | Legenda do vídeo. |
video.videoUrl | string | Url do vídeo. |
video.mimeType | string | MimeType do vídeo. |
contact.displayName | string | Nome do contato. |
contact.vCard | string | VCard contendo as informações do contato. |
document.mimeType | string | MimeType do documento. |
document.fileName | string | Nome do documento. |
document.title | string | Título do documento. |
document.pageCount | string | Número de páginas do documento. |
document.thumbnailUrl | string | Url da thumbnail do documento. |
document.documentUrl | string | Url do documento. |
location.thumbnailUrl | string | Url da thumbnail da localização. |
location.longitude | float | Longitude da localização. |
location.latitude | float | Latitude da localização. |
location.url | string | Url da localização. |
location.name | string | Nome da localização. |
location.address | string | Endereço da localização. |
sticker.mimeType | string | MimeType do sticker. |
sticker.stickerUrl | string | Url do sticker. |
Response
200
Exemplo de retorno de texto
{
"isStatusReply": false,
"senderLid": "81896604192873@lid",
"connectedPhone": "554499999999",
"waitingMessage": false,
"isEdit": false,
"isGroup": false,
"isNewsletter": false,
"instanceId": "A20DA9C0183A2D35A260F53F5D2B9244",
"messageId": "A20DA9C0183A2D35A260F53F5D2B9244",
"phone": "5544999999999",
"fromMe": false,
"momment": 1632228638000,
"status": "RECEIVED",
"chatName": "name",
"senderPhoto": "https://",
"senderName": "name",
"participantPhone": null,
"participantLid": null,
"photo": "https://",
"broadcast": false,
"type": "ReceivedCallback",
"text": {
"message": "teste",
"descritpion": "(opcional) em caso da mensagem possuir uma descrição inserida pelo WhatsApp",
"title": "(opcional) em caso da mensagem possuir um título inserido pelo WhatsApp",
"url": "(opcional) caso a mensagem possua um link ligado a ela. Exemplo: mensagem de catálogo possui um botão 'Ver catálogo'"
},
}
Exemplo de retorno de reação
{
"isStatusReply": false,
"senderLid": "81896604192873@lid",
"connectedPhone": "554499999999",
"waitingMessage": false,
"isEdit": false,
"isGroup": false,
"isNewsletter": false,
"instanceId": "A20DA9C0183A2D35A260F53F5D2B9244",
"messageId": "A20DA9C0183A2D35A260F53F5D2B9244",
"phone": "5544999999999",
"fromMe": false,
"momment": 1632228955000,
"status": "RECEIVED",
"chatName": "name",
"senderPhoto": "https://",
"senderName": "name",
"participantPhone": null,
"participantLid": null,
"photo": "https://",
"broadcast": false,
"type": "ReceivedCallback",
"reaction": {
"value": "❤️",
"time": 1651878681150,
"reactionBy": "554499999999",
"referencedMessage": {
"messageId": "3EB0796DC6B777C0C7CD",
"fromMe": true,
"phone": "5544999999999",
"participant": null
}
},
}
Exemplo de retorno de texto (Lista de Botão)
{
"isStatusReply": false,
"senderLid": "81896604192873@lid",
"connectedPhone": "554499999999",
"waitingMessage": false,
"isEdit": false,
"isGroup": false,
"isNewsletter": false,
"instanceId": "A20DA9C0183A2D35A260F53F5D2B9244",
"messageId": "A20DA9C0183A2D35A260F53F5D2B9244",
"phone": "5544999999999",
"fromMe": false,
"momment": 1634645380000,
"status": "RECEIVED",
"chatName": "Nome",
"senderPhoto": "https://",
"senderName": "Nome",
"participantPhone": null,
"participantLid": null,
"photo": "https://",
"broadcast": false,
"referenceMessageId": "A20DA9C0183A2D35A260F53F5D2B9244",
"forwarded": false,
"type": "ReceivedCallback",
"buttonsResponseMessage": {
"buttonId": "1",
"message": "Ótimo"
},
}
Exemplo de retorno de texto (Lista de Opção)
{
"isStatusReply": false,
"senderLid": "81896604192873@lid",
"connectedPhone": "554499999999",
"waitingMessage": false,
"isEdit": false,
"isGroup": false,
"isNewsletter": false,
"instanceId": "A20DA9C0183A2D35A260F53F5D2B9244",
"messageId": "A20DA9C0183A2D35A260F53F5D2B9244",
"phone": "5544999999999",
"fromMe": false,
"momment": 1634645683000,
"status": "RECEIVED",
"chatName": "Nome",
"senderPhoto": "https://",
"senderName": "Nome",
"participantPhone": null,
"participantLid": null,
"photo": "https://",
"broadcast": false,
"referenceMessageId": "A20DA9C0183A2D35A260F53F5D2B9244",
"forwarded": false,
"type": "ReceivedCallback",
"listResponseMessage": {
"message": "Z-API Asas para sua imaginação",
"title": "Z-API",
"selectedRowId": "1"
},
}
Exemplo de retorno de texto vindos de anúncio
{
"waitingMessage": false,
"isGroup": false,
"instanceId": "A20DA9C0183A2D35A260F53F5D2B9244",
"messageId": "A20DA9C0183A2D35A260F53F5D2B9244",
"phone": "5544999999999",
"fromMe": false,
"momment": NumberLong(1657209752000),
"status": "RECEIVED",
"chatName": "name",
"senderPhoto": null,
"senderName": "name",
"photo": null,
"broadcast": false,
"externalAdReply": {
"title": "Titulo",
"body": "texto do anuncio",
"mediaType": NumberInt(1),
"thumbnailUrl": "https://",
"sourceType": "ad",
"sourceId": "23722824350495506",
"sourceUrl": "https://",
"containsAutoReply": false,
"renderLargerThumbnail": true,
"showAdAttribution": true
},
"messageExpirationSeconds": NumberInt(0),
"forwarded": false,
"type": "ReceivedCallback",
"text": {
"message": "mensagem recebida",
"description": "texto do anuncio",
"title": "titulo",
"url": "https://",
"thumbnailUrl": "https://"
}
}
Exemplo de retorno de foto
{
"isStatusReply": false,
"senderLid": "81896604192873@lid",
"connectedPhone": "554499999999",
"waitingMessage": false,
"isEdit": false,
"isGroup": false,
"isNewsletter": false,
"instanceId": "A20DA9C0183A2D35A260F53F5D2B9244",
"messageId": "A20DA9C0183A2D35A260F53F5D2B9244",
"phone": "5544999999999",
"fromMe": false,
"momment": 1632228828000,
"status": "RECEIVED",
"chatName": "name",
"senderPhoto": "https://",
"senderName": "name",
"participantPhone": null,
"participantLid": null,
"photo": "https://",
"broadcast": false,
"type": "ReceivedCallback",
"image": {
"mimeType": "image/jpeg",
"imageUrl": "https://",
"thumbnailUrl": "https://",
"caption": "",
"thumbnailUrl": "https://",
"width": 600,
"height": 315,
"viewOnce": true
},
}
Exemplo de retorno de áudio
{
"isStatusReply": false,
"senderLid": "81896604192873@lid",
"connectedPhone": "554499999999",
"waitingMessage": false,
"isEdit": false,
"isGroup": false,
"isNewsletter": false,
"instanceId": "A20DA9C0183A2D35A260F53F5D2B9244",
"messageId": "A20DA9C0183A2D35A260F53F5D2B9244",
"phone": "5544999999999",
"fromMe": false,
"momment": 1632228849000,
"status": "RECEIVED",
"chatName": "name",
"senderPhoto": "https://",
"senderName": "name",
"participantPhone": null,
"participantLid": null,
"photo": "https://",
"broadcast": false,
"type": "ReceivedCallback",
"audio": {
"ptt": true,
"seconds": 10,
"audioUrl": "https://",
"mimeType": "audio/ogg; codecs=opus",
"viewOnce": true
},
}
Exemplo de retorno de vídeo
{
"isStatusReply": false,
"chatLid": "81896604192873@lid",
"connectedPhone": "554499999999",
"waitingMessage": false,
"isEdit": false,
"isGroup": false,
"isNewsletter": false,
"instanceId": "3C67AB641C8AA0412F6A2242B4E23AC7",
"messageId": "0E4AD761B62E3D5EF9",
"phone": "5544999999999",
"fromMe": false,
"momment": 1708456287181,
"status": "RECEIVED",
"chatName": "name",
"senderPhoto": null,
"senderName": "5544999999999",
"photo": null,
"broadcast": false,
"participantLid": null,
"forwarded": false,
"type": "ReceivedCallback",
"fromApi": false,
"hydratedTemplate": {
"header": {
"video": {
"videoUrl": "https://example.mp4",
"caption": "",
"mimeType": "video/mp4",
"width": 0,
"height": 0,
"seconds": 0,
"viewOnce": false
}
},
"message": "texto da mensagem",
"footer": "rodapé da mensagem",
"title": "título da mensagem",
"templateId": "938481574354947",
"hydratedButtons": []
}
}
Exemplo de retorno de contato
{
"isStatusReply": false,
"senderLid": "81896604192873@lid",
"connectedPhone": "554499999999",
"waitingMessage": false,
"isEdit": false,
"isGroup": false,
"isNewsletter": false,
"instanceId": "A20DA9C0183A2D35A260F53F5D2B9244",
"messageId": "A20DA9C0183A2D35A260F53F5D2B9244",
"phone": "5544999999999",
"fromMe": false,
"momment": 1632228925000,
"status": "RECEIVED",
"chatName": "name",
"senderPhoto": "https://",
"senderName": "name",
"participantPhone": null,
"participantLid": null,
"photo": "https://",
"broadcast": false,
"type": "ReceivedCallback",
"contact": {
"displayName": "Cesar Baleco",
"vCard": "BEGIN:VCARD\nVERSION:3.0\nN:;nome;;;\nFN:nome\nTEL;type=CELL;type=VOICE;waid=5544999999999:+55 44 9999-9999\nEND:VCARD",
"phones": ["5544999999999"]
},
}
Exemplo de retorno de documento
{
"instanceId": "A20DA9C0183A2D35A260F53F5D2B9244",
"messageId": "A20DA9C0183A2D35A260F53F5D2B9244",
"phone": "5544999999999",
"fromMe": false,
"momment": 1632228955000,
"status": "RECEIVED",
"chatName": "name",
"senderPhoto": "https://",
"senderName": "name",
"participantPhone": null,
"photo": "https://",
"broadcast": false,
"type": "ReceivedCallback",
"document": {
"documentUrl": "https://",
"mimeType": "application/pdf",
"title": "nome",
"pageCount": 1,
"fileName": "nome.pdf"
}
}
Exemplo de retorno de localização
{
"isStatusReply": false,
"senderLid": "81896604192873@lid",
"connectedPhone": "554499999999",
"waitingMessage": false,
"isEdit": false,
"isGroup": false,
"isNewsletter": false,
"instanceId": "A20DA9C0183A2D35A260F53F5D2B9244",
"messageId": "A20DA9C0183A2D35A260F53F5D2B9244",
"phone": "5544999999999",
"fromMe": false,
"momment": 1632228970000,
"status": "RECEIVED",
"chatName": "name",
"senderPhoto": "https://",
"senderName": "name",
"participantPhone": null,
"participantLid": null,
"photo": "https://",
"broadcast": false,
"type": "ReceivedCallback",
"location": {
"longitude": -99.999999999999999,
"latitude": -99.9999999999999999,
"address": "",
"url": ""
},
}
Exemplo de retorno de sticker
{
"isStatusReply": false,
"senderLid": "81896604192873@lid",
"connectedPhone": "554499999999",
"waitingMessage": false,
"isEdit": false,
"isGroup": false,
"isNewsletter": false,
"instanceId": "A20DA9C0183A2D35A260F53F5D2B9244",
"messageId": "A20DA9C0183A2D35A260F53F5D2B9244",
"phone": "5544999999999",
"fromMe": false,
"momment": 1632228982000,
"status": "RECEIVED",
"chatName": "name",
"senderPhoto": "https://",
"senderName": "name",
"participantPhone": null,
"participantLid": null,
"photo": "https://",
"broadcast": false,
"type": "ReceivedCallback",
"sticker": {
"stickerUrl": "https://",
"mimeType": "image/webp"
},
}
Exemplo de retorno de GIF
{
"isStatusReply": false,
"senderLid": "81896604192873@lid",
"connectedPhone": "554499999999",
"waitingMessage": false,
"isEdit": false,
"isGroup": false,
"isNewsletter": false,
"instanceId": "A20DA9C0183A2D35A260F53F5D2B9244",
"messageId": "A20DA9C0183A2D35A260F53F5D2B9244",
"phone": "5544999999999",
"fromMe": false,
"momment": 1632228889000,
"status": "RECEIVED",
"chatName": "name",
"senderPhoto": "https://",
"senderName": "name",
"participantPhone": null,
"participantLid": null,
"photo": "https://",
"broadcast": false,
"type": "ReceivedCallback",
"video": {
"videoUrl": "https://",
"caption": "",
"mimeType": "video/mp4"
},
}
Exemplo de retorno de pagamento feito
{
"isStatusReply": false,
"senderLid": "81896604192873@lid",
"connectedPhone": "554499999999",
"waitingMessage": false,
"isEdit": false,
"isGroup": false,
"isNewsletter": false,
"instanceId": "A20DA9C0183A2D35A260F53F5D2B9244",
"messageId": "A20DA9C0183A2D35A260F53F5D2B9244",
"phone": "5544999999999",
"fromMe": false,
"momment": 1632229683000,
"status": "RECEIVED",
"chatName": "name",
"senderPhoto": "https://",
"senderName": "name",
"participantPhone": null,
"participantLid": null,
"photo": "https://",
"broadcast": false,
"type": "ReceivedCallback",
"requestPayment": {
"value": 1,
"currencyCode": "BRL",
"expiration": 1632834482000,
"requestPhone": "5544999999999",
"paymentInfo": {
"receiverPhone": "5544999999999",
"value": 1,
"currencyCode": "BRL",
"status": "WAITING",
"transactionStatus": "COLLECT_SUCCESS"
}
},
}
Exemplo de retorno de pedido de pagamento
{
"isStatusReply": false,
"senderLid": "81896604192873@lid",
"connectedPhone": "554499999999",
"waitingMessage": false,
"isEdit": false,
"isGroup": false,
"isNewsletter": false,
"instanceId": "A20DA9C0183A2D35A260F53F5D2B9244",
"messageId": "A20DA9C0183A2D35A260F53F5D2B9244",
"phone": "5544999999999",
"fromMe": true,
"momment": 1632230332000,
"status": "MESSAGE_RECEIVED",
"chatName": "name",
"senderName": "name",
"participantPhone": "5544999999999",
"photo": "https://",
"broadcast": false,
"type": "ReceivedCallback",
"notification": "PAYMENT_ACTION_REQUEST_DECLINED",
"notificationParameters": ["5544999999999", "BRL", "1000"]
}
Exemplo de retorno de recebimento de pagamento
{
"isStatusReply": false,
"senderLid": "81896604192873@lid",
"connectedPhone": "554499999999",
"waitingMessage": false,
"isEdit": false,
"isGroup": false,
"isNewsletter": false,
"instanceId": "A20DA9C0183A2D35A260F53F5D2B9244",
"messageId": "A20DA9C0183A2D35A260F53F5D2B9244",
"phone": "5544999999999",
"fromMe": false,
"momment": 1632230512000,
"status": "RECEIVED",
"chatName": "name",
"senderPhoto": "https://",
"senderName": "name",
"participantPhone": null,
"participantLid": null,
"photo": "https://",
"broadcast": false,
"type": "ReceivedCallback",
"sendPayment": {
"paymentInfo": {
"receiverPhone": "5544999999999",
"value": 1,
"currencyCode": "BRL",
"status": "COMPLETE",
"transactionStatus": "SUCCESS"
}
},
}
Exemplo de retorno de produto
{
"instanceId": "A20DA9C0183A2D35A260F53F5D2B9244",
"messageId": "A20DA9C0183A2D35A260F53F5D2B9244",
"phone": "5544999999999",
"fromMe": false,
"momment": 1632233527000,
"status": "RECEIVED",
"senderPhoto": "https://",
"senderName": "5544999999999",
"participantPhone": null,
"photo": "https://",
"broadcast": false,
"type": "ReceivedCallback",
"product": {
"productImage": "https://",
"businessOwnerJid": "5544999999999",
"currencyCode": "BRL",
"productId": "99999999999999999999",
"description": "",
"productImageCount": 1,
"price": 1,
"url": "",
"retailerId": "",
"firstImageId": "",
"title": "name"
}
}
405
Neste caso certifique que esteja enviando o corretamente a especificação do método, ou seja verifique se você enviou o POST ou GET conforme especificado no inicio deste tópico.
415
Caso você receba um erro 415, certifique de adicionar na headers da requisição o "Content-Type" do objeto que você está enviando, em sua grande maioria "application/json"
Notification Response
Conceituação
As notificações são mensagens de WhatsApp que se baseiam em modelos de mensagens prévias do WhatsApp.
Posto dessa forma, aqui estão documentadas as notificações que recebemos, caso não queira receber essas notificações é necessário ignorar a mensagem quando ela chegar com o atributo notification.
Exemplos
case 'GROUP_PARTICIPANT_LEAVE':
campo_html = "<divalign='center'><divclass='alert alert-primary'role='alert'><span>Participante " + valor2.notificationparameters + " saiu do grupo!<br><br></span>" + campohora + "</div></div>"
break;
case 'E2E_ENCRYPTED':
// code block
campo_html = "<divalign='center'><divclass='alert alert-primary'role='alert'><span>As mensagens são protegidas com a criptografia<br><br></span>" + campohora + "</div></div>"
break;
case 'GROUP_CREATE':
campo_html = "<divalign='center'><divclass='alert alert-primary'role='alert'><span>Criou o grupo \'" + valor2.notificationparameters + "\'<br><br></span>" + campohora + "</div></div>"
break;
case 'GROUP_PARTICIPANT_ADD':
campo_html = "<divalign='center'><divclass='alert alert-primary'role='alert'><span>Participante " + valor2.notificationparameters + " adicionado.<br><br></span>" + campohora + "</div></div>"
break;
case "CALL_MISSED_VOICE":
campo_html = "<divalign='center'><divclass='alert alert-primary'role='alert'><span>Chamada de voz perdida!<br><br></span>" + campohora + "</div></div>"
break;
case "CALL_MISSED_VIDEO":
campo_html = "<divalign='center'><divclass='alert alert-primary'role='alert'><span>Chamada de vídeo perdida!<br><br></span>" + campohora + "</div></div>"
break;
case 'GROUP_PARTICIPANT_REMOVE':
campo_html = "<divalign='center'><divclass='alert alert-primary'role='alert'><span>Participante " + valor2.notificationparameters + " foi removido.<br><br></span>" + campohora + "</div></div>"
break;
case "CIPHERTEXT":
campo_html = "<divalign='center'><divclass='alert alert-primary'role='alert'><span>As mensagens são protegidas com a criptografia de ponta.<br><br></span>" + campohora + "</div></div>"
break;
case "BLUE_MSG_SELF_PREMISE_UNVERIFIED":
campo_html = "<divalign='center'><divclass='alert alert-primary'role='alert'><span>Você está conversando com uma conta comercial, mas ainda não foi confirmada pelo WhatsApp.<br><br></span>" + campohora + "</div></div>"
break;
case "BLUE_MSG_SELF_PREMISE_VERIFIED":
campo_html = "<divalign='center'><divclass='alert alert-primary'role='alert'><span>Você está conversando com uma conta comercial verificada pelo WhatsApp.<br><br></span>" + campohora + "</div></div>"
break;
case "BIZ_MOVE_TO_CONSUMER_APP":
campo_html = "<divalign='center'><divclass='alert alert-primary'role='alert'><span>Esta conta comercial agora está registrada como uma conta pessoal e pode não mais pertencer a uma empresa.<br><br></span>" + campohora + "</div></div>"
break;
case "REVOKE":
campo_html = "<div align='center'><divclass='alert alert-primary'role='alert'><span>Apagou uma mensagem.<br><br></span>" + campohora + "</div></div>"
break;
Comentários
0 comentário
Por favor, entre para comentar.