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.
Requisitos previos
Sección titulada «Requisitos previos»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.tablessi planeas enviar tablas.
Inicio rápido
Sección titulada «Inicio rápido»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.
1. Ejemplo de IR
Sección titulada «1. Ejemplo de IR»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" }]}2. Configuración de tablas
Sección titulada «2. Configuración de tablas»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: offOpciones 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.
3. Implementación de un nuevo canal
Sección titulada «3. Implementación de un nuevo canal»Si necesitas actualizar o añadir un formateador, sigue este flujo:
- Parse once: Usa
markdownToIR(...)con las opciones del canal. - Chunk: Llama a
chunkMarkdownIR(...)antes de renderizar. - Render: Implementa el renderizado con
renderMarkdownWithMarkers(...). - Wire adapter: Actualiza el adapter de salida para usar el nuevo chunker.
Solución de problemas
Sección titulada «Solución de problemas»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.
Próximos pasos
Sección titulada «Próximos pasos»OpenClaw Expert
Sigues atascado?
Si esta pagina no resolvio tu caso, pregunta a OpenClaw Expert para pasos concretos.