Skip to content

การส่ง SMS ​

มีสองพื้นผิวสำหรับการส่ง และใช้แทนกันไม่ได้

ประเภทRouteใช้สำหรับ
MessagePOST /sms/send_messages/messageทรานแซคชัน หนึ่งแถวต่อผู้รับหนึ่งราย
BroadcastPOST /sms/broadcastข้อความเดียวส่งไปยังผู้รับจำนวนมาก

Broadcast ต้องเปิดใช้ที่ฝั่ง deployment

/sms/broadcast จะไม่ถูกเปิดใช้ เว้นแต่ deployment ตั้งค่า ME_SMS_PRODUCER_ENABLED สภาพแวดล้อมที่ไม่ได้เปิดจะตอบ 404 ซึ่งไม่ใช่ข้อความผิดพลาดที่บอกสาเหตุ ควรตรวจสอบกับผู้ดูแลระบบก่อนเริ่มพัฒนา

ส่งข้อความ ​

แต่ละแถวมีผู้ส่ง ผู้ให้บริการ ผู้รับ และเนื้อหาของตัวเอง แถวที่ใช้ operator + ชื่อผู้ส่ง + ข้อความเดียวกันจะถูกรวมเป็น หนึ่ง batch

json
{
  "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.164
  • timeout_seconds รับไว้เพื่อความเข้ากันได้ แต่ไม่มีผล เพราะ timeout เป็นนโยบายของ gateway

ผลลัพธ์ห่อไว้ใน data

json
{
  "data": {
    "accepted": 1,
    "rejected": 0,
    "batches": [
      {
        "batch_id": "018f7b2a-7c3e-7a1b-9c2d-1a2b3c4d5e6f",
        "accepted": 1,
        "rejected": 0
      }
    ]
  }
}

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

Broadcast ​

หนึ่งข้อความ หนึ่งผู้ให้บริการ หนึ่งชื่อผู้ส่ง ส่งไปยังผู้รับหลายราย

bash
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

bash
curl "$ME_BASE/sms/broadcast/$BATCH_ID" \
  -H "API-Key: $ME_API_KEY" -H "X-TenantID: $ME_TENANT"
json
{
  "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 ด้านบน