Campaign Life Cycle
Status ของ campaign
หัวข้อที่มีชื่อว่า “Status ของ campaign”| 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
เงื่อนไขการเปลี่ยน Status
หัวข้อที่มีชื่อว่า “เงื่อนไขการเปลี่ยน Status”แต่ละ 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 ได้ครั้งเดียว
เริ่ม campaign
หัวข้อที่มีชื่อว่า “เริ่ม campaign”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 จะจบเมื่อไร
หัวข้อที่มีชื่อว่า “Campaign จะจบเมื่อไร”campaign ที่เป็น RUNNING จะเปลี่ยนเป็น COMPLETED เมื่อครบทั้งสองข้อ
- ไม่มี call ที่รอโทรหรือกำลังโทรอยู่ (รวมถึง
ANALYZING) และ - ไม่เหลือใครที่ยังต้อง retry คนที่ยังต้อง retry คือคนที่ call ล่าสุดเป็น
NO_ANSWER,BUSY,FAILEDหรือCANCELLEDยังเหลือจำนวนครั้งให้โทร และยังติดต่อไม่ได้เลยใน campaign นี้
ระหว่างที่ retry รอบสุดท้ายยังรอให้ครบ interval campaign จะยังเป็น RUNNING
scheduler เช็กเงื่อนไขนี้เฉพาะในช่วงเวลาโทร ถ้า call สุดท้ายจบตอนใกล้หมดช่วงเวลาโทรช่วงสุดท้ายก่อน endDateTime
campaign จึงอาจกลายเป็น EXPIRED ทั้งที่ทุก call จบไปแล้ว
Status ของ recipient
หัวข้อที่มีชื่อว่า “Status ของ recipient”latestCallStatus ของ recipient คือ status ของ call ล่าสุด ส่วน callAttempt คือจำนวนครั้งที่โทรหาคนนั้นไปแล้ว
GET /api/campaign/:id/recipients ส่งทั้งสองค่าของทุกคนใน campaign กลับมา
ดู status ของ call ทุกค่าได้ที่Status ทั้งหมด และดูว่า call หนึ่งเปลี่ยน
status อย่างไร แต่ละครั้งเปลี่ยนเพราะอะไร ได้ที่ Call Life Cycle