Documentazione / Completo
Carrelli del catalogo
Programmi con l'IA? Collegala al tuo account via MCP: controlla la tua configurazione, crea webhook e modelli con la tua conferma e scrive il codice. Scopri come →
Quando un cliente prepara un carrello con il catalogo WhatsApp dell'azienda e lo invia, ti arriva un message.received con data.message.type: "order" e l'oggetto order di Meta così com'è, senza appiattirlo: catalog_id (il catalogo), text (il commento che ha scritto con il carrello; arriva "" se non ha scritto nulla: il campo c'è, vuoto) e product_items[], uno per prodotto, con product_retailer_id (l'id del prodotto nel catalogo), quantity, item_price (prezzo unitario) e currency.
Un prodotto senza prezzo arriva con item_price: 0 e currency: "USD", anche se il resto del catalogo è in euro o in un'altra valuta. Non si distingue da un prodotto gratuito: tratta lo 0 come «da quotare» e ignora currency in quel caso.
Con la coesistenza i carrelli arrivano allo stesso modo. Il catalogo si gestisce dall'app WhatsApp Business: Meta non permette di amministrarlo via API per questo tipo di azienda (il suo errore dice «SMB business type»).
# Nothing to call: this is what WAIA Connect POSTs to your webhook for a cart.
# {
# "id": "evt_7f3a1b2c9d4e5f6a7b8c9d0e1f2a3b4c",
# "type": "message.received",
# "version": "1",
# "createdAt": "2026-10-13T01:43:06.000Z",
# "connection": { "id": "conn_4eede070e5a84d1590bdce2ea1d837bc", "phoneNumber": "+5493510000000", "externalId": "almacen-sur" },
# "sequence": 12346,
# "data": {
# "message": {
# "from": "5493511234567",
# "id": "wamid.HBgL…",
# "timestamp": "1791855786",
# "type": "order",
# "order": {
# "catalog_id": "100200300400500",
# "text": "¿Me lo mandan el sábado?",
# "product_items": [
# { "product_retailer_id": "yerba-1kg", "quantity": 2, "item_price": 4500, "currency": "ARS" },
# { "product_retailer_id": "mate-calabaza", "quantity": 1, "item_price": 0, "currency": "USD" }
# ]
# }
# },
# "contacts": [ { "wa_id": "5493511234567", "profile": { "name": "Ana" } } ]
# }
# }
# List the items of a saved body (item_price 0 = no price in the catalog → to be quoted):
jq -r '.data.message.order.product_items[]
| "\(.product_retailer_id) x\(.quantity) " + (if .item_price == 0 then "to be quoted" else "\(.item_price) \(.currency)" end)' body.jsonInviare prodotti o il catalogo tramite /v1 oggi non è disponibile: POST /v1/messages accetta testo, modelli e media.
Un prodotto che l'azienda invia dall'app del telefono ti arriva come message.echo (origin: "device") con type: "interactive" e interactive.type: "product". Il resto di interactive lo compone Meta: leggilo senza dare nessun campo per scontato.
Un messaggio che Meta non consegna tramite l'API arriva come message.received con type: "unsupported" e l'errors[] di Meta (per esempio 131051), che dice perché. Non ha contenuto da leggere.
Deduplica come per qualsiasi messaggio: sull'id della busta (evt_…) o su data.message.id.