Head on to Doubletick Web and open settings from the sidebar and click on webhooks. Then click on the New webhook button.
Enter a fully qualified webhook URL and choose the events you would like to capture with the webhook and click on Save webhook .
Once saved, you can see the webhooks with their respective count of events
This webhook is triggered whenever an existing or a new customer sends any supported message to your registered number. The list of supported messages include: Text; media such as image, video, stickers, audio; document messages such as PDF, word, etc; location message; phonebook contact message; and button reply messages
Name Type Nullable Notes to string No API Number from string Yes Customer mobile number messageId string No Unique id of message dtMessageId string No Unique id of message (you can use this to track message status updates via Message Status Webhook ) pairedMessageId string Yes messageId
of the previous message if this message is a reply to that previous messagedtPairedMessageId string Yes dtMessageId
of the previous message if this message is a reply to that previous messagereceivedAt string yes Date of message received (in ISO Format) integrationType string Yes IntegrationType (WHATSAPP) status string Yes Status of message message Message No Message body contact string No The contact who sent the message
Name Type Nullable Notes type TEXT | IMAGE | VIDEO | AUDIO | DOCUMENT | LOCATION | CONTACTS | BUTTON | TEMPLATE | INTERACTIVE No Type of message text string - Present when type is TEXT url string - Present when type is IMAGE | VIDEO | AUDIO | DOCUMENT caption string Yes Present when type is IMAGE | VIDEO | AUDIO | DOCUMENT and a caption was added to the message by the sender payload string - Present when type is BUTTON name string - Present when type is LOCATION address string - Present when type is LOCATION latitude string - Present when type is LOCATION longitude string - Present when type is LOCATION templateMessage TemplateMessage - Present when type is TEMPLATE and message is sent interactiveMessage InteractiveMessage - Present when type is INTERACTIVE and message is sent contacts List of Contacts - Present when type is CONTACTS context Context Yes Context of the message
Name Type Nullable Notes id string Yes messageId
of the previous message if this message is a reply to that previous messagefrom string Yes WhatsApp Id of the sender of the original message
Name Type Nullable Notes name Name Yes Name properties phones Phone Yes Phone properties
Name Type Nullable Notes first_name string Yes First name last_name string Yes Last name formatted_name string No Formatted name
Name Type Nullable Notes phone string No Phone number type string No Type of phone number waId string No Whatsapp id
Name Type Nullable Notes type text | image | video | document No Type of the template header text string - Present when type is text url string - Present when type is image / video / document fileName string Yes Present when type is document
Name Type Nullable Notes type text - text string -
Name Type Nullable Notes type QUICK_REPLY | URL | PHONE_NUMBER No button type text string No button text payload string Yes Present when type is QUICK_REPLY url string - Present when type is URL phoneNumber string - Present when type is PHONE_NUMBER
Name Type Nullable Notes text string -
Name Type Nullable Notes type text - text string -
Name Type Nullable Notes type image | video | document No Media types for header fileType SupportedMediaTypes No Table for supported media types url string No Present for all types size number No Present for all types fileName string Yes Present when type is document
Name Type image image/jpeg' , image/png video video/mp4 , video/3gpp document text/plain, application/pdf, application/vnd.ms-powerpoint, application/msword, application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/vnd.openxmlformats-officedocument.presentationml.presentation, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Name Type Nullable Notes title string No id string No description string Yes
Name Type Nullable Notes title string No id string No
JSON
{
"to": "15550090106",
"from": "919999999999",
"messageId": "HBgMOTE3NjAwNzI4MjU0FQIAEhgUM0FGMjcxNEY2NjVFQzBFMEE0MkYA",
"dtMessageId": "3bf23c11-6c34-4c1e-b259-12a0e518d3cd",
"receivedAt": "2022-12-15T10:27:00.000Z",
"contact": {
"name": "Contact Name"
},
"integrationType": "WHATSAPP",
"message": {
"type": "TEXT",
"text": "Ok",
"context": {}
}
}
json
{
"to": "15550090106",
"from": "919999999999",
"messageId": "HBgMOTE3NjAwNzI4MjU0FQIAEhgUM0FGMjcxNEY2NjVFQzBFMEE0MkYA",
"dtMessageId": "3bf23c11-6c34-4c1e-b259-12a0e518d3cd",
"pairedMessageId": "HBgMOTE3MDM4ODk2MTQwFQIAERgSMzAwRUE1Nzg0REJDOTgzRTM1AA==",
"dtPairedMessageId": "01c6106d-916e-4dd7-b4b5-c295467fb411",
"receivedAt": "2022-12-15T10:27:00.000Z",
"contact": {
"name": "Contact Name"
},
"integrationType": "WHATSAPP",
"message": {
"type": "TEXT",
"text": "Ok",
"context": {
"from": "15550090106",
"id": "HBgMOTE3MDM4ODk2MTQwFQIAERgSMzAwRUE1Nzg0REJDOTgzRTM1AA=="
}
}
}
json
{
"to": "15550090106",
"from": "919999999999",
"messageId": "HBgMOTE3NjAwNzI4MjU0FQIAEhgUM0FGMjcxNEY2NjVFQzBFMEE0MkYA",
"dtMessageId": "3bf23c11-6c34-4c1e-b259-12a0e518d3cd",
"receivedAt": "2022-12-15T10:27:00.000Z",
"contact": {
"name": "Contact Name"
},
"integrationType": "WHATSAPP",
"message": {
"type": "IMAGE",
"caption": "This is a caption",
"url": "https://via.placeholder.com/300.jpg",
"context": {}
}
}
json
{
"to": "15550090106",
"from": "919999999999",
"messageId": "HBgMOTE3NjAwNzI4MjU0FQIAEhgUM0FGMjcxNEY2NjVFQzBFMEE0MkYA",
"dtMessageId": "3bf23c11-6c34-4c1e-b259-12a0e518d3cd",
"receivedAt": "2022-12-15T10:27:00.000Z",
"contact": {
"name": "Contact Name"
},
"integrationType": "WHATSAPP",
"message": {
"type": "AUDIO",
"url": "https://www.learningcontainer.com/wp-content/uploads/2020/02/Kalimba.mp3",
"context": {}
}
}
json
{
"to": "15550090106",
"from": "919999999999",
"messageId": "HBgMOTE3NjAwNzI4MjU0FQIAEhgUM0FGMjcxNEY2NjVFQzBFMEE0MkYA",
"dtMessageId": "3bf23c11-6c34-4c1e-b259-12a0e518d3cd",
"receivedAt": "2022-12-15T10:27:00.000Z",
"contact": {
"name": "Contact Name"
},
"integrationType": "WHATSAPP",
"message": {
"type": "VIDEO",
"url": "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
"context": {}
}
}
json
{
"to": "15550090106",
"from": "919999999999",
"messageId": "HBgMOTE3NjAwNzI4MjU0FQIAEhgUM0FGMjcxNEY2NjVFQzBFMEE0MkYA",
"dtMessageId": "3bf23c11-6c34-4c1e-b259-12a0e518d3cd",
"receivedAt": "2022-12-15T10:27:00.000Z",
"contact": {
"name": "Contact Name"
},
"integrationType": "WHATSAPP",
"message": {
"type": "DOCUMENT",
"url": "https://www.africau.edu/images/default/sample.pdf",
"context": {}
}
}
JSON
{
"to": "15550090106",
"from": "919999999999",
"messageId": "HBgMOTE3NjAwNzI4MjU0FQIAEhgUM0FGMjcxNEY2NjVFQzBFMEE0MkYA",
"dtMessageId": "3bf23c11-6c34-4c1e-b259-12a0e518d3cd",
"receivedAt": "2022-12-15T10:27:00.000Z",
"contact": {
"name": "Contact Name"
},
"integrationType": "WHATSAPP",
"message": {
"type": "BUTTON",
"text": "Click Me",
"payload": "Click Me",
"context": {}
}
}
json
{
"to": "15550090106",
"from": "919999999999",
"messageId": "HBgMOTE3NjAwNzI4MjU0FQIAEhgUM0FGMjcxNEY2NjVFQzBFMEE0MkYA",
"dtMessageId": "3bf23c11-6c34-4c1e-b259-12a0e518d3cd",
"receivedAt": "2022-12-15T10:27:00.000Z",
"contact": {
"name": "Contact Name"
},
"integrationType": "WHATSAPP",
"message": {
"type": "LOCATION",
"name": "QuickSell Inc",
"address": "98, Bhagwandas Todi Bal Udyan Marg",
"latitude": 18.944149017334,
"longitude": 72.824394226074,
"context": {}
}
}
json
{
"to": "15550090106",
"from": "917600728254",
"messageId": "HBgMOTE3NjAwNzI4MjU0FQIAEhgUM0E5NjdENzA5ODIwQTRDQkEwQ0QA",
"dtMessageId": "3bf23c11-6c34-4c1e-b259-12a0e518d3cd",
"receivedAt": "2022-12-19T17:33:45.000Z",
"contact": {
"name": "Abhideep"
},
"integrationType": "WHATSAPP",
"message": {
"type": "CONTACTS",
"contacts": [
{
"name": {
"first_name": "Yogesh",
"last_name": "DoubleTick",
"formatted_name": "Yogesh DoubleTick"
},
"phones": [
{
"phone": "+91 99999 99999",
"type": "Mobile",
"waId": "919999999999"
}
]
}
],
"context": {}
}
}
This webhook is triggered whenever a sent message's status changes.
For ex: sent message changes from sent to delivered to read. To optimise the system, there may be some cases where the read status change is sent but the delivered status change is not sent. In such cases, please assume that the message was also delivered at the same time
Name Type Nullable Notes status SENT | DELIVERED | READ | FAILED No Sent message status messageId string No Id of sent message. Same as the dtMessageId
in the Receive Message webhook payload message Message No present only if status is equal to SENT or FAILED to string No Customer number statusTimeStamp string No ISO formatted string of the timestamp when the message status changed failMessage string Yes Error message (present if status is FAILED )
json
{
"status": "SENT",
"messageId": "3bf23c11-6c34-4c1e-b259-12a0e518d3cd",
"to": "919999999999",
"statusTimestamp": "2022-12-15T07:36:24.504Z",
"message": {
"type": "template",
"templateMessage": {
"header": {
"type": "text",
"text": "This is Template Header"
},
"body": {
"type": "text",
"text": "This is Template Body"
},
"footer": {
"type": "text",
"text": "This is Template Footer"
},
"button": [
{
"type": "QUICK_REPLY",
"text": "Click here",
"payload": "Click here"
}
]
},
"templateName": "template_1",
"templateLanguage": "en"
}
}
json
{
"status": "DELIVERED",
"messageId": "3bf23c11-6c34-4c1e-b259-12a0e518d3cd",
"to": "919999999999",
"statusTimestamp": "2022-12-15T07:36:24.504Z"
}
json
{
"status": "READ",
"messageId": "3bf23c11-6c34-4c1e-b259-12a0e518d3cd",
"to": "919999999999",
"statusTimestamp": "2022-12-15T07:36:24.504Z"
}
json
{
"status": "FAILED",
"messageId": "3bf23c11-6c34-4c1e-b259-12a0e518d3cd",
"to": "919999999999",
"statusTimestamp": "2022-12-15T07:36:24.504Z",
"failMessage": "Error Description",
"message": {
"type": "template",
"templateMessage": {
"header": {
"type": "text",
"text": "This is Template Header"
},
"body": {
"type": "text",
"text": "This is Template Body"
},
"footer": {
"type": "text",
"text": "This is Template Footer"
},
"button": [
{
"type": "QUICK_REPLY",
"text": "Click here",
"payload": "Click here"
}
]
},
"templateName": "template_1",
"templateLanguage": "en"
}
}
This webhook is triggered whenever a template status changes.
Name Type Nullable Notes event TEMPLATE_STATUS_UPDATE No Event type for status update of template wabaPhoneNumber string No WhatsApp number to which the template belongs templateName string No Name of the template newStatus APPROVED | PAUSED | REJECTED | PENDING No Updated status of template oldStatus APPROVED | PAUSED | REJECTED | PENDING No Old status of template templateLanguage string No Language of the template rejectedReason string Yes Present when the newStatus is REJECTED
json
{
"event": "TEMPLATE_STATUS_UPDATE",
"wabaPhoneNumber": "1415523888",
"templateName": "test_template",
"newStatus": "APPROVED",
"oldStatus": "PENDING",
"templateLanguage": "en",
"rejectedReason": null
}
json
{
"event": "TEMPLATE_STATUS_UPDATE",
"wabaPhoneNumber": "1415453888",
"templateName": "test_template_1",
"newStatus": "REJECTED",
"oldStatus": "PENDING",
"templateLanguage": "en",
"rejectedReason": "INVALID_FORMAT"
}