การเขียนสคริปต์
ตัวแก้ไขสคริปต์คือพื้นที่ทำงานที่คุณเขียนโค้ด ทดสอบกับข้อมูลจริง และตั้งค่ากำหนดการ หน้าจอแบ่งออกเป็นสามส่วน: ทางซ้าย — ผู้ช่วย AI, ตรงกลาง — ตัวแก้ไขโค้ดและคอนโซล, ทางขวา — แผงการตั้งค่า (ข้อมูลเมตา, กำหนดการ, สถานะ, ประวัติการรัน)

วิธีสร้างสคริปต์
- เปิดส่วน สคริปต์ แล้วคลิก + สร้าง script ตัวแก้ไขจะเปิดขึ้นพร้อมเทมเพลตโค้ด

- ในแผงด้านขวา ส่วน ข้อมูลเมตา กรอก ชื่อ และ คำอธิบาย ของสคริปต์
- ในตัวแก้ไขตรงกลาง เขียนเนื้อหาของฟังก์ชัน
main()— สิ่งที่สคริปต์ควรทำอย่างแน่ชัด (ดูส่วน QubixApp SDK ด้านล่าง) - ในส่วน กำหนดการ ตั้งค่าว่าสคริปต์จะรันอัตโนมัติบ่อยแค่ไหน (ดู กำหนดการ) คุณสามารถเว้นว่างไว้ได้หากจะรันด้วยตนเองเท่านั้น
- คลิกปุ่ม รันเลย ด้านล่างตัวแก้ไขเพื่อทดสอบสคริปต์กับข้อมูลจริง — ผลลัพธ์จะปรากฏในคอนโซล (ดู การทดสอบสคริปต์)
- เปิดสวิตช์ ใช้งาน ที่มุมขวาบน แล้วคลิก บันทึก
คุณสามารถบันทึกได้ด้วยปุ่มลัด Ctrl + S (บน macOS — Cmd + S) ได้โดยตรงจากตัวแก้ไข โดยไม่ต้องเลื่อนเคอร์เซอร์ไปที่ปุ่ม
ผู้ช่วย AI
คอลัมน์ด้านซ้ายคือแชทกับผู้ช่วย AI อธิบายงานเป็นคำพูดธรรมดา ("หยุด ads ที่ ROAS ต่ำกว่า 0.5 และ spend เกิน $20") แล้วผู้ช่วยจะสร้างโค้ดสำเร็จรูปสำหรับ Qubix SDK ปุ่ม แทรกใน Code ใต้คำตอบจะวางโค้ดนี้ลงในตัวแก้ไขทันที
ใต้ช่องป้อนข้อมูลมีตัวอย่างพรอมต์สำเร็จรูป — คลิกอันใดก็ได้เพื่อเริ่มต้นอย่างรวดเร็ว
ผู้ช่วยยังสามารถคิด ชื่อ และ คำอธิบาย ให้กับสคริปต์จากโค้ดของมันได้ — คลิกไอคอน AI ข้างฟิลด์เหล่านี้ในส่วน ข้อมูลเมตา
🎬 GIF: คำขอไปยังผู้ช่วย AI และการแทรกโค้ดลงในตัวแก้ไข
QubixApp SDK
สคริปต์คือฟังก์ชัน main() ซึ่งภายในนั้นคุณทำงานกับข้อมูล ad ผ่านชุดคำสั่ง QubixApp มีให้ใช้งานสามระดับ:
QubixApp.ads()— ads,QubixApp.adsets()— ad sets,QubixApp.campaigns()— campaigns.
แต่ละระดับจะคืนค่าชุดที่สามารถกรองและวนซ้ำได้ ชุดนี้มีเมธอด:
.withCondition('...')— เลือกตามเงื่อนไขของเมตริก (ตัวอย่างเช่น'spend_24h > 10 AND roas_24h < 0.5');.orderBy('field', 'desc')— เรียงลำดับ;.withLimit(n)— จำกัดจำนวน;.get()— รับอาร์เรย์ของรายการ;.first()— รับรายการแรก
ทุก ad, ad set หรือ campaign มีการกระทำ:
.pause({ duration: '24h', reason: '...' })— หยุดชั่วคราวตามระยะเวลาที่กำหนด;.activate({ reason: '...' })— เปิดกลับมาอีกครั้ง;.getStatsFor('24h')— รับเมตริกสำหรับช่วงเวลาหนึ่ง
ตัวอย่างพื้นฐาน: หยุด ads ที่ spend เกิน $10 และ ROAS ต่ำกว่า 0.5 ในช่วงวันที่ผ่านมาชั่วคราว
function main() {
const ads = QubixApp.ads()
.withCondition('spend_24h > 10 AND roas_24h < 0.5')
.get()
for (const ad of ads) {
console.log('pausing', ad.name, 'roas24h=', ad.roas_24h)
ad.pause({ duration: '24h', reason: 'low roas' })
}
}
สนิปเปตสำเร็จรูปเพิ่มเติมอยู่ในส่วน ตัวอย่างสคริปต์
การเติมข้อความอัตโนมัติทำงานในตัวแก้ไข: เริ่มพิมพ์ ad. หรือ QubixApp. — Qubix จะแนะนำฟิลด์และเมธอดที่ใช้ได้พร้อมคำอธิบาย เพื่อให้คุณไม่ต้องจดจำรายการเมตริกไว้ในหัว
การค้นหาข้อมูลในฐานข้อมูล
นอกเหนือจาก ads ปัจจุบันที่ใช้ได้ผ่าน QubixApp แล้ว สคริปต์ยังสามารถอ่านข้อมูลโดยตรงจากฐานข้อมูล Qubix ด้วยคำสั่ง sql ได้ ซึ่งเป็นการค้นหาแบบอ่านอย่างเดียวที่เขียนเป็น tagged template:
const rows = sql`
SELECT country, sum(spend) AS spend
FROM hourly_insights
WHERE date >= ${'2026-06-01'}
GROUP BY country`
for (const row of rows) console.log(row.country, row.spend)
การค้นหาจะคืนค่าอาร์เรย์ของแถว แต่ละแถวเป็นออบเจกต์ที่มีคีย์เป็นชื่อคอลัมน์ ค่าที่คุณส่งผ่าน ${…} จะถูกส่งเป็นพารามิเตอร์ที่ปลอดภัย — คุณไม่ต้อง escape อะไรด้วยตนเอง และ SQL injection จะเกิดขึ้นไม่ได้ การค้นหาเป็นแบบ อ่านอย่างเดียว: สคริปต์สามารถอ่านข้อมูลได้แต่ไม่สามารถเปลี่ยนแปลงอะไรได้ สิ่งที่การค้นหาเข้าถึงได้ถูกจำกัดอยู่ที่ข้อมูลที่บทบาทของคุณได้รับอนุญาตให้เห็น
สถานะระหว่างการรัน
สคริปต์สามารถจดจำค่าระหว่างการรันได้ผ่าน ctx.state — นี่คือหน่วยความจำส่วนตัวของมัน:
ctx.state.set('key', value)— บันทึก;ctx.state.get('key')— อ่าน;ctx.state.delete('key')— ลบ
ตัวอย่างเช่น สิ่งนี้ช่วยให้คุณจดจำได้ว่า ads ใดถูกประมวลผลไปแล้วและไม่ไปแตะต้องมันอีก เนื้อหาปัจจุบันของหน่วยความจำจะมองเห็นได้ในแผงด้านขวาในส่วน สถานะ — จากตรงนั้นยังสามารถลบรายการแต่ละรายการด้วยตนเองได้ด้วย
คำขอไปยังบริการภายนอก
คำสั่ง ctx.fetch(url, opts) จะส่งคำขอ HTTP ออกไปภายนอก — ตัวอย่างเช่น เพื่อส่งการแจ้งเตือนไปยังเมสเซนเจอร์ หรือเพื่อเรียก API ของผู้อื่น
คำขอขาออกได้รับอนุญาตเฉพาะไปยังที่อยู่จาก allowlist เท่านั้น ผู้ดูแลระบบจะกำหนดค่านี้ใน ระบบ → แท็บ JavaScript หากรายการว่างเปล่า คำขอขาออกจะถูกปิดใช้งาน เมื่อพยายามเข้าถึงที่อยู่ที่ไม่อยู่ในรายการ สคริปต์จะแสดงคำแนะนำที่ชัดเจนในคอนโซล
กำหนดการ
ในแผงด้านขวา ส่วน กำหนดการ จะตั้งค่าว่าสคริปต์จะรันอัตโนมัติเมื่อใด สามารถมีกำหนดการได้หลายรายการ — ตัวอย่างเช่น ทุกชั่วโมงหนึ่งครั้งและเพิ่มเติมในเวลาที่ระบุ
- ป้อนกำหนดการในรูปแบบ cron (ตัวอย่างเช่น
*/5 * * * *— ทุก 5 นาที) แล้วคลิก + - ใต้บรรทัดนั้น Qubix จะแสดงคำอธิบายเป็นคำพูดธรรมดาทันที — ตรวจสอบว่าคุณเข้าใจตรงกันถูกต้อง
- เพื่อไม่ต้องจดจำไวยากรณ์ cron ให้คลิกไอคอน AI ในบรรทัดแล้วอธิบายกำหนดการเป็นคำพูด ("ทุกวันเวลา 9 โมงเช้า") — Qubix จะกรอกนิพจน์สำเร็จรูปให้
หากไม่ได้ตั้งกำหนดการไว้ สคริปต์จะไม่รันด้วยตัวเอง — รันได้ผ่านปุ่ม รันเลย เท่านั้น เพื่อให้การรันอัตโนมัติทำงาน สวิตช์ ใช้งาน ต้องเปิดอยู่
การทดสอบสคริปต์ด้วยปุ่ม "รันเลย"
ใต้ตัวแก้ไขโค้ดมีคอนโซลและปุ่ม ▶ รันเลย ปุ่มนี้จะรัน โค้ดที่อยู่ในตัวแก้ไขในขณะนั้น กับข้อมูลจริง — เป็นวิธีที่ปลอดภัยในการทดสอบตรรกะโดยไม่ต้องรอกำหนดการ ทุกอย่างที่สคริปต์แสดงออกผ่าน console.log จะปรากฏในคอนโซลพร้อมกับเวลาที่รัน, สถานะ และระยะเวลา

ปุ่ม รันเลย ดำเนินการจริง หากโค้ดมี pause() หรือ activate() อยู่ ads จะถูกหยุดหรือเปิดขึ้นจริง เพื่อทดสอบตรรกะโดยไม่มีผลกระทบ ให้คอมเมนต์บรรทัดที่มีการกระทำออกไปก่อนและเหลือไว้แค่ console.log
ปุ่ม รันเลย จะใช้งานได้หลังจากบันทึกสคริปต์เป็นครั้งแรกแล้ว
ประวัติการรัน
ส่วน การรัน ในแผงด้านขวาจะเก็บประวัติการดำเนินการทั้งหมด: เวลา, สถานะ (สำเร็จ, ข้อผิดพลาด, timeout), ระยะเวลา และจำนวนการกระทำที่ทำไป การคลิกที่แถวจะขยายเอาต์พุตคอนโซลฉบับเต็มของการรันนั้น — สะดวกสำหรับการหาสาเหตุว่าทำไมสคริปต์ถึงทำงานผิดปกติ