7 min read

Hechicería Cotlang: el conjuro inicial para dominar Cotalker (parte 1)

Hechicería Cotlang: el conjuro inicial para dominar Cotalker (parte 1)

Oh, el gran Cotlang... La palabra que resuena como un eco en las profundidades de Cotalker. Cada vez más fuerte. Cada vez más insistente. Cada vez más implacable... hasta que llega el momento de aceptar tu inevitable destino: Ya no hay escapatoria.

"¿Qué es Cotlang?" Son las palabras que producen el descenso a la locura de cada nuevo integrante al equipo, son las palabras que atormentan a cada cliente cuando necesitan editar sus propios flujos, y son las palabras que obsesionan a los partners cada vez que desean vender las licencias como si fueran pergaminos mágicos.

Y como buen hechizo, su poder depende del mago que la invoque:

  • Para nuestra área de Operaciones, es un "Javascript con modo rueditas".
  • Para el usuario no-TI, es simplemente un: "escribe $CAFE#sin_azucar|leche_deslactosada y tendrás tu energía líquida mañanera antes del colapso laboral".
  • Pero para mí... es el Wingardium Leviosa de la automatización. El conjuro épico que salva (y mantiene) mi trabajo cada día.

Pero cuidado, este hechizo es muy poderoso, y debes preocuparte de pronunciar las palabras de forma correcta, porque si gritas un $VALUE#a|b en vez de un $OUTPUT#a|b terminarás liberando al mismísimo cotlang error del caos y destrucción... Probablemente en este punto, tu única esperanza será arrastrarte hasta el correo de las Artes Oscuras ([email protected]) con un grito de auxilio desesperado.

Para tu suerte, mi entrenamiento en la Academia de Magia Cotalker está completo y he decidido compartir mis secretos contigo.

Inicié mi camino como un muggle ingenuo y temeroso, fiel creyente que los flujos rápidos y los proyectos de pocas hh existían. Es por esto que la congregación de los Archimagos del Consulting me tomaron bajo sus alas. Aquí aprendí que un verdadero hechicero debe documentar siempre sus hechizos y también debe entrenar bajo el ambiente de staging cueste lo que cueste.

Pese a esto, todo cambió cuando conocí al gran Brujo Calvo, cuya espalda exhibe el tatuaje sagrado "PRD". Sucumbí ante él cuando me reveló la verdad: "Staging es solo un espejismo, joven muggle. El verdadero poder está en... productivo". Me apadrinó como su joven discípulo y me enseñó las artes prohibidas: Debes entrenar en productivo y hacer los cambios directos en la base de datos de hechicerías.

Pero no todo es caos y oscuridad en el arte de Cotlang. Tras años de invocar hechizos, descubrí que este lenguaje tiene reglas claras, precisas y, sobre todo, predecibles... si las estudias con el respeto que merecen.

Capítulo 1: El Contexto - Tu Varita Mágica

Partamos con lo básico: Cotlang es simplemente el lenguaje de automatización nativo de Cotalker que nos permite convertir procesos empresariales complejos en instrucciones simples, de manera que no necesitas tener conocimientos del área de TI para poder utilizarlo.

Cada vez que un usuario responde tu formulario, Cotalker automáticamente crea un "contexto", el cuál no es nada más que un objeto JSON con una estructura similar a esto:

💡
JSON es un formato estándar para organizar y compartir información de manera estructurada, usando texto simple. Funciona con pares de clave-valor, y es compatible con casi cualquier sistema o lenguaje de programación.
{
 "answer": {
  "_id": "6803341c5c77b31459033e60",
  "data": [
   {
    "question": "6803341c5c77b31459033e61",
    "contentType": "application/vnd.cotalker.survey+text",
    "identifier": "title_create_task",
    "display": ["# Ingresa el nombre de la tarea."],
    "responses": [],
    "process": [],
   },
   {
    "question": "6803341c5c77b31459033e64",
    "contentType": "application/vnd.cotalker.survey+textinput",
    "identifier": "task_name",
    "display": [""],
    "responses": ["Tarea de Prueba"],
    "process": ["Tarea de Prueba"],
   },
   {
    "question": "68034f67aae81940f309c28f",
    "contentType": "application/vnd.cotalker.survey+text",
    "identifier": "title_select_user",
    "display": ["Seleccione el usuario que será asignado en esta tarea"],
    "responses": [],
    "process": []
   },
   {
    "question": "68034f6e927c6443f615cb8d",
    "contentType": "application/vnd.cotalker.survey+person",
    "identifier": "selected_user",
    "display": [],
    "responses": [
     "{\"_id\":\"68034f7327bcf865b733930c\",\"name\":{\"displayName\":\"Harry Potter\",\"names\":\"Harry\",\"lastName\":\"Potter\",\"secondLastName\":\"\"},\"role\":\"user\",\"email\":\"68034f8025a1971c3d19ecd7\",\"jobTitle\":\"mago\",\"job\":\"68034f87f14ee5fd100ee0bf\""
    ],
    "process": ["68034f7327bcf865b733930c"]
   }
  ],
  "uuid": "6803344e9d7024fc8624c8a6",
  "company": "6803345ef618ab89d55940c7",
  "user": "68033462f5af107b02ec0806",
  "createdAt": "2025-04-16T15:44:06.789Z",
  "startDate": "2025-04-16T15:44:06.789Z",
  "modifiedAt": "2025-04-16T15:44:06.826Z",
 },
 "meta": {
  "taskGroup": "6803346c5088d08806bd9afe"
 }
}

Si usáramos javascript, bastaría con almacenar este objeto en una variable (const value = {...}) y utilizar los métodos de arreglos; pero para leerlo con cotlang es mucho más fácil: El contexto ya está ahí esperándote, solo necesitas llamarlo con las palabras mágicas: $VALUE

Capítulo 2: Código Muggle vs Hechizos Cotlang

2.1 Simplicidad ante todo: Necesito saber quién es el usuario que envió el formulario porque me gustaría enviarle un correo confirmando que su respuesta fue registrada.

  • En Javascript: value.answer.user
  • En Cotlang: $VALUE#answer|user
  • Resultado: "68033462f5af107b02ec0806"

Explicación:

  • $VALUE : "Oye Cotlang, dame los datos del formulario".
  • #answer: "Quiero que me entregues los datos de la sección answer"
  • |user: "Dentro de answer, hay un valor user. Dámelo"

2.2 Acceso detallado: Ahora necesito saber cuál fue la respuesta del usuario, ya que con esta crearé una tarea que tenga como título lo que él ingresó (el input del usuario).

  • En Javascript: value.answer.data[1].responses[0]
  • En Cotlang: $VALUE#answer|data|1|responses|0
  • Resultado: "Tarea de Prueba"

Explicación:

  • |data: "Dentro de answer, ve a la lista de data".
  • |1: "Accede al segundo elemento (recuerden que en programación, por lo general se cuenta desde 0)".
  • |responses|0: "Dame la primera respuesta de ese elemento".

2.3 Búsqueda inteligente: El método 2.2 es frágil, si el formulario cambia, como por ejemplo si creamos más preguntas para que el usuario responda, data[1] podría ser una pregunta totalmente distinta. Es por esto que cotlang nos provee de funciones específicas para estos casos.

💡
[find=>] es una función de Cotlang que permite buscar información específica dentro de un conjunto de datos. Funciona como un asistente que localiza exactamente lo que necesitas, sin requerir que conozcas la posición exacta de los datos.
  • En Javascript: value.answer.data.find(question => question.identifier === "task_name").responses[0]
  • En Cotlang: $VALUE#answer|data|[find=>identifier=task_name]|responses|0
  • Resultado: "Tarea de Prueba"

Explicación:

  • [find=>identifier=task_name]: "Cotlang, en la lista data, busca el objeto donde identifier sea igual a task_name".
  • |responses|0 extrae la respuesta que obtuviste de la búsqueda.

2.4 Midiendo textos: Necesito saber la cantidad de caracteres que tiene la respuesta del usuario, ya que si es muy larga debo aplicar ciertas reglas de negocio.

💡
[size=>*] es una función de Cotlang que cuenta automáticamente elementos o caracteres en tus datos.
  • En Javascript: value.answer.data.find(question => question.identifier === "task_name").responses[0].length
  • En Cotlang: $VALUE#answer|data|[find=>identifier=task_name]|responses|0|[size=>*]
  • Resultado: 15

Explicación:

  1. [size=>*]: "Dime cuántos caracteres tiene este texto".

2.5 Transformando fechas: Ahora quiero almacenar la fecha en la que el usuario respondió el formulario. Pero solo necesito el formato DD-MM-YYYY.

💡
[date=>format=] es una función de Cotlang que transforma fechas automáticamente al formato que necesites. En lugar de ajustar manualmente día, mes y año, esta herramienta reorganiza la fecha por ti, asegurando consistencia y ahorrándote tiempo.
  • En Javascript:
const date = new Date(value.answer.createdAt);

const day = String(date.getDate()).padStart(2, '0');
const month = String(date.getMonth() + 1).padStart(2, '0');
const year = date.getFullYear();

const formatedDate = `${day}-${month}-${year}`;
  • En Cotlang: $VALUE#answer|startDate|[date=>format=DD-MM-YYYY]
  • Resultado: 16-04-2025

Explicación:

  • $VALUE#answer|startDate: "Oye Cotlang, dame el campo startDate del formulario".
  • [date=>format=DD-MM-YYYY]: "Ahora, conviérteme esa fecha en algo que mi abuela entienda: día-mes-año".

2.6 Uniendo textos: Si bien el usuario escribe el nombre que debe tener la tarea, quiero que se cree de forma automática con la fecha al inicio en formato DD-MM-YYYY.

💡
$JOIN## es una función de Cotlang que une textos automáticamente, usando un separador que tú defines.
  • En Javascript:
const date = new Date(value.answer.createdAt);

const day = String(date.getDate()).padStart(2, '0');
const month = String(date.getMonth() + 1).padStart(2, '0');
const year = date.getFullYear();

const formatedDate = `${day}-${month}-${year}`;

const userTaskName = value.answer.data.find(question => question.identifier === "task_name").responses[0]

const taskName = `${formatedDate} - ${userTaskName}`
  • En Cotlang: $JOIN# - #($VALUE#answer|startDate|[date=>format=DD-MM-YYYY])#($VALUE#answer|data|[find=>identifier=task_name]|responses|0)
  • Resultado: 16-04-2025 - Tarea de Prueba

Explicación:

  • $JOIN: "Cotlang, une estos textos".
  • # - #: "Usa ' - ' como separador".
  • ($VALUE#answer|startDate|[date=>format=DD-MM-YYYY]): "Primer texto: la fecha formateada".
  • ($VALUE#answer|data|[find=>identifier=task_name]|responses|0): "Segundo texto: el nombre de la tarea".

2.7 Accediendo a JSON anidados: Ahora necesito obtener el nombre del usuario que será asignado en esta tarea para poder enviarle un correo que tenga su nombre como asunto:

💡
[json=>parse] es una función de Cotlang que convierte texto en datos estructurados, permitiéndote acceder a información específica de manera organizada.
  • En Javascript: JSON.parse(value.answer.data.find(question => question.identifier === "selected_user").responses[0]).name.displayName
  • En Cotlang: $VALUE#answer|data|[find=>identifier=selected_user]|responses|0|[json=>parse]|name|displayName
  • Resultado: "Harry Potter"

Explicación:

  • [json=>parse]: "Convierte este string en un objeto JSON".
  • |name|displayName: "Ahora, dame el displayName dentro de name".

Capítulo 3: La Vida Después de Dominar Cotlang - De Hechicero a Mago de Negocios

3.1 El Poder Real: Más Allá del Código: Cotlang no es solo un lenguaje; es un puente entre TI y Negocios. Cuando lo dominas puedes automatizar procesos con un bajo conocimiento en programación lo cual te permite empoderar a equipos no técnicos: Les enseñas a hacer $CAFÉ#sin_azúcar sin que usen lenguajes de programación.

3.2 Los Riesgos del Poder (y Cómo Evitarlos): Cotlang es poderoso, pero conlleva responsabilidades: Siempre recuerda hacer las pruebas de staging, en especial si estás recién comenzado a utilizarlo.
Al inicio no sabrás bien los nombres de las funciones, por lo que te recomiendo tener un ayudamemoria cerca para consultar rápidamente

3.3 El Futuro... ¿Y ahora qué?: En esta pequeña guía solo repasé las funciones más utilizadas con cotlang, pero la lista es bastante amplia. En las referencias dejé la documentación completa, donde podrás aprende nuevos hechizos.

Cotlang es como el Sombrero Seleccionador: no importa si eres Gryffindor (TI) o Slytherin (Negocios), te ayudará a encontrar la magia que llevas dentro. Ahora, tu varita ($VALUE) está cargada... ¿qué hechizo crearás hoy?


Referencias:

Array - JavaScript | MDN
El objeto Array de JavaScript es un objeto global que es usado en la construcción de arrays, que son objetos tipo lista de alto nivel.
COTLang Guide | Cotalker Technical Documentation
Esta página aún no se encuentra traducida al español.
Harry Potter y la Piedra Filosofal (2001) ⭐ 7.7 | Aventura, Familia, Fantasía
2h 32m | A