Números comerciales y menús telefónicos para Estados Unidos y Canadá. ENFR(510) 288-6288[email protected]Iniciar sesión

Inicio › VoIP de código abierto › Kazoo (2600Hz)

VoIP de código abierto

2600Hz Kazoo a fondo: la plataforma, la API y una operadora automática construida sobre ella.

Kazoo es la plataforma de telefonía de código abierto más ambiciosa que existe: multiinquilino, construida en torno a una API y pensada para operadores y revendedores, no para una sola oficina. También es un proyecto cuyas versiones públicas, guías de instalación y documentación van años por detrás del código. Esta guía cubre ambas cosas, a partir de la documentación de 2600Hz y del propio código fuente.

Revisado el 26 de octubre de 2026 · 56 fuentes citadas · 22 min de lectura

A multi-tenant telephony platform

Qué es Kazoo

Kazoo es la plataforma de telefonía de 2600Hz. El repositorio la describe como “The core of an open-source, distributed, highly scalable platform designed to provide robust telecom services” (el núcleo de una plataforma distribuida, de código abierto y muy escalable para ofrecer servicios de telecomunicaciones robustos), y está en GitHub desde diciembre de 2011.1 El README expresa la intención con más claridad: Kazoo es “an API-based platform that lets you use your existing phones, programming languages and IT skills to build voice, video and SMS services” (una plataforma basada en API que le permite usar sus teléfonos, lenguajes de programación y conocimientos de TI actuales para crear servicios de voz, video y SMS), y su meta es que usted pueda “create your own phone service in the cloud” (crear su propio servicio telefónico en la nube).3

Tres propiedades la distinguen de una central telefónica (PBX) como Asterisk:

  • Es multiinquilino desde el modelo de datos. La documentación de cuentas dice “Accounts represent tenants or customers on the system. Each account represents an individual dataset or sandbox that only one tenant can access.” (las cuentas representan inquilinos o clientes del sistema; cada cuenta es un conjunto de datos aislado al que solo accede un inquilino).16 Las cuentas se anidan en un árbol, de modo que un operador puede alojar revendedores que a su vez alojan empresas.
  • Todo se configura mediante una API REST llamada Crossbar. Las interfaces web (Monster UI y ahora comm.land) son clientes de esa API, no una vía de control aparte.1346
  • La lógica de las llamadas son datos, no código. Un “callflow” es un árbol JSON de acciones como menú, grupo de timbrado, buzón de voz y enrutamiento por horario, guardado por cuenta y ejecutado por la aplicación callflow.17

Kazoo tampoco es un solo programa. Es un conjunto de aplicaciones Erlang/OTP que coordinan Kamailio, FreeSWITCH, CouchDB y RabbitMQ.311 Ese diseño explica por qué escala entre centros de datos y también por qué es difícil de operar. Ambos puntos se retoman más abajo.

En resumen: Kazoo es una plataforma para construir un servicio telefónico, no un sistema telefónico para una sola empresa. Si usted quiere una operadora automática (auto attendant) para su propia oficina, casi cualquier otra opción de este sitio es más sencilla. Si quiere vender telefonía alojada a cientos de empresas con su propia marca, Kazoo es uno de los pocos códigos abiertos diseñados exactamente para eso.

La arquitectura, componente por componente

El README enumera los cimientos de Kazoo como “GNU/Linux, Erlang, FreeSWITCH, Apache CouchDB, and RabbitMQ”.3 La guía de instalación agrega Kamailio, con la configuración propia de 2600Hz, como requisito para voz, video y SIP.11 Esto es lo que hace cada uno, según la documentación de cada proyecto:

CapaComponenteFunción en Kazoo
Borde SIPKamailio (versión 5.2 o superior, con el módulo kazoo)Recibe SIP de teléfonos y operadores (puerto 5060 en la guía de instalación) y pasa las llamadas a los servidores FreeSWITCH mediante su dispatcher; mientras no se agreguen servidores FreeSWITCH, la verificación del dispatcher informa “No Destination Sets”.1136 El módulo kazoo de Kamailio es “a general purpose AMQP connector” (un conector AMQP de propósito general) que expone publicar y consumir a la lógica de enrutamiento de Kamailio,35 de modo que el proxy SIP puede hacerle preguntas al lado Erlang en tiempo real. La aplicación registrar responde esas preguntas: “Handles caller authentication requests, by sender’s IP address or SIP username/password” (atiende las solicitudes de autenticación de quien llama, por dirección IP del remitente o por usuario y contraseña SIP).34
MediosFreeSWITCH (1.10 o superior, con mod_kazoo)Contesta llamadas, reproduce mensajes, recoge teclas, graba y conecta. La guía de instalación exige el complemento mod_kazoo y la configuración de FreeSWITCH de 2600Hz.11 La configuración de FreeSWITCH de 2600Hz carga mod_kazoo.40
Control de llamadasecallmgr (Erlang)“Ecallmgr connects to and manages the FreeSWITCH servers and the interactions between higher-level applications and the FreeSWITCH layer.” (Ecallmgr se conecta a los servidores FreeSWITCH y los administra, así como las interacciones entre las aplicaciones de nivel superior y la capa FreeSWITCH.) Las aplicaciones “don’t need to know which FreeSWITCH server the call they’re processing is located on” (no necesitan saber en qué servidor FreeSWITCH está la llamada que procesan).33
Bus de mensajesRabbitMQ (AMQP)Las aplicaciones de Kazoo se comunican entre sí por AMQP (el README invita a los desarrolladores a “create a Kazoo application in your favorite language” sobre las API AMQP), y Kamailio se une al bus mediante su módulo kazoo.335 La guía de clústeres indica apuntar cada nodo de Kazoo al servidor RabbitMQ de cada zona (amqp_uri en /etc/kazoo/core/config.ini).37 Kazoo 5 necesita el complemento rabbitmq_consistent_hash_exchange para fax.11
AlmacenamientoCouchDB 2 (BigCouch en clústeres antiguos)Toda la configuración (cuentas, callflows, menús, números) son documentos JSON. La guía de instalación dice que se requiere CouchDB 2 y que “Old abandoned BigCouch can be used too but this is not recommended for new clusters” (el abandonado BigCouch también puede usarse, pero no se recomienda para clústeres nuevos).11 Cada cuenta tiene su propia base de datos; el código de callflow abre menús y reglas desde la base de datos de la cuenta que recibe la llamada.1623
AplicacionesAplicaciones de Kazoo (Erlang/OTP)El directorio applications/ del monorepositorio contiene, entre otras, crossbar (API REST), callflow (lógica de llamadas), ecallmgr, registrar, stepswitch (enrutamiento a operadores), teletype (notificaciones por correo electrónico), webhooks, pivot, conference, fax, acdc (centro de llamadas) y trunkstore.1
InterfazMonster UI, comm.landMonster UI es un marco de JavaScript con aplicaciones como Smart PBX y Advanced Callflows.42 La documentación de 2600Hz ahora la rotula “MonsterUI - Legacy” y describe comm.land como “the all-in-one frontend platform built atop Kazoo” (la plataforma de interfaz todo en uno construida sobre Kazoo).46

Deslice la tabla hacia los lados para ver todas las columnas.

El ejemplo práctico de la guía de clústeres muestra qué significa “distribuido”. Supone dos zonas, cada una con tres servidores CouchDB, un FreeSWITCH, un RabbitMQ, un servidor de aplicaciones Kazoo y un Kamailio: siete servidores por zona. Los nodos de Kazoo de cada zona apuntan solo a sus servidores FreeSWITCH locales.37 A CouchDB se le indica a qué zona pertenece cada nodo, y la guía advierte: “make sure you have enough copies in each zone to support a quorum if you lose a zone” (asegúrese de tener suficientes copias en cada zona para sostener un quórum si pierde una zona).37 Otro requisito sorprende a muchos. La guía advierte que “if you don’t have public DNS for your hostnames, Kazoo will have issues connecting to RabbitMQ” (si no tiene DNS público para sus nombres de host, Kazoo tendrá problemas para conectarse a RabbitMQ).37

La conectividad con los operadores la maneja stepswitch, “the carrier management application, most often used for offnet routing” (la aplicación de administración de operadores, usada con más frecuencia para enrutamiento hacia fuera de la red). Un operador es un documento de “resource”. Puede estar en la base de datos global offnet, para todos los inquilinos, o dentro de una cuenta como recurso “local”, que 2600Hz llama “BYOC (Bring Your Own Carrier)”, es decir, traiga su propio operador.32

La telemetría está activada de forma predeterminada

Las notas de la versión 4.3 dicen “KAZOO collects anonymous telemetry data by default”, limitada a “aggregate values, aggregate statistics, and software version information”, y que “You can opt-out at any time by consulting the configuration document in the system_config database.” (puede desactivarla en cualquier momento consultando el documento de configuración de la base de datos system_config).7 Si usted opera Kazoo para clientes con compromisos de residencia de datos, haga ese cambio de forma deliberada y déjelo registrado.

Cuentas, el árbol y los revendedores

“Accounts are the container for most things in 2600Hz. They typically represent an office, business, family, etc.” (las cuentas son el contenedor de casi todo en 2600Hz; suelen representar una oficina, una empresa, una familia, etc.). Forman un árbol “where parent accounts can access their sub accounts but not their ancestor accounts.” (donde las cuentas superiores acceden a sus subcuentas, pero no a sus ancestros).16 La ascendencia de una cuenta se guarda en un arreglo pvt_tree ordenado “from most-ancestral to parent” (del ancestro más lejano al padre), y un árbol vacío marca “the master (or Highlander) account; there should only be one!” (la cuenta maestra, o Highlander; ¡solo debe haber una!).16

Eso da una jerarquía natural de alojamiento: la cuenta maestra (el operador de la plataforma), debajo las cuentas de revendedores y, bajo cada revendedor, las cuentas de clientes. La API expone el árbol directamente. PUT /v2/accounts/{ACCOUNT_ID} crea una cuenta hija bajo la cuenta indicada, y /children, /descendants, /siblings, /parents y /tree lo recorren.16

La condición de revendedor es un indicador explícito de la cuenta, controlado desde arriba. Tanto promover (PUT /v2/accounts/{ACCOUNT_ID}/reseller) como degradar (DELETE) requieren un “superduper admin auth token” (token de autenticación de superadministrador).16 Las respuestas de autenticación incluyen is_reseller y reseller_id, de modo que cada cliente sabe bajo qué revendedor está un usuario.14 Dos detalles importan a quien planee un negocio de reventa:

  • Mover clientes entre revendedores está desactivado de forma predeterminada. “2600Hz does NOT support moving accounts between reseller accounts” (2600Hz NO admite mover cuentas entre revendedores), aunque un ajuste del sistema (allow_move) puede permitir que cualquiera por encima de la cuenta haga el cambio.16
  • La visibilidad entre cuentas hermanas está activada de forma predeterminada. “By default a user account under an admin/reseller account can view all the other accounts under that reseller” (de forma predeterminada, un usuario bajo una cuenta de administrador o revendedor puede ver todas las demás cuentas de ese revendedor); configure allow_sibling_listing en false para evitarlo.16 La mayoría de los revendedores querrá desactivarlo antes de que llegue el segundo cliente.

Cada cuenta también recibe su propio dominio SIP (realm; el ejemplo de la documentación es account1.2600hz.com), zona horaria, valores predeterminados de identificador de llamada, restricciones de llamadas, música en espera y dirección de emergencia. Como los callflows se buscan por cuenta, dos inquilinos pueden usar la extensión 100 sin chocar.1620

La API REST Crossbar

“2600Hz’s REST API server is called Crossbar” (el servidor de la API REST de 2600Hz se llama Crossbar). Escucha por el puerto 8000 de forma predeterminada, y las rutas de las solicitudes siguen el formato /{VERSION}/accounts/{ACCOUNT_ID}/resources/{RESOURCE_ID}. Para {VERSION}, “Currently, the only supported value is v2.” (actualmente, el único valor admitido es v2).13 La versión 1 quedó obsoleta en la 4.3, y las notas de la 5.0 dicen “All Crossbar API version 1 modules are removed.” (se eliminan todos los módulos de la versión 1 de la API Crossbar).7

Las convenciones son coherentes entre recursos, que es lo mejor de la API:13

  • Verbos. En una colección, GET lista y PUT crea (Crossbar usa PUT para crear, no POST). En un elemento, GET lo obtiene, POST reemplaza el documento completo, PATCH combina uno parcial y DELETE lo elimina. Los clientes limitados a GET y POST pueden encapsular el verbo con "verb":"PUT" en el sobre o con ?verb=PUT.
  • Sobres. Los cuerpos de las solicitudes van dentro de {"data": {...}}. Las respuestas llegan con data, metadata, status (success, error o fatal) y un request_id para rastreo en el servidor.
  • Paginación. “All listing APIs will be paginated by default” (todas las API de listado se paginan de forma predeterminada), con valores opacos start_key y next_start_key.
  • Las marcas de tiempo son segundos gregorianos, no hora Unix. Kazoo cuenta los segundos desde el año 0, así que hay que sumar 62,167,219,200 (719,528 días × 86,400) a una marca de tiempo Unix. Las notas de la 4.2 registran el cambio: kz_time:now_s/0 “returns Gregorian seconds instead of Unix Epoch seconds”.7

Hay dos maneras de obtener un token. La primera son las credenciales de usuario. PUT /v2/user_auth recibe un hash MD5 o SHA-1 de {username}:{password} más un nombre de cuenta, un realm o un número de teléfono, y devuelve un auth_token.14 La segunda conviene más a scripts e integraciones. PUT /v2/api_auth recibe la clave de API de la cuenta, que está “intended for use by applications talking to Crossbar” (pensada para aplicaciones que hablan con Crossbar), de modo que no se guarda un usuario y una contraseña en la aplicación.15 Cada solicitud posterior envía X-Auth-Token. Si una clave se filtra, PUT /v2/accounts/{ACCOUNT_ID}/api_key la rota.16

# Scripted access: exchange the account API key for a token
curl -s -X PUT https://kazoo.example.net:8000/v2/api_auth \
  -H 'Content-Type: application/json' \
  -d '{"data":{"api_key":"{API_KEY}"}}'

# Every later call carries the token
curl -s https://kazoo.example.net:8000/v2/accounts/{ACCOUNT_ID}/callflows \
  -H 'X-Auth-Token: {AUTH_TOKEN}'

Nuestra opinión: calcular un hash MD5 de username:password es un esquema de credenciales débil para los estándares actuales, y todos los ejemplos de la documentación usan http:// sin cifrar en el puerto 8000.1314 La referencia de la API tiene una página sobre cómo configurar SSL para Crossbar.13 Ponga Crossbar detrás de TLS, prefiera claves de API para la automatización y nunca exponga el puerto 8000 a internet sin cifrar.

Callflows y los módulos que importan

“Callflows are the instructions 2600Hz uses to process a call.” (los callflows son las instrucciones que 2600Hz usa para procesar una llamada). Un documento callflow tiene una lista de numbers (coincidencias exactas), patterns (expresiones regulares con grupos de captura opcionales) y un flow. El flow es un árbol cuyos nodos tienen cada uno un module, un objeto data y children.17 Una llamada que llega a una cuenta se compara con esos números y patrones, y se ejecuta el flow que coincide.

Los hijos se identifican por resultado. Los hijos de un menú se identifican por dígito, los de un nodo de horario por el ID de la regla, y la clave _ es la rama predeterminada que se toma cuando no aplica ninguna otra. La mayoría de los módulos también acepta skip_module, que salta directo a la rama _.1822 La documentación actual enumera más de cuarenta acciones de callflow.18 Una operadora automática necesita solo cinco:

MóduloQué haceCampos de datos clave
menu“Menus, also known as IVRs allow you to create branches in the callflow based on the caller’s input.” (los menús, también llamados IVR, permiten crear ramas en el callflow según lo que marca quien llama). El menú en sí (mensaje, reintentos, tiempos de espera) es un documento aparte que se administra mediante /menus.18id del documento del menú
temporal_route“Branch the callflow based on the current date and time when compared to the temporal rule(s) associated with the action.” (ramifica el callflow según la fecha y hora actuales, comparadas con las reglas temporales asociadas a la acción).22rules, rule_set, timezone
ring_group“allows calling multiple endpoints with given strategy and timeout” (permite llamar a varios destinos con una estrategia y un tiempo de espera dados). Las estrategias son simultaneous (predeterminada), single y weighted_random.26endpoints (dispositivo, usuario o grupo), timeout (20 s de forma predeterminada), strategy
userHace sonar los dispositivos del usuario; strategy es simultaneous (predeterminada) o single.56id, timeout (20 s de forma predeterminada)
voicemail“Puts the caller into the Voicemail system.” (pasa a quien llama al sistema de buzón de voz). action es compose (dejar un mensaje, el valor predeterminado) o check.27id del buzón de voz, max_message_length (500 s de forma predeterminada)

Deslice la tabla hacia los lados para ver todas las columnas.

Si el JSON estático no basta, el módulo pivot entrega la llamada a su servidor web. Su servidor responde con JSON de callflow o con “Pivot TwiML”, y puede alternar entre ambos de una solicitud a la siguiente.49 La documentación incluye una página titulada “Switching from Twilio™” (cómo migrar desde Twilio).49 Un equipo que ya haya construido sobre TwiML de Twilio (vea nuestra guía del menú telefónico en Twilio) puede trasladar buena parte de esa lógica. Los verbos y atributos hay que revisarlos uno por uno, porque Pivot TwiML es una implementación de 2600Hz, no de Twilio.

Cómo construir una operadora automática con la API

Aquí está todo para una empresa pequeña: un saludo, un menú con ventas (1), soporte (2) y un mensaje (0), horario comercial en la zona horaria de la propia empresa, días feriados y buzón de voz cuando está cerrado. Cada campo de abajo aparece en la documentación de esquemas actual de 2600Hz. Sustituya los {PLACEHOLDERS} por los ID que devuelvan las llamadas anteriores. El número de teléfono es un número ficticio 555.

1. El saludo. Cree un documento de medios y luego suba el audio a ese documento. La síntesis de voz también funciona, con "media_source":"tts" más tts.text y tts.voice (la lista de voces incluye female/fr-CA y male/fr-CA). Requiere un motor de síntesis de voz configurado en el clúster.29

PUT /v2/accounts/{ACCOUNT_ID}/media
{"data": {"name": "Main greeting", "media_source": "upload", "streamable": true}}

# then upload the audio file to that media document
POST /v2/accounts/{ACCOUNT_ID}/media/{MEDIA_ID}/
Content-Type: audio/mp3
(binary body)

2. Buzones de voz. Un buzón solo necesita un name y un número mailbox; el ejemplo de la documentación también define zona horaria y PIN.28

PUT /v2/accounts/{ACCOUNT_ID}/vmboxes
{"data": {"name": "General messages", "mailbox": "3000",
          "timezone": "America/Toronto", "require_pin": true, "pin": "{PIN}"}}

3. El documento del menú. Aquí es donde Kazoo guarda el comportamiento de un menú: “the actual menu callflow has just two options because Menus are managed separately, created and updated by API.” (el callflow del menú en sí tiene solo dos opciones, porque los menús se administran por separado, se crean y actualizan por API).18 Los campos que importan están abajo. retries vale 3 de forma predeterminada, y timeout está en milisegundos. El código fuente usa 10,000 ms si no se define.1920

PUT /v2/accounts/{ACCOUNT_ID}/menus
{"data": {
  "name": "Main menu",
  "retries": 3,
  "timeout": 8000,
  "interdigit_timeout": 2000,
  "max_extension_length": 4,
  "hunt": false,
  "media": {"greeting": "{MEDIA_ID}"}
}}
Defina hunt de forma explícita

El esquema del menú documenta hunt, “Determines if the callers can dial internal extensions directly” (determina si quienes llaman pueden marcar extensiones internas directamente), con valor predeterminado true.19 Crossbar completa los valores predeterminados del esquema al validar un documento: las opciones predeterminadas de la biblioteca de esquemas incluyen use_defaults.21 Así, un menú creado por la API deja que quien llama marque dígitos que se buscan en todos los callflows de la cuenta (hasta max_extension_length, 4 de forma predeterminada).20 Puede ser lo que usted quiere en una oficina donde quienes llaman conocen las extensiones. Si no, defina "hunt": false o límitelo con una expresión regular hunt_allow como ^2\d{2}$. Trate record_pin con el mismo cuidado. Con allow_record_from_offnet activado, una persona externa que conozca el PIN puede volver a grabar su saludo.19

4. Las reglas de horario. Una regla temporal tiene un cycle (date, daily, weekly, monthly o yearly). Los campos opcionales son wdays, days, month y ordinal (de first a fifth, every o last), y una ventana diaria, time_window_start y time_window_stop, expresada como “Seconds from the start of a day” (segundos desde el inicio del día).24 El horario de atención es de 9:00 a 17:00, es decir, de 32400 a 61200 segundos:

PUT /v2/accounts/{ACCOUNT_ID}/temporal_rules
{"data": {"name": "Open weekdays", "cycle": "weekly", "interval": 1,
          "wdays": ["monday","tuesday","wednesday","thursday","friday"],
          "time_window_start": 32400, "time_window_stop": 61200}}

PUT /v2/accounts/{ACCOUNT_ID}/temporal_rules
{"data": {"name": "Canadian Thanksgiving", "cycle": "yearly", "interval": 1,
          "month": 10, "ordinal": "second", "wdays": ["monday"],
          "time_window_start": 0, "time_window_stop": 86400}}

PUT /v2/accounts/{ACCOUNT_ID}/temporal_rules
{"data": {"name": "US Thanksgiving", "cycle": "yearly", "interval": 1,
          "month": 11, "ordinal": "fourth", "wdays": ["thursday"],
          "time_window_start": 0, "time_window_stop": 86400}}

PUT /v2/accounts/{ACCOUNT_ID}/temporal_rules
{"data": {"name": "Christmas Day", "cycle": "yearly", "interval": 1,
          "month": 12, "days": [25],
          "time_window_start": 0, "time_window_stop": 86400}}

Agrupe los feriados en un conjunto de reglas para que un solo ID los cubra a todos. Ese es el propósito que da la documentación: “one could define each holiday as a temporal rule, then create a temporal rule set with all of the holiday temporal rule IDs added.” (se puede definir cada feriado como una regla temporal y luego crear un conjunto de reglas temporales con todos los ID de las reglas de feriados).25 Los feriados que se mueven con la Pascua, como el Viernes Santo, no se pueden escribir como recurrencia. Use "cycle":"date", que “only considers start_date and matches it against the current day” (solo considera start_date y la compara con el día actual), y agregue una regla por año.24 Una regla anual que un año no aplica puede llevar una lista exclude de fechas en lugar de dividirse en dos.24

PUT /v2/accounts/{ACCOUNT_ID}/temporal_rules_sets
{"data": {"name": "Holidays",
          "temporal_rules": ["{THANKSGIVING_RULE_ID}", "{CHRISTMAS_RULE_ID}"]}}

5. El callflow. Aquí se une todo. El temporal_route exterior revisa el conjunto de feriados (una coincidencia toma la rama rule_set, cualquier otra cosa toma _), como describe la documentación.22 El interior revisa el horario de atención, y su rama se identifica por el ID de la regla. En el código fuente, el ID de la primera regla cuya ventana contiene la hora actual se convierte en la clave hija que sigue la llamada.23

PUT /v2/accounts/{ACCOUNT_ID}/callflows
{"data": {
  "name": "Main line",
  "numbers": ["+16135550142"],
  "flow": {
    "module": "temporal_route",
    "data": {"rule_set": "{HOLIDAY_SET_ID}", "timezone": "America/Toronto"},
    "children": {
      "rule_set": {"module": "voicemail", "data": {"id": "{CLOSED_VMBOX_ID}"}, "children": {}},
      "_": {
        "module": "temporal_route",
        "data": {"rules": ["{OPEN_RULE_ID}"], "timezone": "America/Toronto"},
        "children": {
          "{OPEN_RULE_ID}": {
            "module": "menu",
            "data": {"id": "{MENU_ID}"},
            "children": {
              "1": {"module": "ring_group",
                    "data": {"strategy": "simultaneous", "timeout": 25,
                             "endpoints": [{"endpoint_type": "user", "id": "{SALES_USER_1}"},
                                           {"endpoint_type": "user", "id": "{SALES_USER_2}"}]},
                    "children": {"_": {"module": "voicemail", "data": {"id": "{SALES_VMBOX_ID}"}, "children": {}}}},
              "2": {"module": "user", "data": {"id": "{SUPPORT_USER}", "timeout": 25},
                    "children": {"_": {"module": "voicemail", "data": {"id": "{SUPPORT_VMBOX_ID}"}, "children": {}}}},
              "0": {"module": "voicemail", "data": {"id": "{GENERAL_VMBOX_ID}"}, "children": {}},
              "_": {"module": "voicemail", "data": {"id": "{GENERAL_VMBOX_ID}"}, "children": {}}
            }
          },
          "_": {"module": "voicemail", "data": {"id": "{CLOSED_VMBOX_ID}"}, "children": {}}
        }
      }
    }
  }
}}

¿Por qué anidar dos nodos temporal_route en lugar de listar todas las reglas en uno? El código fuente arma la lista de reglas de un nodo en un orden fijo: primero los ID de data.rules, luego las claves hijas y luego los miembros de data.rule_set. Devuelve la primera regla que coincide.23 Con todo en un solo nodo, el conjunto de feriados se revisa después de “Open weekdays”, así que un feriado que cae en lunes coincide como horario abierto. Anidar hace explícito el orden, que no depende del orden de las claves JSON, algo que ningún analizador de JSON promete conservar.

El hijo _ del menú no es un simple adorno. Cuando se agotan los reintentos, el código fuente reproduce el mensaje de salida, prueba una rama max_retries si existe y, si no, continúa por _; si no hay rama _, quien llama escucha “goodbye”.20 Si no existe un hijo timeout, “the menu is retried (until retries are exceeded)” (el menú se repite hasta agotar los reintentos).18 Un menú sin _ le cuelga a quienes más necesitan a una persona: los que no lo entendieron. Nuestras plantillas de flujos de llamadas cubren el diseño del menú en sí.

6. Pruebe el horario antes de salir al aire. Consulte una regla con ?timestamp= (segundos gregorianos, en la zona horaria de la cuenta) y la respuesta incluye metadata.rule_matches.24 Revise un día laborable a las 08:59 y a las 09:00, un sábado y cada feriado. Nadie prueba los feriados hasta que llega el primero, y entonces todos los que llaman escuchan el menú del horario abierto y nadie contesta.

GET /v2/accounts/{ACCOUNT_ID}/temporal_rules/{OPEN_RULE_ID}?timestamp={GREGORIAN_SECONDS}
# response metadata: {"rule_matches": true | false, ...}

Una rareza del esquema con la que puede tropezar: la enumeración wdays acepta tanto wednesday como el error ortográfico wensday.24 Es un vestigio de compatibilidad con versiones anteriores, no un error de su cliente. Escriba wednesday.

Administración de números

Los números son un recurso propio bajo /v2/accounts/{ACCOUNT_ID}/phone_numbers. Dos reglas de la documentación evitan la mayoría de los errores. Primero, “{PHONE_NUMBER} has to be URL-encoded” (debe codificarse para URL), así que +14155555555 se convierte en %2B14155555555. Segundo, la normalización es literal: “4123456789 is turned into +14123456789”, pero “41234567 is turned into +41234567, so be careful!” (¡tenga cuidado!).30 Solo una cuenta cuyo documento tenga pvt_wnm_allow_additions en true, o una solicitud hecha con autenticación de la cuenta maestra, puede agregar o modificar números.30

El ciclo de vida es buscar y luego activar. GET /v2/phone_numbers?prefix=613&quantity=5 busca en el inventario del operador, y PUT .../phone_numbers/{NUMBER}/activate compra un número, que “must have appeared as part of the results of a numbers search” (debe haber aparecido en los resultados de una búsqueda de números).30 Los números tienen estados (available, reserved, in_service, port_in, port_out, aging, released, deleted, discovery). Un número puede llevar ajustes de CNAM, una dirección e911 estructurada y los datos de porting (portabilidad) que tiene registrados el operador que lo cede.30 Los operadores en los que se puede buscar dependen de los módulos de administración de números que ejecute su clúster. La rama master incluye módulos para Bandwidth, Flowroute, Inteliquent, Telnyx, Thinq, VoIP Innovations, Voxbone, Simwood y otros, además de local, managed y other para números que usted trae por su cuenta.31 Algunas funciones también dependen de “Phonebook”, que la documentación describe como “an external service that ‘abstract’ carrier number inventory” que “the sysadmin need to provide and configure” (un servicio externo que ‘abstrae’ el inventario de números del operador, que el administrador del sistema debe proporcionar y configurar).30

Asignar un número a una cuenta no lo enruta. Una llamada llega a la operadora automática solo cuando el número aparece en los numbers de un callflow, como en el paso 5.17 La portabilidad tiene su propia API, port_requests.12 Las reglas detrás (qué puede exigir un operador y cuánto puede tardar) se explican en nuestra guía de portabilidad.

Notas para despliegues en Canadá

  • Existen mensajes en francés. El repositorio kazoo-sounds tiene un conjunto en francés canadiense (kazoo-core/fr/ca) junto al francés estándar.50 La guía de instalación muestra cómo importarlo como fr-ca.36 El ajuste language de la cuenta y la acción de callflow language deciden qué conjunto escuchan quienes llaman,1618 y un menú bilingüe es simplemente un menú cuyas ramas por dígito llevan a subflujos específicos de cada idioma.
  • Las zonas horarias son nombres IANA (America/Toronto, America/Vancouver, America/Halifax), definidos por cuenta, por buzón de voz o en el nodo temporal_route.162822
  • Las direcciones de emergencia se guardan por número en el objeto e911, con una region de dos letras que sirve tanto para provincias como para estados.30 Que lleguen a una base de datos del 911 depende de su operador. Las obligaciones del 911 en Canadá difieren de las de EE. UU.; vea llamadas de emergencia.

El estado del proyecto de código abierto

Aquí es donde la mayoría de los artículos sobre Kazoo están desactualizados, incluidos algunos de la propia 2600Hz.

Licencia. El archivo LICENSE del repositorio kazoo es la “Mozilla Public License Version 2.0”, y GitHub la identifica como MPL-2.0.12 El README aún dice que Kazoo se publica “Released under the OSI-approved MPL 1.1 open source software license”.3 El archivo LICENSE es el texto vigente. Los repositorios de aplicaciones de la serie 5.x también son MPL-2.0.9 El archivo LICENSE de Monster UI es la Mozilla Public License versión 1.1.47 Nuestra lectura de la MPL 2.0: es copyleft a nivel de archivo, así que se puede combinar Kazoo con código propietario, pero los cambios a archivos con licencia MPL deben compartirse cuando se distribuyen. Lea usted mismo el texto de la licencia antes de apoyarse en este resumen.2

Versiones. La última versión del repositorio kazoo es la 4.3.142, publicada el 19 de enero de 2022, y la anterior, la 4.3.141, salió en octubre de 2021.4 El commit más reciente en master es una corrección de documentación del 12 de marzo de 2024.5 La rama 4.3 se modificó por última vez el 15 de mayo de 2024 (una corrección de fax).6 El repositorio tiene 990 estrellas, 466 bifurcaciones (forks) y unos 185 colaboradores según GitHub. Los issues están desactivados en GitHub, y 2600Hz lleva los errores en su propio sistema de tickets.13

Kazoo 5. El archivo de anuncios es tajante: “KAZOO master (5.x) is closed at the moment”, y el desarrollo “is currently closed to public commits as we prepare the infrastructure necessary for the app exchange” (está cerrado a commits públicos mientras se prepara la infraestructura del intercambio de aplicaciones). Ese intercambio sería “a release channel from which folks can purchase those apps for use on any KAZOO cluster.” (un canal de distribución donde se pueden comprar esas aplicaciones para usarlas en cualquier clúster KAZOO).7 Sin embargo, el código no desapareció. Un repositorio público kazoo5 (descrito como “Kazoo 5.x - For your eyes only”) reúne repositorios separados por aplicación, y su último commit es de agosto de 2026.8 Esos repositorios están activos. kazoo-crossbar tiene commits de 2026 etiquetados 5.4.x, como “KCRO-277: tighten up cb_simple_authz checks”.10 kazoo-callflow se modificó por última vez en abril de 2026.9 No encontramos versiones 5.x etiquetadas en ellos.910 La guía de 2600Hz sobre esta estructura de varios repositorios sigue siendo un borrador vacío que dice “Write something useful here” (escriba algo útil aquí).53

Aplicaciones de la comunidad. Las notas de la 5.0 trasladaron las “Community-supported and deprecated apps” a una organización separada, kazoo-community.7 El repositorio de esa organización actualizado más recientemente se modificó por última vez en septiembre de 2024.52

Ofertas comerciales. 2600Hz vende la plataforma como UCaaS, CPaaS y centro de contacto de marca blanca para proveedores de servicios. Su sitio web promociona migraciones desde BroadWorks y Metaswitch.43 Hay dos modelos de despliegue. Hosted Platform corre en “2600Hz’s Triple Geo-Redundant Cloud” y está dirigido a proveedores de servicios que quieren lanzar “with minimal upfront costs” (con costos iniciales mínimos).44 Global Infrastructure coloca la arquitectura en clúster “inside your own data center” (dentro de su propio centro de datos): los clientes “partner directly with the 2600Hz engineering team on their custom cluster design” (trabajan directamente con el equipo de ingeniería de 2600Hz en el diseño de su clúster) y reciben una herramienta Cluster Manager.45 Ambas páginas anuncian “99.999% reliability”; es una afirmación de 2600Hz, no algo que hayamos medido.4445 No encontramos una lista de precios pública; 2600hz.com/pricing/ devuelve la página de “no encontrado” del sitio.43 comm.land, la nueva interfaz, está documentada en docs.2600hz.com.46 No encontramos un repositorio público para ella entre los repositorios públicos de la organización, y el repositorio de la aplicación de cuentas de Monster UI está archivado.48

Dicho sin rodeos: el código es abierto y sigue avanzando, pero el producto de código abierto, es decir, una versión pública que se puede instalar desde paquetes y con notas de actualización que seguir, se detuvo en la 4.3 a principios de 2022. El trabajo nuevo se entrega por los canales comerciales de 2600Hz.

Opciones de instalación y qué tan desactualizadas están las guías

Hay cuatro maneras de tener Kazoo funcionando, y cada una tiene sus salvedades:

  1. La instalación todo en uno con RPM en CentOS 7. Las instrucciones de instalación de 2600hz.org apuntan aquí.42 La guía instala los paquetes de 2600Hz (kazoo-rabbitmq, kazoo-kamailio, kazoo-freeswitch, kazoo-bigcouch, kazoo-applications), crea la cuenta maestra con sup crossbar_maintenance create_account e importa los mensajes de voz.36 Es explícitamente “for testing purposes” (para pruebas), y ella misma dice que los cambios “can cause this guide to bitrot” (pueden dejar obsoleta esta guía).36 El índice público de paquetes de esta vía se detiene en kazoo-applications-4.3 para CentOS 7.38
  2. Compilar desde el código fuente. La guía de instalación cubre Erlang, CouchDB, RabbitMQ, FreeSWITCH con mod_kazoo y Kamailio con el módulo kazoo, y luego make, make build-release y la herramienta de línea de comandos sup.11
  3. Docker. El repositorio docker de 2600Hz es un entorno de desarrollo. Se basa en Debian Jessie, “provides all Kazoo components alongside with source code” (incluye todos los componentes de Kazoo junto con el código fuente) y se actualizó por última vez en 2019. Remite a imágenes de terceros para uso en producción.51
  4. Comprarlo. Hosted Platform, o Global Infrastructure con ingenieros de 2600Hz que diseñan el clúster.4445

El índice de paquetes sí muestra trabajo más reciente. 2600Hz publica canales para Rocky Linux 8 y 9. El canal estable de Rocky 9 incluye FreeSWITCH compilado por 2600Hz, Kamailio 5.7, freeswitch-kazoo y kamailio-kazoo, pero no encontramos en él paquetes de las aplicaciones de Kazoo.39 La integración continua del repositorio de configuración de FreeSWITCH ahora compila solo para Rocky Linux 9; un cambio de agosto de 2026 eliminó CentOS 7 y EL8.40

Así se compara lo que dicen las instrucciones públicas con el estado actual, documento por documento:

TemaQué dice la guía públicaQué es lo vigente
Sistema operativoISO mínima de CentOS 7.36CentOS Linux 7 llegó al fin de su vida útil el 30 de junio de 2024, sin actualizaciones después de esa fecha.41
Versión “estable”“Currently, 4.3 is considered ‘stable’”.36La página principal de la documentación llama a su referencia de API “2600Hz 5.X stable” y al material de la 4.3 “legacy content”.12
Base de datos“BigCouch is still ‘recommended’”; la salida de ejemplo muestra CouchDB 1.1.1 y BigCouch 0.4.2.36La guía de instalación exige CouchDB 2 y califica a BigCouch de “Old abandoned”.11
FreeSWITCHLa salida de ejemplo muestra FreeSWITCH 1.6.20.36Se requiere FreeSWITCH 1.10 o superior.11
RabbitMQInstala “an older (perfectly fine) version 3.3.5”.36No se indica una versión actual; el canal de Rocky 9 replica RabbitMQ y su Erlang.39
Erlang/OTPLa 4.3 “requires Erlang version 19 specifically 19.3.x”; la guía del monorepositorio dice que la 5.x apunta a 22.3.11El repositorio kazoo5 fija Erlang 26.2.5,8 mientras que su propia copia de la guía de instalación dice 23.0.3.55
Enlaces de documentaciónEl README enlaza a docs.2600hz.com/dev/, un canal IRC de freenode e insignias de Travis CI.3La documentación pasó a una nueva estructura en docs.2600hz.com; la referencia de la API HTTP de la 4.3 se conserva como “Legacy”.12

Deslice la tabla hacia los lados para ver todas las columnas.

El nuevo sitio de documentación es preciso sobre la API: donde comparamos esquemas, endpoints y ejemplos con el código fuente, coincidían. Es más débil en operación, que es justo donde más lo necesita quien opera Kazoo por primera vez.

Cuándo Kazoo es la opción correcta y cuándo no

Lo que sigue es nuestra opinión. Se apoya en la documentación y la evidencia de los repositorios expuestas arriba y en la forma de la arquitectura, no en haber operado un clúster de producción para este artículo.

Kazoo encaja bien cuando

  • Usted construye un servicio telefónico, no compra un sistema telefónico. El árbol de cuentas, el indicador de revendedor, las bases de datos por inquilino y los dominios SIP por cuenta son la parte difícil de una PBX alojada, y ya están diseñados.16 Muy pocos proyectos de código abierto se toman la multitenencia tan en serio.
  • Su producto es la API. Crossbar es uniforme: un solo sobre, verbos coherentes, esquemas JSON para cada documento.13 El aprovisionamiento, los portales de marca blanca y las integraciones se apoyan en ella sin fricción.
  • Usted tiene, o pagará por, las habilidades de operación. Es decir, alguien cómodo con versiones de Erlang, el quórum y la replicación de CouchDB, RabbitMQ, Kamailio y FreeSWITCH a la vez, o un contrato comercial con 2600Hz.3745
  • Usted quiere una puerta de salida. Operar la plataforma comercial de 2600Hz sobre código con licencia MPL que se puede leer, auditar y, en principio, alojar uno mismo es una mejor posición que una plataforma UCaaS totalmente cerrada.2

Busque otra opción cuando

  • Necesite una sola operadora automática para una sola empresa. Siete servidores por zona en el clúster de referencia, y cuatro proyectos de infraestructura distintos (Kamailio, FreeSWITCH, CouchDB, RabbitMQ) bajo las propias aplicaciones Erlang de Kazoo, es mucha maquinaria para un menú de tres opciones.3711 Un solo servidor Asterisk, una API programable como Twilio o un servicio alojado es la opción proporcionada. (Auto Attendant es uno de esos servicios alojados.)
  • Quiera una versión abierta actual, empaquetada y con soporte de la comunidad. La última versión pública es de enero de 2022 y la instalación documentada apunta a un sistema operativo fuera de su vida útil.43641 Ejecutar la 4.3 en producción en 2026 significa encargarse usted mismo de su seguridad.
  • Necesite una comunidad grande. Para un proyecto de este tamaño, unas 990 estrellas y cerca de 185 colaboradores desde 2011 es una comunidad pequeña. Los issues están desactivados en GitHub y la organización de aplicaciones de la comunidad se quedó en silencio en 2024.152 Cuando algo falle a las 2 a. m., usted estará leyendo código Erlang, como nosotros para esta guía.
  • Quiera multitenencia sin la capa de Erlang. FusionPBX se describe como “A full-featured domain based multi-tenant PBX and voice switch for FreeSwitch”.54 Es un sistema más pequeño con otras ventajas y desventajas, que vale la pena comparar antes de comprometerse con Kazoo.

El resumen justo: el diseño es excelente, la API está entre las mejores de la telefonía de código abierto y el código sigue en desarrollo. Pero el proyecto abierto ahora va detrás del comercial. Si usted no está dispuesto a operarlo como un operador de telecomunicaciones ni a pagarle a 2600Hz para que lo haga, no es la herramienta adecuada.

Lecturas recomendadas

Artículos de investigación más largos sobre este tema (en inglés), cada uno con sus fuentes y un PDF descargable.

Fuentes

Cada afirmación sobre normas o precios en esta página enlaza a su fuente primaria, a menudo en inglés. Las normas y los precios cambian: verifique antes de confiar en una cifra.

  1. GitHub, repositorio 2600hz/kazoo: descripción, fecha de creación (12 dic. 2011), licencia detectada (MPL-2.0), estrellas, forks, colaboradores, issues desactivados, directorio applications/. Consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo
  2. 2600hz/kazoo, archivo LICENSE (Mozilla Public License Version 2.0). Consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo/blob/master/LICENSE
  3. 2600hz/kazoo, README.md (qué es Kazoo, declaración “MPL 1.1”, cimientos, sistema de tickets, enlaces de documentación e IRC). Consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo/blob/master/README.md
  4. 2600hz/kazoo, Releases (última 4.3.142, 19 ene. 2022; 4.3.141, 27 oct. 2021). Consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo/releases
  5. 2600hz/kazoo, historial de commits de master (último commit 12 mar. 2024). Consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo/commits/master
  6. 2600hz/kazoo, historial de commits de la rama 4.3 (último commit 15 may. 2024). Consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo/commits/4.3
  7. 2600hz/kazoo, doc/announcements.md (5.x cerrada a commits públicos, intercambio de aplicaciones, eliminación de la API v1, kazoo-community, telemetría de la 4.3, segundos gregorianos de la 4.2). Consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo/blob/master/doc/announcements.md
  8. GitHub, repositorio 2600hz/kazoo5 (descripción, último commit ago. 2026, .tool-versions que fija Erlang 26.2.5). Consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo5
  9. GitHub, historial de commits de 2600hz/kazoo-callflow (MPL-2.0; commits 5.4.x; sin etiquetas). Consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo-callflow/commits/master
  10. GitHub, historial de commits de 2600hz/kazoo-crossbar (commits de 2026 etiquetados 5.4.x; sin etiquetas). Consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo-crossbar/commits/master
  11. 2600hz/kazoo, doc/installation.md (dependencias, versiones de Erlang, CouchDB 2, FreeSWITCH 1.10+ con mod_kazoo, Kamailio 5.2+ con módulo kazoo, destinos de compilación). Consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo/blob/master/doc/installation.md
  12. 2600Hz Docs, página principal y navegación (referencia de API 5.X estable, contenido legacy de la 4.3, acciones de callflow, solicitudes de portabilidad). Consultado el 26 de octubre de 2026
    https://docs.2600hz.com/
  13. 2600Hz Docs, REST API Reference: API Basics (Crossbar, puerto 8000, v2, sobres, verbos, paginación). Consultado el 26 de octubre de 2026
    https://docs.2600hz.com/developers/rest/overview/api-basics
  14. 2600Hz Docs, User Authentication (PUT /v2/user_auth, hash de credenciales MD5/SHA-1). Consultado el 26 de octubre de 2026
    https://docs.2600hz.com/developers/rest/authentication/user-authentication
  15. 2600Hz Docs, Account API Authentication (PUT /v2/api_auth). Consultado el 26 de octubre de 2026
    https://docs.2600hz.com/developers/rest/authentication/account-api-authentication
  16. 2600Hz Docs, Accounts (árbol, pvt_tree, esquema, cuentas hijas, clave de API, cuentas hermanas, promoción a revendedor, mover). Consultado el 26 de octubre de 2026
    https://docs.2600hz.com/developers/rest/account-actions-and-permissions/accounts
  17. 2600Hz Docs, Callflows API (numbers, patterns, flow, module/data/children). Consultado el 26 de octubre de 2026
    https://docs.2600hz.com/developers/rest/call-control/callflows/callflows
  18. 2600Hz Docs, Callflow action: Menu (IVR), claves de los hijos, comportamiento del tiempo de espera. Consultado el 26 de octubre de 2026
    https://docs.2600hz.com/call-control/callflow/callflow-actions/ivr
  19. 2600Hz Docs, Menus API (esquema: hunt, retries, timeout, media, record_pin). Consultado el 26 de octubre de 2026
    https://docs.2600hz.com/developers/rest/call-control/menus/menus
  20. 2600hz/kazoo, applications/callflow/src/module/cf_menu.erl (valores predeterminados, búsqueda hunt, manejo de max_retries y comodín). master, consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo/blob/master/applications/callflow/src/module/cf_menu.erl
  21. 2600hz/kazoo, core/kazoo_schemas/src/kz_json_schema.erl (las opciones predeterminadas del validador incluyen use_defaults). master, consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo/blob/master/core/kazoo_schemas/src/kz_json_schema.erl
  22. 2600Hz Docs, Callflow action: Temporal Route (esquema, conjuntos de reglas, rama general). Consultado el 26 de octubre de 2026
    https://docs.2600hz.com/call-control/callflow/callflow-actions/temporal-route
  23. 2600hz/kazoo, applications/callflow/src/module/cf_temporal_route.erl (orden de carga de reglas, la primera coincidencia se convierte en la clave de la rama). master, consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo/blob/master/applications/callflow/src/module/cf_temporal_route.erl
  24. 2600Hz Docs, Temporal Rules API (esquema, exclude, ciclo date, evaluación por timestamp). Consultado el 26 de octubre de 2026
    https://docs.2600hz.com/developers/rest/call-control/advanced-features/temporal-rules
  25. 2600Hz Docs, Temporal Rules Sets API. Consultado el 26 de octubre de 2026
    https://docs.2600hz.com/developers/rest/call-control/advanced-features/temporal-rules-sets
  26. 2600hz/kazoo, applications/callflow/doc/ring_group.md (esquema y estrategias). Consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo/blob/master/applications/callflow/doc/ring_group.md
  27. 2600hz/kazoo, applications/callflow/doc/voicemail.md (esquema de la acción de callflow voicemail). Consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo/blob/master/applications/callflow/doc/voicemail.md
  28. 2600hz/kazoo, applications/crossbar/doc/voicemail.md (API vmboxes, campos requeridos). Consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo/blob/master/applications/crossbar/doc/voicemail.md
  29. 2600hz/kazoo, applications/crossbar/doc/media.md (documentos de medios, carga binaria, voces TTS). Consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo/blob/master/applications/crossbar/doc/media.md
  30. 2600Hz Docs, Phone Numbers API (codificación, normalización, estados, búsqueda, activación, e911, portabilidad, Phonebook). Consultado el 26 de octubre de 2026
    https://docs.2600hz.com/developers/rest/usage/phone-numbers-api
  31. 2600hz/kazoo, core/kazoo_numbers/src/carriers (módulos de operadores del administrador de números). master, consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo/tree/master/core/kazoo_numbers/src/carriers
  32. 2600hz/kazoo, applications/stepswitch/doc/README.md (recursos de operadores, BYOC). Consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo/blob/master/applications/stepswitch/doc/README.md
  33. 2600hz/kazoo, applications/ecallmgr/doc/README.md. Consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo/blob/master/applications/ecallmgr/doc/README.md
  34. 2600hz/kazoo, applications/registrar/doc/README.md. Consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo/blob/master/applications/registrar/doc/README.md
  35. Kamailio, README del módulo KAZOO (conector AMQP de propósito general). master, consultado el 26 de octubre de 2026
    https://github.com/kamailio/kamailio/blob/master/src/modules/kazoo/README
  36. 2600Hz Docs, Installation Guide for CentOS 7 (instalación todo en uno, nombres de paquetes, salidas de ejemplo, “4.3 is considered stable”, nota sobre BigCouch). Consultado el 26 de octubre de 2026
    https://docs.2600hz.com/sysadmin/ref/getting-started/installation/via-cent-os-7/
  37. 2600Hz Docs, Cluster operation guide (ejemplo de dos zonas con siete servidores por zona; advertencias de DNS y quórum; amqp_uri). Consultado el 26 de octubre de 2026
    https://docs.2600hz.com/sysadmin/ref/cluster-operation/guide
  38. Índice de paquetes de 2600Hz, directorio kazoo-applications 4.3 estable para CentOS 7. Consultado el 26 de octubre de 2026
    https://packages.2600hz.com/centos/7/stable/kazoo-applications/4.3/
  39. Índice de paquetes de 2600Hz, canal estable de Rocky Linux 9 (FreeSWITCH, Kamailio 5.7, freeswitch-kazoo, kamailio-kazoo, réplicas de RabbitMQ). Consultado el 26 de octubre de 2026
    https://packages.2600hz.com/rockylinux/9/stable/
  40. GitHub, 2600hz/kazoo-configs-freeswitch (carga mod_kazoo; la integración continua compila para Rocky Linux 9; commit de ago. 2026 que elimina CentOS 7 y EL8). Consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo-configs-freeswitch
  41. Blog del Proyecto CentOS, “End dates are coming for CentOS Stream 8 and CentOS Linux 7” (fin de vida de CentOS Linux 7: 30 de junio de 2024). Abril de 2023, consultado el 26 de octubre de 2026
    https://blog.centos.org/2023/04/end-dates-are-coming-for-centos-stream-8-and-centos-linux-7/
  42. 2600hz.org, sitio de la comunidad (proyectos, aplicaciones de Monster UI, enlaces de inicio). Consultado el 26 de octubre de 2026 mediante un servicio de extracción (el sitio bloquea clientes HTTP simples)
    https://2600hz.org/
  43. 2600Hz, página principal (UCaaS, CPaaS, centro de contacto; modelos de despliegue; oferta de migración). /pricing/ devolvió una página de no encontrado. Consultado el 26 de octubre de 2026
    https://www.2600hz.com/
  44. 2600Hz, Hosted Platform. Consultado el 26 de octubre de 2026
    https://www.2600hz.com/hosted-platform/
  45. 2600Hz, Global Infrastructure. Consultado el 26 de octubre de 2026
    https://www.2600hz.com/global-infrastructure/
  46. 2600Hz Docs, Frontend Frameworks: comm.land y MonsterUI (Legacy). Consultado el 26 de octubre de 2026
    https://docs.2600hz.com/frontends/commland
  47. GitHub, 2600hz/monster-ui (LICENSE: Mozilla Public License 1.1). Consultado el 26 de octubre de 2026
    https://github.com/2600hz/monster-ui
  48. GitHub, lista de repositorios de la organización 2600hz (153 repositorios públicos; monster-ui-accounts archivado; no se encontró un repositorio de comm.land). Consultado el 26 de octubre de 2026
    https://github.com/2600hz
  49. 2600Hz Docs, Pivot: Programmable flows (JSON de callflow y Pivot TwiML; “Switching from Twilio™”). Consultado el 26 de octubre de 2026
    https://docs.2600hz.com/developers/pivot/pivot-programmable-flows
  50. GitHub, 2600hz/kazoo-sounds, kazoo-core/fr (conjuntos de mensajes en francés y en francés canadiense). Consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo-sounds/tree/master/kazoo-core/fr
  51. GitHub, README de 2600hz/docker (entorno de desarrollo, Debian Jessie; último push en 2019). Consultado el 26 de octubre de 2026
    https://github.com/2600hz/docker
  52. GitHub, organización kazoo-community (aplicaciones de la comunidad; último push más reciente sep. 2024). Consultado el 26 de octubre de 2026
    https://github.com/kazoo-community
  53. 2600hz/kazoo5, doc/getting_used_to_multi_repo.md (secciones vacías). Consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo5/blob/master/doc/getting_used_to_multi_repo.md
  54. GitHub, descripción del repositorio fusionpbx/fusionpbx. Consultado el 26 de octubre de 2026
    https://github.com/fusionpbx/fusionpbx
  55. 2600hz/kazoo5, doc/installation.md (indica que Kazoo 5.x apunta a Erlang 23.0.3). Consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo5/blob/master/doc/installation.md
  56. 2600hz/kazoo, applications/callflow/doc/user.md (esquema de la acción de callflow user). Consultado el 26 de octubre de 2026
    https://github.com/2600hz/kazoo/blob/master/applications/callflow/doc/user.md