1. परिचय
अरबों कारोबार और लोग डेटा को प्रोसेस करने और बातचीत करने के लिए, Gmail और G Suite की दूसरी सेवाओं का इस्तेमाल करते हैं. Google, G Suite API की सुविधा देता है, ताकि आप प्रोग्राम के हिसाब से इन सेवाओं में जानकारी ऐक्सेस कर सकें. साथ ही, आप अपने रोज़ के वर्कफ़्लो को आसानी से ऑटोमेट करने के लिए, एपीआई का इस्तेमाल कर सकते हैं. इस लैब में, आपको एक बेहतरीन Gmail एक्सटेंशन बनाना होगा. यह एक्सटेंशन, आने वाले मैसेज में मौजूद ईमेल को अपने-आप अलग-अलग कैटगरी में बांट देगा और उन कैटगरी को Google शीट में सेव करेगा. यह एक्सटेंशन G Suite के RESTful API, Google Cloud Functions, और Google Cloud Platform की अन्य सेवाओं का इस्तेमाल करेगा.
आपको क्या बनाना होगा
इस लैब में, आपको G Suite API और Google Cloud Platform की अन्य सेवाओं से कनेक्ट किए गए कुछ क्लाउड फ़ंक्शन बनाने और डिप्लॉय करने होंगे. ये फ़ंक्शन:
- अपने Gmail और Google Sheets डेटा को सुरक्षित तरीके से ऐक्सेस करने की अनुमति दें
- किसी भी इनकमिंग मेल से अटैच की गई इमेज निकालें
- Cloud Vision API का इस्तेमाल करके, इमेज की कैटगरी तय करें
- किसी Google शीट पर वे कैटगरी, भेजने वाले का पता, और अटैचमेंट का नाम लिखें
आपको क्या सीखने को मिलेगा
- G Suite RESTful एपीआई की बुनियादी बातें
- Google Cloud Functions और अन्य Google Cloud Platform सेवाओं की बुनियादी बातें
- Google Cloud Functions का इस्तेमाल करके, प्रोग्राम के हिसाब से Gmail को ऐक्सेस करने का तरीका
आपको इन चीज़ों की ज़रूरत होगी
- आपके पास एक ऐसा Google खाता हो जिसमें Gmail और Google Sheets का ऐक्सेस हो. अगर आपके पास Google खाता नहीं है, तो यहां खाता बनाएं.
- JavaScript/Node.js की बुनियादी जानकारी.
2. सबसे पहली बात
एपीआई चालू करें
इस लैब में, आप Google के इन प्रॉडक्ट/सेवाओं का इस्तेमाल करेंगे:
- Google Cloud के फ़ंक्शन
- Google Cloud Pub/Sub
- Google Cloud Vision API
- Google क्लाउड डेटास्टोर
- Gmail API
- Google Sheets API
Google Cloud के फ़ंक्शन
Google Cloud Functions, Google का सर्वरलेस फ़ंक्शन है. यह सेवा के तौर पर काम करता है. इसकी मदद से, अलग-अलग कोड (‘फ़ंक्शन’) के स्निपेट को आसान और बढ़ाने लायक तरीके से चलाया जा सकता है.
Google Cloud Functions चालू करने के लिए, स्क्रीन के सबसे ऊपर बाईं ओर मौजूद हैमबर्गर मेन्यू पर क्लिक करके, बाईं ओर मौजूद नेविगेशन साइडबार खोलें:
नेविगेशन मेन्यू में Cloud Functions ढूंढें और उस पर क्लिक करें. अपने प्रोजेक्ट में Google Cloud Functions चालू करने के लिए, एपीआई चालू करें पर क्लिक करें.
Google Cloud Pub/Sub
Google Cloud Pub/Sub, डेटा स्ट्रीमिंग और इवेंट डिलीवरी के लिए इस्तेमाल में आसान और बढ़ाने लायक सुविधा है. इस लैब में, यह Gmail और Google Cloud Functions के बीच कूरियर का काम करता है.
Google Cloud Pub/Sub को चालू करने के लिए, बाईं ओर मौजूद नेविगेशन साइडबार खोलें और Pub/Sub ढूंढें और उस पर क्लिक करें. अपने प्रोजेक्ट में Google Cloud Pub/Sub को चालू करने के लिए, एपीआई चालू करें पर क्लिक करें.
Google क्लाउड डेटास्टोर
Google Cloud Datastore बिना सर्वर वाला ऐसा डेटाबेस है जिसे बढ़ाया जा सकता है और जिसे इस्तेमाल किया जा सकता है.
Google Cloud Datastore को चालू करने के लिए, बाईं ओर नेविगेशन साइडबार में, Datastore ढूंढें और उस पर क्लिक करें. नए पेज में डेटास्टोर मोड चुनें पर क्लिक करें.
इस लैब के लिए, किसी भी डेटाबेस की लोकेशन का इस्तेमाल किया जा सकता है. Google Cloud Datastore को चालू करने के लिए, डेटाबेस बनाएं पर क्लिक करें; इसे पूरा होने में कुछ मिनट लग सकते हैं.
Google Cloud विज़न
Google Cloud Vision API, मशीन लर्निंग की बेहतरीन सेवा है. इसमें आपकी इमेज से अहम जानकारी पाने के लिए, पहले से ट्रेनिंग किए गए मॉडल इस्तेमाल किए जाते हैं.
Google Cloud Vision API को चालू करने के तरीके के बारे में जानकारी के लिए, नीचे दिए गए निर्देश देखें.
Gmail API, Google Sheets API, और Google Cloud Vision API की सुविधा चालू करना
एक बार फिर से, बायां नेविगेशन साइडबार खोलें और API और सेवाएं. लाइब्रेरी पर क्लिक करें. Search for APIs और सेवाएं फ़ील्ड में, Gmail टाइप करें. खोज के नतीजों में, Gmail API चुनें और चालू करें पर क्लिक करें.
एपीआई लाइब्रेरी वाले पेज पर वापस जाएं. Google Sheets API खोजें और इसे चालू करें.
यह प्रक्रिया दोहराएं. Cloud Vision API खोजें और इसे चालू करें.
Google Cloud Shell खोलें
इस लैब में, आपको ज़्यादातर काम करने के लिए Google क्लाउड शेल का इस्तेमाल करना होगा. Cloud Shell आपको सीधे अपने ब्राउज़र से, Google Cloud Platform के संसाधनों का कमांड-लाइन ऐक्सेस देता है. इससे, स्थानीय मशीन का इस्तेमाल किए बिना उन्हें मैनेज किया जा सकता है.
Google Cloud Shell खोलने के लिए, सबसे ऊपर मौजूद नीले रंग के हॉरिज़ॉन्टल बार पर, क्लाउड शेल चालू करें बटन पर क्लिक करें:
स्क्रीन पर सबसे नीचे एक नया पैनल दिखेगा:
Cloud Shell कोड एडिटर चालू करने के लिए, कोड एडिटर लॉन्च करें बटन पर क्लिक करें:
Cloud Shell कोड एडिटर, नई विंडो में खुलेगा.
कोड डाउनलोड करें
प्रोजेक्ट का क्लोन बनाने के लिए, अपने Cloud Shell में नीचे दिया गया निर्देश चलाएं:
git clone https://github.com/googlecodelabs/gcf-gmail-codelab.git cd gcf-gmail-codelab
आपको Cloud Shell कोड एडिटर में, gcf-gmail-codelab
नाम का एक नया फ़ोल्डर दिखेगा.
3. आर्किटेक्चर से जुड़ी खास जानकारी
नीचे इस लैब का वर्कफ़्लो दिया गया है:
- उपयोगकर्ता, Gmail के पुश नोटिफ़िकेशन सेट अप करता है: इनबॉक्स में कोई भी नया मैसेज आने पर, Gmail, Cloud Pub/Sub को एक सूचना भेजेगा.
- Cloud Pub/Sub, Google Cloud Functions को मैसेज की नई सूचना डिलीवर करता है.
- नए मैसेज की सूचना मिलने पर, Cloud Functions इंस्टेंस, Gmail से कनेक्ट होता है और नए मैसेज को हासिल करता है.
- अगर मेल में अटैचमेंट के तौर पर कोई इमेज है, तो Cloud Functions इंस्टेंस, अटैचमेंट का विश्लेषण करने के लिए Cloud Vision API को कॉल करता है.
- Cloud Functions इंस्टेंस आपकी पसंद की Google शीट को अपडेट करता है. इससे यह तय होता है कि मैसेज कौन भेजने वाला है और अटैचमेंट कहां से डाउनलोड करना है.
4. Gmail को ऐक्सेस करने की अनुमति दें
आपके ईमेल अपने-आप पढ़ने के लिए, Cloud Function सेट अप करने से पहले, आपको Gmail को उसे ऐक्सेस करने की अनुमति देनी होगी. आपको Google के साथ OAuth क्लाइंट रजिस्टर करना होगा और उससे जुड़ा क्लाइंट आईडी बनाना होगा.
OAuth क्लाइंट रजिस्टर करना
Google Cloud Console के बाएं नेविगेशन मेन्यू में, एपीआई और सेवाएं. OAuth की सहमति वाली स्क्रीन पर क्लिक करें.
ऐप्लिकेशन का नाम फ़ील्ड में कोई नाम लिखें, जैसे कि GCF + Gmail कोडलैब. अन्य सेटिंग पर कोई असर न होने पर, पेज पर नीचे की ओर स्क्रोल करें और सेव करें पर क्लिक करें.
कोई असोसिएट किया गया क्लाइंट आईडी बनाएं
क्रेडेंशियल टैब पर स्विच करें. क्रेडेंशियल बनाएं पर क्लिक करें और OAuth क्लाइंट आईडी चुनें. वेब ऐप्लिकेशन टाइप चुनें और उसे कोई नाम दें (यहां GCF + Gmail कोडलैब का फिर से इस्तेमाल किया जा सकता है) और बनाएं पर क्लिक करें. फ़िलहाल, पाबंदियों वाले फ़ील्ड खाली छोड़ दें.
पॉप-अप विंडो में, क्लाइंट आईडी और दिखाया गया क्लाइंट सीक्रेट लिखें. इन वैल्यू को फिर से देखने के लिए, पेज पर अपने क्लाइंट के नाम पर क्लिक करें:
अनुमति देने की प्रक्रिया पूरी करें
सैंपल कोड में, auth/index.js
से दो Cloud Functions के बारे में पता चलता है, auth_init
और auth_callback
, जो पुष्टि करने की प्रक्रिया पूरी करने के लिए एक साथ काम करते हैं. इस प्रक्रिया में, आपके बनाए गए क्लाइंट आईडी और क्लाइंट सीक्रेट का इस्तेमाल किया जाता है.
कोड की जांच करने के लिए, auth/index.js
को Cloud Shell कोड एडिटर में खोलें.
अनुमति देने की प्रक्रिया से दो तरह के टोकन मिलते हैं: ऐक्सेस टोकन और रीफ़्रेश टोकन.
- ऐक्सेस टोकन, पहचान के सबूत के तौर पर कुछ समय के लिए उपलब्ध होते हैं. इनकी मदद से, अपने मालिकाना हक वाले किसी भी व्यक्ति को आपके डेटा का ऐक्सेस मिल जाता है;
auth_callback
उन्हें Cloud Datastore में सेव करता है. - रीफ़्रेश टोकन का इस्तेमाल, नए ऐक्सेस टोकन पाने के लिए किया जाता है. साथ ही, ये लंबे समय तक चलते हैं.
आम तौर पर, इन्हें एन्क्रिप्ट (सुरक्षित) किया जाता है और/या इन्हें ऐक्सेस टोकन से अलग सेव किया जाता है.
Cloud Shell कोड एडिटर में जाकर, auth/env_vars.yaml
में बदलाव करें. YOUR-GOOGLE-CLIENT-ID
और YOUR-GOOGLE-CLIENT-SECRET
को अपनी वैल्यू से बदलें. ज़्यादा जानकारी के लिए पहला चरण देखें. फ़िलहाल, YOUR-GOOGLE-CLIENT-CALLBACK-URL
और YOUR-PUBSUB-TOPIC
की वैल्यू में कोई बदलाव न करें.
auth/env_vars.yaml
में बदलाव करने के बाद, Cloud Shell में यह कमांड चलाएं, ताकि Cloud Functions डिप्लॉय किया जा सके:
cd ~ cd gcf-gmail-codelab/auth # Deploy Cloud Function auth_init gcloud functions deploy auth_init --runtime=nodejs8 --trigger-http --env-vars-file=env_vars.yaml # Deploy Cloud Function auth_callback gcloud functions deploy auth_callback --runtime=nodejs8 --trigger-http --env-vars-file=env_vars.yaml
Cloud Functions को डिप्लॉय होने में कुछ मिनट लग सकते हैं. अगर कहा जाए, तो Cloud SDK को बीटा कमांड इंस्टॉल करने की अनुमति दें.
इसके बाद, Google Cloud Console पर जाएं और बाईं ओर दिए गए नेविगेशन मेन्यू में, Cloud Functions पर क्लिक करें. Cloud Functions की सूची में auth_callback
पर क्लिक करें और ट्रिगर टैब पर जाएं.
पेज पर मौजूद यूआरएल कॉपी करें. Cloud Functions वाले पेज पर वापस जाएं और Cloud Functions की सूची में auth_init
पर क्लिक करें. सामान्य टैब में, बदलाव करें पर क्लिक करें. एनवायरमेंट वैरिएबल, नेटवर्किंग, टाइम आउट वगैरह पर क्लिक करें और GOOGLE_CALLBACK_URL
की वैल्यू को अभी-अभी कॉपी किए गए यूआरएल से बदलें.
बदलावों को लागू करने के लिए, डिप्लॉय करें पर क्लिक करें. यह प्रोसेस दोहराएं और auth_callback
को भी अपडेट करें.
आखिर में, बाईं ओर मौजूद नेविगेशन मेन्यू खोलें और एपीआई और सेवाएं > डोमेन की पुष्टि करना. अनुमति वाला डोमेन जोड़ने के लिए, डोमेन जोड़ें पर क्लिक करें. उदाहरण के लिए, अगर आपने पहले कॉपी किया गया यूआरएल
https://us-central1-my-project.cloudfunctions.net/auth_callback
आपको नीचे दिए गए दस्तावेज़ को अनुमति वाले डोमेन के रूप में जोड़ना चाहिए:
us-central1-my-project.cloudfunctions.net
पुष्टि करने के लिए, डोमेन जोड़ें दबाएं.
क्रेडेंशियल पेज पर वापस जाएं. अपने OAuth क्लाइंट के नाम पर क्लिक करें और आपने जो यूआरएल कॉपी किया है उसे अनुमति वाले रीडायरेक्ट यूआरआई के तौर पर जोड़ें. पुष्टि करने के लिए, Enter दबाएं.
यूआरएल से /auth_callback
वाला हिस्सा हटाएं और बाकी को अनुमति वाले JavaScript ऑरिजिन के तौर पर जोड़ें. उदाहरण के लिए, अगर आपका यूआरएल
https://us-central1-my-project.cloudfunctions.net/auth_callback
आपको इसे ऑरिजिन के तौर पर जोड़ना चाहिए:
https://us-central1-my-project.cloudfunctions.net/
पुष्टि करने के लिए, Enter दबाएं और बदलावों को लागू करने के लिए, सेव करें पर क्लिक करें.
5. Gmail पुश नोटिफ़िकेशन सेट अप करें
अनुमति देने की प्रोसेस पूरी होने पर auth_callback
, पुश नोटिफ़िकेशन सेट अप करने के लिए Gmail API को अपने-आप कॉल कर देगा.
Gmail के पुश नोटिफ़िकेशन पाने के लिए, आपको एक Pub/Sub विषय बनाना होगा. विषय के बारे में जानने वाले सदस्य को Gmail से आने वाले मैसेज की सूचनाएं अपने-आप मिल जाएंगी.
Pub/Sub विषय बनाने के लिए, Google Cloud Console पर जाएं और Pub/Sub पर क्लिक करें > विषय पर क्लिक करें. विषय बनाएं पर क्लिक करें. विषय का नाम लिखें, जैसे कि gmail-watch
और बनाएं पर क्लिक करें. इसके अलावा, आपको Gmail को अपने Pub/Sub विषय पर मैसेज भेजने की अनुमति देनी होगी: अभी बनाए गए विषय के संदर्भ मेन्यू (तीन वर्टिकल बिंदु) पर क्लिक करें और अनुमतियां चुनें; सदस्य जोड़ें पर क्लिक करें, gmail-api-push@system.gserviceaccount.com
को नए सदस्य के तौर पर चुनें, और इसे Pub/Sub > की भूमिका दें Pub/Sub पब्लिशर; आखिर में, बदलावों को लागू करने के लिए सेव करें पर क्लिक करें.
Cloud फ़ंक्शन auth_callback
को अपडेट करें, ताकि यह बताया जा सके कि Pub/Sub के लिए किस विषय का इस्तेमाल करना है. बाईं ओर दिए गए नेविगेशन मेन्यू में, Cloud Functions पर क्लिक करें और Cloud Functions की सूची में auth_callback
चुनें. सामान्य टैब में, बदलाव करें पर क्लिक करें. ज़्यादा पर क्लिक करें और PUBSUB_TOPIC
की वैल्यू को, अभी-अभी बनाए गए Pub/Sub विषय के नाम से बदलें. बदलावों को लागू करने के लिए, सेव करें पर क्लिक करें.
अब Gmail के पुश नोटिफ़िकेशन को अनुमति दी जा सकती है और उन्हें सेट अप किया जा सकता है. नए बदलावों के पूरा होने तक इंतज़ार करें, फिर Cloud Functions पेज पर वापस जाएं, Cloud Functions की सूची में auth_init
चुनें और ट्रिगर टैब पर स्विच करें. यूआरएल पर क्लिक करने पर, आपको Google से साइन इन करें पेज पर रीडायरेक्ट कर दिया जाएगा:
अपने Gmail खाते से साइन इन करें. खाते के इनबॉक्स में आने वाला कोई भी नया मैसेज, पुश नोटिफ़िकेशन ट्रिगर करेगा. साइन-इन करने के बाद, आपको यह पेज दिखेगा:
ऐक्सेस देने के लिए, अनुमति दें पर क्लिक करें. auth_callback
अनुमति देने की प्रोसेस पूरी करेगा, ऐक्सेस टोकन सेव करेगा, और आपके लिए Gmail के पुश नोटिफ़िकेशन सेट अप करेगा. यह प्रोसेस पूरी होने के बाद, आपको अपने ब्राउज़र में Successfully set up Gmail push notifications
मैसेज दिखेगा.
यह कोडलैब आपके लिए ऑथराइज़ेशन वर्कफ़्लो को ऑटोमेट करने के लिए, @google-cloud/express-oauth2-handlers
पैकेज का इस्तेमाल करता है. ज़्यादा जानकारी के लिए, GitHub पर इसका डेटा स्टोर करने की जगह देखें.
6. आने वाले मैसेज प्रोसेस करें
जैसा कि हमने पहले बताया था, आपके बनाए हुए Pub/Sub विषय के किसी भी सदस्य को आपके इनबॉक्स में नया मैसेज आने पर सूचनाएं मिलेंगी. pubsub/index.js
एक ऐसे Cloud फ़ंक्शन के बारे में बताता है, watchGmailMessages
जो विषय के सदस्य के तौर पर डिप्लॉय किए जाने के बाद नए मैसेज पढ़ेगा, अटैच की गई इमेज की कैटगरी तय करेगा, और उन कैटगरी को Google शीट में एक्सपोर्ट करेगा.
कोड की जांच करने के लिए, pubsub/index.js
को Cloud Shell कोड एडिटर में खोलें.
मैसेज फ़ेच किए जा रहे हैं
Gmail के पुश नोटिफ़िकेशन में, सूचना से जुड़ा ईमेल पता और इतिहास आईडी शामिल होता है. आसानी से समझने के लिए, इस कोडलैब में आपको पुश नोटिफ़िकेशन आने पर Gmail API से सबसे नया मैसेज मांगना होगा; बेहतर नतीजे पाने के लिए, मैसेज खोजने के लिए, इतिहास आईडी का इस्तेमाल करें.
// Look up the most recent message. const listMessagesRes = await gmail.users.messages.list({ userId: email, maxResults: 1 }); const messageId = listMessagesRes.messages[0].id; // Get the message using the message ID. const message = await gmail.users.messages.get({ userId: email, id: messageId }); return message;
इमेज अटैचमेंट का विश्लेषण करें
अगर मैसेज में इमेज अटैचमेंट है, तो इमेज के बारे में जानकारी देने के लिए watchGmailMessages
, Cloud Vision API को कॉल करेगा. इस कोडलैब में, आपको Cloud Vision API से इमेज की कैटगरी तय करने और कई इमेज टैग दिखाने के लिए कहा जाएगा; उदाहरण के लिए, अगर नीले आसमान की इमेज दी गई है, तो Cloud Vision API टैग नीला, आकाश,और प्रकृति दिखा सकता है.
watchGmailMessages
, Cloud Vision API को कॉल करने के लिए, Node.js के लिए Cloud Vision API लाइब्रेरी का इस्तेमाल करता है:
// Tag the attachment using Cloud Vision API const analyzeAttachment = async (data, filename) => { var topLabels = ['', '', '']; if (filename.endsWith('.png') || filename.endsWith('.jpg')) { const [analysis] = await visionClient.labelDetection({ image: { content: Buffer.from(data, 'base64') } }); const labels = analysis.labelAnnotations; topLabels = labels.map(x => x.description).slice(0, 3); } return topLabels; };
Google शीट अपडेट करें
watchGmailMessages
, इस विश्लेषण के नतीजों को Google शीट में एक्सपोर्ट करता है. इसमें भेजने वाले का नाम, अटैचमेंट का नाम, और इमेज अटैचमेंट के टैग (अगर कोई हो) शामिल होते हैं.
सबसे पहले, एक Google शीट बनाएं. Google Sheets खोलें और नई स्प्रेडशीट शुरू करें में जाकर, खाली टेंप्लेट पर क्लिक करें. अपनी शीट का आईडी कॉपी करें. उदाहरण के लिए, अगर आपके ब्राउज़र में पता ऐसा दिखता है:
https://docs.google.com/spreadsheets/d/abcdefghij01234567890/edit#gid=0
आपकी स्प्रेडशीट का आईडी abcdefghij01234567890
है. Cloud Shell कोड एडिटर में, gcf-gmail-codelab/pubsub/env_vars.yaml
को अपडेट करें और YOUR-GOOGLE-SHEET-ID
को अपनी वैल्यू से बदलें.
जानकारी जोड़ने के लिए, watchGmailMessages
को Google Sheets API से कनेक्ट किया जाता है:
const updateReferenceSheet = async (from, filename, topLabels) => { await googleSheets.spreadsheets.values.append({ spreadsheetId: SHEET, range: SHEET_RANGE, valueInputOption: 'USER_ENTERED', requestBody: { range: SHEET_RANGE, majorDimension: 'ROWS', values: [ [from, filename].concat(topLabels) ] } }); };
बस एक और चरण
Cloud Shell कोड एडिटर में, gcf-gmail-codelab/pubsub/env_vars.yaml
खोलें. इसके बाद, YOUR-GOOGLE-CLIENT-ID
, YOUR-GOOGLE-CLIENT-SECRET
, और YOUR-GOOGLE-CALLBACK-URL
को अपनी वैल्यू से बदलें. इन वैल्यू को Google Cloud Console में देखा जा सकता है: बाईं ओर दिए गए नेविगेशन मेन्यू में जाकर, Cloud Functions खोलें. इसके बाद, Cloud Functions की सूची में auth_init
चुनें और एनवायरमेंट वैरिएबल सेक्शन खोजें.
कोड को डिप्लॉय करें
Cloud Function को डिप्लॉय करने के लिए, नीचे दिया गया निर्देश चलाएं:
cd ~ cd gcf-gmail-codelab/pubsub gcloud functions deploy watchGmailMessages --runtime=nodejs8 --trigger-topic=gmail-watch --env-vars-file=env_vars.yaml
अगर आपने अपने Cloud Pub/Sub विषय का नाम gmail-watch
के बजाय कोई और नाम रखा है, तो ऊपर दिए गए निर्देश में gmail-watch
को अपने विषय का नाम दें. Cloud फ़ंक्शन को डिप्लॉय करने में कुछ सेकंड लग सकते हैं.
7. इसे आज़माएं
बधाई हो, आपने कर दिखाया! स्वयं को एक चित्र अटैचमेंट वाला ईमेल भेजें. कुछ ही सेकंड में आपको अपनी बनाई गई Google शीट अपने-आप अपडेट हो जाएगी. यह आपकी दी गई जानकारी के साथ दिखेगी.