Saltar al contenido principal
Actualizado el Sep 7, 2026

Leer Archivo como Texto

Usa esta acción cuando un workflow o un agente necesita el texto que hay dentro de un archivo almacenado — un contrato que un contacto envió por correo, una hoja de cálculo que alguien subió, un registro que un paso anterior descargó — para que un paso posterior pueda resumirlo, buscarlo o decidir qué hacer según lo que dice.

Ideal para

  • Responder a las preguntas de un contacto sobre el PDF o el documento de Word que acaba de adjuntar
  • Extraer el texto de un archivo para que un paso de LLM pueda resumirlo, clasificarlo o sacar datos de él
  • Leer un archivo de texto plano — un .txt, un CSV — que un paso anterior descargó al storage. Una exportación en JSON o un registro solo se leen si fueron almacenados como texto: mira El tipo viene del content type almacenado
  • Averiguar qué es realmente un adjunto antes de gastar nada en él: el tipo de medio vuelve incluso cuando el archivo no se puede leer como texto

Por qué importa

Ninguna otra acción entrega el contenido de un archivo. Inspeccionar Medio dice que un archivo pesa 4 MB y dura dos minutos; Crear URL Firmada de Almacenamiento da un enlace a él. Ninguna de las dos permite que un paso actúe sobre lo que el archivo dice.

Esta acción es la única que devuelve texto que un paso posterior puede leer, y lo devuelve en la misma ejecución — a diferencia de Transcribir Audio, que inicia un trabajo en segundo plano, aquí el texto está en el resultado de este paso y el paso inmediatamente siguiente ya puede usarlo.

Campos principales

CampoQué hace
ArchivoEl archivo a leer, como una expresión que resuelve a una referencia de archivo. En una ejecución de agente, el adjunto entrante es contactMessage.body.file; después de un paso de subida o descarga, es step(0).file. Una ruta en texto plano también funciona
Bucket y Ruta completaUna alternativa al campo Archivo, cuando quieres apuntar directamente al archivo. El Bucket toma por defecto el storage de tu empresa, así que normalmente basta con la Ruta completa
Máximo de caracteresLímite opcional de cuánto texto vuelve. En cualquier caso el tope es 2.000.000. Déjalo vacío para el máximo
PropósitoEtiqueta opcional que describe el paso en los registros. No cambia qué archivo se lee

Dejar que el agente elija el archivo

Un parámetro de herramienta de agente es un valor de nivel superior en las expresiones: un parámetro llamado caminho se escribe caminho, y no parameters.caminho — que no resuelve a nada y lee en silencio lo que no era. Así, el campo Archivo puede ser {"fullPath": caminho} y el modelo elige qué archivo leer.

Esto importa cuando un mismo mensaje entrante traía varios adjuntos. contactMessage.body.file nombra como mucho uno de ellos, mientras que las líneas [attachment] … · ref: <ruta> que el agente ve los listan todos — el modelo devuelve la ruta ref: del que quiere.

El archivo tiene que seguir perteneciendo a tu empresa. Una ruta fuera de ella falla exactamente igual que un archivo que no existe — deliberadamente el mismo error, para que este paso no pueda usarse para averiguar si existe el archivo de otra empresa.

Qué pueden usar los pasos siguientes

Estos valores están en la raíz del paso, así que léelos como step(N).text, no step(N).data.text. Mira Acciones que publican en la raíz del paso.

ValorQué es
step(N).textEl texto extraído. Vacío cuando supported es falso
step(N).supportedSi el archivo se pudo leer como texto — mira más abajo
step(N).truncatedtrue cuando el texto se cortó en un tope. No lo trates como el documento entero
step(N).reasonPor qué no se pudo leer el archivo, y qué acción se ocupa de ese caso. Vacío cuando supported es verdadero
step(N).mediaKindtext, document, pdf, image, audio o video
step(N).mimeTypeEl tipo de contenido almacenado
step(N).fileNameEl nombre original del archivo que usó quien lo envió, no la ruta en el storage
step(N).sizeTamaño en bytes

Qué archivos se leen como texto

TipoArchivosQué obtienes
textCualquier cosa cuyo content type almacenado empiece por text/text/plain, text/csv, text/markdownSe devuelve directamente
documentWord, Excel, PowerPoint y sus equivalentes OpenDocument — .doc, .docx, .odt, .rtf, .xls, .xlsx, .ods, .ppt, .pptx, .odpSe convierte a texto en el servidor
pdf.pdfSe convierte a texto en el servidor. Un PDF escaneado sin capa de texto vuelve como soportado y con texto vacío — no hay OCR
imageFotos e imágenesNo se lee. Los modelos con visión reciben las imágenes directamente; usa Inspeccionar Medio para las dimensiones
audioGrabaciones y notas de vozNo se lee. Usa Transcribir Audio para obtener una transcripción
videoClips y grabaciones de pantallaNo se lee. Usa Inspeccionar Medio para los datos del contenedor, o Transformar Medios para extraer el audio y luego Transcribir Audio

Cualquier cosa que el conversor no pueda abrir — un .zip, un .bin, un documento corrupto — también vuelve sin leerse, con "This file type cannot be converted to text."

El tipo viene del content type almacenado, no del nombre del archivo

El tipo de arriba lo decide únicamente el content type almacenado del objeto. text/… es text, application/pdf es pdf, image/…, audio/… y video/… son lo que dicen, y todo lo demás es document — que solo se lee si es uno de los tipos Office o PDF de la tabla.

El nombre del archivo tiene exactamente una segunda oportunidad, y solo dentro del carril document: una extensión Office o PDF rescata un documento almacenado como application/octet-stream. .json, .log, .md y .yaml no están en ninguna de las dos listas, así que para ellos el content type almacenado es toda la historia:

Almacenado comoQué obtienes
text/plain, text/csv, text/markdownSe devuelve directamente
application/json — lo que recibe un .json del propio header Content-Type de una API, y de la detección automática de Descargar al Almacenamiento y Subir a Storagedocument, y no uno extraíble: supported es false con "This file type cannot be converted to text."
application/octet-stream — donde acaban un .log, un .md o un .yaml cuando nada define un tipoLo mismo

Renombrar el archivo no cambia nada de esto. Define el tipo al almacenarlo: tanto Descargar al Almacenamiento como Subir a Storage aceptan un Tipo de contenido opcional, y text/plain ahí es lo que hace que el archivo se pueda leer después.

Un archivo que no se puede leer no es un paso fallido

Cuando el archivo es real pero no es texto — una imagen, una grabación, un vídeo — el paso tiene éxito. step(N).supported es false, step(N).reason explica qué usar en su lugar, y step_ok(N) sigue siendo true, así que el resto del workflow continúa. Ramifica según la respuesta, en vez de confiar en un error:

step(0).supported                    // ¿realmente vino texto?
step(0).mediaKind == "audio" // mándalo a Transcribir Audio
step(0).truncated // solo volvió parte del documento

Los fallos de verdad sí detienen el paso: ningún archivo en esa ruta, un archivo de otra empresa, un documento por encima del límite de tamaño, o una conversión que el servicio aceptó y no pudo terminar.

Un caso parece un fallo y no lo es. Donde el conversor de documentos no está configurado — una instalación self-hosted o local que corre sin el servicio de transcodificación — todo documento de Office y todo PDF vuelve exactamente como un .zip: supported false, el mismo motivo "This file type cannot be converted to text." y step_ok(N) todavía true. Si un .docx normal se lee en un entorno y vuelve como tipo no soportado en otro, sospecha del conversor antes que del archivo.

Límites

  • Los documentos de Office y los PDF de más de 20 MiB se rechazan. Eso es un fallo real del paso, no un archivo sin leer.
  • Los archivos de texto se leen hasta 2 MiB y luego se cortan, con truncated marcado. Nunca se rechazan por su tamaño.
  • El texto vuelve limitado a 2.000.000 de caracteres, o al Máximo de caracteres cuando defines algo menor. Comprueba step(N).truncated antes de tratar el texto como el documento completo.

Cuánto cuesta

Leer un archivo de texto plano solo lo lee, y no cuesta nada más allá de la propia ejecución.

Los archivos de Word, Excel, PowerPoint y PDF los convierte el mismo servicio que hace la conversión de medios, así que esas lecturas se cobran de tu cuota de transcodificación por el tiempo que tarde la conversión. Aquí no hay caché, a diferencia de Inspeccionar Medio — leer el mismo documento en dos pasos lo convierte dos veces. Léelo una vez y guarda el texto en el estado de la sesión si más de un paso posterior lo necesita.

Seguridad

El texto que devuelve este paso es contenido no confiable, escrito por quien hizo el archivo. Las celdas ocultas de una hoja de cálculo, los párrafos en blanco sobre blanco y las notas del presentador sobreviven a la extracción, y nada de eso era visible para quien reenvió el documento.

Trátalo como material para resumir o citar, nunca como instrucciones a seguir. Cuando alimente un paso de LLM, mantenlo en el mensaje que envías al modelo, no en el mensaje de sistema del agente.

Consejos

  • Encadénala directamente: el adjunto entrante en un paso, esta acción en el siguiente, y el paso de LLM que usa el texto en el de después.
  • Comprueba step(N).supported antes de entregar step(N).text a un modelo. En un archivo sin leer el texto está vacío, y un documento vacío es justo el tipo de cosa sobre la que un modelo se inventa una respuesta encantado.
  • Define Máximo de caracteres cuando solo necesites el principio — la primera página de un contrato, el comienzo de un registro — en vez de pagar por meter un documento entero en el contexto de un modelo.
  • Usa step(N).fileName al responder al contacto. La ruta en el storage es un identificador opaco y no significa nada para él.