Notice Codes
The code is the stable identity of a notice. The message may be reworded, the reason changes with every occurrence; the code does not. The Chat panel translates it into a short label, and the Flow Notices screen groups by it.
Six codes are newer than the panel's translations and are shown as their raw snake_case identifier: files_over_limit, unsupported_media_type, attachments_dropped, destination_cannot_hold_files, variable_type_mismatch and journey_not_served. They behave like any other code; only the label is missing. Some notices carry no code at all (OTP failures, the ai-router, expiration, a conversation without a flow) and show their message alone; they are covered in the list of common notices below.
The codes
| Code | Label in the panel | Level | When the engine emits it |
|---|---|---|---|
node_ok | Node processed | info | Written only by Extract Information, Packages and Read Incoming when they finish well; no other node leaves node_ok any more (a Goal node with a goal leaves goal_reached, below). You may still see it on old conversations from other nodes. |
goal_reached | Goal reached | info | A Goal node with a goal configured was reached. Message: Meta alcanzada: name, with the goal's name from the catalog, or its key when the goal is not in the catalog (deleted or unknown; a warning notice follows it). Details carries the goal key, name and description and the flow version. Written only the first time the conversation reaches that goal; later passes are recorded for Conversation Insights but leave no new notice. Nothing to fix; it shows where each goal was reached. Conversation Insights does not count from notices but from its own records. |
node_warning | Node with warning | warning | The node completed but produced an outcome you must know about: a message that uses a variable nobody wrote, a step that answered "no" (the person is not a customer, the account is not in the CMS), a file consumer that received a list and took the first file. Message: Node 'type' completed with warning; the reason says what happened and what to check. |
node_failed | Node failed | error, or warning when the cause is a Meta rejection | The node failed and the flow continued through its Error handle. Reason: El nodo type (description) falló: cause. Continúa por el handle de Error hacia el nodo X. With a real exception it carries the traceback. When the cause is a WhatsApp rejection, the message is Meta's explanation and the level is warning. See Connections. |
node_failed_no_error_handle | Node failed, no error handle | error, or warning when the cause is a Meta rejection | Same failure, but the node had no Error handle connected. The reason ends with where the customer went, and that depends on the channel: on WhatsApp, la conversación se terminó y se intentó transferir a un agente; on web and email, el cliente fue enviado al bot por defecto X or el conector no tiene bot por defecto y la conversación quedó sin flujo activo. Fix: connect the Error handle; the publish gate warns about it. |
stage_failed | Stage failed | error | An exception escaped inside one processing stage of a channel. The message starts with the layer and stage in brackets, [conversation_manager / whatsapp.process_otp_verification_response], followed by a Spanish description of the step (Falló la verificación del código OTP (WhatsApp)). Carries the traceback and, in Details, the layer and stage. |
unhandled_error | Unhandled error | error | Unhandled error in conversation processing. Nothing in the flow caught the exception. Carries the traceback; share the conversation identifier with AltScore support. |
flow_terminated | Flow terminated | info | Flow terminated. Not a failure. The reason says why: end_node_reached, human_takeover_outside_hours, or a node with no outgoing connection (No next_node for type). The conversation moves to the connector's default bot, if any. See End and Human Takeover. |
flow_cycle | Flow cycle | warning | The flow loops: too many nodes traversed for a single message. The reason names the last node visited and asks you to check the connections leaving the nodes on that path, Error handles included: one of them leads back to a node already visited. |
jump_to_without_destination | Jump without destination | error | The jump-to node has no destination, the flow stops here. Set the target flow (and target node when the jump goes to a specific node) on the node, or connect the branch that reaches it elsewhere. See Jump To. |
interrupted_by_shutdown | Interrupted by deploy | warning | Processing interrupted by instance shutdown. A deploy cancelled the node while it was running. The conversation is flagged and the node re-runs on the next inbound message or on the recovery sweep; nothing to fix in the flow. |
answer_without_destination | Answer without destination | warning | Ask File: the customer sent files and the node has neither Save to Variable nor Save to Entity, so the answer was discarded (Files received and stored nowhere). Also when the destination is an address and the node does not say which one (File not attached: the node does not say which address). |
answer_unresolved | Answer unresolved | warning; error when the file could not be written to storage | Ask File: the files arrived but no URL could be resolved, or an email reply carried no attachment (warning); or the file could not be read from the channel or written to storage (error, with traceback). The customer was asked to send it again. |
entity_without_customer | Entity without customer | warning | Ask File files the answer on the customer's identity, field or document, but nothing identified the customer yet. With a variable configured the file is kept there and only the entity write is skipped; without one the file is lost. Identify the customer earlier (login, create-borrower) or take the entity off the node. |
files_over_limit | (raw) | warning | Ask File on web or email: the customer sent more files than File limit; only the first ones were kept. |
unsupported_media_type | (raw) | warning | Ask File: the customer sent a video or a voice note; the node only accepts images and documents, so it sent its invalid-file message and asked again. |
attachments_dropped | (raw) | warning | Ask File: several files arrived and the variable is typed attachment, so only the first was kept. Declare the variable as array to keep all of them. |
destination_cannot_hold_files | (raw) | warning | Ask File files the answer on a borrower field, and borrower fields hold a value, not attachments. Save it to a document, an identity or a variable instead. |
document_processing_not_enabled | Document not validated: its type has no processing enabled | info | A node that stores the file in a document was set to validate it (Validate the document when saved on Ask File, OCR Verification or Customer Update, or Validate the document on Ask for Document), but the document type has no processing enabled, so the file was stored without validation. Enable it in the data model's Validation tab, or turn validation off on the node. |
document_processing_not_queued | Document validation could not be queued | warning | Same nodes: the file is stored in the document, but the background validation could not be queued. Validate it by hand from the customer's documents, on the file's row. When Ask for Document waits for the result, it also leaves document_validation_unavailable and leaves through Could not be validated. |
document_processing_unsupported | Document not validated: the file is not a PDF or an image | warning | Only Ask for Document with Continue without waiting: the file is stored in the document, but only PDFs and images (JPG, PNG, WEBP, HEIC) are validated. Ask for the file in one of those formats, or review it by hand. While waiting for the result, such a file is refused instead (document_validation_file_refused). |
document_validation_pending | Waiting for the document validation | info | Ask for Document with Wait for the result: the files were stored and the conversation started waiting for the verdict, up to 6 minutes. The reason says the attempt and the number of files; Details carries the deadline. Nothing to fix; it marks the start of the wait. |
document_validation_timed_out | The document validation did not answer within 6 minutes | warning | Ask for Document: no result arrived within 6 minutes, so the node left through Could not be validated. If the result arrives later, it stays on the document. Check it in the customer's documents; files with many pages take longer to read. |
document_validation_unavailable | The document could not be validated | warning | Ask for Document: there is no verdict and the node left through Could not be validated. The reason says why: the document type's processing is off or the validation could not be queued, the reading of a file failed, the conversation has no identified customer, the channel cannot wait (email), the wait could not be kept or finished, or the verdict was Not valid or Needs review and that output is not connected. Fix the cause the reason names. |
document_validation_retry | Document not valid: asked for it again | info | Ask for Document: the files of this attempt were not valid and the customer had attempts left, so the node sent the Message to ask for it again. The reason says which attempt failed; Details carries the reasons. Nothing to fix; if it repeats, check that the message says what is wrong. |
document_validation_not_routed | Validation result not applied: the conversation went to an agent | info | Ask for Document: an agent took the conversation while its document was being validated, so the result was not applied and the flow did not move. The result stays on the document. Nothing to fix; the agent continues the conversation. |
document_validation_file_refused | File not stored: not a PDF or an image | warning | Ask for Document with Wait for the result: only PDFs and images (JPG, PNG, WEBP, HEIC) are validated, so a file of another type was not stored in the document. If it was the only file, the customer got the Invalid Message and was asked again without spending an attempt; if it came with other files, only those are validated. Say in the Upload Message that you expect a PDF or a photo. |
delivery_failed | Delivery failed | warning for rejections about the recipient or the flow; error for account, token or Meta-side failures | WhatsApp did not deliver a message. The message is Meta's rejection explained in Spanish, the reason carries the explanation, the action, Meta's code in brackets and the recipient; Details carries Meta's code. See the list below. |
variable_type_mismatch | (raw) | warning | A node saved a value that does not fit the type the flow declares for the variable. The value was saved and the declared type kept. Review the declaration or the node that writes it. See Variables. |
journey_not_served | (raw) | warning | An enabled journey cannot be shown in the web channel: a rule fails, it was never checked against the flows, or another journey has the same entry flow. Message: El recorrido configurado no se puede mostrar; the reason sums up the failing rules and Details carries the journey id and each rule with its flows. Written once each time the customer opens the flow, and only if their browser already had a conversation. See Rules and Status. |
The most common notices
The texts quoted here are what the engine writes, in the language it writes them (Spanish or English); they are not translated so you can recognize them in the panel.
1. WhatsApp rejected the message (delivery_failed)
Each Meta code has its own explanation and action. The most frequent:
| Meta code | Message | Action |
|---|---|---|
| 131047 / 470 | WhatsApp no entregó el mensaje: la ventana de 24 horas está cerrada | Para escribirle primero hay que usar una plantilla aprobada (nodo o campaña de template); los mensajes libres solo llegan dentro de las 24 h posteriores al último mensaje del cliente. |
| 131049 | Meta limita la frecuencia de marketing a este usuario | No reintentes: no llegará hasta que Meta libere el cupo. Usa una plantilla de utilidad si el mensaje es transaccional, o espera al siguiente periodo. |
| 131050 | El cliente bloqueó los mensajes de marketing | Márcalo como no contactable por marketing en la base; solo puedes enviarle plantillas de utilidad o autenticación. |
| 131056 | Demasiados mensajes al mismo número en poco tiempo | Reduce la cantidad de nodos de mensaje seguidos (agrúpalos en uno) y no reintentes: cada reintento empeora el límite. |
| 132015 | Meta la pausó por baja calidad (template) | Espera a que Meta la reactive o crea una versión nueva con otro texto. Pausa las campañas que la usen. |
| 132016 | Meta la deshabilitó de forma permanente (template) | Crea y aprueba una plantilla nueva y actualiza los nodos y campañas que usaban esta. |
| 131026 | El número no puede recibir mensajes | Verifica el número con el cliente (país y formato) o usa otro canal de contacto. |
| unknown | Meta rechazó el envío (code) | Busca el código en la documentación de códigos de error de la Cloud API de Meta; si se repite, comparte el id de la conversación con soporte de AltScore. |
Rejections about the recipient (window, frequency, opt-out, number) or about the flow (templates, parameters) are warnings. Account, token and Meta-side failures are errors. Related pages: Message, Campaigns, Channel connectors.
2. A message uses a variable nobody wrote (node_warning)
The customer receives the literal {{nombre}}; the engine never invents a value. Reason: El mensaje del nodo message usa {{nombre}} y ningún nodo la escribió antes; revisar el flujo. One notice per node, naming every unresolved variable in it. Check that the node that writes the variable runs before this one and uses the same name. See Message and Variables.
3. A variable received a value of another type (variable_type_mismatch)
Message: La variable 'monto' recibió un valor que no es number. Reason: La variable 'monto' está declarada como number en el flujo y el nodo guardó un valor string; se guardó el valor y se conservó el tipo declarado. Revisar la declaración de la variable o el nodo que la escribe. The declared type always wins; a condition downstream compares with the declared type. See Variables.
4. A node failed and had no Error handle (node_failed_no_error_handle)
Reason: El nodo http-request (Consultar saldo) falló: cause. Como no tiene handle de Error conectado, el cliente fue enviado al bot por defecto flow-id. How the reason ends depends on the channel. On WhatsApp: la conversación se terminó y se intentó transferir a un agente; the customer receives the handoff-to-agent message or, when no agent is available, the one saying there was a problem. On web and email: el cliente fue enviado al bot por defecto flow-id or, without a default bot, el conector no tiene bot por defecto y la conversación quedó sin flujo activo. Connect the Error handle so the flow decides what the customer sees. The publish gate warns about this before publishing.
A related warning without code: El nodo type (description) no pudo enviar su pregunta y la conversación quedó esperando en él — the node failed without explaining why; check the channel connector and the node configuration, resend the question or move the conversation to another node.
5. The conversation has no active flow
The customer wrote and the conversation's flow was gone. Three outcomes, three levels:
- Info — La conversación no tenía flujo activo (terminó por: end_node_reached); se reinició en el bot por defecto flow-id.
- Warning — El flujo flow-id ya no existe o está inactivo; la conversación se redirigió al bot por defecto flow-id. The flow was deleted or unpublished while conversations were still on it.
- Error — El cliente escribió pero la conversación no tiene flujo activo y el connector no tiene bot por defecto: el mensaje se ignoró. Configurar un bot por defecto o reasignar la conversación. Somebody is writing and nobody answers.
Set a default bot on the channel connector so this never reaches error.
6. The conversation expired for inactivity
Conversación expirada por inactividad tras 30 min en el nodo ask-question: se envió 'timeout message' y se redirigió a flow-id (info). Without a default bot: ... y no hay bot por defecto: la conversación quedó sin flujo (warning). The timeout and its message are set on the channel connector.
7. Ask File could not store the answer
All from Ask File, all warnings except the last case:
answer_without_destination— Files received and stored nowhere: configure Save to Variable or Save to Entity.entity_without_customer— The file was saved to the variable but not to the customer's record or The file was not stored: the conversation has no customer yet: identify the customer before the node.attachments_dropped— Several files arrived and the variable holds one: declare the variable asarray.files_over_limit— More files than the node accepts: only the first File limit were kept.unsupported_media_type— The customer sent a video; the node only accepts images and documents.destination_cannot_hold_files— The file was not stored: a borrower field cannot hold files.answer_unresolved— The customer's file could not be stored: the file could not be read from the channel or written to storage; the customer was asked again. This case is an error with a traceback; the other variants of the same code (no URL resolved, email reply without attachment) are warnings.
8. OTP failed (no code)
Message: OTP verification failed (warning). Reasons:
- Código expirado: se envió hace 240s y la ventana configurada (expirationTimeoutSeconds) es de 180s. Ampliar la ventana o revisar la demora de entrega del canal.
- Código rechazado: se agotaron los 3 intentos configurados (maxAttempts).
- El OTP verificado no corresponde al punto de contacto: el contacto cambió entre el envío y la verificación.
A different warning: OTP answer received but there is no authorization to verify against — the OTP node ran before any node created the authorization; add an Opt In or Read Authorization node earlier that writes that variable. See OTP Verification and POC Verification.
9. Login answer without a prompt (no code)
Login answer received but the login prompt was never sent (warning). The usual cause is a Login node without an identity selected, which already left its own notice. The flow takes its failure path.
10. The ai-router could not route (no code)
Message: El nodo ai-router no pudo enrutar la respuesta del cliente. Reasons, all warnings unless noted:
- El nodo ai-router no tiene rutas configuradas, así que no hay a dónde mandar la respuesta del cliente; agregar al menos una ruta al nodo. La conversación sigue esperando en el nodo.
- El cliente envió un mensaje sin texto (adjunto, sticker o vacío) y el nodo ai-router solo clasifica texto; la conversación sigue esperando un mensaje de texto.
- La clasificación por IA no devolvió ninguna ruta para la respuesta del cliente; se toma la última ruta del nodo como fallback. Revisar las descripciones de las rutas si se repite.
- La ruta 'X' que eligió la IA no tiene ningún nodo conectado; conectar esa salida en el editor. La conversación sigue esperando en el nodo.
- La clasificación por IA falló con ...; revisar el proveedor de IA y las rutas del nodo (
error).
See AI Router.
11. The flow loops (flow_cycle)
The flow loops: too many nodes traversed for a single message. One connection on the path, an Error handle included, leads back to a node already visited. See Connections.
12. Jump without destination (jump_to_without_destination)
The jump-to node has no destination, the flow stops here (error). Set the target flow on the Jump To node, or connect the branch that reaches it to another node.
13. Interrupted by a deploy (interrupted_by_shutdown)
Processing interrupted by instance shutdown (warning). The node re-runs on the next inbound message or on the recovery sweep. Nothing to fix.
14. A file consumer found no file (node_warning / node_failed)
Nodes that read a file — Extract Information, Document Verifications, OCR Verification and the others — report what they found in the variable:
- The variable 'archivo' has no file, so node 'extract-information' has no file to read. Check that the ask-file node that captures it runs earlier in the flow and writes that same variable name.
- The variable 'archivo' holds 3 files; node 'extract-information' only uses the first one. Turn off multipleFiles in the ask-file that writes it, or read the files with a node that accepts several.
- The file URL expired and could not be renewed. Ask the customer for the file again, or run the node closer to the ask-file that captures it. — the engine renews expired links to its own storage on its own; this appears only when it could not.
15. WhatsApp could not download the customer's file (no code)
WhatsApp no pudo descargar la media enviada por el usuario (error). Reason: [131052] Meta's message. The customer is told No pudimos recibir tu archivo. WhatsApp reportó: "..." Por favor, vuelve a enviarlo. Ask for the file again, smaller or in another format. See Ask File.