स्क्रिप्ट लिखना
स्क्रिप्ट एडिटर वह कार्यक्षेत्र है जहाँ आप कोड लिखते हैं, उसे लाइव डेटा पर टेस्ट करते हैं और शेड्यूल सेट करते हैं। स्क्रीन तीन भागों में बँटी हुई है: बाईं ओर — AI सहायक, बीच में — कोड एडिटर और कंसोल, दाईं ओर — सेटिंग्स पैनल (मेटाडेटा, शेड्यूल, स्थिति, रन इतिहास)।

स्क्रिप्ट कैसे बनाएँ
- स्क्रिप्ट सेक्शन खोलें और + Script बनाएँ पर क्लिक करें। एडिटर एक कोड टेम्पलेट के साथ खुलता है।

- दाएँ पैनल में, मेटाडेटा सेक्शन में, स्क्रिप्ट का नाम और विवरण भरें।
- केंद्रीय एडिटर में,
main()फ़ंक्शन का मुख्य भाग लिखें — ठीक वही जो स्क्रिप्ट को करना चाहिए (नीचे QubixApp SDK सेक्शन देखें)। - शेड्यूल सेक्शन में, सेट करें कि स्क्रिप्ट कितनी बार स्वचालित रूप से चलेगी (देखें शेड्यूल)। यदि आप इसे केवल मैन्युअल रूप से चलाएँगे तो आप इसे खाली छोड़ सकते हैं।
- स्क्रिप्ट को लाइव डेटा पर टेस्ट करने के लिए एडिटर के नीचे Run बटन पर क्लिक करें — परिणाम कंसोल में दिखता है (देखें स्क्रिप्ट का परीक्षण)।
- ऊपर-दाएँ कोने में सक्रिय टॉगल चालू करें और सहेजें पर क्लिक करें।
आप कर्सर को बटन तक ले जाए बिना, सीधे एडिटर से ही कीबोर्ड शॉर्टकट Ctrl + S (macOS पर — Cmd + S) से सहेज सकते हैं।
AI सहायक
बायाँ कॉलम AI सहायक के साथ एक चैट है। कार्य का वर्णन सादे शब्दों में करें ("0.5 से कम ROAS और $20 से अधिक spend वाले ads रोकें"), और सहायक Qubix SDK के लिए तैयार कोड बना देगा। उत्तर के नीचे Insert into Code बटन इस कोड को सीधे एडिटर में डाल देता है।
इनपुट फ़ील्ड के नीचे तैयार उदाहरण प्रॉम्प्ट होते हैं — जल्दी शुरू करने के लिए उनमें से किसी पर भी क्लिक करें।
सहायक स्क्रिप्ट के कोड से उसके लिए एक नाम और विवरण भी सोच सकता है — मेटाडेटा सेक्शन में इन फ़ील्ड के बगल वाले AI आइकन पर क्लिक करें।
🎬 GIF: AI सहायक को एक अनुरोध और कोड को एडिटर में डालना
QubixApp SDK
एक स्क्रिप्ट एक main() फ़ंक्शन है, जिसके अंदर आप 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')— किसी अवधि के लिए मेट्रिक्स प्राप्त करें।
मूल उदाहरण: पिछले दिन में $10 से अधिक spend और 0.5 से कम ROAS वाले ads रोकें।
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 उपलब्ध फ़ील्ड और मेथड को उनके विवरण के साथ सुझाएगा। इस तरह आपको मेट्रिक्स की सूची याद रखने की ज़रूरत नहीं होगी।
डेटाबेस queries
QubixApp के माध्यम से उपलब्ध मौजूदा ads के अलावा, एक स्क्रिप्ट sql कमांड से सीधे Qubix डेटाबेस से डेटा पढ़ सकती है। यह एक tagged template के रूप में लिखी गई read-only query है:
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)
एक query पंक्तियों की एक ऐरे लौटाती है; प्रत्येक पंक्ति एक ऑब्जेक्ट है जिसकी कुंजियाँ कॉलम के नाम होती हैं। ${…} के माध्यम से आप जो मान पास करते हैं वे सुरक्षित पैरामीटर के रूप में भेजे जाते हैं — आप हाथ से कुछ भी escape नहीं करते, और SQL injection संभव नहीं है। Queries read-only हैं: एक स्क्रिप्ट डेटा पढ़ सकती है पर कुछ भी बदल नहीं सकती। एक query किस तक पहुँच सकती है यह उस डेटा तक सीमित है जिसे देखने की आपकी भूमिका को अनुमति है।
रन के बीच की स्थिति
एक स्क्रिप्ट ctx.state के माध्यम से रन के बीच मान याद रख सकती है — यह उसकी निजी स्मृति है:
ctx.state.set('key', value)— सहेजें;ctx.state.get('key')— पढ़ें;ctx.state.delete('key')— हटाएँ।
उदाहरण के लिए, इससे आप याद रख सकते हैं कि किन ads को पहले ही प्रोसेस किया जा चुका है और उन्हें फिर से न छुएँ। स्मृति की वर्तमान सामग्री दाएँ पैनल में स्थिति सेक्शन में दिखती है — वहीं से किसी एकल प्रविष्टि को मैन्युअल रूप से भी हटाया जा सकता है।
बाहरी सेवाओं को अनुरोध
ctx.fetch(url, opts) कमांड बाहर की ओर एक HTTP अनुरोध करता है — उदाहरण के लिए, किसी messenger को नोटिफ़िकेशन भेजने या किसी और के API को कॉल करने के लिए।
आउटबाउंड अनुरोध केवल allowlist के पतों को ही अनुमति प्राप्त हैं। एडमिनिस्ट्रेटर इसे सिस्टम → JavaScript टैब में कॉन्फ़िगर करता है। यदि सूची खाली है, तो आउटबाउंड अनुरोध बंद रहते हैं। सूची में न होने वाले किसी पते तक पहुँचने की कोशिश करते समय, स्क्रिप्ट कंसोल में एक स्पष्ट संकेत दिखाएगी।
शेड्यूल
दाएँ पैनल में, शेड्यूल सेक्शन यह सेट करता है कि स्क्रिप्ट कब स्वचालित रूप से चलती है। कई शेड्यूल हो सकते हैं — उदाहरण के लिए, हर घंटे में एक बार और इसके अतिरिक्त किसी विशिष्ट समय पर।
- शेड्यूल को cron फ़ॉर्मेट में दर्ज करें (उदाहरण के लिए,
*/5 * * * *— हर 5 मिनट) और + पर क्लिक करें। - पंक्ति के नीचे, Qubix तुरंत सादे शब्दों में एक व्याख्या दिखाता है — जाँच लें कि आप दोनों ने एक-दूसरे को सही समझा है।
- cron सिंटैक्स याद करने से बचने के लिए, पंक्ति में AI आइकन पर क्लिक करें और शेड्यूल को शब्दों में बताएँ ("हर दिन सुबह 9 बजे") — Qubix तैयार expression भर देगा।
यदि कोई शेड्यूल सेट नहीं है, तो स्क्रिप्ट अपने आप नहीं चलेगी — केवल Run बटन के माध्यम से। ऑटो-रन के काम करने के लिए, सक्रिय टॉगल चालू होना चाहिए।
"Run" बटन से स्क्रिप्ट का परीक्षण
कोड एडिटर के नीचे एक कंसोल और एक ▶ Run बटन होता है। यह एडिटर में इस समय मौजूद कोड को लाइव डेटा पर निष्पादित करता है — शेड्यूल का इंतज़ार किए बिना लॉजिक टेस्ट करने का यह एक सुरक्षित तरीका है। स्क्रिप्ट console.log के माध्यम से जो कुछ भी आउटपुट करती है वह रन समय, स्थिति और अवधि के साथ कंसोल में दिखता है।

Run बटन वास्तविक क्रियाएँ करता है। यदि कोड में pause() या activate() है, तो ads वास्तव में रोके या चालू कर दिए जाएँगे। बिना परिणामों के लॉजिक टेस्ट करने के लिए, पहले क्रियाओं वाली पंक्तियों को कमेंट कर दें और केवल console.log छोड़ दें।
स्क्रिप्ट को पहली बार सहेजे जाने के बाद Run बटन उपलब्ध हो जाता है।
रन इतिहास
दाएँ पैनल में रन सेक्शन सभी निष्पादनों का इतिहास रखता है: समय, स्थिति (सफलता, त्रुटि, timeout), अवधि और की गई क्रियाओं की संख्या। किसी पंक्ति पर क्लिक करने से उस रन का पूरा कंसोल आउटपुट विस्तृत हो जाता है — यह पता लगाने के लिए सुविधाजनक है कि स्क्रिप्ट ने अप्रत्याशित व्यवहार क्यों किया।