Skip to content

Guide · For businesses

Google Sheet से WhatsApp मैसेज अपने-आप कैसे भेजें: फ़ॉर्म की नई row, रोज़ के रिमाइंडर और एक साथ कई

Google Sheet की rows को मंज़ूर WhatsApp template मैसेज में बदलने के चार तरीक़े: चलने वाला Apps Script कोड, जिम के renewal रिमाइंडर का उदाहरण, नंबर साफ़ करना और हर तरीक़े की सीमाएँ।

लेखक Broadchat teamप्रकाशित 13 मिनट

Read in English

संक्षेप में

Google Sheet से WhatsApp मैसेज अपने-आप भेजने के लिए एक छोटा Google Apps Script लिखें जो row का डेटा Broadchat workflow के Custom Webhook URL पर भेजे, और workflow मंज़ूर template भेज दे। नई row पर तुरंत मैसेज के लिए On form submit trigger लगाएँ, और renewal जैसे रिमाइंडर के लिए रोज़ चलने वाला time-driven trigger। एक बार की घोषणा के लिए sheet को CSV में डाउनलोड करके bulk campaign भेजें।

मुख्य बातें

  • नई या बदली हुई row अपने-आप कुछ शुरू नहीं करती; sheet को 'automatic' Apps Script के triggers (on form submit, time-driven) बनाते हैं।
  • कौन सी row भेजनी है, यह script तय करे और हर webhook call में एक row भेजे; workflow का काम सिर्फ़ template भेजना है।
  • हर मैसेज opt-in दिए नंबर पर, country code के साथ, मंज़ूर template ही हो, जैसे 919876543210।
  • Sheet में Sent का निशान वापस लिखें ताकि किसी row को दो बार मैसेज न जाए, तरीक़ा कोई भी हो।
  • Broadchat के अंदर से sheet पढ़ना भी चलता है, पर हर Google Sheets step एक paid task लेता है और लंबे loop run की सीमा से टकराते हैं।

Google Sheet से WhatsApp template मैसेज अपने-आप भेजना

Time needed: 1 h. You will need: एक Google Sheet जिसे आप edit कर सकें, Google Apps Script (Extensions → Apps Script), Automations वाला Broadchat पैनल.

  1. Sheet तैयार करें

    Row 1 में headers रखें (Name, Phone, Plan, Expiry, Status) और फ़ोन नंबर एक कॉलम में। एक Status कॉलम जोड़ें जिसे automation भरेगा, ताकि किसी row को दो बार मैसेज न जाए।

  2. Template भेजने वाला workflow बनाएँ

    Automations → Workflow में Custom Webhook trigger वाला workflow बनाएँ, hook generate करें, और Send Template Message (V2) जोड़कर WhatsApp Number और variables webhook के fields से map करें।

  3. Apps Script जोड़ें

    Sheet में Extensions → Apps Script खोलें, script paste करें, Webhook URL को Script Properties में रखें, और permissions देने के लिए एक बार चलाएँ।

  4. Trigger लगाएँ

    Apps Script के Triggers पेज में तुरंत मैसेज के लिए On form submit trigger, या रोज़ के रिमाइंडर के लिए Time-driven Day timer जोड़ें।

  5. Capture करें, टेस्ट करें और चालू करें

    अपने नंबर वाली एक टेस्ट row के साथ Capture Incoming Webhook इस्तेमाल करें, fields map करें, फिर workflow Active करें और run history व Status कॉलम देखें।

आपकी sheet के लिए कौन सा तरीक़ा सही है

Google sheet se WhatsApp message kaise bheje, इसके चार तरीक़े हैं, और सही तरीक़ा इस पर निर्भर है कि row से मैसेज कब जाना चाहिए:

हालाततरीक़ाकब चलता है
Google Form से row जुड़े और उस व्यक्ति को तुरंत WhatsApp जाएApps Script On form submit → workflow webhookतुरंत, हर row पर
Sheet की किसी तारीख़ पर टिके रिमाइंडर (renewal, फ़ीस, appointment)Apps Script Time-driven trigger आज वाली rows चुनता है → webhookदिन में एक बार
सब कुछ Broadchat के अंदर ही रखना हैGet Rows Data → Iterator → Send Template वाला workflowजब workflow को call किया जाए
Sheet के सभी लोगों को एक बार की घोषणाCSV में डाउनलोड → CRM → Bulk Campaignएक बार, रिपोर्ट के साथ

तरीक़ा कोई भी चुनें, WhatsApp के नियम वही हैं: बातचीत सिर्फ़ मंज़ूर मैसेज टेम्पलेट से शुरू हो सकती है, सिर्फ़ उन लोगों को जिन्होंने आपसे WhatsApp मैसेज पाने की सहमति (opt-in) दी है, और हर नंबर के साथ country code चाहिए। Sheet में नंबर होना सहमति नहीं है।

उदाहरण: FitZone जिम के membership renewal रिमाइंडर

इंदौर का FitZone जिम अपने members की जानकारी एक Google Sheet में रखता है। Membership ख़त्म होने से तीन दिन पहले member को WhatsApp रिमाइंडर जाना चाहिए, और front desk को दिखना चाहिए कि किसे रिमाइंडर गया। Sheet कुछ ऐसी है:

NamePhonePlanExpiryStatus
Priya Malviya9826012345Quarterly15/10/2026
Arjun Rathore+91 98930 54321Annual18/10/2026

Utility template, जो CRM → WhatsApp Templates में मंज़ूर हुआ है, सिर्फ़ तथ्य बताता है और उसमें कोई ऑफ़र नहीं है (प्रचार वाले templates को Meta दूसरी कैटेगरी में डाल सकता है):

अगर आपके members हिंदी पसंद करते हैं, तो इसी का हिंदी template अलग से मंज़ूर करवाएँ, जैसे: "नमस्ते {{1}}, FitZone Indore में आपकी {{2}} membership {{3}} को ख़त्म हो रही है। renew करने के लिए RENEW लिखकर भेजें या front desk पर आएँ।" Variables वही तीन रहेंगे, इसलिए workflow में कुछ नहीं बदलता। जिम के लिए और तरीक़े gym ke liye whatsapp marketing में हैं।

Step 1: sheet तैयार करें

Headers row 1 में रखें और हर व्यक्ति की एक row। सबसे ज़रूरी कॉलम Status है: automation उसमें Sent 12-10-2026 लिखता है, ताकि script दोबारा चले तब भी उसी member को दूसरी बार मैसेज न जाए। फ़ोन नंबर अक्सर बिखरे होते हैं (स्पेस, +91, 91 ग़ायब); नीचे का workflow उन्हें साफ़ कर देता है, लेकिन अगर आपके ग्राहक भारत से बाहर हैं, तो पूरे अंतरराष्ट्रीय नंबर रखें।

Header के नाम script में इस्तेमाल होते हैं, इसलिए Name, Phone, Plan, Expiry और Status अंग्रेज़ी में ठीक इन्हीं अक्षरों में रखें, और tab का नाम Members रखें। Expiry कॉलम को तारीख़ वाले format (dd/MM/yyyy) में रखें।

Step 2: template भेजने वाला workflow बनाएँ

  1. Automations → Workflow में Create Workflow दबाएँ और नाम "FitZone renewal reminder" रखें।
  2. Webhook app का Custom Webhook trigger जोड़ें, Webhook Title लिखें, + Generate Hook दबाएँ और Webhook URL कॉपी करें।
  3. CRM → Send Template Message (V2) जोड़ें: Select Channel, Select Template membership_expiry_reminder, WhatsApp Number 91slice(parseNumber({{1.phone}});-10), variable 1 {{1.name}}, variable 2 {{1.plan}}, variable 3 {{1.expiry}}।
  4. चाहें तो CRM → Assign Tags to Contact (Creates Tag if Tag not exist) जोड़कर renewal-due tag लगाएँ, ताकि front desk इन members को inbox और segment में छाँट सके।

नंबर वाला formula अंकों के अलावा सब हटाता है, आख़िरी दस अंक रखता है और आगे 91 लगाता है, इसलिए 9826012345, 09826012345 और +91 98930 54321 तीनों सही भारतीय WhatsApp नंबर बन जाते हैं। इस step को country code चाहिए; आठ अंकों से छोटा नंबर फ़ेल होता है। Workflows और webhooks कैसे जुड़ते हैं, यह webhook क्या है में समझाया गया है।

Step 3: Apps Script जोड़ें

Sheet में Extensions → Apps Script खोलें। Project Settings में एक Script Property BROADCHAT_HOOK बनाएँ और उसमें Webhook URL डालें (URL कोड से बाहर रहे, तो sheet शेयर करने पर भी वह दिखता नहीं)। फिर यह paste करें:

// FitZone: send WhatsApp renewal reminders 3 days before expiry
const SHEET_NAME = 'Members';
const DAYS_BEFORE = 3;

function sendRenewalReminders() {
  const hook = PropertiesService.getScriptProperties().getProperty('BROADCHAT_HOOK');
  const sheet = SpreadsheetApp.getActive().getSheetByName(SHEET_NAME);
  const rows = sheet.getDataRange().getValues();
  const head = rows[0];
  const col = (name) => head.indexOf(name);
  const tz = Session.getScriptTimeZone();
  const target = new Date();
  target.setDate(target.getDate() + DAYS_BEFORE);
  const targetText = Utilities.formatDate(target, tz, 'dd/MM/yyyy');

  for (let r = 1; r < rows.length; r++) {
    const row = rows[r];
    if (row[col('Status')]) continue; // already handled
    const expiry = row[col('Expiry')] instanceof Date
      ? Utilities.formatDate(row[col('Expiry')], tz, 'dd/MM/yyyy')
      : String(row[col('Expiry')]);
    if (expiry !== targetText) continue; // not due today

    const res = UrlFetchApp.fetch(hook, {
      method: 'post',
      contentType: 'application/json',
      payload: JSON.stringify({
        name: String(row[col('Name')]).split(' ')[0],
        phone: String(row[col('Phone')]),
        plan: row[col('Plan')],
        expiry: expiry
      }),
      muteHttpExceptions: true
    });
    const ok = res.getResponseCode() === 200;
    sheet.getRange(r + 1, col('Status') + 1)
      .setValue((ok ? 'Sent ' : 'Error ' + res.getResponseCode() + ' ') +
        Utilities.formatDate(new Date(), tz, 'dd-MM-yyyy'));
  }
}

एक बार Run दबाएँ और Google जो permissions माँगे (इस spreadsheet और बाहरी URLs का access) उन्हें मंज़ूर करें। 200 का response मतलब Broadchat ने request ले ली और workflow शुरू कर दिया; WhatsApp पर मैसेज पहुँचा या नहीं, यह workflow की run history में दिखता है।

Script क्या करता है, आसान शब्दों में: यह आज से तीन दिन बाद की तारीख़ निकालता है, हर row देखता है, जिनका Status पहले से भरा है उन्हें छोड़ता है, जिनकी Expiry ठीक उस तारीख़ की है उनका पहला नाम, फ़ोन, प्लान और तारीख़ webhook पर भेजता है, और नतीजा Status में लिख देता है।

Google Form वाले तरीक़े में loop की जगह फ़ॉर्म का submission इस्तेमाल करें:

function onFormSubmit(e) {
  const v = e.namedValues; // e.g. { 'Name': ['Priya'], 'WhatsApp number': ['9826012345'] }
  const hook = PropertiesService.getScriptProperties().getProperty('BROADCHAT_HOOK');
  UrlFetchApp.fetch(hook, {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify({ name: v['Name'][0], phone: v['WhatsApp number'][0] }),
    muteHttpExceptions: true
  });
}

फ़ॉर्म में एक सहमति वाला सवाल जोड़ें ("मुझे WhatsApp पर अपडेट भेजें: Yes") और सिर्फ़ Yes होने पर ही webhook पर भेजें।

Step 4: trigger लगाएँ

Apps Script editor में Triggers (घड़ी वाला आइकन) खोलें और Add Trigger दबाएँ:

  • रोज़ के रिमाइंडर: function sendRenewalReminders, event source Time-driven, type Day timer, समय जैसे सुबह 9 से 10 बजे।
  • फ़ॉर्म की rows: function onFormSubmit, event source From spreadsheet, event type On form submit।

Sheet इसी तरह automatic बनती है: Broadchat workflows में कोई scheduled trigger या Google Sheets trigger नहीं है, इसलिए समय तय करना Google में रहता है और मैसेज भेजना Broadchat में।

Step 5: capture करें, टेस्ट करें और चालू करें

  1. अपने नंबर और आज से तीन दिन बाद की expiry वाली एक टेस्ट row डालें।
  2. Workflow में Capture Incoming Webhook दबाएँ, फिर Apps Script से sendRenewalReminders चलाएँ। Show Received Data दबाकर पक्का करें कि name, phone, plan और expiry fields आए।
  3. टेस्ट row का Status ख़ाली करें, workflow सेव करें और उसे Active करें। Script फिर से चलाएँ: आपको रिमाइंडर मिलना चाहिए और Status कॉलम में Sent … दिखना चाहिए।
  4. कुछ न आए तो workflow की History खोलें: फ़ेल हुआ step अपनी गड़बड़ी दिखाता है, जैसे बिना country code का नंबर या channel wallet में कम बैलेंस।
Status में क्या दिखामतलबक्या करें
Sent 12-10-2026Broadchat ने request ले लीडिलीवरी workflow की History में देखें
Error और कोई HTTP कोडWebhook call सफल नहीं हुआScript Property का URL और workflow का Active होना जाँचें
कुछ नहीं लिखाउस row की Expiry आज के निशाने वाली तारीख़ नहीं थीExpiry का format और तारीख़ जाँचें

सब कुछ Broadchat के अंदर करना

कोई script नहीं लिखनी, तो workflow ख़ुद sheet पढ़ सकता है। Google को एक बार Automations → App Authentications में जोड़ें (Add Connection, फिर Google (Sheets, Drive, Meet)), फिर बनाएँ: Custom Webhook trigger, Google Sheet → Get Rows Data (Spreadsheet ID और Sheet Name), Array {{2.rows}} वाला Iterator, अगले connection पर filter जैसे {{3.element.data.Status}} Not Exist, {{3.element.data.Phone}} के साथ Send Template Message (V2), और Row Number {{3.element.row_number}} व Status = Sent के साथ Google Sheet → Update Row।

दो सीमाएँ इसे छोटी सूचियों के लिए ही ठीक बनाती हैं: हर Google Sheets step आपके प्लान का एक paid task लेता है, और एक run 400 steps के बाद रुक जाता है, इसलिए हर row पर दो steps वाला loop एक call में 200 से कम rows सँभालता है। रोज़ webhook को call करने के लिए फिर भी कुछ चाहिए, यानी आप वापस Apps Script trigger पर आ जाते हैं। App के बाक़ी actions, जैसे lookups, Google Sheets integration पेज पर हैं।

एक बार के मैसेज: campaign इस्तेमाल करें

एक बार की घोषणा ("दिवाली पर जिम बंद रहेगा") के लिए automation ज़रूरत से ज़्यादा है। Sheet को CSV में डाउनलोड करें, CRM → Bulk Campaign खोलें, Quick audience के साथ campaign बनाएँ, CSV अपलोड करें और उसके कॉलम template variables से map करें। हर नंबर की delivery और read रिपोर्ट मिलती है। Quick audience उन contacts को नहीं छोड़ता जिन्होंने unsubscribe किया है, इसलिए पहले सूची साफ़ करें, या उसे contacts में import करके किसी segment को भेजें। Pacing और quality के लिए bulk WhatsApp message कैसे भेजें पढ़ें।

खर्च और अच्छी आदतें

  • रिमाइंडर जैसे utility templates हर delivered मैसेज पर चार्ज होते हैं: भारत में utility मैसेज ₹0.115 (Meta rate card effective 1 Oct 2026, excl. GST), channel के messaging wallet से। देखें WhatsApp API pricing और WhatsApp API price in India Hindi में।
  • Workflow का हर step एक task गिना जाता है; ऊपर वाला webhook तरीक़ा हर member पर दो-तीन मुफ़्त tasks लेता है और कोई paid task नहीं।
  • रिमाइंडर दिन के समय भेजें और तथ्य तक सीमित रखें। जो रिमाइंडर ऑफ़र बन जाए, वह marketing template है, जिसकी क़ीमत और सीमाएँ अलग हैं।

Triggers, workflows और webhooks कैसे मिलकर चलते हैं, यह अंग्रेज़ी गाइड WhatsApp automation workflows में है; बुनियादी बातें WhatsApp Business API क्या है में। जो एजेंसियाँ जिम, क्लिनिक और कोचिंग सेंटर के लिए sheet वाले रिमाइंडर बनाती हैं, वे इन्हें अपने ब्रांड से white-label प्लेटफ़ॉर्म पर बेच सकती हैं।

स्रोत

  1. Installable triggers — Google for Developers, checked 12 October 2026
  2. Class UrlFetchApp — Google for Developers, checked 12 October 2026
  3. Send message templates — Meta for Developers, checked 12 October 2026
  4. Pricing on the WhatsApp Business Platform — Meta for Developers, checked 12 October 2026

Broadchat team · Product and partner success team

The people who build and support Broadchat, the white-label WhatsApp Business API platform. We write from what we see while onboarding partners and their clients on the official WhatsApp Cloud API, and we check every article against Meta's current documentation.

आख़िरी अपडेट:

अक्सर पूछे जाने वाले सवाल

क्या Google Sheet में नई row जुड़ते ही WhatsApp मैसेज अपने-आप चला जाता है?

Trigger के बिना नहीं। On form submit या time-driven trigger वाला Google Apps Script इस्तेमाल करें, जो Broadchat workflow के Custom Webhook URL को call करे, और उस workflow से मंज़ूर template भेजें।

क्या इसके लिए Broadchat में Google Sheets app जोड़ना ज़रूरी है?

Apps Script वाले तरीक़े में नहीं, क्योंकि वहाँ script ख़ुद sheet पढ़ता है और हर row webhook पर भेजता है। Google connection तभी चाहिए जब workflow ख़ुद Google Sheet steps से sheet पढ़े या अपडेट करे।

एक ही व्यक्ति को दो बार मैसेज जाने से कैसे रोकें?

Row भेजने पर Status कॉलम में एक निशान लिखें और जिन rows में निशान पहले से है उन्हें छोड़ दें। इस गाइड का script यह अपने-आप करता है, और call फ़ेल होने पर HTTP error कोड भी लिख देता है।

WhatsApp को फ़ोन नंबर किस format में चाहिए?

Country code के साथ सिर्फ़ अंक, बिना plus और स्पेस के, जैसे भारतीय मोबाइल के लिए 919826012345। Workflow का formula 91slice(parseNumber(...);-10) आम भारतीय formats बदल देता है; अंतरराष्ट्रीय नंबरों पर इसे इस्तेमाल न करें।

क्या मैं sheet के सभी नंबरों को marketing मैसेज भेज सकता हूँ?

सिर्फ़ उन्हें जिन्होंने आपके बिज़नेस से WhatsApp मैसेज पाने की सहमति दी है, और सिर्फ़ मंज़ूर template से। Sheet में नंबर होना सहमति नहीं है; फ़ॉर्म में सहमति का सवाल रखें और जिन्होंने मना किया है उन्हें सूची से हटा दें।

See Broadchat on a real WhatsApp number

A short walkthrough of campaigns, chatbots, the team inbox and the partner panel, built around your use case.