Skip to main content

Plăți GetCourse → Google Sheets (n8n, Payments v3)

Scop

La fiecare plată, GetCourse apelează un webhook n8n, iar n8n adaugă plata în foaia produsului corespunzător din Google Sheets.

Scenariul vechi (v2) scria în tabel la fiecare webhook. Pe 12.10.2026 a căzut când GetCourse a trimis un lot de plăți vechi (~4 pe secundă): limita Google este de 60 de citiri pe minut. În plus, v2 nu verifica duplicatele: o plată repetată se aduna a doua oară.

Cum funcționează acum (din 12.10.2026, 12:08 UTC)

  1. Receptor v3 — primește webhook-ul de la GetCourse și pune plata în coadă. Adresa webhook-ului este cea veche (payments-webhook-v2), în GetCourse nu s-a schimbat nimic. Pentru fiecare plată se construiește o cheie (comandă + denumirea comenzii + sumă + dată); o plată repetată intră în coadă cu statusul duplicate și nu ajunge în tabel.
  2. Coada — tabelul de date n8n «Payments Queue v3». Statusuri: new (așteaptă), processing (în lucru), done (scris), duplicate (repetare), error (eroare, textul este în rând).
  3. Procesator v3 — pornește o dată pe minut, ia până la 200 de rânduri noi, citește catalogul și foile dintr-o singură citire și actualizează tabelul dintr-o singură scriere. Astfel limita Google nu este depășită.
  4. Google Sheets — foaia «Produs» este catalogul (Product ID → foaia produsului, numărul de rate). Foile produselor au coloanele: Link Comanda, Email, Tarif, Suma Total, Suma Încasată, Data ultimii plăți, Manager Comanda, Data primei plăți, Suma primei plăți.

Legături

Ce facem dacă…

  • Plata nu apare în tabel → o căutăm în coadă. La error citim textul erorii (de obicei lipsește produsul din foaia «Produs» sau lipsește o coloană pe foaie). Corectăm și punem rândului statusul new — procesatorul îl preia în cel mult un minut.
  • Produs nou → adăugăm un rând în «Produs» (Product ID, foaia, numărul de rate) și creăm foaia cu aceleași coloane.
  • Repornirea plăților din GetCourse → repornim doar plățile care nu sunt în tabel. O repetare cu aceleași date v3 o marchează duplicate, dar plățile scrise încă de v2 nu le cunoaște și le adună a doua oară.
  • Revenire la v2 → în receptorul v3 se pune înapoi adresa payments-webhook-v3 și se pornește v2.

Test fără pagube

Trimitem un webhook cu product_id=test-unknown și manager=TEST: procesatorul pune error și nu scrie în tabel. Apoi ștergem din coadă rândurile cu manager=TEST.