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

Call Life Cycle

call หนึ่ง call คือการโทร หนึ่งครั้ง หา recipient หนึ่งคน ถ้าโทรครั้งแรกไม่ติด retry จะเป็น call ใหม่ ที่มี id ของตัวเอง recipient ที่โทรหาไปสามครั้งจึงมี call สามรายการ

→ webhook CALL_RESULTติดต่อไม่ได้retry ถ้ายังเหลือรอบรับสายวางสายผลพร้อมไม่มีผลยกเลิก campaignเลยวันสิ้นสุดSCHEDULEDQUEUEDINITIATEDRINGINGNO_ANSWERBUSYFAILEDIN_PROGRESSANALYZINGCOMPLETEDCANCELLEDEXPIREDANALYSIS_FAILED
รอโทรกำลังทำงานติดต่อได้ติดต่อไม่ได้ / ล้มเหลวต่อสาย / หยุดแล้วแผนภาพแบบย่อ แสดงเฉพาะเส้นทางหลัก ดู status ครบทุกค่าได้ในตารางด้านล่าง

call ทุก call จะผ่าน status บางตัวในตารางนี้ แบ่งได้เป็น 6 ช่วง

ช่วง Status ความหมาย
รอโทร SCHEDULED QUEUED ยังไม่ได้โทรออก
กำลังต่อสาย INITIATED RINGING กำลังต่อสาย หรือโทรศัพท์ของลูกค้ากำลังดัง
กำลังคุย IN_PROGRESS agent กำลังคุยกับลูกค้า
กำลังเตรียมผล ANALYZING → COMPLETED / ANALYSIS_FAILED คุยจบแล้ว ระบบกำลังเตรียมผล
ติดต่อไม่ได้ NO_ANSWER BUSY FAILED สายดังหรือต่อสายได้แล้ว แต่ไม่ได้คุยกับลูกค้า
หยุดก่อนโทร CANCELLED EXPIRED ระบบเอาออกจากคิวก่อนที่สายจะดัง

ดูความหมายสั้น ๆ ของแต่ละ status ได้ที่Status ทั้งหมด

เหตุการณ์ ผล
ระบบโทรออกของ 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 ความหมาย
callStartedAt เวลาที่เริ่มคุย เป็น null ถ้าลูกค้าไม่ได้รับสาย
callEndedAt เวลาที่ call ครั้งนั้นจบ มีค่าเสมอแม้เป็น call ที่ไม่มีใครรับสาย
callDuration จำนวนวินาที มีทศนิยม 3 ตำแหน่ง ส่งมาเป็น string ตัวเลข เช่น "120.120" หรือเป็น null แปลงเป็นตัวเลขด้วย parseFloat/float()

callResult จะพร้อมเมื่อ callStatus เป็น COMPLETED อ่านได้ 3 ทาง

  • webhook: Gowajee ส่งมาให้ทันทีที่ผลพร้อม
  • GET /api/campaign/:id/calls: field ชื่อ callResult
  • GET /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 ไว้
การเปลี่ยน ส่ง 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 → ส่งมาตอนไหน