QStash सर्वरलेस वातावरण के लिए डिज़ाइन किया गया एक टास्क शेड्यूलर और मैसेज क्यू सिस्टम है। यह डेवलपर्स के लिए एक मूल्यवान उपकरण है क्योंकि यह उन्हें स्टेट मैनेज करने की चिंता किए बिना विशिष्ट अंतराल पर चलने वाले स्वचालित वर्कफ़्लो सेट करने की अनुमति देता है, चाहे एक बार या बार-बार।
आप QStash कंसोल पर खेल सकते हैं कि अनुरोध कैसे बनाया जाए:

उपयोग का मामला
मेरा प्रोडक्ट GPT Hotline अनिवार्य रूप से WhatsApp पर ChatGPT है (हम उसी अंतर्निहित मॉडल का उपयोग करते हैं)। आप समर्पित नंबर पर बॉट को टेक्स्ट कर सकते हैं जैसे आप ChatGPT ऐप पर करते हैं।
GPT Hotline केवल टेक्स्टिंग से परे अतिरिक्त सुविधाएं प्रदान करता है, जैसे इमेज सर्च, वीडियो सर्च, और समाचार। इसके अतिरिक्त, मैं एक रिमाइंडर सुविधा जोड़ना चाहता था, जो यूजर्स को बॉट को टेक्स्ट करके एक निर्दिष्ट समय पर संदेश प्राप्त करने की अनुमति देगा।
एक सरल फ्लो जहां आप बॉट को एक निश्चित समय पर आपको संदेश भेजने के लिए टेक्स्ट कर सकते हैं। यह कुछ इस तरह दिखेगा:

मैंने पहले सर्वरलेस Redis के लिए Upstash का उपयोग किया था इसलिए मुझे QStash के बारे में अस्पष्ट रूप से पता था और यह सीखने का सही अवसर लग रहा था!
आइए गोता लगाएँ
हम जिस उच्च-स्तरीय वर्कफ़्लो को कोड करना चाहते हैं वह है
यूजर रिमाइंडर संदेश भेजता है -> QStash जॉब सेटअप होता है -> QStash निर्दिष्ट समय पर API ट्रिगर करता है -> यूजर को संदेश भेजा जाता है
चीजों को सरल रखने के लिए, मैं केवल QStash कोड पर ध्यान केंद्रित करूंगा। GPT Hotline में "पावर कमांड" हैं जो बॉट की डिफ़ॉल्ट प्रतिक्रिया को ओवरराइड करते हैं, और रिमाइंडर सेट करने की कमांड निम्न प्रारूप में है:
sudo reminder <TIME-INTERVAL> <MY-MESSAGE>
उदाहरण के लिए, यदि आप टेक्स्ट करते हैं:
sudo reminder 3h go for a walk
"sudo reminder" कमांड रिमाइंडर कोड को ट्रिगर करेगा, और "3h" इंगित करता है कि आप रिमाइंडर ("go for a walk") को 3 घंटे में भेजना चाहते हैं।
GPT Hotline Next.js का उपयोग करके बनाया गया है इसलिए हम QStash को कुछ तरीकों से ट्रिगर कर सकते हैं। उनके पास एक verifySignature फंक्शन है जिसका उपयोग आप प्रमाणित करने के लिए कर सकते हैं लेकिन हम चीजों को सरल रखने के लिए REST API दृष्टिकोण का उपयोग करेंगे।
// नोट: QStash डॉक्स में CURL कमांड उदाहरण उपलब्ध हैं।
const YOUR_API_URL = "https://api.example.com";
const MY_MESSAGE = "go for a walk";
const REMINDER_TIME = "3h";
const MESSENGER = "1800-MCDONALDS";
await fetch(`https://qstash.upstash.io/v1/publish/${YOUR_API_URL}`, {
headers: {
Authorization: `Bearer ${process.env.QSTASH_TOKEN}`,
"Upstash-Delay": REMINDER_TIME,
"Content-Type": "application/json",
},
method: "POST",
body: JSON.stringify({ message: MY_MESSAGE, messenger: MESSENGER }),
});
यह एक fetch अनुरोध का उदाहरण है जिसे हम QStash पर भेज सकते हैं। मैंने मानों को हार्डकोड किया है और अतिरिक्त फ़ील्ड हटा दिए हैं, लेकिन यह हमारे ऐप में वास्तविक fetch अनुरोध का एक अच्छा प्रतिनिधित्व है।
QStash को संदेश भेजने के लिए एक URL की आवश्यकता होती है। यह हमारा API URL होगा जिसे हम निर्दिष्ट समय पर ट्रिगर करना चाहते हैं।
Upstash-Delay मान संदेश भेजने का समय निर्धारित करता है। Upstash-Delay सेकंड (s), मिनट (m), घंटे (h), और दिन (d) में मान ले सकता है। उदाहरण के लिए, 30m 30 मिनट है और 2d 2 दिन है, आदि। यदि हम एक जॉब सेट करना चाहते थे जो केवल एक बार के बजाय समय-समय पर चलता है, तो हम क्रॉन लॉजिक के साथ Upstash-Cron फ़ील्ड का उपयोग करेंगे।
हम संदेश को बॉडी में, प्राप्तकर्ता के नंबर (मैसेंजर) के साथ भी भेजेंगे, और हमारे QSTASH_TOKEN का उपयोग करके प्रमाणित करेंगे जिसे एनवायरनमेंट वेरिएबल के रूप में सेट किया गया है।
और बस! यदि सब कुछ उम्मीद के मुताबिक काम करता है, तो हमें एक पुष्टि प्राप्त होगी कि रिमाइंडर सेट हो गया है, और QStash निर्धारित समय पर संदेश और मैसेंजर मानों के साथ API को ट्रिगर करेगा (जो बदले में प्राप्तकर्ता को रिमाइंडर भेजेगा)।
निष्कर्ष
मैं इस सुविधा को टाल रहा था क्योंकि मुझे लगा कि इसे लागू करना थोड़ा जटिल होगा, लेकिन QStash की मदद से, मैं इसे सिर्फ एक शाम में पूरा करने में सक्षम था!
मैं अत्यधिक अनुशंसा करता हूं कि आप इसे देखें। उनके पास 500 संदेश/दिन का एक उदार फ्री टियर है जिसका आप उपयोग शुरू कर सकते हैं, और केवल तभी भुगतान करें जब आपका एप्लिकेशन स्केल हो, इसलिए इसे आज़माने का कोई कारण नहीं है।
चीयर्स, Bilal
sudo reminder 1m Good Luck!
