Log masukMulakan percubaan percuma
Meta Tech Provider

Log mesej WhatsApp ke Google Sheets dan hantar dari sheet

Halakan destinasi webhook nombor itu ke aliran kerja n8n yang nod Google Sheets-nya menambah satu baris bagi setiap mesej: penghantar, nama, teks, id mesej dan masa. Untuk menghantar dari sheet, fungsi Apps Script boleh melalui setiap baris dan memanggil Cloud API dengan UrlFetchApp, menggunakan phone number id dan token nombor itu. Pasukan anda terus membalas dari aplikasi WhatsApp Business.

60 / min

Permintaan tulis Google Sheets API yang dibenarkan seminit bagi setiap pengguna setiap projek; 300 bagi setiap projek.

20,000 / day

Panggilan URL Fetch Apps Script bagi akaun Google pengguna biasa; akaun Workspace mendapat 100,000.

6 min

Tempoh terpanjang satu pelaksanaan Apps Script boleh berjalan sebelum dihentikan.

Bagaimanakah setiap mesej WhatsApp menjadi satu baris?

Meta menghantar setiap mesej pada nombor itu ke destinasi webhook yang anda tetapkan, di sini nod Webhook n8n yang turut menjawab permintaan pengesahan Meta. Nod seterusnya ialah Google Sheets dengan operasi Append Row, yang memetakan medan daripada payload ke dalam lajur: nombor penghantar, nama profil, teks, id mesej WhatsApp, cap masa dan phone number id penerima.

Gunakan Append or Update Row dengan id mesej sebagai kunci, bukannya tambah biasa, jika anda mahu cuba semula tidak menjejaskan data. Meta menghantar semula mesej apabila ia menganggap penghantaran gagal, dan kunci pada id menjadikan penghantaran kali kedua sebagai kemas kini pada baris yang sama.

Pada nombor Coexistence, balasan yang ditaip dalam aplikasi WhatsApp Business tiba pada webhook yang sama sebagai peristiwa smb_message_echoes. Log balasan itu dengan lajur arah dan sheet anda akan menyimpan kedua-dua belah pihak.

Di manakah kuota Sheets menjadi masalah?

Pada penulisan bagi setiap pengguna. Sheets API membenarkan 300 permintaan tulis seminit bagi setiap projek dan 60 seminit bagi setiap pengguna setiap projek, dan satu kelayakan n8n dikira sebagai seorang pengguna. Aliran kerja yang menambah satu baris bagi setiap mesej oleh itu boleh mengendalikan kira-kira satu mesej sesaat, secara berterusan.

Itu mencukupi untuk kebanyakan nombor kedai. Ia tidak lagi mencukupi selepas template siaran, apabila beberapa ratus pelanggan membalas dalam beberapa minit. API kemudian menjawab 429 Too Many Requests dan, tanpa percubaan semula, baris akan hilang.

Ada dua penyelesaian, dan salah satu sudah memadai. Hidupkan percubaan semula dengan masa menunggu pada nod Google Sheets, selaras dengan nasihat Google sendiri supaya berundur secara eksponen. Atau kumpulkan: biarkan n8n mengumpul mesej selama tiga puluh saat dan menambahnya dalam satu permintaan, yang menukarkan banyak penulisan kepada satu.

Bagaimanakah anda menghantar template dari sheet?

Dengan Apps Script, daripada menu Extensions pada sheet. Satu fungsi membaca baris yang belum dihantar, memanggil endpoint mesej Cloud API dengan UrlFetchApp bagi setiap baris, dan menulis id mesej yang dipulangkan serta masanya ke dalam baris itu. Pencetus berasaskan masa boleh menjalankannya setiap beberapa minit, atau anda boleh menjalankannya secara manual daripada menu tersuai.

Simpan token akses dalam sifat skrip dan bukannya dalam kod, supaya sesiapa yang boleh melihat skrip tidak nampak token itu.

Ingat kuota yang ada. Akaun Google pengguna biasa mendapat 20,000 panggilan URL Fetch sehari dan akaun Workspace 100,000, dan setiap pelaksanaan berhenti selepas enam minit. Proses baris dalam ketulan dan tandakan setiap satu sebagai sudah dihantar sebelum meneruskan, supaya larian yang terhenti disambung semula di tempat ia berhenti dan tidak menghantar dua kali.

Apps Script: send one approved template per unsent row
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());
  }
}

Kesilapan biasa

  • Menambah tanpa kunci pada id mesej. Percubaan semula Meta kemudian menulis mesej yang sama ke dalam dua baris.
  • Menulis satu baris bagi setiap mesej melalui satu kelayakan semasa lonjakan balasan. Had 60 penulisan seminit bagi setiap pengguna memulangkan 429 dan baris hilang.
  • Menghantar teks bebas dari sheet kepada orang yang tidak menulis dalam tempoh 24 jam. Hanya template yang diluluskan dapat sampai di luar tetingkap itu.
Menggunakan EasyCoexistence untuk ini

Sambungkan nombor anda di easycoexistence.com, halakan destinasi webhook-nya ke aliran kerja n8n, dan salin phone number id serta token ke dalam skrip. Daripada US$ 9 sebulan bagi setiap nombor, jatuh kepada US$ 1 apabila anda menambah nombor, dengan 3 hari pertama percuma.

Soalan lazim

Bolehkah saya menggunakan Make atau Zapier sebagai ganti n8n?

Boleh. Webhook tersuai Make atau catch hook Zapier menerima mesej itu dan langkah Google Sheets mereka menambah baris.

Akaun Google yang manakah digunakan n8n untuk menulis?

Akaun yang memberi kebenaran kepada kelayakan Google n8n. Akaun itu memerlukan akses sunting pada sheet, dan kuota tulis bagi setiap pengguna miliknya ialah kuota yang digunakan aliran kerja itu.

Adakah lajur telefon diformatkan dengan betul?

Simpan nombor sebagai teks biasa, iaitu digit dengan kod negara dan tanpa tanda tambah, yang merupakan bentuk yang dihantar Meta. Jika tidak, Sheets menganggapnya sebagai nombor, lalu membuang tanda tambah di hadapan dan boleh mengubah format nilai yang panjang.

Adakah EasyCoexistence menyimpan salinan mesej?

Tidak. Meta menghantar setiap webhook ke URL n8n anda, dan sheet itu ialah satu-satunya salinan.

Teruskan membaca

Sedia untuk bermula?

Sediakan WhatsApp Coexistence dalam beberapa minit, bukan berbulan-bulan. Aplikasi terus berfungsi pada telefon.

Mulakan Percubaan Percuma

Disahkan pada

WhatsApp dan Google Sheets pada Cloud API