ข้ามไปยังเนื้อหา

Campaign Life Cycle

ยังไม่จบสร้างเริ่มถึงเวลาโทรครบpausepauseresumecancelเลย endDateTimecancelDRAFTSCHEDULEDRUNNINGCOMPLETEDPAUSEDCANCELLEDEXPIRED
รอโทรกำลังโทรเสร็จแล้วคุณสั่งหยุดฉบับร่าง / หยุดชั่วคราว / หมดอายุ
Status ความหมาย ทำอะไรต่อได้
DRAFT สร้างแล้วแต่ยังไม่ได้เริ่ม ยังไม่มี call เลย เริ่ม, cancel
SCHEDULED เริ่มแล้ว กำลังรอให้ถึง startDateTime หรือรอช่วงเวลาโทรแรก pause, cancel
RUNNING กำลังโทร ช่วงพักระหว่างช่วงเวลาโทรและช่วงที่รอ retry ก็ยังนับเป็น RUNNING pause, cancel
PAUSED คุณสั่งหยุดไว้ call ที่รอโทรยังเก็บไว้ครบ resume, cancel
COMPLETED ทุกคนได้ผลสุดท้ายแล้ว และไม่เหลือ retry —
CANCELLED คุณสั่งหยุดแบบถาวร —
EXPIRED เลย endDateTime ไปก่อนที่ campaign จะจบ —

COMPLETED, CANCELLED และ EXPIRED เป็น status สุดท้าย เข้าแล้วออกไม่ได้ ไม่ว่าจะสั่ง action ไหนหรือ scheduler ทำงานอีกกี่รอบ status ก็จะไม่เปลี่ยนอีก

สีของแต่ละ status ตรงกับใน dashboard ของ Gowajee

แต่ละ action สั่งได้จากบาง status เท่านั้น

Action Campaign จะเปลี่ยนเป็น สั่งได้จาก เป็น status นั้นอยู่แล้ว (ได้ 200 ไม่มีอะไรเปลี่ยน) Status อื่น
Pause PAUSED SCHEDULED, RUNNING PAUSED 409 INVALID_CAMPAIGN_STATE
Resume SCHEDULED PAUSED SCHEDULED, RUNNING 409 INVALID_CAMPAIGN_STATE
Cancel CANCELLED DRAFT, SCHEDULED, RUNNING, PAUSED CANCELLED 409 INVALID_CAMPAIGN_STATE
  • เป็น status นั้นอยู่แล้ว คือ campaign อยู่ใน status ที่สั่งมาแล้ว request จะสำเร็จแต่ไม่มีอะไรเปลี่ยน และไม่แตะ call ใดเลย การสั่ง resume กับ campaign ที่เป็น RUNNING ก็นับเป็นกรณีนี้ ดู status ปัจจุบันได้จาก data.status ใน response
  • message ของ 409 จะบอกทั้ง action และ status ปัจจุบัน เช่น Cannot pause a COMPLETED campaign
  • ถ้ามีสอง request ชนกัน (เช่นสั่ง pause กับ cancel พร้อมกัน) จะมี request เดียวที่สำเร็จ อีก request จะได้ 200 ถ้า campaign ลงเอยที่ status ที่ request นั้นสั่ง ถ้าไม่ใช่จะได้ 409

การเปลี่ยน status ที่เหลือ scheduler ของ Gowajee จะเปลี่ยนให้เอง

เปลี่ยนเป็น จาก เมื่อไร
RUNNING SCHEDULED เลย startDateTime แล้ว และตอนนั้นอยู่ในช่วงเวลาโทร
COMPLETED RUNNING ไม่มี call ที่รอโทรหรือกำลังโทรอยู่ และไม่เหลือใครที่ต้อง retry ดูด้านล่าง
EXPIRED SCHEDULED, RUNNING, PAUSED เลย endDateTime แล้ว

เริ่ม campaign มี endpoint แยกของตัวเอง ใช้เปลี่ยน DRAFT เป็น SCHEDULED ได้ครั้งเดียว

POST /api/campaign/:id/schedule จะเปลี่ยน campaign จาก DRAFT เป็น SCHEDULED และเตรียม call ไว้ให้ recipient คนละหนึ่ง call จากนั้นทุก ๆ ประมาณ 30 วินาที scheduler ของ Gowajee จะหยิบ campaign ที่ถึงเวลาเริ่มแล้วมาโทร โดยโทรหา recipient พร้อมกันได้มากที่สุดเท่าที่ limit ขององค์กรอนุญาต และโทรเฉพาะในช่วงเวลาโทร ทุก campaign ที่กำลังโทรอยู่ใช้ limit นี้ร่วมกัน

Action ผลกับ call
หยุดชั่วคราว (pause) call ที่ยังรออยู่ (SCHEDULED, QUEUED, INITIATED) จะกลับไปเป็น SCHEDULED ส่วน call ที่กำลังดังหรือกำลังคุยอยู่จะจบตามปกติ
โทรต่อ (resume) campaign กลับไปเป็น SCHEDULED แล้ว scheduler จะโทร call ที่รออยู่และ retry ที่ถึงเวลาแล้วในรอบถัดไปที่อยู่ในช่วงเวลาโทร ใช้กับ campaign ที่หยุดชั่วคราวไว้
ยกเลิก (cancel) call ที่ยังรออยู่จะเปลี่ยนเป็น CANCELLED และไม่มี webhook ส่งมาสำหรับ call เหล่านี้ ส่วน call ที่กำลังดังหรือกำลังคุยอยู่จะจบตามปกติ ยกเลิกแล้วย้อนกลับไม่ได้

campaign ที่เป็น RUNNING จะเปลี่ยนเป็น COMPLETED เมื่อครบทั้งสองข้อ

  1. ไม่มี call ที่รอโทรหรือกำลังโทรอยู่ (รวมถึง ANALYZING) และ
  2. ไม่เหลือใครที่ยังต้อง retry คนที่ยังต้อง retry คือคนที่ call ล่าสุดเป็น NO_ANSWER, BUSY, FAILED หรือ CANCELLED ยังเหลือจำนวนครั้งให้โทร และยังติดต่อไม่ได้เลยใน campaign นี้

ระหว่างที่ retry รอบสุดท้ายยังรอให้ครบ interval campaign จะยังเป็น RUNNING

scheduler เช็กเงื่อนไขนี้เฉพาะในช่วงเวลาโทร ถ้า call สุดท้ายจบตอนใกล้หมดช่วงเวลาโทรช่วงสุดท้ายก่อน endDateTime campaign จึงอาจกลายเป็น EXPIRED ทั้งที่ทุก call จบไปแล้ว

latestCallStatus ของ recipient คือ status ของ call ล่าสุด ส่วน callAttempt คือจำนวนครั้งที่โทรหาคนนั้นไปแล้ว GET /api/campaign/:id/recipients ส่งทั้งสองค่าของทุกคนใน campaign กลับมา ดู status ของ call ทุกค่าได้ที่Status ทั้งหมด และดูว่า call หนึ่งเปลี่ยน status อย่างไร แต่ละครั้งเปลี่ยนเพราะอะไร ได้ที่ Call Life Cycle