เอกสารนี้นี้ได้รับการอัพเดตแล้ว
คำแปลเป็น ภาษาไทย ยังไม่เสร็จสมบูรณ์
ภาษาอังกฤษที่อัพเดต: 3 ก.ค.

การส่งข้อความ

เอกสารฉบับนี้อธิบายวิธีใช้ API เพื่อส่งข้อความถึงผู้ใช้ WhatsApp

ประเภทของข้อความ

คุณสามารถใช้ API เพื่อส่งข้อความประเภทต่อไปนี้ได้ คุณสามารถส่งข้อความประเภทเหล่านี้ทั้งหมด (ยกเว้นข้อความแสดงความรู้สึก) เป็นข้อความตอบกลับถึงข้อความก่อนหน้าได้

ข้อความขอที่อยู่ ช่วยให้คุณขอที่อยู่ในการจัดส่งจากผู้ใช้ WhatsApp ได้อย่างง่ายดาย


ข้อความเสียง จะแสดงไอคอนเสียงและลิงก์ไปยังไฟล์เสียง เมื่อผู้ใช้ WhatsApp แตะที่ไอคอนนี้ ไคลเอ็นต์ WhatsApp จะโหลดและเล่นไฟล์เสียงดังกล่าว


ข้อความผู้ติดต่อ ช่วยให้คุณสามารถส่งข้อมูลต่างๆ สำหรับติดต่อ เช่น ชื่อ หมายเลขโทรศัพท์ ที่อยู่จริง และอีเมลถึงผู้ใช้ WhatsApp ได้โดยตรง


ข้อความเอกสาร จะแสดงไอคอนเอกสารซึ่งลิงก์กับเอกสารที่ผู้ใช้ WhatsApp สามารถแตะเพื่อดาวน์โหลด


ข้อความรูปภาพ จะแสดงรูปภาพหนึ่งรูปและคำบรรยายซึ่งจะระบุหรือไม่ก็ได้


ข้อความปุ่ม URL สำหรับ CTA แบบอินเทอร์แอคทีฟ ช่วยให้คุณสามารถแมป URL ใดก็ได้กับปุ่ม เพื่อให้คุณไม่ต้องใส่ URL แบบดิบที่ยาวหรือคลุมเครือไว้ในเนื้อหาข้อความ


ข้อความแบบขั้นตอนอินเทอร์แอคทีฟช่วยให้คุณสามารถส่งข้อความที่มีการจัดโครงสร้างที่ดูเป็นธรรมชาติหรือใช้งานได้สะดวกยิ่งขึ้นสำหรับลูกค้า ตัวอย่างเช่น คุณสามารถใช้ WhatsApp Flows เพื่อจองการนัดหมาย เลือกดูสินค้า รวบรวมคำติชมจากลูกค้า รับข้อมูลลูกค้าใหม่เพื่อสร้างยอดขาย หรือดำเนินการอื่นๆ


ข้อความแบบรายการอินเทอร์แอคทีฟ ช่วยให้คุณสามารถนำเสนอรายการตัวเลือกที่ผู้ใช้ WhatsApp สามารถเลือกได้


ข้อความคำขอตำแหน่งแบบอินเทอร์แอคทีฟ จะแสดงเนื้อความและปุ่มส่งตำแหน่ง เมื่อผู้ใช้ WhatsApp แตะปุ่มนี้ หน้าจอแชร์ตำแหน่งที่ตั้งจะปรากฏขึ้นมา ซึ่งผู้ใช้สามารถใช้แชร์ตำแหน่งที่ตั้งของตนได้


ข้อความปุ่มตอบกลับแบบอินเทอร์แอคทีฟ ช่วยให้คุณสามารถส่งข้อความตอบกลับที่กำหนดไว้ล่วงหน้าให้ผู้ใช้เลือกได้สูงสุด 3 ข้อความ


ข้อความแสดงตำแหน่ง ช่วยให้คุณสามารถส่งพิกัดละติจูดและลองจิจูดของตำแหน่งที่ตั้งถึงผู้ใช้ WhatsApp ได้


ข้อความสติกเกอร์ จะแสดงสติกเกอร์ที่เป็นภาพเคลื่อนไหวหรือภาพนิ่งในข้อความ WhatsApp


ข้อความตัวอักษร เป็น��้อความที่ประกอบด้วยเนื้อความที่เป็นตัวอักษรและพรีวิวลิงก์ (ซึ่งระบุหรือไม่ก็ได้) เท่านั้น


ข้อความเทมเพลต ช่วยให้คุณสามารถส่งเทมเพลตข้อความเพื่อการตลาด อรรถประโยชน์ และการยืนยันตัวตนถึงผู้ใช้ WhatsApp คุณไม่จำเป็นต้องเปิดช่วงเวลาการให้บริการลูกค้า 24 ชั่วโมงระหว่างคุณกับผู้รับข้อความก่อนเพื่อให้สามารถส่งข้อความเทมเพลตได้ ซึ่งแตกต่างจากข้อความประเภทอื่นๆ ทั้งหมด


ข้อความวิดีโอ จะแสดงพรีวิวภาพขนาดย่อของรูปภาพของวิดีโอพร้อมคำบรรยายที่จะระบุหรือไม่ก็ได้ เมื่อผู้ใช้ WhatsApp แตะที่พรีวิว วิดีโอจะโหลดและแสดงให้ผู้ใช้เห็น


ข้อความแสดงความรู้สึก คือการแสดงความรู้สึกด้วยอีโมจิที่คุณสามารถนำไปใช้กับข้อความก่อนหน้าที่คุณได้รับจากผู้ใช้ WhatsApp

ช่วงเวลาการให้บริการลูกค้า

เมื่อผู้ใช้ WhatsApp ส่งข้อความถึงคุณ ระบบจะเริ่มนับเวลา 24 ชั่วโมง ซึ่งเรียกว่าช่วงเวลาการให้บริการลูกค้า (หรือรีเฟรช)

คุณจะส่งข้อความทุกประเภทที่ไม่ใช่ข้อความเทมเพลตถึงผู้ใช้ได้ก็ต่อเมื่อมีการเปิดช่วงเวลาการให้บริการลูกค้า 24 ชั่วโมงระหว่างคุณกับผู้ใช้ดังกล่าวเท่านั้น

ส่วนข้อความเทมเพลตจะสามารถส่งถึงผู้ใช้ได้ตลอดเวลา ตราบใดที่ผู้ใช้ดังกล่าวเลือกที่จะรับข้อความจากคุณ

คำขอ

คำขอส่งข้อความทั้งหมดใช้ตำแหน่งข้อมูล POST /<WHATSAPP_BUSINESS_PHONE_NUMBER_ID/messages ดังนี้

POST /<WHATSAPP_BUSINESS_PHONE_NUMBER_ID>/messages

เนื้อความของโพสต์จะแตกต่างกันออกไป โดยขึ้นอยู่กับประเภทของข้อความที่คุณต้องการส่ง แต่เพย์โหลดจะใช้รูปแบบคำสั่งเดียวกันดังต่อไปนี้

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "<WHATSAPP_USER_PHONE_NUMBER>",
  "type": "<MESSAGE_TYPE>",
  "<MESSAGE_TYPE>": {<MESSAGE_CONTENTS>}
}

ค่าคุณสมบัติ type ในเพย์โหลดเนื้อความของโพสต์เป็นตัวระบุประเภทของข้อความที่จะส่ง และจะต้อง��ีคุณสมบัติที่ตรงกับประเภทนั้นๆ ซึ่งอธิบายเนื้อหาของข้อความรวมอยู่ด้วย

ตัวอย่างเช่น ด้านล่างนี้คือคำขอส่งข้อความตัวอักษร ถึงผู้ใช้ WhatsApp ให้สังเกตว่ามีการตั้งค่า type เป็น text และต่อด้วยอ็อบเจ็กต์ text ซึ่งบรรยายเนื้อหาของข้อความดังกล่าว

curl 'https://graph.facebook.com/v20.0/106540352242922/messages' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer EAAJB...' \
-d '
{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+16505551234",
  "type": "text",
  "text": {
    "preview_url": true,
    "body": "As requested, here'\''s the link to our latest product: https://www.meta.com/quest/quest-3/"
  }
}'

ด้านล่างนี้คือข้อความที่จะปรากฏในไคลเอ็นต์ WhatsApp หากส่งข้อความตัวอักษรถึงผู้ใช้ WhatsApp สำเร็จ

การตอบกลับ

API จะส่งการตอบกลับต่อไปนี้หากยอมรับคำขอส่งข้อความของคุณสำเร็จโดยไม่พบข้อผิดพลาดในคำขอดังกล่าว

{
  "messaging_product": "whatsapp",
  "contacts": [
    {
      "input": "<WHATSAPP_USER_PHONE_NUMBER>",
      "wa_id": "<WHATSAPP_USER_ID>"
    }
  ],
  "messages": [
    {
      "id": "<WHATSAPP_MESSAGE_ID>"
      "message_status": "<PACING_STATUS>"
    }
  ]
}

ให้สังเกตว่าการตอบกลับนี้ระบุเพียงว่า API ยอมรับคำขอของคุณสำเร็จแล้วเท่านั้น แต่ไม่ได้ระบุว่านำส่งข้อความของคุณสำเร็จหรือไม่ โดยระบบจะแจ้งสถานะการส่งข้อความผ่าน Webhooks messages

การตอบกลับจะมีคุณสมบัติ message_status รวมอยู่ด้วยก็ต่อเมื่อคุณส่งข้อความเทมเพลตที่ใช้เทมเพลตซึ่งได้รับการกำหนดช่วงจังหวะจัดแสดงเท่านั้น

Webhooks

ข้อความที่ส่งถึงผู้ใช้ WhatsApp จะทริกเกอร์ Webhooks messages ดังนั้นอย่าลืมสมัครรับข้อมูลหัวข้อนี้เพื่อรับการแจ้งเตือนสถานะข้อความ

ข้อความทางการค้า

ข้อความทางการค้าเป็นข้อความแบบอินเทอร์แอคทีฟที่ใช้ร่วมกับแค็ตตาล็อกสินค้า ดูวิธีใช้ข้อความประเภทเหล่านี้ได้ที่ "แชร์สินค้ากับลูกค้า"

ข้อความตอบกลับ

คุณสามารถส่งข้อความประเภทใดก็ได้เพื่อเป็นการตอบกลับข้อความก่อนหน้า ซึ่งข้อความก่อนหน้าจะปรากฏอยู่เหนือข้อความใหม่ โดยถูกอ้างอิงอยู่ในบับเบิลแสดงบริบท

ข้อจำกัด

บับเบิลแสดงบริบทจะไม่ปรากฏอยู่เหนือข้อความที่ส่งเป็นข้อความตอบกลับหากมีกรณีต่อไปนี้เกิดขึ้น

รูปแบบคำสั่งของคำขอ

POST /<WHATSAPP_BUSINESS_PHONE_NUMBER_ID>/messages

เนื้อความของโพสต์

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "<WHATSAPP_USER_PHONE_NUMBER>",
  "context": {
    "message_id": "WAMID_TO_REPLY_TO"
  },

  /* Message type and type contents goes here */

}

พารามิเตอร์เนื้อความของโพสต์

ตัวยึดตำแหน่งคำอธิบายค่าตัวอย่าง

<WAMID_TO_REPLY_TO>

สตริง

จำเป็นต้องระบุ

ID ข้อความบน WhatsApp (wamid) ของข้อความก่อนหน้าที่คุณต้องการตอบกลับ

wamid.HBgLMTY0NjcwNDM1OTUVAgASGBQzQTdCNTg5RjY1MEMyRjlGMjRGNgA=

<WHATSAPP_USER_PHONE_NUMBER>

String

Required.

WhatsApp user phone number.

+16505551234

ตัวอย่างคำขอ

ตัวอย่างข้อความตัวอักษรที่ส่งเพื่อเป็นการตอบกลับข้อความก่อนหน้า

curl 'https://graph.facebook.com/v19.0/106540352242922/messages' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer EAAJB...' \
-d '
{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+16505551234",
  "context": {
    "message_id": "wamid.HBgLMTY0NjcwNDM1OTUVAgASGBQzQTdCNTg5RjY1MEMyRjlGMjRGNgA="
  },
  "type": "text",
  "text": {
    "body": "You'\''re welcome, Pablo!"
  }
}'

WhatsApp User Phone Number Formats

Plus signs (+), hyphens (-), parenthesis ((,)), and spaces are supported in send message requests.

We highly recommend that you include both the plus sign and country calling code when sending a message to a customer. If the plus sign is omitted, your business phone number's country calling code is prepended to the customer's phone number. This can result in undelivered or misdelivered messages.

For example, if your business is in India (country calling code 91) and you send a message to the following customer phone number in various formats:

Number In Send Message RequestNumber Message Delivered ToOutcome

+16315551234

+16315551234

Correct number

+1 (631) 555-1234

+16315551234

Correct number

(631) 555-1234

+916315551234

Potentially wrong number

1 (631) 555-1234

+9116315551234

Potentially wrong number

องค์ประกอบสื่อ

คุณจะต้องอัพโหลดองค์ประกอบสื่อที่ส่งในข้อความไปยังหมายเลขโทรศัพท์ของธุรกิจที่จะใช้สำหรับส่งข้อความ หรือโฮสต์องค์ประกอบดังกล่าวบนเซิร์ฟเวอร์สาธารณะและรวม URL ในคำขอส่งข้อความด้วย

เพื่อลดโอกาสที่จะเกิดข้อผิดพลาดและหลีกเลี่ยงการส่งคำขอไปยังเซิร์ฟเวอร์สาธารณะโดยไม่จำเป็น เราขอแนะนำให้คุณอัพโหลดองค์ประกอบสื่อของคุณและใช้ ID ขององค์ประกอบ��ังกล่าวเมื่อส่งข้อความ

การแคชแบบ HTTP สำหรับสื่อ

Cloud API ของ WhatsApp รองรับการแคชแบบ HTTP สำหรับสื่อ หากคุณใช้ลิงก์ (link) ไปยังองค์ประกอบสื่อบนเซิร์ฟเวอร์ของคุณ (แทน ID (id) ขององค์ประกอบที่คุณอัพโหลดไปยังเซิร์ฟเวอร์ของเรา) คุณจะสามารถกำหนดให้เราแคชองค์ประกอบของคุณเพื่อนำกลับมาใช้กับข้อความต่างๆ ในภายหลังได้ โดยใส่ส่วนหัวด้านล่างนี้ไว้ในการตอบกลับเซิร์ฟเวอร์เมื่อเราส่งคำขอองค์ประกอบ หากไม่ได้ใส่ส่วนหัวใดๆ เหล่านี้ไว้ เราก็จะไม่แคชองค์ประกอบของคุณ

Cache-Control: <CACHE_CONTROL>
Last-Modified: <LAST_MODIFIED>
ETag: <ETAG>

Cache-Control

ส่วนหัว Cache-Control จะบอกให้เราทราบวิธีจัดการกับการแคชองค์ประกอบ เรารองรับตัวบ่งชี้ดังต่อไปนี้

  • max-age=n: ระบุว่าจะแคชองค์ประกอบเป็นเวลากี่วินาที (n) เราจะนำองค์ประกอบที่แคชไว้กลับมาใช้ในข้อความต่างๆ หลังจากนั้นจนกว่าจะเกินเวลาดังกล่าวนี้ โดยหลังจากนั้น เราจะส่งคำขอองค์ประกอบอีกครั้งหากจำเป็น ตัวอย่าง: Cache-Control: max-age=604800
  • no-cache: ระบุว่าสามารถแคชองค์ประกอบได้แต่องค์ประกอบก็ควรได้รับการอัพเดตหากค่าของส่วนหัว Last-Modified ต่างจากการตอบกลับก่อนหน้านี้ จำเป็นต้องใช้ส่วนหัว Last-Modified ตัวอย่าง: Cache-Control: no-cache
  • no-store: ระบุว่าองค์ประกอบไม่ควรได้รับการแคช ตัวอย่าง: Cache-Control: no-store
  • private: ระบุว่าองค์ประกอบได้รับการป��ับให้เหมาะกับผู้รับแต่ละราย และไม่ควรได้รับการแคช

Last-Modified

ระบุเวลาที่องค์ประกอบได้รับการแก้ไขครั้งล่าสุด โดยใช้ร่วมกับ Cache-Control: no-cache หากค่า Last-Modified ต่างจากการตอบกลับก่อนหน้านี้ และ Cache-Control: no-cache รวมอยู่ในการตอบกลับ เราจะอัพเดตองค์ประกอบเวอร์ชั่นที่เราแคชไว้สำหรับองค์ประกอบในการตอบกลับ ตัวอย่าง: Date: Tue, 22 Feb 2022 22:22:22 GMT

ETag

ส่วนหัว ETag เป็นสตริงที่ไม่ซ้ำกัน ซึ่งระบุเวอร์ชั่นที่เฉพาะเจาะจงขององค์ประกอบ ตัวอย่าง: ETag: "33a64df5". ระบบจะไม่สนใจส่วนหัว เว้นแต่��่วนหัวทั้ง Cache-Control และ Last-Modified จะไม่รวมอยู่ในการตอบกลับ ในกรณีนี้ เราจะแคชองค์ประกอบตามตรรกะภายในของเราเอง (ซึ่งเราจะไม่เปิดเผยให้ทราบ)

ตัวอย่างการตอบกลับที่มีส่วนหัว

HTTP/1.1 200 OK
Content-Type: image/png
Content-Length: 1024
Date: Tue, 22 Feb 2022 22:22:22 GMT
ETag: "33a64df5"
Cache-Control: max-age=604800

<IMAGE_PAYLOAD>

ลำดับการส่งสำหรับข้อความหลายรายการ

เมื่อส่งข้อความหลายรายการ ระบบไม่รับรองว่าลำดับการส่งข้อความจะตรงกับลำดับคำขอ API ของคุณ หากคุณต้องการส่งข้อความตามลำดับที่ต้องการ ให้ยืนยันว่าได้รับสถานะ delivered ใน Webhook ข้อความก่อนจะส่งข้อความถัดไปในลำดับข้อความของคุณ

Time-To-Live

หากเราไม่สามารถส่งข้อความถึงผู้ใช้ WhatsApp ได้ เราจะพยายามส่งข้อความต่อไปเป็นระยะเวลาหนึ่ง ซึ่งเราเรียกช่วงเวลานี้ว่า Time-To-Live (TTL) หรือช่วงเวลาที่ข้อความใช้งานได้ หากเราไม่สามารถนำส่งข้อความเกินระยะเวลา TTL เราจะหยุดการพยายามส่งซ้ำและละทิ้งข้อความ

  • TTL สำหรับข้อความทุกประเภทที่ไม่ใช่ข้อความเทมเพลตที่ใช้เทมเพลตเพื่อการยืนยันตัวตนจะมีระยะเวลา 30 วัน
  • ข้อความเทมเพลตที่ใช้เทมเพลตเพื่อการยืนยันตัวตนจะมี TTL เริ่มต้นอยู่ที่ 10 นาที

คุณสามารถปรับแต่งค่าเริ่มต้นเหล่านี้โดยตั้งค่า TTL แบบกำหนดเองให้กับเทมเพลตเพื่อการยืนยันตัวตนและเทมเพลตเพื่ออรรถประโยชน์ โปรดดู การปรับแต่ง Time-To-Live

หากคุณส่งข้อความแต่ไม่ได้รับ Webhook messages ที่เกี่ยวข้องซึ่งระบุว่าข้อความถูกนำส่งก่อนสิ้นสุดระยะเวลา TTL ให้ถือว่าข้อความดังกล่าวถูกละทิ้ง

โปรดทราบว่า หากส่งข้อความไม่สำเร็จด้วยเหตุผลบางประการที่ไม่เกี่ยวข้องและไปทริกเกอร์ Webhook messagesนำส่งไม่สำเร็จ คุณอาจได้รับ Webhook ดังกล่าวล่าช้าเล็กน้อย ดังนั้นคุณอาจต้องรอสักนิดก่อนที่จะสรุปว่าข้อความถูกละทิ้ง

การแก้ไขปัญหา

หากคุณประสบปัญหาในการส่งข้อความ โปรดดูที่หัวข้อ "ส่งข้อความไม่ถึงผู้รับ"