Cosa dice GoCardless
| Evento | Causa | Codice SEPA Core | Testo di GoCardless |
|---|---|---|---|
| payments · failed | insufficient_funds | AM04 | The customer's account had insufficient funds to make this payment. |
La documentazione dell'evento failed aggiunge un elemento chiave: GoCardless riprova il pagamento autonomamente quando il campo will_attempt_retry dell'evento è true («GoCardless will automatically retry the payment if event's will_attempt_retry field is true.»). Questo riprovo automatico è Success+, e per usarlo bisogna averlo attivato nella Dashboard di GoCardless.
Secondo la guida di Success+, riprova solo i pagamenti che falliscono per mancanza di fondi. In SEPA sono due codici: AM04 e MS03, e MS03 solo in Austria, Belgio, Germania, Lussemburgo e Slovacchia. GoCardless avverte comunque che i suoi criteri possono cambiare: per ogni guasto vale il campo will_attempt_retry.

Perché arriva quando la fattura sembrava già incassata
Un addebito SEPA non si risolve subito: secondo GoCardless, l'incasso di un pagamento può richiedere fino a 5 giorni lavorativi. Di solito la banca del cliente segnala il guasto un giorno lavorativo dopo la data di addebito, prima che il pagamento passi a confirmed. In pochi casi lo segnala più tardi, con il pagamento già contrassegnato come confirmed: è un guasto tardivo (late failure), e la guida di Success+ cita come esempio uno per mancanza di fondi. Per questo AM04 può comparire quando in Odoo l'incasso risultava già confermato e la fattura riconciliata. Il connettore lo gestisce: se un incasso che Odoo considerava avvenuto fallisce, annulla il suo pagamento e la fattura torna in sospeso.
Il connettore GoCardless per Odoo incassa solo tramite SEPA Core e in euro, e per un pagamento fallito SEPA Core la documentazione di GoCardless riporta un solo codice con insufficient_funds: AM04. In Odoo vedrai la causa e non il codice, perché il connettore memorizza la causa dell'evento e non il codice SEPA. Il connettore annota inoltre nel suo codice che la combinazione insufficient_funds con AM04 è quella riscontrata nei pagamenti SEPA reali del sandbox di GoCardless.
Cosa vedi in Odoo con il connettore
Ogni incasso inviato dal connettore chiede a GoCardless retry_if_possible, l'opzione di Success+. Quando arriva il guasto possono succedere due cose, e la transazione ti indica quale nel suo gruppo GoCardless: «GoCardless Cause» e la casella «Success+ Will Retry». La transazione si apre dalla fattura, con il pulsante «Transazione di pagamento» in alto; il menu delle transazioni compare solo in modalità sviluppatore, e in Odoo 20 non esiste.
will_attempt_retry | Stato | «Messaggio» della transazione | Pulsante «Retry collection» |
|---|---|---|---|
| true | «In sospeso» | «GoCardless could not collect this payment (insufficient_funds). Success+ will retry it automatically; there is nothing to do.» | Non compare |
| false | «Errore», e la fattura torna in sospeso | «GoCardless could not collect this payment (insufficient_funds).» e, se GoCardless indica il motivo, «It will not be retried automatically (…).» | Compare, se restano tentativi e il mandato è attivo |
Questi messaggi li scrive il connettore nell'applicare l'evento, senza intervento umano. Il connettore non è tradotto in italiano: questi testi compaiono sempre in inglese, anche in un Odoo in italiano, sia che li avvii un utente sia un'azione pianificata: «GoCardless could not collect this payment (insufficient_funds). Success+ will retry it automatically; there is nothing to do.», «GoCardless could not collect this payment (insufficient_funds).» e «It will not be retried automatically (…).».
La transazione resta in sospeso di proposito quando Success+ riproverà: il denaro potrebbe ancora arrivare, e uno stato di errore farebbe credere che l'incasso sia perso. Ogni volta che GoCardless ripresenta l'incasso invia un evento resubmission_requested, e il connettore aumenta di uno «GoCardless Retries», sia che il riprovo sia di Success+ sia che l'abbia chiesto tu.
Cosa fare
- Apri la transazione dalla fattura e controlla «GoCardless Cause» e «Success+ Will Retry».
- Se Success+ la riproverà, non fare nulla: il pulsante di riprovo non compare nemmeno. GoCardless chiede di non addebitare il cliente con un altro canale nel frattempo, perché potrebbe pagare due volte.
- Se non la riproverà, parla prima con il cliente per sapere quando avrà fondi e premi «Retry collection» quando te lo conferma. Il pulsante non sceglie la data: la nuova data di addebito la stabilisce GoCardless, e la transazione passa a «Retry requested. GoCardless will confirm the new charge date.».
- Tieni il conto: GoCardless ammette al massimo 3 riprovi per pagamento («Payments can be retried up to 3 times.»), e il connettore conta anche quelli di Success+ in «GoCardless Retries».
Un AM04 annulla il mandato del cliente?
No. La causa insufficient_funds non è tra quelle che fanno archiviare il mandato al connettore, cioè mandate_cancelled, bank_account_closed, mandate_expired e authorisation_disputed. Il cliente conserva il suo metodo di pagamento per la prossima fattura.
Perché Success+ non riprova tutti i guasti?
Perché la sua guida lo limita ai pagamenti senza fondi: in SEPA, AM04 e, solo in cinque paesi, MS03. Un cliente che rifiuta l'addebito o un conto chiuso non si risolvono ripresentando l'addebito. Il connettore non decide da sé: segue il campo will_attempt_retry di ogni guasto.

Con il nostro connettore
Il connettore GoCardless per Odoo 17, 18, 19 e 20 trasforma l'evento in qualcosa di gestibile dalla fattura: lascia la transazione in sospeso mentre Success+ lavora, la porta in errore e riapre la fattura quando non ci sarà più riprovo, e conta i riprovi per non offrirti un'azione che non serve. Ciò che non può fare è mettere denaro sul conto del tuo cliente: se l'AM04 si ripete, è la conversazione con lui a risolvere l'incasso.
Continua a leggere
Verificato nel codice del connettore (versione 17.0, 18.0, 19.0 e 20.0) e nelle fonti collegate
Fonti
- docs.gocardless.com/docs/api-reference/events/payment
- docs.gocardless.com/docs/api-reference/payment
- docs.gocardless.com/docs/optimise/reduced-failed-payments-with-success-plus
- Codice del modulo: flexigo_payment_gocardless: const.py, riga 15 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: const.py, riga 76 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: const.py, riga 71 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 260 in 17.0 (d203ee6), riga 260 in 18.0 (e2ab18b), riga 260 in 19.0 (ce7f5a3) e riga 271 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 729 in 17.0 (d203ee6), riga 729 in 18.0 (e2ab18b), riga 728 in 19.0 (ce7f5a3) e riga 752 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 746 in 17.0 (d203ee6), riga 746 in 18.0 (e2ab18b), riga 745 in 19.0 (ce7f5a3) e riga 769 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 732 in 17.0 (d203ee6), riga 732 in 18.0 (e2ab18b), riga 731 in 19.0 (ce7f5a3) e riga 755 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 754 in 17.0 (d203ee6), riga 754 in 18.0 (e2ab18b), riga 753 in 19.0 (ce7f5a3) e riga 777 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 680 in 17.0 (d203ee6), riga 680 in 18.0 (e2ab18b), riga 679 in 19.0 (ce7f5a3) e riga 703 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 430 in 17.0 (d203ee6), riga 430 in 18.0 (e2ab18b), riga 429 in 19.0 (ce7f5a3) e riga 444 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: const.py, riga 122 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: const.py, riga 119 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 461 in 17.0 (d203ee6), riga 461 in 18.0 (e2ab18b), riga 460 in 19.0 (ce7f5a3) e riga 479 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 484 in 17.0 (d203ee6), riga 484 in 18.0 (e2ab18b), riga 483 in 19.0 (ce7f5a3) e riga 502 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: views/payment_transaction_views.xml, riga 13 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 63 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: models/payment_transaction.py, riga 418 in 17.0 (d203ee6), riga 418 in 18.0 (e2ab18b), riga 417 in 19.0 (ce7f5a3) e riga 432 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: views/payment_transaction_views.xml, riga 22 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: views/payment_transaction_views.xml, riga 27 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: views/payment_transaction_views.xml, riga 28 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
- github.com/odoo/odoo/blob/20.0/addons/payment/views/payment_transaction_views.xml
- github.com/odoo/odoo/blob/20.0/addons/payment/i18n/it.po
- Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 436 in 17.0 (d203ee6), riga 436 in 18.0 (e2ab18b), riga 436 in 19.0 (ce7f5a3) e riga 438 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 1083 in 17.0 (d203ee6), riga 1083 in 18.0 (e2ab18b), riga 1083 in 19.0 (ce7f5a3) e riga 1090 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 703 in 17.0 (d203ee6), riga 703 in 18.0 (e2ab18b), riga 703 in 19.0 (ce7f5a3) e riga 710 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 356 in 17.0 (d203ee6), riga 356 in 18.0 (e2ab18b), riga 356 in 19.0 (ce7f5a3) e riga 358 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 1063 in 17.0 (d203ee6), riga 1063 in 18.0 (e2ab18b), riga 1063 in 19.0 (ce7f5a3) e riga 1070 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 408 in 17.0 (d203ee6), riga 408 in 18.0 (e2ab18b), riga 408 in 19.0 (ce7f5a3) e riga 410 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 1016 in 17.0 (d203ee6), riga 1016 in 18.0 (e2ab18b), riga 1016 in 19.0 (ce7f5a3) e riga 1031 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, riga 1022 in 17.0 (d203ee6), riga 1022 in 18.0 (e2ab18b), riga 1022 in 19.0 (ce7f5a3) e riga 1037 in 20.0 (688d86b)
- Codice del modulo: flexigo_payment_gocardless: __manifest__.py, riga 31 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
- support.gocardless.com/hc/en-gb/articles/360001467265
- Codice del modulo: flexigo_payment_gocardless: const.py, riga 66 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
- github.com/odoo/odoo/blob/17.0/odoo/http.py
- github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml
