API การจัดการเทมเพลต
ภาพรวม
Template Management API ช่วยให้คุณสร้าง อ่าน อัปเดต และลบเทมเพลตของ WABA ได้ รวมถึงจัดกลุ่มเทมเพลตด้วยแท็กที่กำหนดเอง เอกสารนี้ครอบคลุม endpoint สองกลุ่ม ได้แก่
- Endpoint ของเทมเพลต: ดึงรายการเทมเพลต, ดูข้อมูลเทมเพลต, อัปโหลดไฟล์สื่อตัวอย่าง, สร้างเทมเพลต, อัปเดตเทมเพลต, ลบเทมเพลต
- Endpoint ของแท็ก: ดึงรายการแท็กเทมเพลต, สร้างแท็กเทมเพลต, แก้ไขแท็กเทมเพลต, ลบแท็กเทมเพลต, กำหนดแท็กให้เทมเพลต แท็กมีผลภายใน WABA ที่ API key ปัจจุบันสังกัดอยู่ ใช้สำหรับการจัดการเทมเพลตฝั่ง EngageLab เท่านั้น ไม่แก้ไขเนื้อหาเทมเพลตของ WhatsApp และไม่ทำให้ Meta ตรวจสอบใหม่
การยืนยันตัวตน
EngageLab REST API ใช้ HTTP Basic Authentication สำหรับการตรวจสอบ: เพิ่ม Authorization ใน HTTP Header:
Authorization: Basic ${base64_auth_string}
base64_auth_string ถูกสร้างดังนี้: base64(dev_key:dev_secret)
- ชื่อ header คือ "Authorization" และค่าคือคู่ "username:password" ที่เข้ารหัส base64 (มีเครื่องหมายโคลอนคั่นกลาง)
- ในบริบทของ WhatsApp API, username คือ DevKey และ password คือ DevSecret กรุณารับข้อมูลนี้จากหน้า Console - การจัดการการตั้งค่า - API Keys
ดึงรายการเทมเพลต
Endpoint
GET https://wa.api.engagelab.cc/v1/templates
พารามิเตอร์คำขอ
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| name | String | ไม่บังคับ | ชื่อเทมเพลต โปรดทราบว่าฟิลด์นี้ใช้การจับคู่แบบบางส่วน |
| language_code | String | ไม่บังคับ | ภาษาของเทมเพลต ดูที่ รหัสภาษา |
| category | String | ไม่บังคับ | หมวดหมู่ของเทมเพลต ● AUTHENTICATION: รหัสยืนยัน ● MARKETING: การตลาด ● UTILITY: การแจ้งเตือนบริการ |
| status | String | ไม่บังคับ | สถานะของเทมเพลต: สถานะที่นักพัฒนาควรให้ความสำคัญเป็นหลักคือ APPROVED/PENDING/REJECTED/DISABLED |
| tag_id | String | ไม่บังคับ | รหัสแท็ก ใช้สำหรับกรองเทมเพลตตามแท็ก ค่าที่รองรับ:ungrouped - คืนเฉพาะเทมเพลตที่ยังไม่ได้กำหนดแท็กใด ๆ โดยไม่แยกตัวพิมพ์ใหญ่-เล็ก |
tag_id มีความสัมพันธ์แบบ AND กับเงื่อนไขการค้นหาอื่น ๆ เช่น name, language_code, category และ status ปัจจุบันยังไม่รองรับการส่งหลายแท็กพร้อมกัน หากรูปแบบ tag_id ไม่ถูกต้อง จะคืนรหัสข้อผิดพลาด 3002 และหากไม่พบแท็กหรือแท็กไม่ได้อยู่ใน WABA ปัจจุบัน จะคืนรหัสข้อผิดพลาด 4001
หมายเหตุ: หากใน WABA มีแท็กชื่อ "ungrouped" (หรือคำแปลที่เทียบเท่า) การกรองตามแท็กนั้นต้องส่งรหัสแท็กที่เป็นตัวเลข การส่ง ungrouped โดยตรงจะถูกตีความว่า "กรองเทมเพลตที่ยังไม่ได้กำหนดแท็ก" เสมอ
ตัวอย่างคำขอ
กรองตามแท็ก:
GET https://wa.api.engagelab.cc/v1/templates?tag_id=101
กรองเทมเพลตที่ยังไม่ได้กำหนดแท็ก:
GET https://wa.api.engagelab.cc/v1/templates?tag_id=ungrouped
พารามิเตอร์การตอบกลับ
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| id | String | จำเป็น | รหัสเทมเพลต |
| name | String | จำเป็น | ชื่อเทมเพลต |
| language | String | จำเป็น | ภาษาของเทมเพลต ดูที่ รหัสภาษา |
| category | String | จำเป็น | หมวดหมู่ของเทมเพลต |
| components | Object Array | จำเป็น | องค์ประกอบของเนื้อหาเทมเพลต ดูที่ ออบเจ็กต์ components ในหัวข้อสร้างเทมเพลต |
| status | String | จำเป็น | สถานะของเทมเพลต: สถานะที่นักพัฒนาควรให้ความสำคัญเป็นหลักคือ APPROVED/PENDING/REJECTED/DISABLED |
| tags | Object Array | จำเป็น | แท็กที่กำหนดให้เทมเพลตนี้ในปัจจุบัน หากยังไม่ได้กำหนดแท็กจะคืนอาร์เรย์ว่าง |
ตัวอย่างการตอบกลับ
// อาร์เรย์ JSON ที่แต่ละออบเจ็กต์คือข้อมูลของเทมเพลตหนึ่งรายการ
[
{
"id": "406979728071589", // รหัสเทมเพลต
"name": "code", // ชื่อเทมเพลต
"language": "zh_CN", // ภาษาของเทมเพลต
"status": "APPROVED", // สถานะ; APPROVED หมายถึงอนุมัติแล้วและใช้งานได้
"category": "OTP", // หมวดหมู่; ปัจจุบันรองรับ OTP/TRANSACTIONAL/MARKETING
"components": [ // เนื้อหาเทมเพลต; อาจมี HEADER/BODY/FOOTER/BUTTON
{
"type": "HEADER",
"format": "text", // รูปแบบ; รองรับ text/image/location/video/document ค่าเริ่มต้นคือ TEXT
"text": "รหัสยืนยันการลงทะเบียน" // เนื้อหาข้อความ; จำเป็นเมื่อ format เป็น text
},
{
"type": "BODY",
"text": "รหัสยืนยันของคุณคือ {{1}} กรุณากรอกภายใน 5 นาที" // ข้อความที่อยู่ในวงเล็บปีกกาคู่ {{}} คือตัวแปรของเทมเพลต
}
],
"tags": [ // แท็กที่กำหนดให้เทมเพลตนี้; อาร์เรย์ว่างหากยังไม่ได้กำหนดแท็ก
{
"id": "101",
"name": "แจ้งเตือนการจัดส่ง"
}
]
},
......
]
ดูข้อมูลเทมเพลต
Endpoint
GET https://wa.api.engagelab.cc/v1/templates/{template_id}
โดย {template_id} คือรหัสของเทมเพลตที่ต้องการดู
พารามิเตอร์คำขอ
NULL
ตัวอย่างคำขอ
GET https://wa.api.engagelab.cc/v1/templates/406979728071589
พารามิเตอร์การตอบกลับ
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| id | String | จำเป็น | รหัสเทมเพลต |
| name | String | จำเป็น | ชื่อเทมเพลต |
| language | String | จำเป็น | ภาษาของเทมเพลต ดูที่ รหัสภาษา |
| category | String | จำเป็น | หมวดหมู่ของเทมเพลต หมายเหตุ: หมวดหมู่เทมเพลตได้รับการปรับปรุงอย่างช้าที่สุดในวันที่ 1 พฤษภาคม 2023 เป็น: |
| components | Object Array | จำเป็น | องค์ประกอบของเนื้อหาเทมเพลต ดูที่ ออบเจ็กต์ components ในหัวข้อสร้างเทมเพลต |
| status | String | จำเป็น | สถานะของเทมเพลต: APPROVED, IN_APPEAL, PENDING, REJECTED, PENDING_DELETION, DELETED, DISABLED, PAUSED, LIMIT_EXCEEDED |
| tags | Object Array | จำเป็น | แท็กที่กำหนดให้เทมเพลตนี้ในปัจจุบัน หากยังไม่ได้กำหนดแท็กจะคืนอาร์เรย์ว่าง |
ตัวอย่างการตอบกลับ
{
"id": "406979728071589", // รหัสเทมเพลต
"name": "code", // ชื่อเทมเพลต
"language": "zh_CN", // ภาษาของเทมเพลต
"status": "APPROVED", // สถานะ; APPROVED หมายถึงอนุมัติแล้วและใช้งานได้
"category": "OTP", // หมวดหมู่; ปัจจุบันรองรับ OTP/TRANSACTIONAL/MARKETING
"components": [ // เนื้อหาเทมเพลต; อาจมี HEADER/BODY/FOOTER/BUTTON
{
"type": "HEADER",
"format": "text", // รูปแบบ; รองรับ text/image/location/video/document ค่าเริ่มต้นคือ TEXT
"text": "รหัสยืนยันการลงทะเบียน" // เนื้อหาข้อความ; จำเป็นเมื่อ format เป็น text
},
{
"type": "BODY",
"text": "รหัสยืนยันของคุณคือ {{1}} กรุณากรอกภายใน 5 นาที" // ข้อความที่อยู่ในวงเล็บปีกกาคู่ {{}} คือตัวแปรของเทมเพลต
}
],
"tags": [ // แท็กที่กำหนดให้เทมเพลตนี้; อาร์เรย์ว่างหากยังไม่ได้กำหนดแท็ก
{
"id": "101",
"name": "แจ้งเตือนการจัดส่ง"
}
]
}
อัปโหลดไฟล์สื่อตัวอย่าง
เมื่อสร้างหรือแก้ไขเทมเพลตที่มีส่วนหัวเป็นสื่อ (image, video, document) Meta กำหนดให้ต้องอัปโหลดไฟล์สื่อไปยังเซิร์ฟเวอร์ของ Meta ก่อน API นี้ทำหน้าที่อัปโหลดไฟล์ตัวอย่างของเทมเพลตและคืนค่า handle_id ซึ่งต้องนำไปกรอกในฟิลด์ header_handle ของ endpoint สร้าง/แก้ไขเทมเพลต
Endpoint
POST https://wa.api.engagelab.cc/v1/media/handles
พารามิเตอร์คำขอ
Content-Type: multipart/form-data
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| file | file | จำเป็น | ไฟล์สื่อตัวอย่าง ขนาดสูงสุด 20 MB สำหรับข้อกำหนดด้านรูปแบบ ดูที่ ข้อกำหนดรูปแบบข้อความสื่อ |
ตัวอย่างคำขอ
POST '/v1/media/handles'
--header 'Authorization: Basic amlndWFuZ2RldjpkZXZfc2VjcmV0'
--form 'file=@"/Users/demo/files/demopic.jpeg"'
พารามิเตอร์การตอบกลับ
การตอบกลับเมื่อสำเร็จ
| ฟิลด์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| handle_id | String | จำเป็น | ตัวระบุไฟล์ที่ Meta คืนกลับมา ใช้กรอกในฟิลด์ example.header_handle เมื่อสร้างหรือแก้ไขเทมเพลต |
ตัวอย่างการตอบกลับ:
{
"handle_id": "4::aW1hZ2UvanBlZw==:ARb2JGd8LbvJbfmpMASFAlczcn4hxLC6tkwjasjD4WL6_i34tIisq0IdWNFFFj1KwJMRXPU4xwygHSJd4DHu1f19LcBBl2qeb8EuEcgnIUPYIQ:e:1682169041:4985146461608173:100084026087657:ARazr9kxfzKshJE4WpY"
}
การตอบกลับเมื่อล้มเหลว
รหัสสถานะ HTTP เป็น 4xx หรือ 5xx และเนื้อหาการตอบกลับประกอบด้วยฟิลด์ต่อไปนี้:
| ฟิลด์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| code | int | จำเป็น | รหัสข้อผิดพลาด |
| message | String | จำเป็น | รายละเอียดข้อผิดพลาด |
ตัวอย่างการตอบกลับ:
{
"code": 3002,
"message": "whatsapp.template field must be set correctly when type is template"
}
สร้างเทมเพลต
Endpoint
POST https://wa.api.engagelab.cc/v1/templates
ตัวอย่างการเรียกใช้
{
"name": "template_name", // ชื่อเทมเพลต; อนุญาตให้ใช้ชื่อซ้ำได้; รองรับเฉพาะตัวพิมพ์เล็ก ตัวเลข และขีดล่าง
"language": "zh_CN", // ภาษาของเทมเพลต; เทมเพลตชื่อเดียวกันห้ามใช้ภาษาซ้ำกัน
"category": "OTP", // หมวดหมู่; ปัจจุบันรองรับ OTP/TRANSACTIONAL/MARKETING
"components": [
{ // เนื้อหาเทมเพลต
"type": "BODY", // บล็อกเนื้อหา; ปัจจุบันรองรับ HEADER/BODY/FOOTER/BUTTONS
"text": "define var as {{1}}" // ตัวข้อความ; ไม่ต้องส่งฟิลด์ format เมื่อ body เป็นข้อความ
"example": {
"body_text": [
[
"var1"
]
]
}
},
{
"type": "HEADER",
"format": "image", // ประเภทเนื้อหา; รองรับ text/image/video/document/location
"example": {
"header_handle": [
"https://jiguang.cn/demopic.jpg"
]
}
},
{
"type": "FOOTER",
"text": "footer only support text without variable"
},
{
"type": "BUTTONS",
"buttons": [
{
"type": "PHONE_NUMBER", // ประเภทปุ่ม; รองรับ PHONE_NUMBER/URL/QUICK_REPLY
"text": "this is a phone number",
"phone_number": "8613800138000"
}
]
}
]
}
พารามิเตอร์คำขอ
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| name | String | จำเป็น | ชื่อเทมเพลต รองรับเฉพาะตัวพิมพ์เล็ก ตัวเลข และขีดล่าง ไม่เกิน 512 อักขระ |
| language | String | จำเป็น | ภาษาของเทมเพลต ดูที่ รหัสภาษา |
| category | String | จำเป็น | หมวดหมู่ของเทมเพลต หมายเหตุ: หมวดหมู่เทมเพลตได้รับการปรับปรุงอย่างช้าที่สุดในวันที่ 1 พฤษภาคม 2023 เป็น: |
| components | Object Array | จำเป็น | องค์ประกอบที่อธิบายเนื้อหาเทมเพลต ดูคำอธิบายที่ ออบเจ็กต์ components โปรดทราบว่าต้องมี components ที่มี type=BODY เสมอ |
ออบเจ็กต์ components
ออบเจ็กต์นี้ใช้อธิบายเนื้อหาเทมเพลต เทมเพลตแบ่งออกเป็นองค์ประกอบ "ส่วนหัว HEADER" "เนื้อความ BODY" "ส่วนท้าย FOOTER" และ "ปุ่ม BUTTONS" โดยระบุด้วย type องค์ประกอบแต่ละประเภทรองรับพารามิเตอร์ต่างกัน ดังนี้
องค์ประกอบ header (ส่วนหัว)
องค์ประกอบ header เป็นตัวเลือกทั้งหมด หากไม่ต้องการส่วนหัว ก็ไม่ต้องกำหนดองค์ประกอบนี้
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| type | String | จำเป็น | ประเภทองค์ประกอบ ค่าคือ HEADER |
| format | String | จำเป็น | รูปแบบของส่วนหัว ค่าที่ใช้ได้: text, image, video, document ซึ่งหมายถึงข้อความ รูปภาพ วิดีโอ และไฟล์ ตามลำดับ |
| text | String | ไม่บังคับ | เนื้อหาข้อความของส่วนหัว ต้องกำหนดฟิลด์นี้เมื่อ format=text ข้อความส่วนหัวสามารถมีตัวแปรได้ แต่รองรับเพียง 1 ตัวแปร เขียนแทนด้วย {{1}} |
| example | JSON Object | ไม่บังคับ | ตัวอย่างส่วนหัว จำเป็นเมื่อ text มีตัวแปร หรือ format เป็นประเภทสื่อ ดูที่ คำอธิบายออบเจ็กต์ example |
คำอธิบายออบเจ็กต์ example
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| header_handle | String Array | ไม่บังคับ | จำเป็นเมื่อ format เป็น image, video หรือ document ฟิลด์นี้ไม่รองรับการส่ง URL ของสื่ออีกต่อไป ต้องส่ง handle_id ที่ได้จาก API อัปโหลดไฟล์สื่อตัวอย่าง |
| header_text | String Array | ไม่บังคับ | เมื่อ format เป็น text และมีตัวแปร ให้ส่งค่าแทนที่ของตัวแปรนั้นในฟิลด์นี้ เช่น "header_text": ["var1"] |
องค์ประกอบ body (เนื้อความ)
องค์ประกอบ body เป็นสิ่งจำเป็น ต้องกำหนดเนื้อหาของเนื้อความ
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| type | String | จำเป็น | ประเภทองค์ประกอบ ค่าคือ BODY |
| text | String | จำเป็น | เนื้อหาของเนื้อความ ยาวไม่เกิน 1024 อักขระ รองรับการกำหนดหลายตัวแปร ตัวแปรประกอบด้วยวงเล็บปีกกาคู่และหมายเลขตัวแปร โดยหมายเลขต้องเริ่มจาก 1 และเรียงเพิ่มขึ้น เช่น {{1}} และ {{2}} |
| example | JSON Object | ไม่บังคับ | ตัวอย่างเนื้อความ ผู้ตรวจสอบของ Meta จะใช้ตัวอย่างนี้พิจารณาว่าข้อความของคุณเป็นไปตามข้อกำหนดหรือไม่ ดูที่ คำอธิบายออบเจ็กต์ example จำเป็นเมื่อ text มีตัวแปร |
คำอธิบายออบเจ็กต์ example
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| body_text | String Array | ไม่บังคับ | เมื่อ text มีตัวแปร ต้องส่งค่าแทนที่ของตัวแปรทั้งหมดในฟิลด์นี้ ตามลำดับหมายเลขตัวแปร เช่น "body_text": [["var1","var2","var3"]] |
องค์ประกอบ footer (ส่วนท้าย)
องค์ประกอบ footer เป็นตัวเลือกทั้งหมด หากไม่ต้องการส่วนท้าย ก็ไม่ต้องกำหนดองค์ประกอบนี้
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| type | String | จำเป็น | ประเภทองค์ประกอบ ค่าคือ FOOTER |
| text | String | จำเป็น | เนื้อหาส่วนท้าย กำหนดได้เฉพาะข้อความล้วน ไม่สามารถกำหนดตัวแปรได้ |
องค์ประกอบ buttons (ปุ่ม)
องค์ประกอบ buttons เป็นตัวเลือกทั้งหมด หากไม่ต้องการปุ่ม ก็ไม่ต้องกำหนดองค์ประกอบนี้
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| type | String | จำเป็น | ประเภทองค์ประกอบ ค่าคือ BUTTONS |
| buttons | Object Array | จำเป็น | ข้อมูลของปุ่ม ดูที่ คำอธิบายออบเจ็กต์ buttons |
คำอธิบายออบเจ็กต์ buttons
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| type | String | จำเป็น | ประเภทปุ่ม ค่าที่ใช้ได้: QUICK_REPLY, URL, PHONE_NUMBER ซึ่งหมายถึงตอบกลับด่วน เปิดเว็บไซต์ และโทรออก ตามลำดับ |
| text | String | จำเป็น | ข้อความที่แสดงบนปุ่ม ห้ามมีตัวแปร ต้องเป็นข้อความล้วน ยาวไม่เกิน 25 อักขระ |
| url | String | ไม่บังคับ | จำเป็นเมื่อ type=URL สามารถใส่ตัวแปรไว้ท้าย URL ได้ แต่รองรับเพียง 1 ตัวแปร เขียนแทนด้วย {{1}} |
| phone_number | String | ไม่บังคับ | จำเป็นเมื่อ type=PHONE_NUMBER ห้ามมีตัวแปร เนื้อหาคือหมายเลขโทรศัพท์ที่มีรหัสประเทศ |
| example | String Array | ไม่บังคับ | จำเป็นเมื่อ type=QUICK_REPLY และ type=URL เช่น "example": [" https://www.website.com/dynamic-url-example"] |
ข้อควรทราบเฉพาะสำหรับเทมเพลตยืนยันตัวตน
ข้อควรระวัง
สำหรับเทมเพลตในหมวดหมู่การยืนยันตัวตน (คือ AUTHENTICATION):
- อย่ากำหนดองค์ประกอบ HEADER ใน Components
- ข้อความเนื้อหาของเทมเพลตจะถูกแปลตามท้องถิ่นโดยอัตโนมัติตามฟิลด์ language ของเทมเพลต
- สำหรับโหมด ONE_TAP ที่เปิดแอป ปัจจุบันรองรับเฉพาะแอปพลิเคชัน Android และ คุณต้องดำเนินการ handshake ที่เกี่ยวข้องในแอปของคุณ ดูคู่มือการใช้งานโดยละเอียดได้ที่เอกสารทางการ - เทมเพลตยืนยันตัวตน
- ฟิลด์พารามิเตอร์ที่ส่งตอนสร้างเทมเพลตจะไม่ตรงกับฟิลด์เทมเพลตที่บันทึกไว้ฝั่ง WhatsApp หลังสร้างสำเร็จ โดยพื้นฐานแล้วฝั่ง WhatsApp จะแทนที่ BODY, FOOTER และ BUTTONS ของเทมเพลตหมวดหมู่นี้ ดังนั้นเมื่อส่งข้อความเทมเพลตโปรดระมัดระวังเป็นพิเศษ คุณต้องเพิ่มตัวแปรของปุ่ม รายละเอียดดูที่ เอกสาร API ส่งข้อความ
ตัวอย่าง COPY_CODE
ข้อมูลที่ส่ง:
{
"name": "copycodetmpl",
"language": "zh_CN",
"category": "AUTHENTICATION",
"components": [
{
// body เป็นสิ่งจำเป็น
"type": "BODY",
"add_security_recommendation": true // จะเพิ่มข้อความแนะนำด้านความปลอดภัยหรือไม่
},
{
// footer เป็นตัวเลือก
"type": "FOOTER",
"code_expiration_minutes": 2 // เพิ่มการแสดงเวลาหมดอายุ ช่วง [1,90]; หากไม่ต้องการก็ไม่ต้องส่งฟิลด์นี้
},
{
"type": "BUTTONS",
"buttons": [
{
"type": "OTP",
"otp_type": "copy_code",
"text": "copy it" // จำกัดความยาว 25 อักขระ
}
]
}
]
}
เนื้อหาเทมเพลตที่ฝั่ง WhatsApp ได้รับจริงหลังสร้างสำเร็จ:
{
"name": "copycodetmpl",
"language": "zh_CN",
"category": "AUTHENTICATION",
"components": [
{
"type": "BODY",
"text": "*{{1}}* คือรหัสยืนยันของคุณ เพื่อความปลอดภัย กรุณาอย่าแชร์รหัสนี้",
"example": {
"body_text": [
["123456"]
]
}
},
{
"type": "FOOTER",
"text": "รหัสนี้จะหมดอายุใน 2 นาที"
},
{
"type": "BUTTONS",
"buttons": [{
"type": "URL",
"text": "Copy code",
"url": "https://www.whatsapp.com/otp/code/?otp_type=COPY_CODE&code=otp{{1}}",
"example": [
"https://www.whatsapp.com/otp/code/?otp_type=COPY_CODE&code=otp123456"
]
}]
}
]
}
ตัวอย่าง ONE_TAP
ข้อมูลที่ส่ง:
{
"name": "copycodetmpl",
"language": "zh_CN",
"category": "AUTHENTICATION",
"components": [
{
// body เป็นสิ่งจำเป็น
"type": "BODY",
"add_security_recommendation": true // จะเพิ่มข้อความแนะนำด้านความปลอดภัยหรือไม่
},
{
// footer เป็นตัวเลือก
"type": "FOOTER",
"code_expiration_minutes": 2 // เพิ่มการแสดงเวลาหมดอายุ ช่วง [1,90]; หากไม่ต้องการก็ไม่ต้องส่งฟิลด์นี้
},
{
"type": "BUTTONS",
"buttons": [
{
"type": "OTP",
"otp_type": "one_tap",
"text": "auto1", // จำกัดความยาว 25 อักขระ
"autofill_text": "auto1", // จำกัดความยาว 25 อักขระ
"package_name": "ppssd",
"signature_hash": "asds"
}
]
}
]
}
เนื้อหาเทมเพลตที่ฝั่ง WhatsApp ได้รับจริงหลังสร้างสำเร็จ:
{
"name": "copycodetmpl",
"language": "zh_CN",
"category": "AUTHENTICATION",
"components": [
{
"type": "BODY",
"text": "*{{1}}* คือรหัสยืนยันของคุณ เพื่อความปลอดภัย กรุณาอย่าแชร์รหัสนี้",
"example": {
"body_text": [
["123456"]
]
}
},
{
"type": "FOOTER",
"text": "รหัสนี้จะหมดอายุใน 2 นาที"
},
{
"type": "BUTTONS",
"buttons": [{
"type": "URL",
"text": "copy1",
"url": "https://www.whatsapp.com/otp/code/?otp_type=ONE_TAP&cta_display_name=auto1&package_name=ppssd&signature_hash=asds&code=otp{{1}}",
"example": ["https://www.whatsapp.com/otp/code/?otp_type=ONE_TAP&cta_display_name=auto1&package_name=ppssd&signature_hash=asds&code=otp123456"]
}]
}
]
}
พารามิเตอร์การตอบกลับ
การตอบกลับเมื่อสำเร็จ
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| template_id | String | จำเป็น | รหัสเทมเพลต คืนค่าเมื่อสำเร็จ |
{
"template_id": "1275172986566180" // รหัสเทมเพลต
}
การตอบกลับเมื่อล้มเหลว
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| code | int | จำเป็น | รหัสข้อผิดพลาด คืนค่าเมื่อล้มเหลว |
| message | String | จำเป็น | ข้อความแสดงข้อผิดพลาด คืนค่าเมื่อล้มเหลว |
{
"code": 5002,
"message": "Invalid parameter. code:100:2388042"
}
อัปเดตเทมเพลต
Endpoint
PUT https://wa.api.engagelab.cc/v1/templates/{templateId}
ตัวอย่างการเรียกใช้
{
"components": [{ // เนื้อหาเทมเพลต
"type": "BODY", // บล็อกเนื้อหา
"text": "define var as {{1}}",
"example": {
"body_text": [["var1"]]
}
},{
"type": "HEADER",
"format": "image", // ประเภทเนื้อหา: image/video/document
"example": {
// หมายเหตุ: ตรงนี้ต้องกรอก handle_id ที่ได้จาก endpoint อัปโหลด ไม่รองรับการกรอก URL รูปภาพโดยตรงอีกต่อไป
"header_handle": ["4::aW1hZ2UvanBlZw==:ARb2JGd8LbvJbfmpMASFAlcz..."]
}
},{
"type": "FOOTER",
"text": "footer only support text without variable"
},{
"type": "BUTTONS",
"buttons": [{
"type": "PHONE_NUMBER",
"text": "this is a phone number",
"phone_number": "8613800138000"
}]
}]
}
พารามิเตอร์คำขอ
เหมือนกับ พารามิเตอร์คำขอ ของ endpoint สร้างเทมเพลต
พารามิเตอร์การตอบกลับ
การตอบกลับเมื่อสำเร็จ
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| code | int | จำเป็น | รหัสตอบกลับ คงที่เป็น 0 |
| message | String | จำเป็น | ข้อความตอบกลับ คงที่เป็น success |
{
"code": 0,
"message": "success"
}
การตอบกลับเมื่อล้มเหลว
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| code | int | จำเป็น | รหัสข้อผิดพลาด คืนค่าเมื่อล้มเหลว |
| message | String | จำเป็น | ข้อความแสดงข้อผิดพลาด คืนค่าเมื่อล้มเหลว |
{
"code": 5002,
"message": "Invalid parameter. code:100:2593002"
}
ลบเทมเพลต
Endpoint
DELETE https://wa.api.engagelab.cc/v1/templates/{template_name}
หมายเหตุ: ค่าที่ส่งตรงนี้คือชื่อเทมเพลต ไม่ใช่รหัสเทมเพลต ระบบจะลบเนื้อหาเทมเพลตของทุกภาษาที่ใช้ชื่อนี้
พารามิเตอร์การตอบกลับ
การตอบกลับเมื่อสำเร็จ
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| code | int | จำเป็น | รหัสตอบกลับ คงที่เป็น 0 |
| message | String | จำเป็น | ข้อความตอบกลับ คงที่เป็น success |
{
"code": 0,
"message": "success"
}
การตอบกลับเมื่อล้มเหลว
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| code | int | จำเป็น | รหัสข้อผิดพลาด คืนค่าเมื่อล้มเหลว |
| message | String | จำเป็น | ข้อความแสดงข้อผิดพลาด คืนค่าเมื่อล้มเหลว |
{
"code": 2004,
"message": "something error"
}
ดึงรายการแท็กเทมเพลต
คืนค่าแท็กทั้งหมดภายใต้ WABA ที่ API key ปัจจุบันสังกัดอยู่ โดยไม่แบ่งหน้า
Endpoint
GET https://wa.api.engagelab.cc/v1/template-tags
พารามิเตอร์คำขอ
NULL
ตัวอย่างคำขอ
GET https://wa.api.engagelab.cc/v1/template-tags
พารามิเตอร์การตอบกลับ
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| id | String | จำเป็น | รหัสแท็ก |
| name | String | จำเป็น | ชื่อแท็ก |
| template_count | Integer | จำเป็น | จำนวนเทมเพลตใน WABA ปัจจุบันที่กำหนดแท็กนี้ไว้ เทมเพลตชื่อเดียวกันที่มีหลายภาษาจะนับแยกตามรหัสเทมเพลต |
ตัวอย่างการตอบกลับ
[
{
"id": "101",
"name": "แจ้งเตือนการจัดส่ง",
"template_count": 3
},
{
"id": "102",
"name": "บริการหลังการขาย",
"template_count": 0
}
]
หาก WABA ยังไม่มีแท็ก จะคืนอาร์เรย์ว่าง []
สร้างแท็กเทมเพลต
Endpoint
POST https://wa.api.engagelab.cc/v1/template-tags
พารามิเตอร์คำขอ
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| name | String | จำเป็น | ชื่อแท็ก ความยาว 1–64 อักขระ ดูข้อกำหนดการตั้งชื่อที่ กฎการตั้งชื่อแท็ก |
ตัวอย่างคำขอ
{
"name": "แจ้งเตือนการจัดส่ง"
}
พารามิเตอร์การตอบกลับ
การตอบกลับเมื่อสำเร็จ
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| id | String | จำเป็น | รหัสแท็ก |
| name | String | จำเป็น | ชื่อแท็กหลังผ่านการทำให้เป็นมาตรฐาน |
{
"id": "101",
"name": "แจ้งเตือนการจัดส่ง"
}
การตอบกลับเมื่อล้มเหลว
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| code | int | จำเป็น | รหัสข้อผิดพลาด คืนค่าเมื่อล้มเหลว |
| message | String | จำเป็น | ข้อความแสดงข้อผิดพลาด คืนค่าเมื่อล้มเหลว |
{
"code": 3003,
"message": "template tag name already exists"
}
แก้ไขแท็กเทมเพลต
Endpoint
PUT https://wa.api.engagelab.cc/v1/template-tags/{tag_id}
โดย {tag_id} คือรหัสของแท็กที่ต้องการแก้ไข
พารามิเตอร์คำขอ
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| name | String | จำเป็น | ชื่อแท็กใหม่ ความยาว 1–64 อักขระ ดูข้อกำหนดการตั้งชื่อที่ กฎการตั้งชื่อแท็ก |
ตัวอย่างคำขอ
{
"name": "บริการหลังการขาย"
}
พารามิเตอร์การตอบกลับ
การตอบกลับเมื่อสำเร็จ
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| id | String | จำเป็น | รหัสแท็ก |
| name | String | จำเป็น | ชื่อแท็กหลังแก้ไข |
{
"id": "101",
"name": "บริการหลังการขาย"
}
การตอบกลับเมื่อล้มเหลว
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| code | int | จำเป็น | รหัสข้อผิดพลาด คืนค่าเมื่อล้มเหลว |
| message | String | จำเป็น | ข้อความแสดงข้อผิดพลาด คืนค่าเมื่อล้มเหลว |
{
"code": 4001,
"message": "template tag not found"
}
ลบแท็กเทมเพลต
Endpoint
DELETE https://wa.api.engagelab.cc/v1/template-tags/{tag_id}
หมายเหตุ: การลบแท็กเป็นเพียงการยกเลิกความเชื่อมโยงระหว่างเทมเพลตกับแท็กนั้น ไม่ได้ลบเทมเพลต และไม่กระทบต่อการส่งเทมเพลต
โดย {tag_id} คือรหัสของแท็กที่ต้องการลบ
พารามิเตอร์คำขอ
NULL
ตัวอย่างคำขอ
DELETE https://wa.api.engagelab.cc/v1/template-tags/101
พารามิเตอร์การตอบกลับ
การตอบกลับเมื่อสำเร็จ
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| affected_template_count | Integer | จำเป็น | จำนวนเทมเพลตที่ถูกยกเลิกความเชื่อมโยงในครั้งนี้ เทมเพลตชื่อเดียวกันที่มีหลายภาษาจะนับแยกตามรหัสเทมเพลต |
{
"affected_template_count": 3
}
การตอบกลับเมื่อล้มเหลว
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| code | int | จำเป็น | รหัสข้อผิดพลาด คืนค่าเมื่อล้มเหลว |
| message | String | จำเป็น | ข้อความแสดงข้อผิดพลาด คืนค่าเมื่อล้มเหลว |
{
"code": 4001,
"message": "template tag not found"
}
กำหนดแท็กให้เทมเพลต
Endpoint
PUT https://wa.api.engagelab.cc/v1/templates/{template_id}/tags
หมายเหตุ: endpoint นี้เป็นการเขียนทับทั้งหมด ค่า tag_ids ที่ส่งคือชุดแท็กทั้งหมดของเทมเพลตหลังบันทึก แท็กเดิมที่ไม่ได้รวมอยู่ในชุดนี้จะถูกยกเลิกความเชื่อมโยง
โดย {template_id} คือรหัสของเทมเพลตที่ต้องการกำหนดแท็ก
พารามิเตอร์คำขอ
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| tag_ids | String Array | จำเป็น | ชุดรหัสแท็กทั้งหมดของเทมเพลตหลังบันทึก ต้องส่งอย่างชัดเจนและต้องไม่เป็น null รหัสทั้งหมดต้องอยู่ใน WABA ปัจจุบัน รหัสที่ซ้ำกันจะถูกตัดออกโดยอัตโนมัติ |
คำอธิบายค่า tag_ids:
- ส่ง
[]หมายถึงล้างแท็กทั้งหมดของเทมเพลตนั้น - หากไม่ส่ง tag_ids หรือส่งค่า
nullคำขอจะล้มเหลว และจะไม่ล้างแท็กเดิม - เมื่อคำขอล้มเหลว ชุดแท็กของเทมเพลตจะไม่เปลี่ยนแปลง จึงสามารถลองใหม่ได้ทันที
- ไม่จำกัดจำนวนแท็กต่อเทมเพลต สามารถส่งแท็กทั้งหมดของ WABA ปัจจุบันได้
ตัวอย่างคำขอ
{
"tag_ids": ["101", "102"]
}
พารามิเตอร์การตอบกลับ
การตอบกลับเมื่อสำเร็จ
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| code | int | จำเป็น | รหัสตอบกลับ คงที่เป็น 0 |
| message | String | จำเป็น | ข้อความตอบกลับ คงที่เป็น success |
{
"code": 0,
"message": "success"
}
การตอบกลับเมื่อล้มเหลว
| พารามิเตอร์ | ประเภท | ตัวเลือก | คำอธิบาย |
|---|---|---|---|
| code | int | จำเป็น | รหัสข้อผิดพลาด คืนค่าเมื่อล้มเหลว |
| message | String | จำเป็น | ข้อความแสดงข้อผิดพลาด คืนค่าเมื่อล้มเหลว |
ไม่พบเทมเพลตหรือเทมเพลตไม่ได้อยู่ใน WABA ปัจจุบัน:
{
"code": 4001,
"message": "template not found"
}
ไม่พบแท็กหรือแท็กไม่ได้อยู่ใน WABA ปัจจุบัน:
{
"code": 4001,
"message": "template tag not found"
}
ไม่ได้ส่ง tag_ids หรือส่งค่า null:
{
"code": 3002,
"message": "template tag IDs must be provided as an array"
}
รหัสข้อผิดพลาด
"Endpoint ของแท็ก" ในตารางด้านล่างหมายถึง endpoint ของแท็กทั้งห้ารายการที่ระบุไว้ใน ภาพรวม และรวมถึงกรณีการกรองด้วย tag_id ในการดึงรายการเทมเพลตด้วย
| รหัสข้อผิดพลาด | รหัส HTTP | Endpoint ที่เกี่ยวข้อง | คำอธิบาย |
|---|---|---|---|
| 1000 | 500 | ทุก endpoint | ข้อผิดพลาดภายใน |
| 2001 | 401 | ทุก endpoint | การยืนยันตัวตนฝั่ง EngageLab ล้มเหลว ไม่ได้แนบ token ที่มีรูปแบบข้อมูลถูกต้อง |
| 2002 | 401 | ทุก endpoint | การยืนยันตัวตนฝั่ง EngageLab ล้มเหลว token หมดอายุหรือถูกปิดใช้งาน |
| 2003 | 400 | ทุก endpoint | การยืนยันตัวตนฝั่ง WhatsApp ล้มเหลว กรุณาติดต่อฝ่ายบริการลูกค้าของ EngageLab |
| 2004 | 403 | ทุก endpoint | ไม่มีสิทธิ์เรียกใช้ API นี้ หรือบัญชีหรือ WABA ที่เกี่ยวข้องถูกปิดใช้งาน |
| 3001 | 400 | ทุก endpoint | รูปแบบพารามิเตอร์คำขอไม่ถูกต้อง กรุณาตรวจสอบว่าใช้รูปแบบ JSON และประเภทของฟิลด์เป็นไปตามข้อกำหนด |
| 3002 | 400 | ทุก endpoint | พารามิเตอร์คำขอไม่ถูกต้อง กรุณาตรวจสอบว่าพารามิเตอร์เป็นไปตามข้อกำหนด |
| 3002 | 400 | Endpoint ของแท็ก | ชื่อแท็กว่างเปล่า |
| 3002 | 400 | Endpoint ของแท็ก | ชื่อแท็กเกิน 64 อักขระ ดูที่ กฎการตั้งชื่อแท็ก |
| 3002 | 400 | Endpoint ของแท็ก | ชื่อแท็กมีอักขระที่ไม่อนุญาต ดูที่ กฎการตั้งชื่อแท็ก |
| 3002 | 400 | Endpoint ของแท็ก | รูปแบบรหัสแท็กไม่ถูกต้อง ต้องเป็นสตริงของจำนวนเต็มบวก |
| 3002 | 400 | Endpoint ของแท็ก | ไม่ได้ส่ง tag_ids ตอนกำหนดแท็กให้เทมเพลต หรือค่าเป็น null |
| 3003 | 400 | ทุก endpoint | พารามิเตอร์คำขอไม่ถูกต้อง การตรวจสอบเชิงธุรกิจที่เกี่ยวข้องล้มเหลว |
| 3003 | 400 | Endpoint ของแท็ก | มีชื่อแท็กเดียวกันอยู่แล้วใน WABA เดียวกัน การตรวจสอบความซ้ำจะไม่แยกตัวพิมพ์ใหญ่-เล็กและเครื่องหมายเสียง |
| 3003 | 400 | Endpoint ของแท็ก | จำนวนแท็กของ WABA เดียวถึงขีดจำกัด 20 รายการแล้ว |
| 3003 | 400 | Endpoint ของแท็ก | การดำเนินการกับแท็กกำลังไม่ว่าง ลองใหม่ในภายหลังได้ การลองใหม่จะไม่ทำให้เกิดข้อมูลซ้ำ |
| 4001 | 400 | ทุก endpoint | ไม่พบเทมเพลตหรือเทมเพลตไม่ได้อยู่ใน WABA ปัจจุบัน |
| 4001 | 400 | Endpoint ของแท็ก | ไม่พบแท็กหรือแท็กไม่ได้อยู่ใน WABA ปัจจุบัน |
| 5002 | 400 | ทุก endpoint | คำขอเทมเพลตประมวลผลล้มเหลวที่ฝั่ง Meta ดูรายละเอียดได้จากคำอธิบายข้อผิดพลาดในฟิลด์ message |
หมายเหตุ
ข้อกำหนดรูปแบบข้อความสื่อ
| ประเภทสื่อ | Content-Type ที่รองรับ | ขีดจำกัดขนาด |
|---|---|---|
| image | image/jpeg, image/png ไม่รองรับพื้นหลังโปร่งใส | 5 MB |
| video | video/mp4 | 16MB |
| document | รองรับเฉพาะรูปแบบ PDF | 100 MB |
กฎการตั้งชื่อแท็ก
เมื่อสร้างและแก้ไขแท็ก ฝั่งเซิร์ฟเวอร์จะทำให้ชื่อเป็นมาตรฐานก่อน แล้วจึงตรวจสอบความยาวและความซ้ำ
การทำให้เป็นมาตรฐาน: ตัดช่องว่างหน้า-หลังออก และรวมอักขระช่องว่างที่ติดกันภายในชื่อให้เหลือช่องว่างเดียว เช่น หากส่ง " แจ้งเตือน การจัดส่ง " ชื่อที่บันทึกและคืนค่าจริงจะเป็น "แจ้งเตือน การจัดส่ง"
ข้อจำกัดของอักขระ: อนุญาตช่องว่าง ขีดล่าง ขีดกลาง อักขระที่มองเห็นได้ของทุกภาษา และอิโมจิ ไม่อนุญาตอักขระขึ้นบรรทัดใหม่ แท็บ อักขระควบคุม และอักขระจัดรูปแบบที่มองไม่เห็น
ความยาว: หลังทำให้เป็นมาตรฐานแล้วต้องมีความยาว 1–64 อักขระ โดยนับตามจุดรหัส Unicode และอิโมจิหนึ่งตัวอาจใช้หลายจุดรหัส
การตรวจสอบความซ้ำ: ชื่อต้องไม่ซ้ำกันภายใน WABA เดียวกัน การตรวจสอบไม่แยกตัวพิมพ์ใหญ่-เล็กและเครื่องหมายเสียง เช่น Logistics, logistics และ Logístics ถือเป็นชื่อเดียวกัน ไม่มีข้อจำกัดเรื่องคำสงวน
ข้อจำกัดการใช้งานแท็ก
- WABA หนึ่งบัญชีสร้างแท็กได้สูงสุด 20 รายการ
- ไม่จำกัดจำนวนแท็กต่อเทมเพลต สามารถกำหนดแท็กทั้งหมดที่มีอยู่ใน WABA ปัจจุบันได้ ดังนั้นขีดจำกัดที่แท้จริงคือ 20 รายการ
- รหัสแท็กเป็นสตริงทั้งในคำขอและการตอบกลับ (เช่น
"101") กรุณาอย่าตีความเป็นชนิดตัวเลข - เทมเพลตชื่อเดียวกันที่มีหลายภาษาจะกำหนดแท็กแยกกันตามรหัสเทมเพลตของแต่ละรายการ เช่น เทมเพลตเดียวกันฉบับภาษาไทยและภาษาอังกฤษต้องกำหนดแยกกัน
- แท็กไม่ถูกเขียนไปยัง Meta ไม่แก้ไขสถานะและคะแนนคุณภาพของเทมเพลต และไม่ทำให้เกิดการตรวจสอบใหม่
รหัสภาษา
| ภาษา | Code |
|---|---|
| แอฟริกานส์ | af |
| แอลเบเนีย | sq |
| อาหรับ | ar |
| อาเซอร์ไบจาน | az |
| เบงกาลี | bn |
| บัลแกเรีย | bg |
| กาตาลัน | ca |
| จีน (จีนแผ่นดินใหญ่) | zh_CN |
| จีน (ฮ่องกง) | zh_HK |
| จีน (ไต้หวัน) | zh_TW |
| โครเอเชีย | hr |
| เช็ก | cs |
| เดนมาร์ก | da |
| ดัตช์ | nl |
| อังกฤษ | en |
| อังกฤษ (สหราชอาณาจักร) | en_GB |
| อังกฤษ (สหรัฐอเมริกา) | en_US |
| เอสโตเนีย | et |
| ฟิลิปิโน | fil |
| ฟินแลนด์ | fi |
| ฝรั่งเศส | fr |
| จอร์เจีย | ka |
| เยอรมัน | de |
| กรีก | el |
| คุชราต | gu |
| เฮาซา | ha |
| ฮีบรู | he |
| ฮินดี | hi |
| ฮังการี | hu |
| อินโดนีเซีย | id |
| ไอริช | ga |
| อิตาลี | it |
| ญี่ปุ่น | ja |
| กันนาดา | kn |
| คาซัค | kk |
| คินยาร์วันดา | rw_RW |
| เกาหลี | ko |
| คีร์กีซ | ky_KG |
| ลาว | lo |
| ลัตเวีย | lv |
| ลิทัวเนีย | lt |
| มาซิโดเนีย | mk |
| มาเลย์ | ms |
| มาลายาลัม | ml |
| มราฐี | mr |
| นอร์เวย์ | nb |
| เปอร์เซีย | fa |
| โปแลนด์ | pl |
| โปรตุเกส (บราซิล) | pt_BR |
| โปรตุเกส (โปรตุเกส) | pt_PT |
| ปัญจาบ | pa |
| โรมาเนีย | ro |
| รัสเซีย | ru |
| เซอร์เบีย | sr |
| สโลวัก | sk |
| สโลวีเนีย | sl |
| สเปน | es |
| สเปน (อาร์เจนตินา) | es_AR |
| สเปน (สเปน) | es_ES |
| สเปน (เม็กซิโก) | es_MX |
| สวาฮีลี | sw |
| สวีเดน | sv |
| ทมิฬ | ta |
| เตลูกู | te |
| ไทย | th |
| ตุรกี | tr |
| ยูเครน | uk |
| อูรดู | ur |
| อุซเบก | uz |
| เวียดนาม | vi |
| ซูลู | zu |
ความสัมพันธ์ระหว่างภาษาและรหัสที่เกี่ยวข้อง สามารถดาวน์โหลดไฟล์นี้เพื่อดูได้เช่นกัน:
รหัสภาษาของเทมเพลต.xlsx










