WhatsApp মেসেজ Google Sheets-এ লগ করুন এবং শিট থেকে পাঠান
নম্বরের ওয়েবহুক গন্তব্য এমন একটি n8n ওয়ার্কফ্লোতে সেট করুন, যার Google Sheets নোড প্রতিটি মেসেজের জন্য একটি সারি যোগ করে: প্রেরক, নাম, টেক্সট, মেসেজ আইডি ও সময়। শিট থেকে পাঠাতে একটি Apps Script ফাংশন সারিগুলোর ওপর লুপ চালিয়ে UrlFetchApp দিয়ে Cloud API-কে কল করতে পারে, নম্বরের phone number id ও টোকেন ব্যবহার করে। টিম WhatsApp Business অ্যাপ থেকেই উত্তর দিতে থাকে।
Google Sheets API-তে প্রতি ব্যবহারকারী প্রতি প্রজেক্টে মিনিটে যত রাইট রিকোয়েস্ট চলে; প্রতি প্রজেক্টে 300।
সাধারণ Google অ্যাকাউন্টের জন্য Apps Script URL Fetch কল; Workspace অ্যাকাউন্টে মেলে 100,000।
একটি Apps Script এক্সিকিউশন থামিয়ে দেওয়ার আগে সর্বোচ্চ যতক্ষণ চলতে পারে।
প্রতিটি WhatsApp মেসেজ কীভাবে একটি সারি হয়ে যায়?
Meta নম্বরে আসা প্রতিটি মেসেজ আপনার সেট করা ওয়েবহুক গন্তব্যে পোস্ট করে। এখানে সেটি একটি n8n Webhook নোড, যা Meta-র যাচাইকরণ রিকোয়েস্টেরও উত্তর দেয়। পরের নোডটি Google Sheets, Append Row অপারেশনসহ, যা পেলোডের ফিল্ডগুলো কলামে বসায়: প্রেরকের নম্বর, প্রোফাইল নাম, টেক্সট, WhatsApp মেসেজ আইডি, টাইমস্ট্যাম্প এবং গ্রহণকারী phone number id।
পুনরায় চেষ্টা যাতে ক্ষতি না করে, সেজন্য সাধারণ Append-এর বদলে মেসেজ আইডিকে কী ধরে Append or Update Row ব্যবহার করুন। Meta কোনো ডেলিভারি ব্যর্থ হয়েছে ভাবলে মেসেজটি আবার পাঠায়, আর আইডিকে কী ধরলে দ্বিতীয় ডেলিভারি একই সারির আপডেট হয়ে যায়।
Coexistence নম্বরে WhatsApp Business অ্যাপে লেখা উত্তরগুলো একই ওয়েবহুকে smb_message_echoes ইভেন্ট হিসেবে আসে। একটি direction কলামসহ সেগুলো লগ করলে শিটে দুই পক্ষের মেসেজই থাকে।
Sheets কোটা কোথায় সমস্যা করে?
ব্যবহারকারীপ্রতি রাইটে। Sheets API প্রতি প্রজেক্টে মিনিটে 300টি এবং প্রতি ব্যবহারকারী প্রতি প্রজেক্টে মিনিটে 60টি রাইট রিকোয়েস্টের অনুমতি দেয়, আর একটি n8n ক্রেডেনশিয়াল মানে একজন ব্যবহারকারী। তাই প্রতি মেসেজে একটি সারি যোগ করা ওয়ার্কফ্লো টানা প্রায় সেকেন্ডে একটি মেসেজ সামলাতে পারে।
বেশির ভাগ শপের নম্বরের জন্য এটি যথেষ্ট। ব্রডকাস্ট টেমপ্লেটের পর, যখন কয়েকশো গ্রাহক কয়েক মিনিটের মধ্যে উত্তর দেন, তখন আর যথেষ্ট থাকে না। তখন API 429 Too Many Requests ফেরত দেয় এবং পুনরায় চেষ্টা না থাকলে সারি হারিয়ে যায়।
দুটি সমাধান, যেকোনো একটিই যথেষ্ট। Google Sheets নোডে অপেক্ষাসহ পুনরায় চেষ্টা চালু করুন, যা এক্সপোনেনশিয়াল ব্যাকঅফ করার Google-এর নিজস্ব পরামর্শের সঙ্গে মেলে। অথবা ব্যাচ করুন: n8n 30 সেকেন্ড ধরে মেসেজ জমা করে একটি রিকোয়েস্টে যোগ করুক, ফলে অনেকগুলো রাইট একটিতে নেমে আসে।
শিট থেকে টেমপ্লেট কীভাবে পাঠাবেন?
Apps Script দিয়ে, শিটের Extensions মেনু থেকে। একটি ফাংশন যে সারিগুলো এখনো পাঠানো হয়নি সেগুলো পড়ে, প্রতিটির জন্য UrlFetchApp দিয়ে Cloud API-র messages এন্ডপয়েন্টে কল করে এবং ফেরত আসা মেসেজ আইডি ও সময় সারিতে লিখে রাখে। একটি টাইম-ড্রিভেন ট্রিগার কয়েক মিনিট পরপর এটি চালাতে পারে, অথবা কাস্টম মেনু থেকে হাতে চালাতে পারেন।
অ্যাক্সেস টোকেন কোডে না রেখে স্ক্রিপ্ট প্রপার্টিজে রাখুন, যাতে স্ক্রিপ্ট দেখতে পারা যে কেউ সেটি দেখতে না পায়।
কোটা মাথায় রাখুন। সাধারণ Google অ্যাকাউন্টে দিনে 20,000টি এবং Workspace অ্যাকাউন্টে 100,000টি URL Fetch কল মেলে, আর প্রতিটি এক্সিকিউশন 6 মিনিট পর থেমে যায়। সারিগুলো ভাগে ভাগে প্রক্রিয়া করুন এবং এগোনোর আগে প্রতিটিকে পাঠানো হিসেবে চিহ্নিত করুন, যাতে থেমে যাওয়া রান দুবার না পাঠিয়ে যেখানে থেমেছিল সেখান থেকে চালু হয়।
function sendPending() {
const token = PropertiesService.getScriptProperties().getProperty("WHATSAPP_TOKEN");
const sheet = SpreadsheetApp.getActive().getSheetByName("Send");
const rows = sheet.getDataRange().getValues();
for (let i = 1; i < rows.length; i++) {
const [phone, name, sentAt] = rows[i];
if (sentAt) continue;
const res = UrlFetchApp.fetch("https://graph.facebook.com/v23.0/<PHONE_NUMBER_ID>/messages", {
method: "post",
contentType: "application/json",
headers: { Authorization: "Bearer " + token },
payload: JSON.stringify({
messaging_product: "whatsapp", to: String(phone), type: "template",
template: { name: "order_ready", language: { code: "en" },
components: [{ type: "body", parameters: [{ type: "text", text: name }] }] },
}),
});
sheet.getRange(i + 1, 3).setValue(new Date());
}
}সাধারণ ভুলগুলো
- মেসেজ আইডিকে কী না ধরে সারি যোগ করা। তখন Meta-র পুনরায় চেষ্টা একই মেসেজ দুটি সারিতে লিখে দেয়।
- উত্তরের ঢলের সময় একটিমাত্র ক্রেডেনশিয়াল দিয়ে প্রতি মেসেজে একটি সারি লেখা। প্রতি ব্যবহারকারী মিনিটে 60 রাইটের সীমা 429 ফেরত দেয় এবং সারি হারিয়ে যায়।
- গত 24 ঘণ্টায় যাঁরা লেখেননি, তাঁদের শিট থেকে ফ্রি টেক্সট পাঠানো। ওই সময়সীমার বাইরে শুধু অনুমোদিত টেমপ্লেটই পৌঁছায়।
easycoexistence.com-এ নম্বরটি সংযুক্ত করুন, তার ওয়েবহুক গন্তব্য n8n ওয়ার্কফ্লোতে দিন, আর phone number id ও টোকেন স্ক্রিপ্টে কপি করুন। প্রতি নম্বরে মাসে US$ 9 থেকে শুরু, নম্বর যোগ করার সাথে সাথে নেমে US$ 1 পর্যন্ত, প্রথম 3 দিন ফ্রি।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
n8n-এর বদলে কি Make বা Zapier ব্যবহার করা যায়?
হ্যাঁ। Make-এর কাস্টম ওয়েবহুক বা Zapier-এর catch hook মেসেজটি গ্রহণ করে, আর তাদের Google Sheets ধাপ সারি যোগ করে।
n8n কোন Google অ্যাকাউন্ট হিসেবে লেখে?
যে অ্যাকাউন্ট n8n-এর Google ক্রেডেনশিয়ালটি অনুমোদন করেছে। সেই অ্যাকাউন্টের শিটে এডিট অ্যাক্সেস থাকতে হবে, আর ওয়ার্কফ্লো তারই প্রতি ব্যবহারকারী রাইট কোটা খরচ করে।
ফোন কলামের ফরম্যাট কি ঠিক আছে?
নম্বর সাধারণ টেক্সট হিসেবে রাখুন: দেশের কোডসহ অঙ্ক, কোনো প্লাস চিহ্ন ছাড়া, Meta ঠিক এই রূপেই পাঠায়। না হলে Sheets সেগুলোকে সংখ্যা ধরে নেয়, ফলে শুরুর প্লাস মুছে যায় এবং লম্বা মান বদলে যেতে পারে।
EasyCoexistence কি মেসেজের কপি রাখে?
না। Meta প্রতিটি ওয়েবহুক আপনার n8n URL-এ পৌঁছে দেয়, আর শিটই একমাত্র কপি।
আরও পড়ুন
শুরু করতে প্রস্তুত?
মাস নয়, কয়েক মিনিটেই WhatsApp Coexistence সেট আপ করুন। ফোনে অ্যাপটি কাজ করতে থাকে।
ফ্রি ট্রায়াল শুরু করুনযাচাই করা হয়েছে