Si gestioneu una cistella agroecològica, un grup de consum o qualsevol distribució setmanal a un grup de clients, sabeu el que costa: enviar la llista de productes per Telegram a 50 persones, esperar que cadascuna respongui, i anotar-ho tot a mà. Aquesta setmana ho hem automatitzat completament amb n8n i un bot de Telegram. Ara tot el procés —des d'enviar el catàleg fins a tenir totes les comandes guardades— és una qüestió de segons.

Quina era la situació de partida

El flux manual era sempre el mateix: l'administrador feia una foto o escrivia la llista dels productes disponibles, la copiava i l'enviava un per un (o via grups) als clients, esperava les respostes i les apuntava en un document. Amb 50 clients, això podia ocupar mitja hora cada setmana i era fàcil perdre alguna resposta.

El que volíem aconseguir:

  • Pas 1: l'admin envia la cistella al bot (llista + PDF) i n8n s'encarrega de fer arribar tot a cada client.
  • Pas 2: cada client respon al bot amb el que vol, i n8n ho guarda automàticament.
  • Resultat: un full de Google Sheets amb les 50 comandes separades i consultables en qualsevol moment.

Arquitectura: un sol bot, dues branques

El repte principal és que Telegram només permet un webhook per bot. Això vol dir que tots els missatges —tant de l'admin com dels 50 clients— arriben al mateix Telegram Trigger de n8n. La solució és crear un workflow amb dues branques que s'activen en funció de qui envia el missatge:

  • Branca admin: si el chat_id del remitent és el de l'administrador → processem el catàleg i l'enviem a tothom.
  • Branca client: si el chat_id és qualsevol altre → és una comanda d'un client, la guardem.

D'aquesta manera, amb un sol workflow de n8n, gestionem tot el cicle.

Estructura del Google Sheets

Necessitem un Google Sheets amb tres pestanyes:

  • Clients: una fila per client, amb les columnes telegram_chat_id, nom, telefon i actiu.
  • Cataleg: cada vegada que l'admin envia la cistella, n8n afegeix una fila amb la data, la llista de productes, el file_id del PDF i un timestamp.
  • Comandes: cada resposta d'un client genera una nova fila amb el nom, el telèfon, el text de la comanda i l'estat (pendent, preparat, enviat...).

Com funciona pas a pas

Pas 1 — L'admin envia la cistella

L'admin obre el xat amb el bot i adjunta el PDF del catàleg com a document. La llista de productes de la cistella s'escriu com a caption (descripció) del fitxer:

🥕 Pastanagues 1kg
🍅 Tomàquets 500g
🥬 Enciam x1
🫑 Pebrots verds x2
🧅 Cebes 1kg

Quan envia aquest missatge, el Telegram Trigger de n8n el rep. El primer node comprova si el from.id coincideix amb l'ID de l'admin. Si és així, s'inicia la branca d'enviament.

Pas 2 — Guardar el catàleg i el PDF

Un node Set extreu les dades del missatge: el file_id del PDF (que Telegram assigna al fitxer), el text de la llista i la data. Un punt clau: no cal descarregar el PDF. El file_id que Telegram genera és permanent per a aquest bot, i el podem fer servir directament per enviar el document als clients sense cap descàrrega ni pujada addicional.

Aquestes dades es guarden a la pestanya Cataleg del Google Sheets amb un node Google Sheets → Append.

Pas 3 — El loop d'enviament als 50 clients

Ara ve la part central. Un node llegeix tots els clients actius del Google Sheets. Un Code node injecta les dades del catàleg (file_id, llista, data) a cada objecte client, de manera que el loop posterior tingui tot el que necessita en un sol ítem. Llavors el Split In Batches processa els clients d'un en un:

  • Primer, un node Telegram → Send Message envia el text amb la llista de productes, formatat amb Markdown.
  • Després, un node Telegram → Send Document envia el PDF usant el file_id directament. Cap binari, cap descàrrega: Telegram el reenvía des dels seus servidors.
  • El bucle torna al Split In Batches fins que s'han processat tots els clients.

Un cop finalitzat el loop, un darrer node envia un missatge de confirmació a l'admin: "Cistella enviada correctament a tots els clients actius."

Pas 4 — Els clients fan la comanda

Cada client rep dos missatges: el text amb la llista i el PDF amb el catàleg complet. Per fer la comanda, simplement responen al bot:

Vull tomàquets x3, enciam x1 i pastanagues 1kg

Quan arriba aquest missatge, el Telegram Trigger el rep i el node "És Admin?" detecta que no és l'admin → s'activa la branca client.

Pas 5 — Identificar el client i guardar la comanda

Un node llegeix tots els clients del Google Sheets. Un Code node busca la fila que coincideix amb el from.id del missatge entrant. Si el troba, construeix un objecte amb el nom, telèfon, text de la comanda i timestamp. Si no el troba (algú que no és client envia un missatge al bot), s'envia una resposta automàtica indicant que no està registrat.

Si el client és vàlid, un node Google Sheets → Append afegeix una nova fila a la pestanya Comandes. Per acabar, el bot envia una confirmació al client:

✅ Gràcies, Maria!

Hem rebut la teva comanda:

Vull tomàquets x3, enciam x1 i pastanagues 1kg

Ens posarem en contacte aviat per confirmar. 🌿

El resultat al Google Sheets

Al final del dia, la pestanya Comandes conté totes les respostes dels clients, una per fila, amb nom, telèfon, text exacte de la comanda i hora d'enviament. Es pot afegir una columna d'estat (pendent / preparat / enviat) i gestionar-ho directament des del full sense tocar mai el bot. El volum no importa: si demà teniu 100 clients en lloc de 50, simplement afegiu les files noves a la pestanya Clients.

Una precaució: el rate limit de Telegram

Telegram permet enviar fins a 30 missatges per segon al mateix chat, però si envieu ràfegues a molts chats seguits, pot bloquejar temporalment el bot. Amb 50 clients (100 missatges en total: text + PDF per a cadascun), és recomanable afegir un node Wait d'1 segon dins del loop, entre l'enviament del text i l'enviament del PDF. Evita talls i fa el procés més estable.

Reflexió final

El que m'agrada d'aquesta solució és que és completament transparent per als clients: ells simplement reben un missatge i responen, com sempre. Tot el canvi és invisible. Per a qui gestiona la cistella, però, la diferència és enorme: d'una tasca manual de 30 minuts a prémer enviar i tenir-ho tot guardat automàticament. I sense cap aplicació externa ni subscripció: n8n, un bot de Telegram i un Google Sheets gratuïts.

Més informació