https://api.itniotech.com/wa/template/add
Parameters | Description | Required | Type |
---|---|---|---|
appId | Application id | Yes | String |
channelType | Channel type: 0-WhatsApp, send 0 by default | Yes | Integer |
templateName | Template name: lowercase letters, numbers and underscores, 512 characters | Yes | String |
type | Template type: 0-AUTHENTICATION (authentication); 1-MARKETING (marketing); 2-UTILITY (transaction class) | Yes | Integer |
language | Template language: such as "zh_CN", see detailsCountry language enumeration definition, a template name can exist in multiple languages, only one language can be created at a time | Yes | String |
components | Template component | No | Object | -
header | Header | No | Object | -
type | Component type: HEADER, default HEADER | Yes | String |
format | Type of header: 0-TEXT, 1-IMAGE, 2-VIDEO, 3-DOCUMENT, 4-LOCATION | Yes | String |
text | Up to 60 characters, allowing 1 variable to be inserted. Required when type=HEADER, format=0 | Yes | String |
example | Header variable example. Required when there are variables in text | Yes | Object | -
header_text | Example header text variable. Required when there are variables in header | Yes | Array |
header_handle | The handle of the file returned by calling the upload template sample file interface. Required when the header is a image/video/document. | No | Array |
body | Component type | No | Object | -
type | Component type: BODY, default BODY | Yes | String |
text | Up to 1024 characters, allows inserting variables, limit up to 20 variables. Required when the template type is transaction-related and marketing | No | String |
add_security_recommendation | Add security advisories: true, false. Required when template type is authentication | No | Boolean |
example | Text variable example. Required when there are variables in text | No | Object | -
body_text | Example of text variables in the body text, variables must be filled in the body text. Optional, consistent with the number of variables in text | No | Array |
footer | Component type | No | Object | -
type | Component type: FOOTER, default FOOTER | No | String |
text | up to 60 characters. It must be passed When the template type isn't authentication | No | String |
code_expiration_minutes | The expiration time of the verification code, the identity verification template has this item, the value can be filled in the range of 1-90 | No | Integer |
button | Component type | No | Object | -
type | Component type: BUTTONS, default BUTTONS. Required when template type is authentication | No | String |
buttons | button object | No | Object | -
type | Button type: 1-URL, 2-UICK_REPLY, 3-OTP, 4-PHONE_NUMBER, 5-ONE_TAP | Yes | Integer |
text | The displayed name of the button, within 25 characters. (type is URL, QUICK_REPLY, PHONE_NUMBER required) | Yes | String |
otp_type | Verification code button type: copy_code (copy verification code), one_tap (one-click filling) | Yes | String |
phone_number | The phone number that will be dialed when the user taps the button, within 20 characters. (type is PHONE_NUMBER required) | Yes | String |
url | When an app user taps the button, the URL will be loaded in the device's default mobile web browser. Supports 1 variable, which should be appended to the end of the URL string, and the variable name needs to be set to {{1}}. 2,000 characters or less in length. (type is URL required) | Yes | String |
example | Example URL, 2,000 characters or less. (type is dynamic URL is required) | Yes | Array |
autofill_text | The name of the one-touch button. (type is ONE_TAP required) | Yes | String |
package_name | Android application package name. (type is ONE_TAP required) | Yes | String |
signature_hash | Apply signing key hash. (type is ONE_TAP required) | Yes | String |
Request URL: https://api.itniotech.com/wa/template/add Request Method: POST Request Headers: Content-Type: application/json;charset=UTF-8 Sign: 05d7a50893e22a5c4bb3216ae3396c7c Timestamp: 1690286812882 Api-Key: 7Wqzu5rm //Create a marketing template with a header of text, with buttons for phone and website, and a variable for the main text (template type can be matched freely) Request Body: { "appId": "yYgJ5EVD", "channelType": 0, "templateName": "dd_template", "type": 1, "language": "zh_CN", "components": { "header":{ "type": "HEADER", "format": 0, "text": "OTP is currently in {{#}} activity", "example": { "header_text": ["Discounts"] } }, "body":{ "type": "BODY", "text": "The company is newly opened, and {{#}} activities are in full swing...", "example":{ "body_text": [ ["Discounts"] ] } }, "footer": { "type": "FOOTER", "text": "ITNIOTECH" } } } //Create Template: Identity Authentication Class { "appId": "yYgJ5EVD", "channelType": 0, "templateName": "skyline_template_tt", "type": 0, "language": "zh_CN", "components": { "body": { "type": "BODY", "add_security_recommendation": true }, "button": { "type": "BUTTONS", "buttons": [{ "otp_type": "COPY_CODE", "text": "3232", "type": 3 }] }, "footer": { "type": "FOOTER", "code_expiration_minutes": 10 } } } //Transaction type without request header { "appId": "DHhgCjMX", "channelType": 0, "templateName": "sjhdd_template_jy_1", "type": 2, "language": "cs", "components": { "body": { "type": "BODY", "text": "You have successfully checked in! Below is the boarding pass for this flight{{#}} {{#}}k {{#}} whe de ds d fd htttt ", "example": { "body_text": [ ["you","and","haha"] ] } }, "footer": { "type": "FOOTER", "text": "You have successfully checked in!" } } }
Parameters | Description | Type |
---|---|---|
status | Status code, 0 is successful, other failures refer to the interface response code | String |
reason | Reason for failure | String |
data | Send result | Object | -
templateId | Template id | String |
templateName | Template name | String |
type | Template type: 0-AUTHENTICATION (authentication); 1-MARKETING (marketing); 2-UTILITY (transaction class) | String |
languageCode | Template language, see Country Enumeration for details | String |
status | Template status: PENDING (under review), REJECTED (not passed the review), APPROVED (passed the review), DELETED (deleted), DISABLED (disabled),PENDING_DELETION (pending deletion), IN_APPEAL (appeal filed), PAUSED (temporarily suspended), LIMIT_EXCEEDED (limit exceeded), FLAGGED (planned to be disabled), REINSTATED (reinstated) | String |
status | Description |
---|---|
0 | success |
-1 | Authentication error |
-2 | Incorrect template status |
-4 | Timestamp expires |
-5 | System exception ! |
-6 | Restricted IP access |
-7 | json parse exception, plase check you param's type and json format |
-8 | Abnormal parameter verification |
-10 | Application does not exist |
-11 | The application name already exists |
-12 | Network exception or parameter error |
-14 | Account not authenticated |
-16 | the same name template is deleted and cannot be used again within one month |
-18 | The fileId cannot be blank |
-19 | The fileId cannot be blank |
-21 | The header message is too long. |
-23 | Button type cannot be empty |
-24 | The quantity of buttons are too many |
-32 | The current templateName and language already exist |
-33 | The elementName format is incorrect. |
-34 | Template content cannot have continuous variables |
-37 | Error creating template |
-38 | It is failed to delete the template,current template was not found. |
-40 | Example file too large |
-74 | The languageCode format err |
-75 | The template type does not match the existing type. |
-76 | Please enter the correct type |
-77 | Please enter the correct format PhoneNumber and areaCode |
-78 | Please enter the correct language |
-82 | The bodyExample is too long |
-83 | Please enter the correct format params |
-84 | The text cannot be empty |
-86 | Template body type cannot be null |
-87 | Template footer type cannot be null |
-88 | Template footer text is too long |
-89 | Template component cannot be null |
-90 | The header cannot have continuous variables |
-91 | The number of variables in the header text does not match the number of examples. or The number of variables in the header text can not greater than one |
-92 | The text length cannot be greater than 25 |
-99 | The channelType error ! |
-100 | header format cannot be empty case type is text |
-101 | Please enter the correct format value |
-102 | Please enter the correct of button type, only OTP is supported(type:3) |
-103 | Body text not be null when type not 0 (AUTHENTICATION) |
-104 | The body add security recommendation param error |
-105 | Template footer text length cannot more than 60 |
-106 | code_expiration_minutes must be lower or equal to 90 |
-107 | This app have not app alias! |
-108 | Button otp_type cannot be empty |
-109 | when template type is 0 (AUTHENTICATION), buttons cannot be empty |
Java
PHP
REQUEST
package com.itniotech.api.demo.im; import cn.hutool.core.map.MapUtil; import cn.hutool.crypto.SecureUtil; import cn.hutool.http.Header; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Arrays; import java.util.HashMap; import java.util.Map; private static void createTemplate() { final String baseUrl = "https://api.itniotech.com/wa/"; final String apiKey = "your api key"; final String apiPwd = "your api secret"; final String appId = "your appid"; final String templateName = "template name"; //the template name final String language = "language code"; // the template support language final int channelType = 0; //channelType: 0-WhatsApp, default is 0 final int type = 1; final String url = baseUrl.concat("template/add"); HttpRequest request = HttpRequest.post(url); // currentTime final String datetime = String.valueOf(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond()); final String sign = SecureUtil.md5(apiKey.concat(apiPwd).concat(datetime)); request.header(Header.CONNECTION, "Keep-Alive") .header(Header.CONTENT_TYPE, "application/json;charset=UTF-8") .header("Sign", sign) .header("Timestamp", datetime) .header("Api-Key", apiKey); String headerJson = "{"type":"HEADER","format":0,"text":"OTP is currently in {{#}} activity","example":{"header_text":["Discounts"]}}"; String bodyValJson = "{"type":"BODY","text":"The company is newly opened, and {{#}} activities are in full swing","example":{"body_text":[["Discounts"]]}}"; String footerJson = "{"type":"FOOTER","text":"ITNIOTECH"}"; Map componentsMap = MapUtil.builder("header", JSONUtil.parseObj(headerJson)) .put("body", JSONUtil.parseObj(bodyValJson)) .put("footer", JSONUtil.parseObj(footerJson)) .build(); String body = JSONUtil.createObj() .set("appId", appId) .set("channelType", channelType) .set("templateName", templateName) .set("type", type) .set("components", componentsMap) .set("language", language) .toString(); HttpResponse response = request.body(body).execute(); if (response.isOk()) { String result = response.body(); System.out.println(result); } }
REQUEST
//创建消息模板 header('content-type:text/html;charset=utf8'); $apiKey = "your api key"; $apiSecret = "your api secret"; $appId = "your appid"; $timeStamp = time(); $sign = md5($apiKey.$apiSecret.$timeStamp); $headers = array('Content-Type:application/json;charset=UTF-8',"Sign:$sign","Timestamp:$timeStamp","Api-Key:$apiKey"); $url = "https://api.itniotech.com/wa/template/add"; $dataArr["appId"] = $appId; $dataArr["channelType"] = 0; $dataArr["templateName"] = "template name"; $dataArr["type"] = 1; $dataArr["language"] = "language code"; $headerArray = array( array( "type" => "HEADER", "format" => 0, "text" => "OTP is currently in {{#}} activity", "example" => array( "header_text" => "Discounts" ) ) ); $bodyArray = array( array( "type" => "BODY", "text" => "The company is newly opened, and {{#}} activities are in full swing", "example" => array( "body_text" => "Discounts" ) ) ); $footerArray = array( array( "type" => "FOOTER", "text" => "ITNIOTECH" ) ); $dataArr["components"] = array( 'header' => $headerArray, 'body' => $bodyArray, 'footer' => $footerArray ); $data = json_encode($dataArr); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 600); curl_setopt($ch, CURLOPT_HTTPHEADER,$headers); curl_setopt($ch, CURLOPT_POSTFIELDS , $data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); $output = curl_exec($ch); curl_close($ch); var_dump($output);
RESPONSEEXAMPLE
{ "status": "0", "reason": "success", "data": { "templateId": "0bd9ea48738d4d0db667b1e1f50020a9", "templateName": "itnio_template_xk_test", "type": 1, "languageCode": "en", "status": "APPROVED" } }