Skip to main content

การเขียนสคริปต์

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

ภาพรวมของตัวแก้ไขสคริปต์ — สามคอลัมน์

วิธีสร้างสคริปต์

  1. เปิดส่วน สคริปต์ แล้วคลิก + สร้าง script ตัวแก้ไขจะเปิดขึ้นพร้อมเทมเพลตโค้ด สคริปต์ใหม่พร้อมเทมเพลตโค้ด
  2. ในแผงด้านขวา ส่วน ข้อมูลเมตา กรอก ชื่อ และ คำอธิบาย ของสคริปต์
  3. ในตัวแก้ไขตรงกลาง เขียนเนื้อหาของฟังก์ชัน main() — สิ่งที่สคริปต์ควรทำอย่างแน่ชัด (ดูส่วน QubixApp SDK ด้านล่าง)
  4. ในส่วน กำหนดการ ตั้งค่าว่าสคริปต์จะรันอัตโนมัติบ่อยแค่ไหน (ดู กำหนดการ) คุณสามารถเว้นว่างไว้ได้หากจะรันด้วยตนเองเท่านั้น
  5. คลิกปุ่ม รันเลย ด้านล่างตัวแก้ไขเพื่อทดสอบสคริปต์กับข้อมูลจริง — ผลลัพธ์จะปรากฏในคอนโซล (ดู การทดสอบสคริปต์)
  6. เปิดสวิตช์ ใช้งาน ที่มุมขวาบน แล้วคลิก บันทึก
เคล็ดลับ

คุณสามารถบันทึกได้ด้วยปุ่มลัด 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 ในช่วงวันที่ผ่านมาชั่วคราว

pause-low-roas.jsJavaScript
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:

JavaScript
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 หากรายการว่างเปล่า คำขอขาออกจะถูกปิดใช้งาน เมื่อพยายามเข้าถึงที่อยู่ที่ไม่อยู่ในรายการ สคริปต์จะแสดงคำแนะนำที่ชัดเจนในคอนโซล

กำหนดการ

ในแผงด้านขวา ส่วน กำหนดการ จะตั้งค่าว่าสคริปต์จะรันอัตโนมัติเมื่อใด สามารถมีกำหนดการได้หลายรายการ — ตัวอย่างเช่น ทุกชั่วโมงหนึ่งครั้งและเพิ่มเติมในเวลาที่ระบุ

  1. ป้อนกำหนดการในรูปแบบ cron (ตัวอย่างเช่น */5 * * * * — ทุก 5 นาที) แล้วคลิก +
  2. ใต้บรรทัดนั้น Qubix จะแสดงคำอธิบายเป็นคำพูดธรรมดาทันที — ตรวจสอบว่าคุณเข้าใจตรงกันถูกต้อง
  3. เพื่อไม่ต้องจดจำไวยากรณ์ cron ให้คลิกไอคอน AI ในบรรทัดแล้วอธิบายกำหนดการเป็นคำพูด ("ทุกวันเวลา 9 โมงเช้า") — Qubix จะกรอกนิพจน์สำเร็จรูปให้

ส่วนกำหนดการพร้อมคำอธิบาย cron

note

หากไม่ได้ตั้งกำหนดการไว้ สคริปต์จะไม่รันด้วยตัวเอง — รันได้ผ่านปุ่ม รันเลย เท่านั้น เพื่อให้การรันอัตโนมัติทำงาน สวิตช์ ใช้งาน ต้องเปิดอยู่

การทดสอบสคริปต์ด้วยปุ่ม "รันเลย"

ใต้ตัวแก้ไขโค้ดมีคอนโซลและปุ่ม ▶ รันเลย ปุ่มนี้จะรัน โค้ดที่อยู่ในตัวแก้ไขในขณะนั้น กับข้อมูลจริง — เป็นวิธีที่ปลอดภัยในการทดสอบตรรกะโดยไม่ต้องรอกำหนดการ ทุกอย่างที่สคริปต์แสดงออกผ่าน console.log จะปรากฏในคอนโซลพร้อมกับเวลาที่รัน, สถานะ และระยะเวลา

คอนโซลพร้อมผลลัพธ์การรัน

ข้อควรระวัง

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

ปุ่ม รันเลย จะใช้งานได้หลังจากบันทึกสคริปต์เป็นครั้งแรกแล้ว

ประวัติการรัน

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

ขั้นตอนต่อไป