การส่ง SMS
มีสองพื้นผิวสำหรับการส่ง และใช้แทนกันไม่ได้
| ประเภท | Route | ใช้สำหรับ |
|---|---|---|
| Message | POST /sms/send_messages/message | ทรานแซคชัน หนึ่งแถวต่อผู้รับหนึ่งราย |
| Broadcast | POST /sms/broadcast | ข้อความเดียวส่งไปยังผู้รับจำนวนมาก |
Broadcast ต้องเปิดใช้ที่ฝั่ง deployment
/sms/broadcast จะไม่ถูกเปิดใช้ เว้นแต่ deployment ตั้งค่า ME_SMS_PRODUCER_ENABLED สภาพแวดล้อมที่ไม่ได้เปิดจะตอบ 404 ซึ่งไม่ใช่ข้อความผิดพลาดที่บอกสาเหตุ ควรตรวจสอบกับผู้ดูแลระบบก่อนเริ่มพัฒนา
ส่งข้อความ
แต่ละแถวมีผู้ส่ง ผู้ให้บริการ ผู้รับ และเนื้อหาของตัวเอง แถวที่ใช้ operator + ชื่อผู้ส่ง + ข้อความเดียวกันจะถูกรวมเป็น หนึ่ง batch
{
"check_spam_msg_mode": "not_check",
"data": [
{
"sender_name": "MyBrand",
"operator": "ais",
"phone_number": "+66886578553",
"message": "คำสั่งซื้อของคุณจัดส่งแล้ว"
}
]
}sender_nameต้องได้รับอนุมัติสำหรับผู้ให้บริการนั้นoperatorคือรหัสผู้ให้บริการ (ais,dtac,true_corp)phone_numberรูปแบบ E.164timeout_secondsรับไว้เพื่อความเข้ากันได้ แต่ไม่มีผล เพราะ timeout เป็นนโยบายของ gateway
ผลลัพธ์ห่อไว้ใน data
{
"data": {
"accepted": 1,
"rejected": 0,
"batches": [
{
"batch_id": "018f7b2a-7c3e-7a1b-9c2d-1a2b3c4d5e6f",
"accepted": 1,
"rejected": 0
}
]
}
}accepted คือจำนวนผู้รับที่เข้าคิวส่งไปยังผู้ให้บริการแล้ว ส่วน rejected คือผู้รับที่ถูกตัดออก ก่อนเข้าคิว เช่นหมายเลขว่างหรือซ้ำ หรือเกิดข้อผิดพลาดตอนส่งเข้าคิว หมายเลขเสียหนึ่งรายการ จะไม่ทำให้ทั้งคำขอล้มเหลว
Broadcast
หนึ่งข้อความ หนึ่งผู้ให้บริการ หนึ่งชื่อผู้ส่ง ส่งไปยังผู้รับหลายราย
curl -X POST "$ME_BASE/sms/broadcast" \
-H "API-Key: $ME_API_KEY" \
-H "X-TenantID: $ME_TENANT" \
-H "Content-Type: application/json" \
-d '{
"operator": "ais",
"sender_name": "MyBrand",
"message": "ลดราคาถึงคืนนี้",
"recipients": ["+66886578553", "+66886578554"],
"idempotency_key": "campaign-2026-09-12"
}'| ฟิลด์ | หมายเหตุ |
|---|---|
idempotency_key | ป้องกันการส่งซ้ำ หากส่งคำขอเดิมด้วย key เดิมจะได้ผลลัพธ์ครั้งแรกกลับมา แทนการส่งใหม่ |
validity_seconds | ขอให้ผู้ให้บริการทิ้งข้อความหากส่งไม่สำเร็จภายในช่วงเวลานี้ DTAC และ True รองรับ ส่วน AIS ไม่มีฟิลด์นี้ใน MT XML จึงถูกละไว้ |
จากนั้นตรวจสถานะของ batch
curl "$ME_BASE/sms/broadcast/$BATCH_ID" \
-H "API-Key: $ME_API_KEY" -H "X-TenantID: $ME_TENANT"{
"batch_id": "…",
"total": 2,
"delivered": 1,
"sent": 1,
"failed": 0,
"timeout": 0,
"pending": 0
}undeliverable_chars
batch อาจส่งค่า undeliverable_chars กลับมา ซึ่งคือตัวอักษรที่ผู้ให้บริการที่นำส่ง batch นั้น ทำหายแน่นอน แสดงเป็น "U+1F381 U+1D7EE"
ค่านี้มีอยู่เพราะความเสียหายมองไม่เห็นจากภายนอก ผู้ให้บริการรับข้อความไว้ คู่ surrogate ถูกคิดเป็นสองหน่วย แต่เครื่องปลายทางไม่แสดงอะไรตรงนั้น หากพบค่านี้ ให้เปลี่ยนไปใช้ ตัวอักษรที่ส่งผ่านได้
Endpoint SMS ชุดเดิม
เอกสารรุ่นก่อนเคยอธิบาย /sms/send_messages/{otp,broadcast,eagleeye,cancel} ซึ่ง ไม่ได้อยู่ใน API ปัจจุบัน การตรวจสอบ OTP ย้ายไปที่ ยืนยันตัวตน / OTP ส่วน broadcast คือ /sms/broadcast ด้านบน
