Qué dice GoCardless
| Evento | Causa | Códigos | Texto de GoCardless |
|---|---|---|---|
| payments · failed | direct_debit_not_enabled | AG01, AC06 | The bank account for this payment does not support SEPA Direct Debit. The mandate will also be cancelled. |
| payments · failed | account_blocked_for_any_financial_transaction | AC06 | This payment failed because the payer's account was blocked. |
| mandates · cancelled | direct_debit_not_enabled | AG01, AC06 | The bank account for this mandate does not support SEPA direct debit. Any subscriptions and pending payments will also be cancelled. |
| mandates · cancelled | account_blocked_for_any_financial_transaction | AC06 | The bank account for this mandate was blocked. Any subscriptions and pending payments will also be cancelled. |
Las dos causas aparecen también en payments · cancelled: ahí van los cobros que aún esperaban presentarse con ese mandato y que GoCardless cancela junto a él.

De dónde viene
Aquí no falla la firma, falla la cuenta. El mandato existe, pero cuando GoCardless presenta el adeudo, el banco del cliente contesta que en esa cuenta no se aceptan adeudos directos SEPA, o que está bloqueada. Por eso estos eventos tienen origen bank: los decide el banco del pagador.
direct_debit_not_enabled arrastra al mandato. GoCardless lo cancela, y con él caen las suscripciones y los cobros que tuviera pendientes. Con account_blocked_for_any_financial_transaction la cuenta está bloqueada; cuando GoCardless cancela también el mandato por ese motivo, lo comunica en su propio evento, con la misma causa.
Qué hace Odoo con cada evento
| Evento que llega | Qué hace el conector |
|---|---|
| payments · failed | La transacción pasa a «Error» con «GoCardless no pudo cobrar este pago (direct_debit_not_enabled).», o con la causa de la cuenta bloqueada. Si ese cobro ya había pagado la factura, anula el pago y la factura queda otra vez por cobrar. |
| payments · cancelled | Lo mismo que un pago fallido. |
| mandates · cancelled | Archiva el método de pago, deja escrito en la ficha del cliente que ese mandato ya no sirve y crea la actividad «Mandato de GoCardless perdido». |
Ojo con el orden: el evento del pago no retira el mandato, porque estas causas no figuran entre las cuatro que hacen que el conector lo archive al recibir un pago. Eso lo hace el evento del mandato. Y si no llegara por el webhook, lo recoge la tarea horaria que busca los eventos perdidos.
Los dos textos citados de la tabla nacen de un evento, no de un clic. Una base de datos que se creó en castellano los guarda así; una que se creó en inglés y luego se pasó a castellano los guarda en inglés: «GoCardless could not collect this payment (direct_debit_not_enabled).» y «GoCardless mandate lost».
Tampoco hay que esperar nada de Success+: su guía dice que solo vuelve a intentar los pagos que fallan por falta de fondos. El conector, de todas formas, mira en cada fallo el campo will_attempt_retry del evento, y si no viene a true deja la transacción en error.
Y el botón de reintentar
Para ver el mensaje, entra en la factura y pulsa arriba «Transacción de pago». El menú de transacciones solo aparece en modo desarrollador y en Odoo 20 ya no está.
En un pago fallido, mientras Odoo no haya archivado el mandato, esa transacción ofrece «Reintentar el cobro»; en uno cancelado, no. Sirve de poco: GoCardless reintenta únicamente pagos cuyo mandato sigue activo, y con direct_debit_not_enabled acaba de cancelarlo. Si la respuesta es retry_failed o mandate_is_inactive, el conector pregunta por el mandato, lo archiva si está muerto y lo deja dicho en la transacción: «El mandato de GoCardless del cliente está en estado …, así que no se puede cobrar. Pide al cliente un mandato nuevo.». A partir de ahí el botón desaparece.

Qué hacer
- Habla con el cliente. Si la cuenta no admite adeudos, necesitas otra que sí los admita; si está bloqueada (AC06), primero tendrá que resolverlo con su banco.
- Con la cuenta buena, el cliente firma un mandato nuevo, que en Odoo aparecerá como otro método de pago.
- Vuelve a cobrar con ese método las facturas abiertas. Los cobros cancelados por GoCardless no se van a presentar por sí solos.
- Si necesitas el código exacto, búscalo en GoCardless, porque Odoo solo guarda la causa: el conector no conserva el código SEPA. Su centro de ayuda lo explica así: «You are able to view the reason for a payment failure in the status timeline of the payment in your GoCardless dashboard.».
¿Por qué AC06 sale en las dos causas?
GoCardless usa el mismo código AC06 para la cuenta que no admite adeudos y para la cuenta bloqueada. En la práctica da igual: hoy esa cuenta no sirve para cobrar, y hace falta otra o que el banco la desbloquee.
¿Puedo reactivar el mandato?
Si la cuenta no admite adeudos, no tiene sentido: seguiría sin admitirlos. Lo que hace falta es un mandato nuevo con otra cuenta.
Con nuestro conector
Con Odoo 17, 18, 19 y 20, este fallo no se queda escondido: la transacción muestra la causa de GoCardless, la factura se reabre si estaba pagada y, en cuanto llega la cancelación del mandato, el cliente queda marcado para pedirle otra cuenta antes de la próxima factura.
Sigue leyendo
Comprobado en el código del conector (versión 17.0, 18.0, 19.0 y 20.0) y en las fuentes enlazadas
Fuentes
- Código del módulo: flexigo_payment_gocardless: const.py, línea 15 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
- docs.gocardless.com/docs/api-reference/events/payment
- docs.gocardless.com/docs/api-reference/events/mandate
- Código del módulo: flexigo_payment_gocardless: const.py, línea 76 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: const.py, línea 33 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: models/payment_token.py, línea 83 en 17.0 (d203ee6), línea 83 en 18.0 (e2ab18b), línea 83 en 19.0 (ce7f5a3) y línea 82 en 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: models/payment_token.py, línea 131 en 17.0 (d203ee6), línea 131 en 18.0 (e2ab18b), línea 131 en 19.0 (ce7f5a3) y línea 130 en 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: models/payment_transaction.py, línea 725 en 17.0 (d203ee6), línea 725 en 18.0 (e2ab18b), línea 724 en 19.0 (ce7f5a3) y línea 748 en 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: models/payment_transaction.py, línea 754 en 17.0 (d203ee6), línea 754 en 18.0 (e2ab18b), línea 753 en 19.0 (ce7f5a3) y línea 777 en 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: const.py, línea 117 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: const.py, línea 74 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: models/payment_transaction.py, línea 435 en 17.0 (d203ee6), línea 435 en 18.0 (e2ab18b), línea 434 en 19.0 (ce7f5a3) y línea 449 en 20.0 (688d86b)
- docs.gocardless.com/docs/optimise/reduced-failed-payments-with-success-plus
- Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 464 en 17.0 (d203ee6), línea 464 en 18.0 (e2ab18b), línea 464 en 19.0 (ce7f5a3) y línea 469 en 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 1241 en 17.0 (d203ee6), línea 1241 en 18.0 (e2ab18b), línea 1241 en 19.0 (ce7f5a3) y línea 1252 en 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 527 en 17.0 (d203ee6), línea 527 en 18.0 (e2ab18b), línea 527 en 19.0 (ce7f5a3) y línea 532 en 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: views/payment_transaction_views.xml, línea 13 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: models/payment_transaction.py, línea 63 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: models/payment_transaction.py, línea 418 en 17.0 (d203ee6), línea 418 en 18.0 (e2ab18b), línea 417 en 19.0 (ce7f5a3) y línea 432 en 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 1092 en 17.0 (d203ee6), línea 1092 en 18.0 (e2ab18b), línea 1092 en 19.0 (ce7f5a3) y línea 1113 en 20.0 (688d86b)
- docs.gocardless.com/docs/api-reference/payment
- Código del módulo: flexigo_payment_gocardless: models/payment_transaction.py, línea 469 en 17.0 (d203ee6), línea 469 en 18.0 (e2ab18b), línea 468 en 19.0 (ce7f5a3) y línea 487 en 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 1343 en 17.0 (d203ee6), línea 1343 en 18.0 (e2ab18b), línea 1343 en 19.0 (ce7f5a3) y línea 1354 en 20.0 (688d86b)
- github.com/odoo/odoo/blob/20.0/addons/payment/i18n/es.po
- github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml
- github.com/odoo/odoo/blob/17.0/odoo/http.py
- support.gocardless.com/hc/en-gb/articles/360001467265
- Código del módulo: flexigo_payment_gocardless: const.py, línea 66 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: __manifest__.py, línea 31 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
- docs.gocardless.com/docs/api-reference/responses-and-errors
