Send Message API
Use the Messaging API to integrate WhatsApp's messaging capabilities into your business systems.
Before calling the API, log on to the console API key create a key on the page.
Call address
POST https://wa.api.engagelab.cc/v1/messages
Call validation
The EngageLab REST API uses HTTP Basic Authentication as the authentication method, adding Authorization in the HTTP Header.
Authorization: Basic ${base64_auth_string}
The preceding base64_auth_string generation algorithm is as follows: base64(dev_key:dev_secret)
- the Header name is "Authorization" and the value is a base64-converted "username:password" pair (with a colon in the middle).
- In WhatsApp API scenario, username is DevKey and password is DevSecret. In the console, choose configuration management- API key obtain the page.
Sample Requests
Request Header
POST /v1/messages HTTP/1.1
Content-Type: application/json
Authorization: Basic amlndWFuZ2RldjpkZXZfc2VjcmV0
Request body
{
"from": "+8613800138000",
"to": [
"00447911123456"
],
"body": {
"type": "template",
"template": {
"name": "code",
"language": "zh_CN",
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "12345"
}
]
}
]
}
},
"request_id": "123asdbbqwe9faweg",
"custom_args": {
"arg1": "string val",
"arg2": 123
}
}
Request parameters
A request object is expressed in JSON format, so the request header must contain Content-Type: application/json.
Parameter | Type | Option | Description |
---|---|---|---|
from | String | optional | sending number |
to | String Array | required | the phone number of the target. |
body | JSON Object | required | message body |
request_id | String | optional | the ID of the custom request that identifies the request. |
custom_args | JSON Object | optional | the custom information is returned to the developer in the message status callback. |
from
Parameter | Type | Option | Description |
---|---|---|---|
from | String | optional |
to
Parameter | Type | Option | Description |
---|---|---|---|
to | String Array | required | the WhatsApp phone number of the target, and the international area code must be added. |
body
A message body that contains the following fields:
Parameter | Type | Option | Description |
---|---|---|---|
type | string | required | the message type. Valid values: only template messages can be sent to users., other types of messages require users to reply to messages within 24 hours before they can be delivered. Images, audio, video, documents, and stickers are all media messages. Media Message Format requirements |
template | template object | optional | used when type = template. For more information, see template object description |
text | text object | optional | used when type = text. For more information, see text object description |
image | image object | optional | used when type = image. For more information, see image object description |
audio | audio object | optional | used when type = audio. For more information, see audio object description |
video | video object | optional | used when type = video. For more information, see video object description |
document | document object | optional | Used when type = document. For more information, see document object description |
sticker | sticker object | optional | used when type = sticker. For more information, see sticker object description |
text object description
text message
Parameter | Type | Option | Description |
---|---|---|---|
body | String | required | the text content. The WhatsApp must be no more than 4096 characters/character. |
Example
{
"from": "8613800138000", //sender's phone number
"to": "8613800138000", //the recipient's phone number
"body": {
"type": "text", //type of message
"text": {
"body": "your-text-message-content" // message content
}
}
}
image object description
image message
Parameter | Type | Option | Description |
---|---|---|---|
id | String | optional | the id and link generated by the WhatsApp must have a value. |
link | String | optional | image link, http/https link, follow media Message Format requirements |
caption | String | optional | the description of the image. It cannot exceed 1024 characters in length. |
Example
{
"from": "8613800138000",//the sender's phone number
"to": "8613800138000",//receiver's phone number
"body": {
"type": "image",//the message type
"image": {
"link": "https://img.jiguang.cn/jiguang/public/img/c866bd2.png", //image link
"caption": "caption info" // optional, text description below the image, within 1024 characters
}
}
}
video object description
video message
Parameter | Type | Option | Description |
---|---|---|---|
id | String | optional | WhatsApp generated media_id; Both id and link must have a value. |
link | String | optional | video link, http/https link, follow media Message Format requirements |
caption | String | optional | Description of the video , up to 1024 characters in length. |
Example
{
"from": "8613800138000",//the sender's phone number
"to": "8613800138001", //the recipient's phone number
"body": {
"type": "video",//the message type
"video": {
"link": "https://img.jiguang.cn/jiguang/public/videos/432acc5.mp4", //video link
"caption": "caption info" // optional, text description below the video, within 1024 characters
}
}
}
audio object description
audio message
Parameter | Type | Option | Description |
---|---|---|---|
id | String | optional | WhatsApp generated media_id; Both id and link must have a value. |
link | String | optional | audio link, http/https link, follow media Message Format requirements |
Example
{
"from": "8613800138000",//the sender's phone number
"to": "8613800138001", //the recipient's phone number
"body": {
"type": "audio",//the message type
"audio": {
"link": "https://file-examples.com/storage/fe5947fd2362fc197a3c2df/2017/11/file_example_MP3_700KB.mp3" //audio link
}
}
}
document object description
file message
Parameter | Type | Option | Description |
---|---|---|---|
id | String | optional | WhatsApp generated media_id; Both id and link must have a value. |
link | String | optional | document link, http/https link, follow media Message Format requirements |
caption | String | optional | Description of the file , up to 1024 characters in length. |
filename | String | optional | The name of the file. If the filename field is not filled in but the caption field is filled in, the caption will be used as the file name; if filename is filled in, the value of filename will be used as the file name. |
Example
{
"from": "8613800138000",//the sender's phone number
"to": "8613800138001", //the recipient's phone number
"body": {
"type": "document",//the message type
"document": {
"link": "https://img.jiguang.cn/jiguang/public/videos/432acc5.mp4", // document link
"caption": "caption info", // optionally, the text description at the bottom of the document, within 1024 characters
"filename": "document file name" // optional, the name of the file
}
}
}
sticker object description
Sticker message
Parameter | Type | Option | Description |
---|---|---|---|
id | String | optional | media_id on the whatsapp side; Both id and link must have a value. |
link | String | optional | sticker link, http/https link, follow media Message Format requirements |
Example
{
"from": "8613800138000",//the sender's phone number
"to": "8613800138001", //the recipient's phone number
"body": {
"type": "sticker",//the message type
"sticker": {
"link": "http://sample-file.bazadanni.com/download/images/webp/sample.webp" //sticker link
}
}
}
template object description
template message, you need to create a template first, you can console operations or create an API .
Parameter | Type | Type | Description |
---|---|---|---|
name | String | required | the name of the template. You can find it on the message templates page in the console. Only lowercase numbers and underscores are supported. |
language | String | required | template language code . When creating a template, you can set the content of the same template name in multiple languages. Therefore, you need to use the name and language fields to determine the selected template. |
components | components-object array | optional | if a variable exists in the template, you need to fill this field. Only one components object element is set in the array. |
template.components object description
Parameter | Type | Option | Description |
---|---|---|---|
type | String | required | the template component. Which component in the template contains variables, you need to pass the value to the component. Valid values: |
parameters | parameters object | required | set variable content |
template.components.parameters object description
Parameter | Type | Option | Description |
---|---|---|---|
type | string | required | the type of the variable. Valid values: text, currency, date_time, image, video, and document. Multimedia material types (image, video, and document) only exist in the header. For more information about the supported formats, see media Message Format requirements . |
text | string | optional | When type = text, it is the specific content of the variable. |
date_time | localizable object | optional | Used when type = date_time, the difference with text is that it can be localized and adapted to display |
currency | localizable object | optional | used when type = currency, the difference with text is that it can be localized and adapted to display |
image | image object | optional | used when type = image, and image object the content format is consistent. |
video | video object | optional | Used when type = video, and video object the content format is consistent. |
document | document object | optional | Used when type = document, and document object the content format is consistent. |
Example
{
"from": "+8613800138000",
"to": [
"00447911123456"
],
"body": {
"type": "template",
"template": {
"name": "your-template-name",
"language": "zh_CN",
"components": [
{
"type" : "header",
"parameters": [{
"type": "document",
"document": {
"link": "http(s)://the-url",
"filename": "your-document-filename"
}
}]
},
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "your-text-string"
},
{
"type": "currency",
"currency": {
"fallback_value": "$100.99",
"code": "USD",
"amount_1000": 100990
}
},
{
"type": "date_time",
"date_time": {
"fallback_value": "February 25, 1977",
"day_of_week": 5,
"day_of_month": 25,
"year": 1977,
"month": 2,
"hour": 15,
"minute": 33
}
},
{
"type": "date_time",
"date_time": {
"fallback_value": "February 25, 1977",
"timestamp": 1485470276
}
}
]
}
]
}
}
}
Response parameters
Success response
Field | Type | Option | Description |
---|---|---|---|
message_id | String | required | the ID of the EngageLab WhatsApp message that uniquely identifies a message. |
request_id | String | optional | the custom ID submitted during the request. The ID is returned as it is when the request is received. |
{
"message_id": "cbggf4if6o9ukqaalfug",
"request_id": "your-sendno-string"
}
Failed response
the http status code is 4xx or 5xx. The response body contains the following fields:
Field | Type | Option | Description |
---|---|---|---|
code | int | required | the error code. For more information, see error Codes description |
message | String | required | error details |
{
"code": 3002,
"message": "whatsapp.template field must be set correctly when type is template"
}
Error Codes
Error Codes | Http Code | Description |
---|---|---|
1000 | 500 | internal error |
2001 | 401 | EngageLab authentication failed without a valid token. |
2002 | 401 | EngageLab-side authentication failed. The token has expired or has been disabled. |
2003 | 400 | WhatsApp authentication failed, please contact EngageLab customer service |
2004 | 403 | you do not have the permission to call this API. Check whether you have the permission to send messages (a sending number) to this API key. |
3001 | 400 | The request parameter format is invalid. Check whether the JSON format is used. |
3002 | 400 | The request parameters are incorrect. Check whether the request parameters meet the requirements. |
3003 | 400 | The error message returned because the request parameter is invalid. For more information, see the error description of the message field. |
4001 | 400 | The relevant resource does not exist. For example, a template that does not exist is used when the template message is sent. |
Comments
media Message Format requirements
Media Type | Supported format types Content-Type | Size Limit |
---|---|---|
image | image/jpeg, image/png, does not support transparent background | 5MB |
video | video/mp4 , video/3gpp note: encoding only supports H.264 video encoding and AAC audio encoding. |
16MB |
audio | audio/aac, audio/mp4, audio/amr, audio/mpeg audio/ogg; codecs = opus (note: basic audio/ogg is not supported, only audio/ogg is supported; codecs = opus) |
16MB |
document | 1. Any MIME-type type is supported when sending file messages. 2. When sending a template message, the file in the header only supports PDF format. |
100MB |
sticker | image/webp | Static stickers:100KB Animated stickers: 500KB |
Language code
for more information about the relationship between the language and the corresponding code, download this file:
Template language code.xlsx