ข้อความ (messages)
ส่งข้อความ
หัวข้อที่มีชื่อว่า “ส่งข้อความ”POST /v1/chats/{chat_id}/messages
ส่งข้อความ 1–5 ข้อความเข้าห้องที่บอทอยู่ ส่งได้สองแบบ
- reply ใส่
reply_tokenจาก event (Reply token) ทุกข้อความจะเป็นการตอบกลับข้อความที่เรียกบอท - push ไม่ใส่
reply_tokenส่งเมื่อไรก็ได้ ถ้าอยากตอบข้อความใดข้อความหนึ่ง ให้ใส่reply_to_message_id
| ฟิลด์ | ชนิด | กติกา |
|---|---|---|
messages |
array | จำเป็น 1–5 รายการ (ชนิดข้อความ) ตอนนี้รับเฉพาะ {"type":"text","text":"..."} |
reply_token |
string | ไม่บังคับ ใช้ได้ครั้งเดียว อายุ 60 วินาที ต้องเป็นห้องเดียวกับ path |
reply_to_message_id |
integer | ไม่บังคับ ใช้คู่กับ reply_token ไม่ได้ |
client_id |
string | ไม่บังคับ A–Z a–z 0–9 _ - ยาว 1–60 ตัว กันโพสต์ซ้ำเมื่อคุณลองใหม่ |
curl -s -X POST https://api.sukson.dev/v1/chats/0b6c3a52-5d0e-4c8e-9a51-6f1e7f6f2b10/messages \ -H "Authorization: Bearer $SUKSON_BOT_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "messages": [ { "type": "text", "text": "สรุปอากาศวันนี้" }, { "type": "text", "text": "เชียงใหม่ 24–31°C ฝนตก 40%" } ], "client_id": "daily-2026-11-07" }'{ "messages": [ { "message_id": 812346, "chat_id": "0b6c3a52-5d0e-4c8e-9a51-6f1e7f6f2b10", "created": true }, { "message_id": 812347, "chat_id": "0b6c3a52-5d0e-4c8e-9a51-6f1e7f6f2b10", "created": true } ]}createdเป็นfalseเมื่อเคยส่งclient_idนี้มาแล้ว ระบบคืนข้อความเดิมให้แทนการโพสต์ซ้ำ ข้อความที่ 2–5 ใช้client_idต่อท้าย-2ถึง-5ให้อัตโนมัติ- ทุกข้อความนับเข้าโควตารายเดือนและ ขีดจำกัดต่อห้อง แยกกัน
- ข้อความถูกส่งตามลำดับ ถ้าข้อความไหนถูกปฏิเสธ (เช่น ติด rate limit, โควตาหมด หรือมีคำต้องห้าม) ข้อความที่เหลือจะไม่ถูกส่ง แต่ข้อความก่อนหน้าที่ส่งไปแล้วยังอยู่ ลองใหม่ด้วย
client_idเดิมได้อย่างปลอดภัย - ยกเว้นคำขอที่ใช้
reply_tokenแล้วล้มเหลวกลางทาง: token ถูกใช้ไปแล้ว ถ้าลองใหม่แบบเดิมจะได้400 REPLY_TOKEN_INVALIDให้ลองใหม่แบบ push ด้วยclient_idเดิม โดยใส่reply_to_message_id(หรือไม่ระบุเป้าหมายตอบกลับ) แทนreply_token
| HTTP | code |
เมื่อไร |
|---|---|---|
| 404 | NOT_FOUND |
ไม่มีห้องนี้ chat_id ผิดรูปแบบ หรือบอทไม่ได้อยู่ในห้องนี้ |
| 403 | CHAT_INACTIVE |
ห้องปิดอยู่ |
| 403 | FORBIDDEN |
details.reason เป็น paused หรือ banned (บอทถูกพักหรือถูกแบนในห้องนี้ ดู status ใน chats) หรือ attacher_lost_rights (คนที่เพิ่มบอทเข้าห้องไม่มีสิทธิ์นั้นแล้ว) |
| 403 | BANNED |
บอทอยู่ในรายชื่อแบนของห้องนี้ (ทีมดูแลห้องแบนบัญชีบอท) ต่างจาก FORBIDDEN เหตุผล banned ที่หมายถึงสถานะของบอทในห้อง |
| 400 | REPLY_TOKEN_INVALID |
token ไม่รู้จัก ใช้แล้ว หมดอายุ เป็นของบอทอื่น หรือเป็นของห้องอื่น |
| 422 | UNSUPPORTED_MESSAGE_TYPE |
type ที่ยังไม่เปิดใช้ |
| 422 | BANNED_TERM |
ข้อความมีคำต้องห้ามของห้อง |
| 429 | RATE_LIMITED / SLOW_MODE |
ส่งเร็วเกินไป ดู Retry-After |
| 403 | QUOTA_EXCEEDED |
โควตารายเดือนหมด รอเดือนถัดไปหรือเปลี่ยนแพ็กเกจ |
แก้ข้อความ
หัวข้อที่มีชื่อว่า “แก้ข้อความ”PATCH /v1/messages/{message_id}
แก้ข้อความของบอทเองภายใน 48 ชั่วโมงหลังส่ง
curl -s -X PATCH https://api.sukson.dev/v1/messages/812346 \ -H "Authorization: Bearer $SUKSON_BOT_TOKEN" \ -H "Content-Type: application/json" \ -d '{"text":"สรุปอากาศวันนี้ (อัปเดต 09:00)"}'{ "message_id": 812346, "chat_id": "0b6c3a52-5d0e-4c8e-9a51-6f1e7f6f2b10" }| ฟิลด์ | กติกา |
|---|---|
text |
จำเป็น ไม่ว่าง ยาวไม่เกิน 4,096 ตัวอักษร |
ข้อผิดพลาด: 404 NOT_FOUND (ไม่มีข้อความนี้ ไม่ใช่ข้อความของบอท หรือบอทไม่ได้อยู่ในห้องนั้นแล้ว), 403 CHAT_INACTIVE (ห้องปิดอยู่), 403 FORBIDDEN ที่มี details.reason เป็น paused, banned หรือ attacher_lost_rights, 429 RATE_LIMITED (details.retry_after), 422 INVALID (ข้อความว่างหรือยาวเกิน), 403 EDIT_WINDOW_PASSED (เกิน 48 ชั่วโมง), 422 NOT_EDITABLE, 422 BANNED_TERM และข้อผิดพลาดระดับบอทในหน้ารหัสข้อผิดพลาด (FORBIDDEN plan_limit/owner_inactive, RESTRICTED, BOTS_DISABLED)
ลบข้อความ
หัวข้อที่มีชื่อว่า “ลบข้อความ”DELETE /v1/messages/{message_id}
ลบข้อความของบอทเอง ไม่มี body
{ "message_id": 812346, "chat_id": "0b6c3a52-5d0e-4c8e-9a51-6f1e7f6f2b10" }ข้อผิดพลาด: 404 NOT_FOUND (ไม่มีข้อความนี้ ไม่ใช่ข้อความของบอท หรือบอทไม่ได้อยู่ในห้องนั้นแล้ว), 403 CHAT_INACTIVE (ห้องปิดอยู่), 403 FORBIDDEN ที่มี details.reason เป็น paused, banned หรือ attacher_lost_rights