Meta
डेवलपर

WhatsApp Business प्लेटफ़ॉर्म से Webhooks लागू करना

घर पर चश्मा पहनकर लैपटॉप पर काम करता व्यक्ति

जब भी कोई एक्टिविटी होती है, तो Webhooks एक आसान तरीका है जिससे सर्विस डेटा भेज सकती हैं. आप मैसेज पाने के लिए ऐप्लिकेशन या सर्वर सेट करते हैं और सर्विस को एड्रेस देते हैं. जब सर्विस में कोई ईवेंट ट्रिगर होता है, तो यह आपके ऐप्लिकेशन को मैसेज भेजने के लिए वेबहुक को कॉल कर सकता है.

WhatsApp Business प्लेटफ़ॉर्म अलग-अलग ईवेंट के लिए कई विकल्प देता है, जिन्हें आप अपने एप्लिकेशन या सर्विस में तब तक इंटीग्रेट कर सकते हैं, जब तक वे HTTPS को सपोर्ट करते हों और उनके पास मान्य SSL सर्टिफ़िकेट हो. इससे आप WhatsApp मैसेज के जवाब रियल टाइम में ऑटोमेट कर सकते हैं.

इस लेख में, हम WhatsApp से कनेक्ट करने के लिए वेबहुक सेट करने के तरीकों का मूल्यांकन करेंगे. हम आपको एक ट्यूटोरियल भी दिखाएँगे जिसमें मैसेज पाने और उन्हें डेटाबेस में स्टोर करने वाला ऐप्लिकेशन सेट करने का तरीका बताया गया है.

Webhooks लागू करना

किसी भी साइज़ के बिज़नेस को अपने कस्टमर्स के साथ दो-तरफ़ा बातचीत करने के लिए WhatsApp का उपयोग करने से फ़ायदा होता है. यूज़ केस तीन मुख्य कैटेगरी में आते हैं: कस्टमर सर्विस, मार्केटिंग.

Webhooks अलग-अलग तरह के ईवेंट के बारे में नोटिफ़िकेशन दे सकते हैं. उदाहरण के लिए, रिसीव किए गए मैसेज ईवेंट, मैसेज वेबहुक से होकर गुज़रते हैं. आप कस्टमर के आम सवालों को फ़िल्टर करके कस्टमर सर्विस एजेंट के प्रेशर को कम करने के लिए इस वेबहुक का उपयोग कर सकते हैं. आसान मैसेज का जवाब तैयार करने के लिए उन्हें चैटबॉट सर्विस को भेजा जाता है और जिन मैसेज का तुरंत जवाब नहीं दिया जा सकता, उन्हें लाइव एजेंट के पास भेज दिया जाता है.

अगर यूज़र्स फ़ोटो भेजते हैं, तो रिसीव किए गए मैसेज ईवेंट में मीडिया भी हो सकता है या अगर यूज़र्स जवाब टाइप करने के बजाय मैसेज का जवाब देने के लिए बटन पर क्लिक करते हैं, तो इसमें इंटरैक्शन की जानकारी भी शामिल हो सकती है.

अब जब हमने WhatsApp वेबहुक के कुछ उपयोग के तरीके एक्सप्लोर कर लिए हैं, तो आइए ट्यूटोरियल देखें. हम एक आसान यूज़ केस की जाँच करेंगे, जहाँ कस्टमर्स WhatsApp मैसेज के ज़रिए रिव्यू का फ़ीडबैक देते हैं. हम आपको इन रिव्यू को डेटाबेस में स्टोर करने का तरीका बताएँगे, जहाँ उनका विश्लेषण किसी खास प्रोडक्ट से जुड़ी सामान्य रिव्यू थीम या सामान्य सेंटिमेंट को समझने के लिए किया जा सकता है.

AWS Lambda के साथ Node.js वेबहुक लिस्नर

मान लें कि आपका बिज़नेस WhatsApp Business प्लेटफ़ॉर्म का उपयोग करके कस्टमर्स को मैसेज भेजना चाहता है, जिसमें उन्हें हाल ही में खरीदे गए प्रोडक्ट का रिव्यू करने के लिए कहा गया है. आपका बिज़नेस कस्टमर को अपने रिव्यू के साथ मैसेज का जवाब देने देना चाहता है और फिर आप उस रिव्यू को डेटाबेस में स्टोर करना चाहते हैं.

ऐसा करने के लिए, आप Node.js का उपयोग करके AWS Lambda फ़ंक्शन बनाएँगे और डेटा को DynamoDB में स्टोर करेंगे. इन तकनीकों का उपयोग करने से पूरा स्टैक सर्वरलेस हो जाता है, जिससे डेवलप करते समय इन्फ़्रास्ट्रक्चर का बोझ हट जाता है और आपको माँग के अनुसार अपने आप ऊपर या नीचे स्केल करने की सुविधा मिलती है. इससे कीमत को ज़्यादा सुविधाजनक बनाने में भी मदद मिलती है, क्योंकि आप सिर्फ़ उसी चीज़ का पेमेंट करते हैं जिसका आप उपयोग करते हैं.

अपना ऐप कॉन्फ़िगर करना

सबसे पहले, नया Node.js प्रोजेक्ट शुरू करें. सर्वरलेस फ़्रेमवर्क एक अच्छा विकल्प है, क्योंकि यह AWS Lambda फ़ंक्शन के लिए सेटअप और डिप्लॉयमेंट को आसान बनाता है.

प्रोजेक्ट शुरू करने के लिए ये कमांड डालें:

npm init serverless create --template aws-nodejs npm install -s express serverless-http serverless-offline

आपका प्रोजेक्ट शुरू होने के बाद, आपको एक एंड पॉइंट बनाना होगा जिसकी मदद से आप WhatsApp Business प्लेटफ़ॉर्म के साथ अपना ऐप्लिकेशन वेरिफ़ाई कर पाएँगे. Meta for Developers पर अपना ऐप बनाते समय यह ज़रूरी शर्त है.

handler.js में बॉइलरप्लेट कोड को इनसे बदलें:

const serverless = require('serverless-http') const express = require('express') const app = express() const token = process.env.TOKEN app.get('/webhooks', (req, res) => { if ( req.query['hub.mode'] == 'subscribe' && req.query['hub.verify_token'] == token ) { res.send(req.query['hub.challenge']); } else { res.sendStatus(400); } }) module.exports.handler = serverless(app);

एंड पॉइंट बहुत आसान है: यह hub.challenge पैरामीटर वापस करता है, जिसे वेरिफ़िकेशन सिस्टम रिक्वेस्ट पैरामीटर के रूप में भेजता है.

इसके बाद, आपको सर्वरलेस YAML फ़ाइल में अपना एंड पॉइंट कॉन्फ़िगर करना होगा. यह YAML फ़ाइल फ़ंक्शन, एंड पॉइंट और किसी भी रिसोर्स के बारे में बताती है जिसे AWS पर प्रोजेक्ट डिप्लॉय करते समय बनाया जाना चाहिए.

इससे डिप्लॉयमेंट प्रोसेस आसान हो जाती है और किसी मैन्युअल कॉन्फ़िगरेशन की ज़रूरत नहीं रहती. यह किसी भी कोड और अतिरिक्त इंफ़्रास्ट्रक्चर कॉन्फ़िगरेशन को एक साथ बंडल करता है, जैसे कि रिसोर्स क्रिएशन या परमिशन डेफ़िनिशन.
serverless.yml में बॉइलरप्लेट कोड को इस कोड से बदलें:

सर्विस: whatsapp-webhooks frameworkVersion: '2' provider: name: aws runtime: nodejs14.x lambdaHashingVersion: 20201221 environment: TOKEN: ${env:APP_TOKEN} plugins: - serverless-offline functions: app: handler: handler.handler events: - http: ANY / - http: 'ANY {proxy+}'

प्लग-इन सेक्शन में सर्वरलेस ऑफ़लाइन शामिल है, जो AWS Lambda और API Gateway की नकल करता है और आपको अपने एंड पॉइंट को AWS में लागू करने से पहले स्थानीय रूप से टेस्ट करने की सुविधा देता है.

फ़ंक्शन सेक्शन आपके एंड पॉइंट हैंडलर की लोकेशन तय करता है और यह तय करता है कि कौन-से HTTP ईवेंट इसे ट्रिगर कर सकते हैं. आसानी के लिए, किसी भी ईवेंट पर जवाब देने के लिए इस हैंडलर को सेट करें.

प्रोवाइडर सेक्शन में टोकन एनवायरमेंट वेरिएबल होता है. Meta for Developers से वेरिफ़िकेशन मैसेज भेजते समय यह सीक्रेट टोकन ज़रूरी होता है.

टोकन तय करने के लिए, अपने टर्मिनल में “APP_TOKEN” नाम के साथ परिवेश वेरिएबल एक्सपोर्ट करें. उदाहरण के लिए, यह कमांड उपयोग करें:

export APP_TOKEN=testtoken

सर्विस का उपयोग करने पर, TOKEN वेरिएबल आपके लोकल APP_TOKEN वेरिएबल की वैल्यू ले लेगा और इसे AWS में Lambda फ़ंक्शन के लिए उपलब्ध कराएगा.

अपना ऐप टेस्ट करना

अब जब आपका प्रोजेक्ट कॉन्फ़िगर हो गया है, तो आपको यह टेस्ट करना चाहिए कि फ़ंक्शन स्थानीय रूप से काम करता है या नहीं.

इन कमांड को चलाकर ऑफ़लाइन मोड में प्रोजेक्ट लॉन्च करें:

सर्वरलेस ऑफ़लाइन

ऐप चलने के बाद, किसी अन्य विंडो में यह कमांड चलाएँ, क्योंकि मौजूदा विंडो पर ऐप का कंट्रोल होगा. पक्का करें कि आपने टोकन वैल्यू को उस टोकन की वैल्यू से बदल दिया है जिसे आपने पहले परिभाषित किया था:

curl -v "http://localhost:3000/dev/webhooks?hub.mode=subscribe&hub.verify_token=testtoken"

आउटपुट और 204 स्टेटस वाले जवाब कुछ ऐसे दिखने चाहिए:

* 127.0.0.1 को आज़माया जा रहा है... * TCP_NODELAY सेट * localhost (127.0.0.1) पोर्ट 3000 (#0) से कनेक्ट किया गया > GET /dev/webhooks?hub.mode=subscribe&hub.verify_token=testtoken HTTP/1.1 > होस्ट: localhost:3000 > यूज़र-एजेंट: curl/7.64.1 > स्वीकार करें: */* > < HTTP/1.1 204 कोई कंटेंट नहीं < x-powered-by: Express < content-type: application/json; charset=utf-8 < cache-control: no-cache < तारीख: गुरुवार, 21 अप्रैल 2022 16:28:24 GMT < कनेक्शन: जारी रखें < जारी रखें: टाइमआउट=5 < * होस्ट localhost से कनेक्शन #0 को जारी रखा गया * कनेक्शन 0 को बंद किया जा रहा है

इसके बाद, यहाँ दी गई कमांड चलाकर अपने ऐप्लिकेशन को AWS में डिप्लॉय करें:

सर्वर का उपयोग किए बिना डिप्लॉय करना

इसके बाद, ऐप डिप्लॉय होने के बाद AWS आपके एंड पॉइंट को टर्मिनल पर दिखाएगा.

वेबहुक कॉन्फ़िगर करें

इसके बाद, Facebook ऐप बनाकर वेरिफ़िकेशन प्रोसेस शुरू करें.

ऐप डैशबोर्ड पर बाईं ओर नेविगेशन पैनल में, प्रोडक्ट चुनें. इसके बाद, ऑप्शन में से Webhooks चुनें. ड्रॉपडाउन मेनू में, Whatsapp Business अकाउंट चुनें.

वेबहुक कॉन्फ़िगर करें

इसके बाद, AWS द्वारा दिए गए एंड पॉइंट के साथ कॉलबैक URL डालें. यह वही टोकन होना चाहिए जिसका उपयोग आपने serverless.yml फ़ाइल में किया है.

WhatsApp Business अकाउंट का सब्सक्रिप्शन एडिट करें

ऐप वेरिफ़ाइड होने के बाद, आप वे सभी अलग-अलग ऑब्जेक्ट फ़ील्ड देख सकते हैं जिन्हें आपका वेबहुक सब्सक्राइब कर सकता है. इनमें से हर एक में टेस्ट करने और सब्सक्राइब करने का विकल्प होता है.

WhatsApp Business अकाउंट का सब्सक्रिप्शन एडिट करें

मैसेज फ़ील्ड ही वह फ़ील्ड है जिसमें दिलचस्पी है, जो मैसेज मिलने पर उन्हें आपके एंड पॉइंट पर भेजता है. हर वेबहुक उसी कॉलबैक URL को POST रिक्वेस्ट भेजता है, जो आपने ऐप्लिकेशन वेरिफ़ाई करते समय दिया था.

इसके बाद, आपको पोस्ट रिक्वेस्ट वापस पाने और डेटा को DynamoDB में स्टोर करने के लिए कोड लिखना होगा.

handler.js फ़ाइल में यह कोड जोड़ें:

const AWS = require('aws-sdk') const dynamoDb = new AWS.DynamoDB.DocumentClient(); app.post('/webhooks', (req, res) => { const body = JSON.parse(req.body) if(body.field !== 'messages">{ // not from the messages webhook so dont process return res.sendStatus(400) } const reviews = body.value.messages.map((message)=>{ const reviewInfo = { TableName: process.env.REVIEW_TABLE, Item: { phonenumber: message.from, review: message.text.body } } return dynamoDb.put(reviewInfo).promise() }) // return 200 code once all reviews have been written to dynamoDB return Promise.all(reviews).then((data) => res.sendStatus(200)); })

यह कोड सबसे पहले AWS SDK npm पैकेज इंस्टॉल करता है, ताकि आप DynamoDB डॉक्यूमेंट क्लाइंट का उपयोग कर सकें. इसके बाद, फ़ंक्शन यह चेक करता है कि रिक्वेस्ट मैसेज वेबहुक के ज़रिए भेजी गई है या नहीं. अगर ऐसा हुआ था, तो फ़ंक्शन रिव्यू और कस्टमर के फ़ोन नंबर (जो वेबहुक द्वारा दिया जाता है) वाला रिव्यू आइटम बनाता है. webhook हर मैसेज को मैसेज फ़ील्ड में एक ऐरे के रूप में भेजता है, इसलिए यह एक समय में कई मैसेज भेज सकता है. यह फ़ंक्शन मैसेज को लूप करता है, जिससे DynamoDB PUT प्रॉमिस का ऐरे बनता है, जिन्हें बाद में डेटा स्टोर करने के लिए एग्ज़िक्यूट किया जा सकता है.

DynamoDB को कॉन्फ़िगर करें

इस आसान-से उदाहरण में डेटा को लिया जाता है और उसे जैसा है, वैसे ही DynamoDB रिकॉर्ड के रूप में स्टोर किया जाता है. इस समय, आप अतिरिक्त बिज़नेस लॉजिक लागू करने के लिए ज़रूरत के हिसाब से मैसेज को पार्स करने के लिए फ़ंक्शनैलिटी जोड़ सकते हैं.

इसके काम करने के लिए, आपको अपने सर्वरलेस कॉन्फ़िगरेशन में DynamoDB के लिए कुछ कॉन्फ़िगरेशन जानकारी देनी होगी. पूरी serverless.yml फ़ाइल अब इस तरह दिखाई देगी:

service: whatsapp-webhooks frameworkVersion: '2' provider: name: aws runtime: nodejs14.x lambdaHashingVersion: 20201221 region: eu-west-1 iamRoleStatements: - Effect: "Allow" Action: - dynamodb:Query - dynamodb:Scan - dynamodb:GetItem - dynamodb:PutItem - dynamodb:UpdateItem - dynamodb:DeleteItem Resource: arn:aws:dynamodb:us-east-1:111111111111:table/${self:provider.environment.REVIEW_TABLE} environment: TOKEN: ${env:APP_TOKEN} REVIEW_TABLE: reviews plugins: - serverless-offline functions: app: handler: handler.handler events: - http: ANY / - http: 'ANY {proxy+}' resources: Resources: ReviewsTable: Type: 'AWS::DynamoDB::Table' Properties: TableName: ${self:provider.environment.REVIEW_TABLE} AttributeDefinitions: - AttributeName: phonenumber AttributeType: S KeySchema: - AttributeName: phonenumber KeyType: HASH ProvisionedThroughput: ReadCapacityUnits: 1 WriteCapacityUnits: 1

अब फ़ाइल के प्रोवाइडर सेक्शन में अतिरिक्त परमिशन मैनेजमेंट स्टेटमेंट हैं, जो आपके Lambda फ़ंक्शन को आपके DynamoDB टेबल से डेटा वापस पाने और उसमें डेटा लिखने की सुविधा देते हैं. इस फ़ाइल में एक रिसोर्स सेक्शन भी होता है, जो DynamoDB टेबल, टेबल की कुंजी और मैनेज किए जा रहे थ्रूपुट को कॉन्फ़िगर करता है. टेस्टिंग के दौरान, कैपेसिटी यूनिट के लिए लागू होने वाली छूट को टेस्टिंग के लिए कम वैल्यू पर सेट किया जाता है. हालाँकि, इसे डिमांड के आधार पर स्केल करने के लिए प्रोडक्शन में कॉन्फ़िगर किया जा सकता है.

अपना ऐप्लिकेशन टेस्ट करना

अब जब आप अपना सर्वरलेस ऐप्लिकेशन डिप्लॉय करेंगे, तो DynamoDB टेबल अपने आप बन जाएगा और कॉन्फ़िगर हो जाएगा. साथ ही, आपके Lambda फ़ंक्शन के पास वे सभी परमिशन होंगी, जो उसके टेबल में डेटा को लिखने के लिए ज़रूरी हैं. इससे फिर से पता चलता है कि सर्वरलेस फ़्रेमवर्क का उपयोग कितना असरदार है, क्योंकि हमारे इन्फ़्रास्ट्रक्चर से जुड़ी सभी ज़रूरतों को एक आसान कॉन्फ़िगरेशन से पूरा किया जाता है.

जब आप डिप्लॉय कर लें, तो Meta for Developers पर वापस जाएँ और मैसेज फ़ील्ड रो में टेस्ट बटन चुनें. इससे नई फ़ील्ड सैंपल विंडो खुलेगी, जो इस तरह दिखेगी:

मैसेज फ़ील्ड का सैंपल

जब भी अकाउंट पर मैसेज भेजा जाता है, तो यह पेलोड का फ़ॉर्मेट दिखाता है. मेरे सर्वर पर भेजें चुनें और फिर टेस्ट टेक्स्ट वाले रिव्यू के साथ नया रिकॉर्ड देखने के लिए AWS कंसोल में DynamoDB पर जाएँ:

वापस किए गए आइटम दिखाना

निष्कर्ष

यह एक आसान टेस्ट ऐप्लिकेशन था, जो सर्वरलेस फ़्रेमवर्क का उपयोग करके वेबहुक लिसनर सेट करने की आसानी दिखाता है. AWS Lambda और DynamoDB जैसी सर्वरलेस तकनीकों का उपयोग करके इस ऐप्लिकेशन को एक सामान्य प्रोटोटाइप से बड़े थ्रूपुट वॉल्यूम को संभालने में सक्षम प्रोडक्शन-रेडी सर्विस तक बढ़ाया जा सकता है.

आप कस्टमर अकाउंट मैनेजमेंट और इंटरैक्शन को ऑटोमेट करने के लिए WhatsApp Business प्लेटफ़ॉर्म पर वेबहुक का उपयोग कर सकते हैं. ऑफ़िशियल WhatsApp वेबहुक डॉक्यूमेंट से आपको प्रोडक्शन सिस्टम के लिए वेबहुक सब्सक्राइब करने से जुड़ी पूरी जानकारी मिल सकती है. ध्यान दें कि वेबहुक्स डॉक्यूमेंटेशन में [मैसेज] फ़ील्ड नहीं होता है. सब्सक्रिप्शन के लिए उपलब्ध फ़ील्ड की पूरी लिस्ट के लिए Webhooks रेफ़रेंस का उपयोग करें.

इन वेबहुक के लिए श्रोता बनाते समय, कॉस्ट और स्केलेबिलिटी के बारे में सोचना ज़रूरी है. यह समाधान एक ही समय पर बड़ी संख्या में कस्टमर्स द्वारा WhatsApp के ज़रिए आपसे संपर्क करने की वजह से डिमांड में होने वाली बढ़ोतरी के लिए तैयार होना चाहिए. दूसरी बार, जब कस्टमर आपसे संपर्क नहीं करते हैं, तो आपकी माँग कम हो सकती है — उदाहरण के लिए, रात भर — इसलिए आप कॉस्ट कम करने के लिए अपने समाधान को कम करना चाहते हैं. आपके कस्टमर बढ़ने के साथ ही समाधान भी बढ़ना चाहिए.

सही टूल्स का चुनाव करना महत्वपूर्ण है. सर्वरलेस फ़्रेमवर्क, AWS Lambda और DynamoDB इस वेबहुक लिसनर के लिए सही थे, लेकिन आपको अपने बिज़नेस की खास ज़रूरतों पर विचार करना चाहिए. इस लेख में दिया गया समाधान वेरिएबल स्केलिंग की माँगों को पूरा करता है, कम उपयोग की अवधि के दौरान कॉस्ट को कम रखने के लिए एडजस्ट करता है और इंफ़्रास्ट्रक्चर को मैनेज करने की ज़रूरत को हटाता है. इससे डेवलपर को इसे लागू और मैनेज करने में आसानी होती है.

अपने ऐप्लिकेशन में वेबहुक का उपयोग करने से जुड़ी ज़्यादा जानकारी के लिए WhatsApp वेबहुक सेटअप से जुड़ी आधिकारिक गाइड देखें.

संबंधित पोस्ट

कंटेंट को पर्सनलाइज़ करने, विज्ञापनों को आपके हिसाब से दिखाने और उनका मूल्यांकन करने तथा आपको ज़्यादा सुरक्षित अनुभव देने के लिए हम कुकीज़ का उपयोग करते हैं. साइट पर क्लिक या नेविगेट करके, आप सहमति देते हैं कि हम कुकीज़ के ज़रिए Meta पर और Meta के बाहर आपकी जानकारी इकट्ठी कर सकते हैं. उपलब्ध कंट्रोल्स की जानकारी सहित और जानकारी पाएँ: [प्राइवेसी पॉलिसी]