Call Life Cycle
Call คืออะไร
หัวข้อที่มีชื่อว่า “Call คืออะไร”call หนึ่ง call คือการโทร หนึ่งครั้ง หา recipient หนึ่งคน ถ้าโทรครั้งแรกไม่ติด retry จะเป็น call ใหม่ ที่มี
id ของตัวเอง recipient ที่โทรหาไปสามครั้งจึงมี call สามรายการ
Status ของ call
หัวข้อที่มีชื่อว่า “Status ของ call”call ทุก call จะผ่าน status บางตัวในตารางนี้ แบ่งได้เป็น 6 ช่วง
| ช่วง | Status | ความหมาย |
|---|---|---|
| รอโทร | SCHEDULED QUEUED | ยังไม่ได้โทรออก |
| กำลังต่อสาย | INITIATED RINGING | กำลังต่อสาย หรือโทรศัพท์ของลูกค้ากำลังดัง |
| กำลังคุย | IN_PROGRESS | agent กำลังคุยกับลูกค้า |
| กำลังเตรียมผล | ANALYZING → COMPLETED / ANALYSIS_FAILED | คุยจบแล้ว ระบบกำลังเตรียมผล |
| ติดต่อไม่ได้ | NO_ANSWER BUSY FAILED | สายดังหรือต่อสายได้แล้ว แต่ไม่ได้คุยกับลูกค้า |
| หยุดก่อนโทร | CANCELLED EXPIRED | ระบบเอาออกจากคิวก่อนที่สายจะดัง |
ดูความหมายสั้น ๆ ของแต่ละ status ได้ที่Status ทั้งหมด
อะไรทำให้ status ของ call เปลี่ยน
หัวข้อที่มีชื่อว่า “อะไรทำให้ status ของ call เปลี่ยน”| เหตุการณ์ | ผล |
|---|---|
| ระบบโทรออกของ Gowajee หยิบ call ที่รออยู่ไปโทร | SCHEDULED → QUEUED → INITIATED → RINGING |
| ลูกค้ารับสาย | RINGING → IN_PROGRESS |
| ลูกค้าไม่รับสาย กดตัดสาย หรือสายไม่ว่าง | RINGING → NO_ANSWER หรือ BUSY |
| วางสาย | IN_PROGRESS → ANALYZING → COMPLETED หรือ ANALYSIS_FAILED |
| คุณสั่ง pause campaign | call ที่ยังรออยู่ (SCHEDULED, QUEUED, INITIATED) กลับไปเป็น SCHEDULED ส่วน call ที่กำลังดังหรือกำลังคุยอยู่จะจบตามปกติ |
| คุณสั่ง cancel campaign | call ที่ยังรออยู่เปลี่ยนเป็น CANCELLED ส่วน call ที่กำลังดังหรือกำลังคุยอยู่จะจบตามปกติ |
เลย endDateTime ของ campaign |
call ที่ยังรออยู่เปลี่ยนเป็น EXPIRED |
| call รออยู่ในคิวนานเกินไป | เปลี่ยนเป็น CANCELLED แล้วระบบจะ retry ให้โดยไม่นับเป็นหนึ่งครั้งของจำนวนครั้งที่โทร |
| Gowajee วิเคราะห์ call ที่จบแล้วซ้ำ | COMPLETED หรือ ANALYSIS_FAILED → ANALYZING → ได้ผลใหม่ |
| ผลของ call ที่วิเคราะห์ไม่สำเร็จมาถึงทีหลัง | ANALYSIS_FAILED → COMPLETED |
ระบบจะ retry call ที่จบด้วย NO_ANSWER, BUSY, FAILED หรือ CANCELLED เพราะรอในคิวนานเกินไป ถ้า recipient
คนนั้นยังเหลือจำนวนครั้งให้โทร retry แต่ละครั้งเป็น call ใหม่ ที่มี id และ sessionId ของตัวเอง
- เวลารอก่อน retry นับจากตอนที่ call ก่อนหน้า จบ ไม่ได้นับจากตอนที่เริ่มโทร
- retry จะโทรเฉพาะในช่วงเวลาโทรของ campaign
- ถ้าตั้งเบอร์โทรออกไว้หลายเบอร์ ระบบจะสลับเบอร์ให้ retry จะไม่ใช้เบอร์เดียวกับที่เพิ่งโทรหา recipient คนนั้น
- ระบบเลือก voice ใหม่ทุก call รวมถึง retry ด้วย
- คนที่เคยติดต่อได้แล้ว (
COMPLETEDรวมถึงกรณีเข้า voicemail) ไม่ว่าจะเป็นครั้งไหนใน campaign ระบบจะ ไม่โทรหาอีกเลย
ดู field ที่ใช้ตั้งค่า (maxAttempts, retryInterval) และตัวอย่างลำดับการโทรได้ที่
ตั้งเวลาและตัวเลือกการโทร → Retry
Field เรื่องเวลา
หัวข้อที่มีชื่อว่า “Field เรื่องเวลา”| Field | ความหมาย |
|---|---|
callStartedAt |
เวลาที่เริ่มคุย เป็น null ถ้าลูกค้าไม่ได้รับสาย |
callEndedAt |
เวลาที่ call ครั้งนั้นจบ มีค่าเสมอแม้เป็น call ที่ไม่มีใครรับสาย |
callDuration |
จำนวนวินาที มีทศนิยม 3 ตำแหน่ง ส่งมาเป็น string ตัวเลข เช่น "120.120" หรือเป็น null แปลงเป็นตัวเลขด้วย parseFloat/float() |
ดูผลของ call
หัวข้อที่มีชื่อว่า “ดูผลของ call”callResult จะพร้อมเมื่อ callStatus เป็น COMPLETED อ่านได้ 3 ทาง
- webhook: Gowajee ส่งมาให้ทันทีที่ผลพร้อม
GET /api/campaign/:id/calls: field ชื่อcallResultGET /api/call/:callId: เป็น object เดียวกัน แต่ชื่อresultถ้ายังไม่มีผลจะเป็น{}ไม่ใช่null
เรื่องที่มีผลกับผลของ call
- ถ้าวิเคราะห์ไม่สำเร็จ call จะยังเป็น
COMPLETEDแต่ผลจะมีโครงสร้างสำรองแบบตายตัวแทน field ที่คุณกำหนดไว้ ดู รับผลผ่าน webhook → เมื่อวิเคราะห์ไม่สำเร็จ - การวิเคราะห์ซ้ำ จะส่ง call เดิมมาอีกครั้งพร้อมผลใหม่และ
isReAnalysis: trueให้ upsert ด้วยcall.idผลใหม่จะได้แทนที่ผลเก่า ดูรับผลผ่าน webhook → การวิเคราะห์ซ้ำ - ไฟล์บันทึกเสียง ต้องดึงแยกด้วย
GET /api/call/:callId/record-urlลิงก์ที่ได้จะหมดอายุ ภายใน 1 ชั่วโมง จึงควรขอลิงก์ใหม่ทุกครั้งที่ต้องใช้ แทนที่จะเก็บ URL ไว้
เปลี่ยน status แบบไหนถึงส่ง webhook
หัวข้อที่มีชื่อว่า “เปลี่ยน status แบบไหนถึงส่ง webhook”| การเปลี่ยน | ส่ง webhook ไหม |
|---|---|
call ติดต่อลูกค้าได้และวิเคราะห์เสร็จแล้ว (COMPLETED) |
ส่ง |
call จบโดยไม่ได้คุย (NO_ANSWER, BUSY, FAILED หรือ CANCELLED เพราะรอในคิวนานเกินไป) |
ส่ง โดย callResult: null |
วิเคราะห์ call ไม่สำเร็จ (ANALYSIS_FAILED) |
ไม่ส่ง |
call ที่เป็น COMPLETED แต่ Gowajee ไม่ได้วิเคราะห์ (ไม่มีทั้งไฟล์บันทึกเสียงและ transcript หรือ agent หยุดทำงานเพราะ error) |
ไม่ส่ง |
call ที่รออยู่เปลี่ยนเป็น CANCELLED เพราะคุณยกเลิก campaign |
ไม่ส่ง |
call ที่รออยู่เปลี่ยนเป็น EXPIRED |
ไม่ส่ง |
| Gowajee วิเคราะห์ call ที่คุณได้รับไปแล้วซ้ำ | ส่ง เป็น CALL_RESULT ใหม่พร้อม isReAnalysis: true |
ตารางนี้เป็นแค่สรุป ดูเงื่อนไขทั้งหมดและโครงสร้างของ payload ได้ที่ รับผลผ่าน webhook → ส่งมาตอนไหน