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

ตั้งเวลาและตัวเลือกการโทร

การตั้งค่าทุกอย่างในหน้านี้ส่งมาใน request เดียว คือ POST /api/campaign/:id/schedule ส่งครั้งเดียวกับ campaign ที่เป็น DRAFT field ที่บังคับมีแค่ startDateTime field ไหนไม่ส่งมา ระบบจะใช้ค่า default ตามตารางด้านล่าง

อยากกำหนดอะไร Field ถ้าไม่ส่งมา อ่านต่อ
เริ่มโทรได้เมื่อไรและต้องหยุดเมื่อไร startDateTime, endDateTime ไม่มีกำหนดสิ้นสุด เวลาเริ่มและเวลาสิ้นสุด
โทรได้วันไหน เวลาไหน timeWindows จ.–ศ. 09:00–19:00, ส.–อา. 10:00–19:00 ช่วงเวลาโทร
โทรหาแต่ละคนกี่ครั้ง และเว้นนานเท่าไร maxAttempts, retryInterval โทร 1 ครั้ง ไม่ retry Retry
ลูกค้าเห็นเบอร์ไหนโทรเข้ามา callerIds เบอร์ของ agent ถ้าไม่มีจะใช้เบอร์กลางของ Gowajee เบอร์โทรออก
agent พูดด้วย voice ไหน ttsVoiceKeys voice ที่ตั้งไว้ใน agent Voice
ข้ามคนที่เพิ่งโทรหาไปไม่นาน removeDuplicates ปิด ตัด recipient ที่ซ้ำ

ตัวอย่าง request ที่ใช้ครบทุก field

POST /api/campaign/:id/schedule
{
"startDateTime": "2026-10-01T02:00:00.000Z",
"endDateTime": "2026-10-07T11:00:00.000Z",
"timeWindows": [
{ "dayOfWeek": 1, "time": [{ "start": "09:00", "end": "12:00" }, { "start": "13:00", "end": "18:00" }] },
{ "dayOfWeek": 2, "time": [{ "start": "09:00", "end": "18:00" }] },
{ "dayOfWeek": 3, "time": [{ "start": "09:00", "end": "18:00" }] },
{ "dayOfWeek": 4, "time": [{ "start": "09:00", "end": "18:00" }] },
{ "dayOfWeek": 5, "time": [{ "start": "09:00", "end": "18:00" }] }
],
"maxAttempts": 3,
"retryInterval": 7200000,
"callerIds": ["+6621234567", "+6621234568"],
"ttsVoiceKeys": ["nicha", "suda"]
}
Field Format ความหมาย
startDateTime ISO-8601, UTC เวลาที่เร็วที่สุดที่โทร call แรกได้ ถ้าใส่เวลาในอดีต ระบบจะถือว่า “เริ่มทันที”
endDateTime ISO-8601, UTC หรือ null เส้นตาย คนที่ยังไม่ได้โทรหาภายในเวลานี้จะเป็น EXPIRED และ campaign ก็จะเป็น EXPIRED ด้วย ถ้าส่ง null หรือไม่ส่งมา แปลว่าไม่มีกำหนดสิ้นสุด

พอสั่งเริ่มแล้ว campaign จะเป็น SCHEDULED scheduler ของ Gowajee เช็กทุก ๆ ประมาณ 30 วินาที เมื่อเลย startDateTime มาแล้ว และ ตอนนั้นอยู่ในช่วงเวลาโทร campaign จะเปลี่ยนเป็น RUNNING แล้วเริ่มโทร ช่วงพักระหว่าง ช่วงเวลาโทรก็ยังนับเป็น RUNNING

timeWindows กำหนด วัน และ ช่วงเวลาในแต่ละวัน ที่เริ่มโทรได้ เวลาทั้งหมดเป็น เวลาไทย (UTC+7) แบบ 24 ชั่วโมงในรูป HH:MM

"timeWindows": [
{ "dayOfWeek": 1, "time": [{ "start": "09:00", "end": "12:00" }, { "start": "13:00", "end": "18:00" }] },
{ "dayOfWeek": 6, "time": [{ "start": "10:00", "end": "15:00" }] }
]

ตัวอย่างนี้โทรได้วันจันทร์ 09:00–12:00 กับ 13:00–18:00 (เว้นช่วงพักเที่ยง) และวันเสาร์ 10:00–15:00 วันอื่นไม่โทรเลย

dayOfWeek 1 2 3 4 5 6 7
วัน จ. อ. พ. พฤ. ศ. ส. อา.

เงื่อนไข

  • วันที่ไม่มีในรายการ ระบบจะไม่โทร
  • ใส่ทุกช่วงเวลาของวันเดียวกันไว้ใน array time ของ object เดียว ถ้าส่ง dayOfWeek เดียวกันมาสองครั้ง ระบบจะใช้แค่ตัวแรก
  • start ต้องมาก่อน end ช่วงเวลาจึงข้ามเที่ยงคืนไม่ได้
  • ชั่วโมงต้องมีสองหลัก เช่น 09:00 ไม่ใช่ 9:00 ถ้าส่ง 9:00 จะได้ 400
  • แต่ละวันต้องมีอย่างน้อยหนึ่งช่วงเวลา ถ้าส่ง "time": [] จะได้ 400
  • ช่วงเวลาโทรกำหนดแค่ว่า call เริ่ม ได้เมื่อไร call ที่เริ่มตอน 17:59 คุยเลย 18:00 ไปได้
  • ถ้าไม่ส่ง timeWindows มา ระบบจะใช้ default คือ จ.–ศ. 09:00–19:00 และ ส.–อา. 10:00–19:00

ถ้า call จบด้วย NO_ANSWER, BUSY หรือ FAILED Gowajee โทรหาคนนั้นซ้ำ (retry) ให้ได้

Field Default ความหมาย
maxAttempts 1 จำนวน call ทั้งหมดต่อ recipient หนึ่งคน นับรวมครั้งแรกด้วย 3 คือโทรครั้งแรก แล้ว retry ได้อีกไม่เกิน 2 ครั้ง ส่วน 1 คือไม่ retry เลย
retryInterval 3600000 (1 ชั่วโมง) ถ้า maxAttempts มากกว่า 1 ถ้าไม่ใช่จะเป็น 0 เวลารอขั้นต่ำนับจากที่ call ก่อนหน้าจบ จนถึงการโทรครั้งถัดไป หน่วยเป็น มิลลิวินาที ถ้า maxAttempts มากกว่า 1 ต้องตั้งอย่างน้อย 300000 (5 นาที)

call ที่จบด้วย CANCELLED เช่น เพราะรออยู่ในคิวนานเกินไป ระบบก็จะโทรซ้ำให้เหมือนกัน กรณีนี้ไม่นับเป็นหนึ่งครั้งของ maxAttempts จึงโทรซ้ำให้แม้ตั้ง maxAttempts เป็น 1

ตั้ง maxAttempts: 3, retryInterval: 7200000 (2 ชั่วโมง) และช่วงเวลาโทรวันธรรมดา 09:00–18:00

ครั้งที่ จบตอน ผล จากนั้น
1 จ. 09:05 NO_ANSWER retry ได้หลัง 11:05
2 จ. 11:06 BUSY retry ได้หลัง 13:06
3 จ. 13:09 COMPLETED จบ ติดต่อได้แล้ว

เวลารอนับจากตอนที่ call ครั้งก่อน จบ ไม่ได้นับจากตอนที่เริ่มโทร

ถ้าครั้งที่ 2 จบตอน 17:30 รอบ retry จะตรงกับ 19:30 เป็นเวลานอกช่วงเวลาโทร ระบบจึงรอโทรตอน 09:00 ของวันทำการถัดไป

ระบบจะไม่โทรหาคนนั้นอีกเมื่อ

  • เคยติดต่อได้แล้ว (COMPLETED รวมถึงกรณีเข้า voicemail) ไม่ว่าจะเป็นครั้งไหนใน campaign นี้
  • โทรครบ maxAttempts แล้ว หรือ
  • campaign ถูกยกเลิกหรือหมดอายุ (expired) ไปแล้ว

การ pause ไม่ได้หยุด retry ถาวร ระหว่างที่ campaign เป็น PAUSED retry จะรอไว้ก่อน แล้วโทรต่อหลังสั่ง resume

คำ คืออะไร
SIP account การเชื่อมต่อกับผู้ให้บริการสายโทรศัพท์ (ค่ายโทรศัพท์ของคุณ หรือของ Gowajee) ในหนึ่ง SIP account มีเบอร์โทรได้หนึ่งเบอร์หรือมากกว่า
Caller ID เบอร์โทรหนึ่งเบอร์ใน SIP account เป็นเบอร์ที่ลูกค้าเห็นบนหน้าจอ
Outbound Default caller ID ที่ตั้งเป็นเบอร์ default ของ SIP account นั้น (ใน dashboard ภาษาไทยแสดงเป็น ค่าเริ่มต้นขาออก)

ดูทั้งหมดได้ใน dashboard ที่ ระบบ → ตั้งค่า → เบอร์โทรศัพท์

ส่งเบอร์โทรมา ให้ตรงกับที่แสดง ในหน้าเบอร์โทรศัพท์

ส่งมาแบบไหน ผลที่ได้
เบอร์เดียว: ["+6621234567"] ทุก call ใช้เบอร์นั้น
หลายเบอร์: ["+6621234567", "+6621234568", "0812345678"] สุ่ม แต่ละ call จะสุ่มเลือกมาหนึ่งเบอร์
[] (array ว่าง) ได้ 400 ถ้าอยากใช้เบอร์ default ให้ไม่ต้องส่ง field นี้มา
  • ถ้าส่งมาหลายเบอร์ retry จะไม่ใช้เบอร์เดียวกับที่โทรหาคนนั้นครั้งล่าสุด คนที่ไม่รับสายจากเบอร์แรกจะเห็นเบอร์อื่นในครั้งถัดไป
  • เบอร์ที่ส่งมาจะอยู่คนละ SIP account กันก็ได้
  • ถ้าส่งเบอร์ที่ไม่ใช่เบอร์ขององค์กรมา จะได้ 400 Unknown caller ID: <number>

ระบบจะใช้ค่าแรกที่มีอยู่ตามลำดับนี้

  1. sipCallerId จาก field แบบเดิมด้านล่าง
  2. เบอร์โทรออก default ของ agent (Gowajee ตั้งไว้ใน configuration ของ agent)
  3. ถ้าส่งมาแค่ sipAccountId จะใช้เบอร์ Outbound Default ของ SIP account นั้น
  4. เบอร์กลางของ Gowajee

integration รุ่นเก่าล็อกทุก call ไว้กับเบอร์เดียวด้วย ID สองตัว (ไม่ใช่เบอร์โทร) คือ sipAccountId (SIP account) และ sipCallerId (caller ID หนึ่งเบอร์ใน account นั้น) คัดลอก ID ทั้งสองได้จากหน้าเบอร์โทรศัพท์ สอง field นี้ยังใช้ได้ แต่ callerIds ทำงานเดียวกันโดยใช้เบอร์โทรตรง ๆ และสุ่มเบอร์ได้ด้วย integration ใหม่จึงควรใช้ callerIds

ส่งมาแบบไหน ผลที่ได้
voice เดียว: ["nicha"] ทุก call ใช้ voice นั้น
หลาย voice: ["nicha", "suda", "kanya"] สุ่ม แต่ละ call จะสุ่มเลือกมาหนึ่ง voice และใช้ voice นั้นไปตลอดทั้ง call retry นับเป็น call ใหม่ จึงสุ่มใหม่อีกรอบ
[] (array ว่าง) ได้ 400 ถ้าอยากใช้ voice ที่ตั้งไว้ใน agent ให้ไม่ต้องส่ง field นี้มา
  • ถ้าส่ง ttsVoiceKeys มา call ทั้งหมดใน campaign จะเปลี่ยนไปใช้ voice ชุด TTS V2 ตามตารางด้านล่าง แม้ agent จะตั้งไว้ให้ใช้ voice engine อื่นก็ตาม
  • key ที่ส่งมาซ้ำจะนับเป็นค่าเดียว
  • ถ้าใช้ voice ผู้ชาย ข้อความที่ Gowajee ใส่ให้เอง (เช่น คำพูดคั่นระหว่างรอ) จะใช้ ครับ แทน ค่ะ / คะ แต่ระบบไม่แปลง ประโยคในบทของ agent ถ้าบทเขียนด้วย ค่ะ ส่วนใหญ่ voice ผู้ชายก็จะยังพูดว่า ค่ะ อยู่ ให้ใช้บทเวอร์ชันผู้ชายคู่กับ voice ผู้ชาย
  • ถ้าส่ง key ที่ไม่มีอยู่หรือเลิกใช้แล้ว จะได้ 400 Unknown voice: <key>
  • ถ้าไม่ส่งมา ระบบจะใช้ voice ที่ตั้งไว้ใน agent ถ้าเปิด สุ่มเสียง (Shuffle voices) ไว้ใน configuration ของ agent แต่ละ call จะสุ่มจากรายการ voice ของ agent ถ้าไม่ได้เปิด ทุก call จะใช้ voice เดียวของ agent
voiceKey ชื่อ เพศ หมายเหตุ
nicha Nicha หญิง แนะนำ
supannee Supannee หญิง
suda Suda หญิง
kanya Kanya หญิง
narin Narin หญิง
nisa Nisa หญิง
taste Taste หญิง
beer Beer ชาย แนะนำ
thaksin Thaksin ชาย
chakrit Chakrit ชาย
krit Krit ชาย
somchai Somchai ชาย
carmen Carmen หญิง สำเนียงไทยแบบชาวต่างชาติ
reflective Reflective Woman หญิง สำเนียงไทยแบบชาวต่างชาติ

ตารางนี้อัปเดตล่าสุดเดือนกันยายน 2026 ดูรายการล่าสุดได้จาก GET /voice-demo/catalog endpoint นี้เป็นแบบสาธารณะ ไม่ต้องใช้ API key

ถ้าองค์กรเปิด แจ้งเตือนการโทรซ้ำ ไว้ (ใน dashboard ที่ ระบบ → ตั้งค่า → ทั่วไป → แจ้งเตือนการโทรซ้ำ) ให้ใส่ "removeDuplicates": true มาด้วย ก่อนเริ่มโทร Gowajee จะตัดทุกคนที่ agent ตัวเดียวกัน เคยโทรติดเบอร์นั้นแล้วภายใน ช่วงเวลาแจ้งเตือนขององค์กร (เช่น “ภายในเดือนนี้”) ออก response จะบอกจำนวนคนที่ตัดออกไว้ เช่น "removedRecipients": 12

  • นับเฉพาะ call ที่เป็น COMPLETED เบอร์ที่เคยโทรไปแต่ติดต่อไม่ได้ (NO_ANSWER, BUSY…) จะยังอยู่ในรายชื่อ
  • เบอร์โทรต้องตรงกัน ทุกตัวอักษร แบบเทียบเป็นข้อความ ในกรณีนี้ 0812345678 กับ +66812345678 ถือเป็นคนละเบอร์
Error (400) สาเหตุ
Duplicate call alert is not enabled for this organization องค์กรยังไม่ได้เปิดฟีเจอร์นี้
All recipients are duplicates within the configured window ตัดแล้วจะไม่เหลือใครให้โทรเลย campaign จะยังเป็น DRAFT
{ "startDateTime": "2026-10-01T02:00:00.000Z" }

วันธรรมดา 09:00–19:00 วันเสาร์อาทิตย์ 10:00–19:00 โทรคนละ 1 ครั้ง ใช้เบอร์และ voice ของ agent