Node.js से WhatsApp मैसेज भेजें और पाएं
मैसेज पाना ऐसी रूट है जो Meta के पुष्टि वाले GET का जवाब देती है और POST स्वीकार करती है। मैसेज भेजना Cloud API को fetch कॉल है, जिसमें नंबर का phone number id और टोकन होता है। हमारा कोई SDK नहीं है और कुछ इंस्टॉल करने की ज़रूरत नहीं।
Meta की पुष्टि के लिए एक GET और इवेंट के लिए एक POST।
ग्राहक के मैसेज के बाद की वह विंडो जिसमें सामान्य टेक्स्ट भेजा जा सकता है।
उस विंडो के बाहर सामान्य टेक्स्ट भेजने पर लौटाई गई गड़बड़ी।
Node में मैसेज कैसे पाते हैं?
दो मेथड वाली एक रूट, Express, Fastify, Next route handler या सामान्य सर्वर में।
GET, Meta की पुष्टि का जवाब देता है: क्वेरी से hub.mode, hub.verify_token और hub.challenge पढ़ें, टोकन को अपने टोकन से मिलाएं और challenge को सामान्य टेक्स्ट के रूप में लौटाएं। इसे JSON के रूप में लौटाना आम गलती है। इससे एंडपॉइंट सही दिखता है, लेकिन कभी कुछ प्राप्त नहीं करता।
POST इवेंट प्राप्त करता है। तुरंत 200 जवाब दें और उसके बाद प्रोसेस करें। Meta धीमी चीज़ों को दोबारा भेजता है, इसलिए जवाब देने से पहले काम करने वाला हैंडलर एक ही मैसेज एक से अधिक बार देखेगा। खासकर serverless में, पहले जवाब लौटाना और काम को क्यू में डालना ही cold start को डुप्लिकेट बनने से रोकता है।
मैसेज कैसे भेजते हैं?
phone number id के लिए Cloud API messages एंडपॉइंट पर fetch, जिसमें टोकन bearer हेडर के रूप में होता है।
इसमें हमारे लिए कुछ खास नहीं है, इसलिए अनुरोध Meta के अपने दस्तावेज़ों से बिल्कुल मेल खाता है। सीखने या किसी wrapper में बंधने की ज़रूरत नहीं। दोनों मान डैशबोर्ड में हैं, और अगर कोई सहायक सेटअप कर रहा हो तो get_api_credentials उन्हें MCP connector के ज़रिए लौटाता है।
बॉडी समय पर निर्भर करती है। ग्राहक के आखिरी इनबाउंड मैसेज के 24 घंटे के भीतर text ऑब्जेक्ट भेजें। उसके बाद, स्वीकृत टेम्पलेट नाम और भाषा वाला template ऑब्जेक्ट भेजें। केवल टेक्स्ट भेजने वाला कोड हर टेस्ट पास करता है, लेकिन रात में आए पहले मैसेज पर विफल हो जाता है।
serverless में क्या अलग है?
दो बातें हैं और दोनों इस पर निर्भर हैं कि काम पूरा होने से पहले फ़ंक्शन खत्म हो जाता है।
200 लौटाकर उसके बाद काम जारी रखना उस फ़ंक्शन में काम नहीं करता जो जवाब देते ही फ़्रीज़ हो जाता है। अपने प्लेटफ़ॉर्म की वह सुविधा इस्तेमाल करें जो जवाब के बाद काम को चालू रखे, या पेलोड को क्यू में डालें और अलग फ़ंक्शन से संभालें। Meta को सिर्फ़ जल्दी पुष्टि चाहिए, काम पूरा होना नहीं।
Cold starts से धीमे जवाब की संभावना भी बढ़ती है, जिससे ज़्यादा दोबारा प्रयास और डुप्लिकेट होते हैं। wamid मैसेज id के आधार पर डुप्लिकेशन हटाना वैकल्पिक नहीं है। इसी से यह तरीका भरोसेमंद बनता है।
आम गड़बड़ियाँ
- challenge को raw body के बजाय JSON के रूप में लौटाना।
- 200 जवाब देने से पहले काम करना। serverless में जवाब देते ही फ़ंक्शन फ़्रीज़ हो सकता है।
- डुप्लिकेशन हटाना छोड़ देना। Meta जानबूझकर दोबारा प्रयास करता है और डुप्लिकेट सामान्य हैं, कोई दुर्लभ स्थिति नहीं।
easycoexistence.com पर नंबर कनेक्ट करें, वेबहुक डेस्टिनेशन अपनी रूट पर सेट करें और डैशबोर्ड से phone number id व टोकन लें। US$ 9 प्रति नंबर प्रति माह से शुरू, अधिक संख्या पर US$ 2 तक, पहले 7 दिन मुफ़्त।
अक्सर पूछे जाने वाले सवाल
क्या मुझे किसी लाइब्रेरी की ज़रूरत है?
नहीं। एक रूट और fetch पर्याप्त हैं, और कॉल Meta के दस्तावेज़ों से बिल्कुल मेल खाती है।
क्या यह Vercel या Lambda पर काम करता है?
हां, सामान्य serverless सावधानी के साथ: पहले पुष्टि करें, फिर inline के बजाय क्यू या बैकग्राउंड तरीके से प्रोसेस करें।
मैं कैसे पुष्टि करूं कि अनुरोध Meta से आया है?
हस्ताक्षर वाले हेडर को अपने app secret से मिलाएं। एंडपॉइंट सार्वजनिक होते ही यह करना उपयोगी है।
क्या मैं TypeScript इस्तेमाल कर सकता हूं?
हां। हमारी ओर से टाइप करने के लिए कुछ नहीं है, क्योंकि पेलोड Meta का है और Meta ने उसका दस्तावेज़ दिया है।
पढ़ना जारी रखें
शुरू करने के लिए तैयार हैं?
WhatsApp Coexistence को महीनों में नहीं, मिनटों में कॉन्फ़िगर करें। ऐप्लिकेशन मोबाइल पर काम करता रहता है।
मुफ़्त ट्रायल शुरू करेंइस तारीख को सत्यापित