Salesforce Automation Email Parsing Google Sheets — Tutorial langkah demi langkah

Salesforce Automation Email parsing Google Sheets — Tutorial langkah demi langkah

  • Otomasi alur: Gmail → parse email → Google Sheets (staging) → dedupe → Salesforce.
  • Pilih jalur cepat (Parseur/email2sheet) untuk POC, atau Apps Script + Salesforce REST API untuk fleksibilitas penuh.
  • Gunakan order_id sebagai primary key dan simpan kolom Status/Error untuk audit dan retry.
  • Test regex & end‑to‑end sebelum production; gunakan LockService untuk mencegah race condition.

Pembuka

salesforce automation email parsing google sheets hadir untuk mengatasi pekerjaan manual yang menguras waktu: menerima order/leads lewat email lalu memindahkan data ke spreadsheet dan CRM. Artikel ini menunjukkan alur praktis (Gmail → parse email → Google Sheets → dedupe → push ke Salesforce) yang bisa Anda reproduksi dalam ~90 menit (target, tanpa sumber tepercaya). Panduan berfokus pada implementasi teknis, contoh regex, snippet Google Apps Script, dan opsi integrasi—baik no-code maupun low-code.

Ringkasan solusi & arsitektur

Arsitektur singkat:

  • Gmail → Email parser (add‑on atau Apps Script regex) → Google Sheets (staging) → dedupe + append row → Salesforce

Fastest path: pakai add‑on (Parseur / email2sheet). Most flexible: Apps Script + Salesforce REST API.

Contoh skenario nyata (parse email)

Skenario: toko e‑commerce menerima order via email. Tujuan sistem:

  1. baca email order
  2. extract field (order_id, nama, email, produk, qty, total)
  3. simpan ke Google Sheets (append row)
  4. hindari duplikasi (dedupe)
  5. buat Lead/Order di Salesforce

Contoh email mentah:

From: orders@shop-example.com
Subject: New Order Confirmation #ORD-20260523-7781

Order ID: ORD-20260523-7781
Customer Name: Budi Santoso
Customer Email: budi.santoso@example.com
Product: Wireless Keyboard
Qty: 2
Price: Rp 350.000
Total: Rp 700.000

Prasyarat

Langkah 1 — Menangkap email dan parse ke Google Sheets

Opsi A — Pakai add‑on (Parseur / email2sheet)

  • Install add‑on dari Google Workspace Marketplace (email2sheet) atau buat mailbox parser di Parseur.
  • Forward email order ke alamat parser, map fields, lalu output ke Google Sheets.

Referensi: Parseur docs

Opsi B — Google Apps Script custom parsing (lebih fleksibel)

Recommended sheet: sheet “Orders” dengan kolom: Timestamp, MessageId, OrderId, CustomerName, CustomerEmail, Product, Qty, Price, Total, Status, SalesforceId, Error

Contoh regex:

  • Order ID: /Order ID:\s*(ORD-\d{8}-\d+)/i
  • Email: /Customer Email:\s*([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,})/i
  • Qty: /Qty:\s*(\d+)/i
  • Price: /Price:\s*Rp\s*([\d.]+)/i

Contoh Apps Script (ringkas, tested structure):

function extract(text, regex) {
  const m = text.match(regex);
  return m ? m[1].trim() : '';
}

function normalizeNumber(str) {
  if (!str) return '';
  return str.replace(/\./g,'').replace(/,/g,'.');
}

function parseOrdersFromGmail() {
  const sheet = SpreadsheetApp.getActive().getSheetByName('Orders');
  const threads = GmailApp.search('subject:"New Order Confirmation" newer_than:7d');
  threads.forEach(thread => {
    thread.getMessages().forEach(msg => {
      const body = msg.getPlainBody();
      const messageId = msg.getId();
      const orderId = extract(body, /Order ID:\s*(ORD-\d{8}-\d+)/i);
      if (!orderId) return;
      // dedupe handled separately
      const row = [
        new Date(), messageId, orderId,
        extract(body, /Customer Name:\s*(.+)/i),
        extract(body, /Customer Email:\s*([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,})/i),
        extract(body, /Product:\s*(.+)/i),
        Number(extract(body, /Qty:\s*(\d+)/i) || 0),
        Number(normalizeNumber(extract(body, /Price:\s*Rp\s*([\d.]+)/i)) || 0),
        Number(normalizeNumber(extract(body, /Total:\s*Rp\s*([\d.]+)/i)) || 0),
        'Pending', '', ''
      ];
      sheet.appendRow(row);
    });
  });
}

Referensi: GmailApp ; appendRow

Langkah 2 — Dedupe & business rules sebelum append row

Dedupe penting untuk mencegah Lead/Order ganda di Salesforce. Strategi umum:

  • Primary key: order_id (direkomendasikan)
  • Alternatif: email + messageId atau kombinasi subject+date

Contoh isDuplicate di Apps Script + LockService untuk race condition:

function isDuplicate(sheet, key, colIndex) {
  const lock = LockService.getScriptLock();
  lock.waitLock(30000);
  try {
    const lastRow = sheet.getLastRow();
    if (lastRow < 2) return false;
    const values = sheet.getRange(2, colIndex, lastRow-1, 1).getValues().flat();
    return values.includes(key);
  } finally {
    lock.releaseLock();
  }
}

(LockService: LockService)

Langkah 3 — Otomatisasi pengiriman data ke Salesforce

Opsi A — No‑code: Zapier / Make (cepatan implementasi)

Integrasi cepat: Zapier Google Sheets → Salesforce. Untuk contoh pattern Zapier (OCR/invoice-focused) lihat: Zapier OCR invoice. Panduan Make untuk alur parsing → Sheets → Salesforce: Make guide.

Opsi B — Low‑code: Apps Script + Salesforce REST API

Contoh payload JSON:

{
  "LastName":"Santoso",
  "Company":"Shop Example",
  "Email":"budi.santoso@example.com",
  "LeadSource":"Email Order Parsing",
  "Description":"Order ID: ORD-xxxx | Product: ..."
}

Untuk alur enrichment setelah lead dibuat, lihat: Salesforce lead enrichment

Opsi C — Native Salesforce Flow / workflow

Kirim data ke Salesforce (API / webhook), lalu gunakan Record‑Triggered atau Autolaunched Flow untuk validasi & create records (Flow basics: Flow builder overview).

Jika membangun eskalasi/ticketing berbasis Salesforce setelah lead/order masuk, referensi implementasi eskalasi: ticketing escalation.

Testing & deployment

  • Unit test regex dengan variasi email (minimal 5 varian)
  • End‑to‑end test: kirim sample email → pastikan row muncul → dedupe berjalan → SalesforceId terisi
  • Trigger scheduling: Apps Script time‑driven triggers (triggers guide)
  • Logging: kolom Status/Error dan tab Logs untuk audit

Contoh penggunaan scheduling/cron-like workflows dengan Apps Script: Daily Report Bot.

Troubleshooting umum

  • Parsing gagal: regex terlalu ketat → buat fallback templates
  • Dedupe FP/FN: perbaiki key atau gunakan fuzzy match (tanpa sumber tepercaya)
  • Salesforce auth errors: cek scopes & Connected App settings (OAuth docs)
  • Rate limits & batching: lihat Salesforce API limits (requests limits) dan gunakan batching/retry dengan exponential backoff (retry & backoff).

Variasi & advanced enhancements

  • Attachment/PDF parsing: gunakan OCR (Google Vision OCR: Vision OCR).
  • Scale: pindahkan parsing ke Cloud Functions / Cloud Run (Cloud Run) jika volume besar.
  • Keamanan: jangan simpan secrets di kode; gunakan Script Properties atau Secret Manager.

Code & resources appendix (penting)

Kesimpulan & CTA

Flow yang direkomendasikan: Gmail → parse email → Google Sheets (staging) → dedupe → append row → Salesforce. Praktik terbaik: gunakan order_id sebagai primary key, validasi input, dan simpan status/error untuk audit. Jika Anda butuh implementasi end‑to‑end, audit keamanan, atau demo integrasi Salesforce + otomasi: hubungi tim InReality Solutions untuk konsultasi dan demo (/contact).

Untuk contoh lain menghubungkan Google Sheets ke CRM (bukan hanya Salesforce), lihat: Google Sheets automation form to CRM.

FAQ

Q: Bisakah pakai non‑Gmail?

A: Ya—pakai IMAP/forwarding atau connector (IMAP guide: Google Mail IMAP guide).

Q: Bagaimana menangani multilingual emails?

A: Buat template per bahasa dan gunakan regex yang fleksibel atau fallback parsing; pertimbangkan NLP / language detection untuk routing ke template yang tepat.

Q: Estimasi biaya?

A: Bergantung kompleksitas alur kerja (add‑on, licence API, volume, dan developer time). Untuk estimasi terperinci, minta konsultasi.

Q: Bagaimana menyimpan secrets secara aman?

A: Jangan hardcode secrets di skrip. Gunakan Script Properties atau layanan seperti Google Secret Manager, dan batasi akses pada Connected App di Salesforce.

Q: Apa batasan rate pada Salesforce dan bagaimana mengatasinya?

A: Salesforce punya API limits; rancang batching, retry dengan exponential backoff, dan monitoring. Lihat Salesforce API limits untuk detail.

 

id_IDIndonesian