Skip to content

Google Sheets

@akadli/provider-gsheets provides a universal bridge for Algerian merchants selling via landing pages or entry-level store builders (such as SetShop, JustSell, and Foorweb) that export incoming orders directly into a Google Sheet.

It supports two operating modes:

  • Mode A (REST API v4): Direct spreadsheet cell reading and writing via Google Cloud Service Accounts.
  • Mode B (Zero-OAuth Apps Script): Instant setup with a copy-paste Google Apps Script Web App that handles two-way updates without needing a Google Cloud console project.

Installation

Terminal window
pnpm add @akadli/provider-gsheets

Merchants can deploy an Apps Script web app inside their existing Google Sheet in 60 seconds:

1. Paste the Apps Script Handler

  1. Inside your Google Sheet, click Extensions -> Apps Script.
  2. Replace any existing code with this snippet:
function doPost(e) {
var data = JSON.parse(e.postData.contents);
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
var row = Number(data.rowNumber);
if (!row) {
return ContentService.createTextOutput("Missing rowNumber");
}
// Update status (Column G)
sheet.getRange(row, 7).setValue(data.status);
// Update Wilaya (Column I) & Commune (Column J) if modified
if (data.finalWilaya) sheet.getRange(row, 9).setValue(data.finalWilaya);
if (data.finalCommune) sheet.getRange(row, 10).setValue(data.finalCommune);
// Update call audit notes (Column L)
if (data.reasonOrNotes) sheet.getRange(row, 12).setValue(data.reasonOrNotes);
return ContentService.createTextOutput("OK");
}

2. Deploy Web App

  1. Click Deploy -> New deployment.
  2. Select type: Web app.
  3. Execute as: Me ([email protected]).
  4. Who has access: Anyone.
  5. Click Deploy and copy the Web App URL.

Flexible Arabic & French Column Header Mapping

@akadli/provider-gsheets automatically recognizes Arabic, French, and English column headers commonly used across Algerian landing pages:

FieldRecognized Headers
Nameالاسم, الاسم واللقب, nom, name, full_name
Phoneالهاتف, رقم الهاتف, telephone, phone, mobile
Wilayaالولاية, wilaya, province, state
Communeالبلدية, الدائرة, commune, city
Productالمنتج, السلعة, produit, item, title
Variantالمقاس, الحجم, اللون, taille, variant, size
Priceالسعر, المبلغ, prix, total, price

Credentials Schema

ModeFieldTypeRequiredDefaultDescription
AspreadsheetIdstringYes (Mode A)—Google Sheet ID from browser URL
AaccessTokenstringYes (Mode A)—Google Cloud OAuth2 token
AsheetNamestringNo"Sheet1"Target tab name
AstatusColumnstringNo"G"Column letter for order status
AnotesColumnstringNo"L"Column letter for order notes
BappsScriptWebhookUrlstringYes (Mode B)—Deployed Apps Script Web App URL
BsecretstringNo—Optional secret token for verification

Code Example

import { GSheetsProvider } from "@akadli/provider-gsheets";
const provider = new GSheetsProvider();
// 1. Verify inbound webhook from Apps Script or sheet row trigger
const isValid = await provider.verifyWebhook(
headers,
rawBody,
process.env.GSHEETS_WEBHOOK_SECRET!
);
// 2. Parse standardized Algerian COD order
const order = await provider.parseWebhookOrder(JSON.parse(rawBody));
// 3. Mutate Google Sheet row after voice call (Mode B)
const result = await provider.applyOrderDecision(
order.orderId,
{
orderId: order.orderId,
status: "CONFIRMED",
reasonOrNotes: "Confirmed in Darja via voice call"
},
{
appsScriptWebhookUrl: process.env.GSHEETS_APPS_SCRIPT_URL!
}
);