Ir al contenido

Manejo de Markdown en OpenClaw: Consistencia entre Canales

Seguro te ha pasado: envías un mensaje largo con formato a través de una API y, al llegar al chat, las negritas se rompen porque el sistema cortó el texto justo a la mitad de una etiqueta. O peor, tienes que escribir tres lógicas distintas para que el mismo Markdown se vea bien en Slack, Telegram y Signal, lidiando con sus diferencias particulares de renderizado.

OpenClaw soluciona esto convirtiendo el Markdown a una representación intermedia (IR). Esto permite que el texto original se mantenga intacto mientras las instrucciones de estilo viajan por separado, garantizando que el chunking sea seguro y el formato sea consistente en cada plataforma.

Para trabajar con el sistema de formato de OpenClaw, necesitas:

  • Acceso a los adapters de salida de Slack, Telegram o Signal.
  • El helper markdownToIR(...) para el procesamiento inicial.
  • Configuración de markdown.tables si planeas enviar tablas.

La mejor forma de entender cómo funciona es ver la representación intermedia (IR). OpenClaw no renderiza directamente; primero genera un objeto que mapea los estilos.

Si tienes este Markdown de entrada:

Hello **world** — see [docs](https://docs.openclaw.ai).

OpenClaw genera este esquema IR:

{
"text": "Hello world — see docs.",
"styles": [{ "start": 6, "end": 11, "style": "bold" }],
"links": [{ "start": 19, "end": 23, "href": "https://docs.openclaw.ai" }]
}

Como las tablas de Markdown no funcionan igual en todos los clientes, debes configurar cómo quieres que se transformen por canal o cuenta:

channels:
discord:
markdown:
tables: code
accounts:
work:
markdown:
tables: off

Opciones disponibles:

  • code: Renderiza tablas como bloques de código (default en la mayoría).
  • bullets: Convierte cada fila en puntos de lista (default en Signal y WhatsApp).
  • off: Pasa el texto de la tabla en bruto sin procesar.

Si necesitas actualizar o añadir un formateador, sigue este flujo:

  1. Parse once: Usa markdownToIR(...) con las opciones del canal.
  2. Chunk: Llama a chunkMarkdownIR(...) antes de renderizar.
  3. Render: Implementa el renderizado con renderMarkdownWithMarkers(...).
  4. Wire adapter: Actualiza el adapter de salida para usar el nuevo chunker.

Si encuentras problemas con el formato, revisa estos puntos basados en el comportamiento de los adapters:

  • Tokens de Slack: Los tokens con corchetes angulares como <@U123> o <#C123> deben preservarse; asegúrate de escapar el HTML crudo de forma segura.
  • Offsets en Signal: Signal usa offsets de UTF-16. No utilices offsets de code points o el formato se desplazará.
  • Telegram HTML: Telegram requiere escapar el texto que esté fuera de las etiquetas para evitar que el markup se rompa.
  • Bloques de código: Mantén los saltos de línea finales en los bloques de código (fenced code blocks) para que los marcadores de cierre aparezcan en su propia línea.

Para resolver dudas específicas sobre tu implementación, consulta al AI Setup Assistant.

OpenClaw

OpenClaw Expert

Sigues atascado?

Si esta pagina no resolvio tu caso, pregunta a OpenClaw Expert para pasos concretos.