7 min read

Hechicería Cotlang: El Grimorio Perdido de $CODE

Ilustración de un sabio archimago encontrando piedras místicas con diversos hechizos, representando los métodos $CODE perdidos

Hace eones, las antiguas escrituras cotalkertianas estaban talladas en piedras sagradas, expuestas en la plaza pública de la documentación oficial. Cualquier implementador, partner o aprendiz de magia podía acercarse, leerlas y enriquecer su conocimiento sobre el místico lenguaje de Cotlang.

Pero tras innumerables batallas, múltiples versiones y varios sobrevivientes del consulting, una de esas piedras se perdió, desapareció en una nube de polvo digital. Nadie la mencionó. Nadie la buscó. Y con el tiempo, todos olvidaron que alguna vez existió. Todos... menos yo.

En mi búsqueda por la preservación del conocimiento Cotlang, encontré una muestra. Una pequeña pieza de aquella roca tallada con las inscripciones de un hechizo capaz de ahorrar múltiples llamadas de red y de hacer la lectura de cualquier rutina infinitamente más legible. Hablo del tomo perdido de Cotlang: el uso del $CODE.

Para los incrédulos que piensen que esa piedra sigue en pie, los invito a buscar en toda la documentación oficial de Cotalker. Se darán cuenta de que ya no existe. Como si alguien hubiera lanzado un Obliviate sobre el grimorio entero. Pero aquí estamos, con el fragmento rescatado y la varita cargada: es hora de enseñarte el conjuro perdido de $CODE.

⚠️
Advertencia de magos supremos: Este grimorio pertenece al nivel de Archimago. Antes de abrirlo, asegúrate de haber dominado los hechizos de las partes 1, 2, 3 y 4 de la saga Hechicería Cotlang.
Hechicería Cotlang - Guía completa del lenguaje de Cotalker
Aprende Cotlang desde cero: $VALUE, $OUTPUT, filtros, funciones y hechizos avanzados. Cuatro partes con ejemplos prácticos y comparativas con JavaScript

Capítulo 1: ¿Qué es $CODE y por qué merece su propio grimorio?

En la parte 4 de Hechicería Cotlang te presenté $CODE como un atajo. En lugar de crear una etapa extra de Solicitud de Red (Network Request) con un GET, $CODE te permite consultar directamente una entidad de Cotalker desde cualquier etapa de tu rutina. Sin URLs, sin headers, sin autenticación manual. Solo un hechizo limpio y directo.

Pero lo que no te conté es que $CODE no es un solo hechizo. Es un grimorio con múltiples variantes, cada una especializada en invocar un tipo distinto de entidad.

La estructura general del hechizo es:

$CODE#modelo#variante#(<argumento_1>)#(<argumento_2>)

Donde:

  • modelo: Es la entidad de Cotalker que quieres invocar (user, property, channel, group, etc.).
  • variante: Es el método de búsqueda (id, code, email, name, etc.).
  • argumento_1: El valor con el que buscarás (un ObjectId, un code, un email...).
  • argumento_2 (opcional): Algunos hechizos requieren un segundo argumento para refinar la búsqueda.

$CODE realiza internamente una solicitud GET automática a la API de Cotalker. Esto significa que no necesitas preocuparte por la URL base ($ENV#BASEURL), ni por los headers de autenticación, ni por crear etapas extra de tipo Network Request. Todo ocurre en una sola línea de Cotlang.

Y lo mejor de todo: una vez que $CODE te devuelve el objeto, puedes encadenar extractores (|campo|subcampo) como si fuera un $VALUE cualquiera.

Capítulo 2: El Índice del Grimorio, todas las variantes de $CODE

Antes de lanzar los hechizos, todo buen Archimago debe estudiar el índice de su grimorio. Aquí tienes las variantes de $CODE, organizadas por modelo:

💡
El fragmento que rescaté solo contenía algunas variantes legibles. Las que verás aquí son las que pude descifrar y probar con éxito. Si logro desenterrar más piezas de la piedra, actualizaré este grimorio.

2.1 Usuarios (Users)

Variante Formato Descripción
Por ID $CODE#user#id#<userId> Obtiene un usuario usando su ObjectId
Por Email $CODE#user#email#<email> Obtiene un usuario usando su correo electrónico

2.2 Propiedades (properties)

Variante Formato Descripción
Por Code $CODE#property#code#<code> Obtiene un elemento usando su code
Por ID $CODE#property#id#<propertyId> Obtiene un elemento usando su ObjectId

Capítulo 3: Los Hechizos en Acción

Ahora sí, varita en mano. Vamos a ver cómo se usa cada variante con ejemplos reales. Aquí veremos la forma de ejecutar una acción usando dos etapas (Network Request + Acción necesarias) a utilizar solo una con la magia de $CODE

3.1 Invocando un usuario por su ID

Necesitas obtener el nombre completo del usuario que envió el formulario para mostrarlo en un mensaje automático.

  • Cómo se haría sin $CODE:

Primero crearías una etapa de Solicitud de Red:

Code: get_user
URL: $JOIN#/#($ENV#BASEURL)#(api)#(v2)#(users)#($VALUE#answer|user)
Method: GET
Headers: {"admin": true}
Auth: true

Después crearías otra etapa de tipo mensaje donde harías esto para acceder al resultado:

$OUTPUT#get_user#data|name|displayName
  • Cómo se haría con $CODE:

Tan solo escribes esta línea de código en la etapa donde requieras el nombre del usuario:

($CODE#user#id#($VALUE#answer|user))|name|displayName

Explicación:

  • $CODE#user#id#: "Cotlang, invoca un usuario buscándolo por su ID".
  • ($VALUE#answer|user): "El ID que necesitas está en el contexto del formulario, en answer.user".
  • |name|displayName: "Del objeto que me devolviste, dame el displayName dentro de name".

¿Ves la diferencia? Con $CODE, lo que antes requería una etapa completa de Network Request ahora se resuelve en una sola línea. Sin URLs, sin headers, sin etapas extra. Magia pura.

3.2 Invocando una propiedad por su ID

Este es un caso típico, imagina que en el asset de un task tienes guardado un elemento de tipo colección (por ejemplo, un producto del inventario). Esa propiedad también tiene su propio asset con campos como stock, precio, proveedor, entre otros. Necesitas evaluar si el stock de ese producto es menor a 5 unidades para enviar un correo de alerta al administrador.

  • Cómo se haría sin $CODE:

Primero la etapa de Network Request para obtener la propiedad referenciada en el asset de la tarea.

Code: get_producto
URL: $JOIN#/#($ENV#BASEURL)#(api)#(v2)#(properties)#($VALUE#extensions|asset_workflow|producto)
Method: GET
Headers: {"admin": true}
Auth: true

Finalmente una etapa condicional que lea el resultado de la etapa anterior.

Code: has_sufficient_stock
lhs: $OUTPUT#get_producto#data|schemaInstance|stock
rhs: 5
op: lt

Dos etapas. Una rutina más larga. Más puntos de fallo. Más mantenimiento.

  • Cómo se haría con $CODE:

Todo se resuelve directamente en el condicional.

Code: has_sufficient_stock
lhs: ($CODE#property#id#($VALUE#extensions|asset_workflow|producto))|schemaInstance|stock
rhs: 5
op: lt

Y listo. Una sola etapa. Sin Network Request previo, sin $OUTPUT intermedio. El condicional invoca la propiedad, accede a su asset y evalúa el stock, todo en la misma línea.

Explicación:

  • $CODE#property#id#: "Cotlang, invoca un elemento de la base de datos buscándolo por su ID".
  • ($VALUE#task|extensions|asset_workflow|producto): "El ID de esa propiedad está dentro del asset de la tarea actual".
  • |schemaInstance|stock: "Del elemento que me devolviste, accede a su asset y dame el valor de stock".
ℹ️
Hay un caso de uso de $CODE bastante útil para hacer llamadas de red a endpoint externos. Si te interesa leerlo y ver cómo se podría utilizar en productivo, te dejo un link al artículo.
Variables de entorno en Cotalker. Evitar URLs hardcodeadas
Técnica para simular variables de entorno en Cotalker usando colecciones. Evita que tus integraciones fallen al migrar entre ambientes.

Capítulo 4: $CODE vs Network Request

Ahora que dominas el grimorio, surge la pregunta: ¿Debo usar $CODE siempre y olvidarme de las etapas de Network Request? La respuesta corta: no siempre.

Aquí va una guía para que un Archimago sepa elegir:

Usa $CODE cuando:

  • Necesitas obtener información de una sola entidad (un usuario, una propiedad, un canal).
  • Ya conoces el ID, code o email de la entidad.
  • Quieres simplificar tu rutina y reducir la cantidad de etapas.
  • Estás dentro de una etapa CCJS o cualquier otra donde puedas escribir Cotlang inline.

Usa Network Request cuando:

  • Necesitas hacer consultas complejas con query params (filtros, paginación, ordenamiento).
  • Necesitas hacer POST, PATCH o DELETE (recuerda: $CODE solo hace GET).
  • Necesitas controlar headers personalizados o manejar errores específicos.
  • Necesitas utilizar la misma respuesta que te dio la solicitud de red en distintas etapas (así solo haces una llamada de red en vez de múltiples)
💡
Piensa en $CODE como un atajo mágico para lecturas simples, y en Network Request como tu laboratorio de pociones completo para operaciones más complejas. Ambos son poderosos, pero cada uno tiene su momento.

Capítulo 5: El Archimago y el Grimorio Perdido

Así concluye el grimorio que se creía perdido. Ese tomo antiguo que los magos de la Academia Cotalker susurraban en los pasillos pero que nadie se atrevía a documentar completo. Ahora está en tus manos, y con él, el poder de invocar cualquier entidad de Cotalker con una sola línea de Cotlang.

Desde hoy, cuando alguien de tu equipo cree una etapa de Network Request solo para obtener el nombre de un usuario, podrás acercarte con calma, apoyar tu mano en su hombro y susurrar: "$CODE#user#id#, joven muggle. $CODE".

Ahora lo único que falta eres tú, lanzando $CODE con la confianza de un verdadero Archimago. Que la varita nunca te falle, que el cotlang error siempre te respete, y que tus rutinas jamás necesiten más de una etapa cuando $CODE puede resolverlo todo.


Referencias:

COTLang Guide | Cotalker Technical Documentation
Cotalker Scripting Language
Micro-Tutorial | Cotalker Technical Documentation
COTLang Guide

Sigue leyendo "Hechicería Cotlang"