{"id":2579,"date":"2025-03-01T16:59:31","date_gmt":"2025-03-01T22:59:31","guid":{"rendered":"https:\/\/tuconsejeria.com\/?page_id=2579"},"modified":"2026-04-29T16:01:29","modified_gmt":"2026-04-29T22:01:29","slug":"llamadacof","status":"publish","type":"page","link":"https:\/\/tuconsejeria.com\/en\/llamadacof\/","title":{"rendered":"Llamada COF"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"2579\" class=\"elementor elementor-2579\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c00d60a e-flex e-con-boxed e-con e-parent\" data-id=\"c00d60a\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2be5121 elementor-widget elementor-widget-image\" data-id=\"2be5121\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"800\" src=\"https:\/\/tuconsejeria.com\/wp-content\/uploads\/2025\/05\/Se-vale-pedir-ayuda-y-querer-ser-escuchado-1024x1024.png\" class=\"attachment-large size-large wp-image-2751\" alt=\"\" srcset=\"https:\/\/tuconsejeria.com\/wp-content\/uploads\/2025\/05\/Se-vale-pedir-ayuda-y-querer-ser-escuchado-1024x1024.png 1024w, https:\/\/tuconsejeria.com\/wp-content\/uploads\/2025\/05\/Se-vale-pedir-ayuda-y-querer-ser-escuchado-300x300.png 300w, https:\/\/tuconsejeria.com\/wp-content\/uploads\/2025\/05\/Se-vale-pedir-ayuda-y-querer-ser-escuchado-150x150.png 150w, https:\/\/tuconsejeria.com\/wp-content\/uploads\/2025\/05\/Se-vale-pedir-ayuda-y-querer-ser-escuchado-768x768.png 768w, https:\/\/tuconsejeria.com\/wp-content\/uploads\/2025\/05\/Se-vale-pedir-ayuda-y-querer-ser-escuchado-12x12.png 12w, https:\/\/tuconsejeria.com\/wp-content\/uploads\/2025\/05\/Se-vale-pedir-ayuda-y-querer-ser-escuchado.png 1080w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-45dc732 elementor-widget elementor-widget-heading\" data-id=\"45dc732\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Si el bot\u00f3n \"Llamada Web\" aparece como \"Busy\" en gris, por favor, p\u00falsalo repetidamente hasta que cambie a color amarillo y pueda realizar la llamada.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9a88ace elementor-widget elementor-widget-html\" data-id=\"9a88ace\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- ============================================================\n     COF Grupo Bol\u00edvar \u2014 Llamada unificada (CO\/CR\/SV\/HN\/Otros)\n     Selector de pa\u00eds con banderas + Web Call (Zadarma) + Tel\n     Auto-retry del Web Call si entra en estado \"Busy\/Error\"\n     ============================================================ -->\n\n<!-- Carga manual de scripts Zadarma para garantizar orden estricto:\n     detectWebRTC \u2192 JsSIP \u2192 widget. El loader.js oficial los inserta sin\n     orden y a veces widget.min.js se ejecuta antes que JsSIP, lo que rompe\n     la inicializaci\u00f3n. -->\n<div id=\"zadarmaScripts\"><\/div>\n<link rel=\"stylesheet\" href=\"https:\/\/my.zadarma.com\/callmewidget\/v2.0.9\/style.min.css\">\n<script>\n(function(){\n  if (window.__zadarmaLoaderInjected) return;\n  window.__zadarmaLoaderInjected = true;\n\n  var BASE = 'https:\/\/my.zadarma.com\/callmewidget\/v2.0.9\/';\n  var holder = document.getElementById('zadarmaScripts') || document.head || document.body;\n\n  function loadScript(src, onDone){\n    var s = document.createElement('script');\n    s.src = src;\n    s.async = false; \/\/ mantiene orden de ejecuci\u00f3n\n    s.onload = onDone;\n    s.onerror = function(){ window.__zadarmaLoaderError = true; };\n    holder.appendChild(s);\n  }\n\n  \/\/ Cargar en cadena: detectWebRTC \u2192 JsSIP \u2192 widget\n  loadScript(BASE + 'detectWebRTC.min.js', function(){\n    loadScript(BASE + 'jssip.min.js', function(){\n      loadScript(BASE + 'widget.min.js', function(){\n        window.__zadarmaLoaderReady = true;\n      });\n    });\n  });\n}());\n<\/script>\n\n<div id=\"cof-llamada\" style=\"max-width:520px;margin:20px auto;padding:0 12px;font-family:'Trebuchet MS','Helvetica CY',sans-serif;text-align:center;color:#333;\">\n\n  <!-- PASO 1: Selecci\u00f3n de pa\u00eds -->\n  <div id=\"cof-step-pais\">\n    <h3 style=\"margin:0 0 8px;font-size:18px;color:#333;\">\u00bfDesde qu\u00e9 pa\u00eds nos contactas?<\/h3>\n    <p style=\"margin:0 0 18px;font-size:14px;color:#666;\">Selecciona tu pa\u00eds para conectarte con el COF.<\/p>\n    <div class=\"cof-paises\">\n      <button type=\"button\" class=\"cof-pais-btn\" data-pais=\"CO\"><span class=\"cof-flag\">\ud83c\udde8\ud83c\uddf4<\/span><span>Colombia<\/span><\/button>\n      <button type=\"button\" class=\"cof-pais-btn\" data-pais=\"CR\"><span class=\"cof-flag\">\ud83c\udde8\ud83c\uddf7<\/span><span>Costa Rica<\/span><\/button>\n      <button type=\"button\" class=\"cof-pais-btn\" data-pais=\"SV\"><span class=\"cof-flag\">\ud83c\uddf8\ud83c\uddfb<\/span><span>El Salvador<\/span><\/button>\n      <button type=\"button\" class=\"cof-pais-btn\" data-pais=\"HN\"><span class=\"cof-flag\">\ud83c\udded\ud83c\uddf3<\/span><span>Honduras<\/span><\/button>\n      <button type=\"button\" class=\"cof-pais-btn\" data-pais=\"PA\"><span class=\"cof-flag\">\ud83c\uddf5\ud83c\udde6<\/span><span>Panam\u00e1<\/span><\/button>\n      <button type=\"button\" class=\"cof-pais-btn\" data-pais=\"OT\"><span class=\"cof-flag\">\ud83c\udf0e<\/span><span>Otro pa\u00eds<\/span><\/button>\n    <\/div>\n  <\/div>\n\n  <!-- PASO 2: Opciones de llamada (oculto al inicio) -->\n  <div id=\"cof-step-llamada\" style=\"display:none;\">\n    <button type=\"button\" id=\"cof-volver\" aria-label=\"Cambiar pa\u00eds\">\n      <span aria-hidden=\"true\" style=\"font-size:16px;line-height:1;\">\u2039<\/span>\n      <span>Cambiar pa\u00eds<\/span>\n    <\/button>\n    <div id=\"cof-pais-elegido\" style=\"font-size:16px;font-weight:bold;margin-bottom:10px;\"><\/div>\n\n    <!-- Disclaimer din\u00e1mico -->\n    <div id=\"cof-disclaimer\" style=\"background:#FFF8E1;border:1px solid #FFE082;border-radius:8px;padding:10px 12px;margin:0 0 18px;font-size:13px;line-height:1.4;color:#5d4037;text-align:left;\"><\/div>\n\n    <!-- Contenedor del widget Zadarma -->\n    <div id=\"cof-widget-zone\" style=\"display:flex;flex-direction:column;align-items:center;gap:8px;margin-bottom:18px;\">\n      <div id=\"cof-widget-host\" style=\"min-height:55px;display:flex;align-items:center;justify-content:center;\"><\/div>\n      <div id=\"cof-widget-hint\" style=\"font-size:12px;color:#888;max-width:340px;line-height:1.35;\">\n        Si el bot\u00f3n aparece <b>gris<\/b> (\"Busy\"), espera unos segundos: lo reintentaremos autom\u00e1ticamente.\n      <\/div>\n    <\/div>\n\n    <!-- Bot\u00f3n llamada telef\u00f3nica (siempre apunta a Colombia) -->\n    <a id=\"cof-tel-btn\" href=\"tel:+576044310502\" class=\"cof-tel-boton\">\n      <span style=\"margin-right:6px;font-size:16px;\">\u260e<\/span>\n      <span>Llamada Telef\u00f3nica<\/span>\n    <\/a>\n  <\/div>\n<\/div>\n\n<style>\n  #cof-llamada *{box-sizing:border-box}\n  .cof-paises{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;}\n  @media (min-width:480px){.cof-paises{grid-template-columns:repeat(3,1fr);}}\n  .cof-pais-btn{\n    display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;\n    padding:14px 8px;border:2px solid #e0e0e0;background:#fff;border-radius:12px;\n    font-family:inherit;font-size:13px;font-weight:600;color:#333;cursor:pointer;\n    transition:all .15s ease;min-height:84px;overflow:hidden;\n  }\n  .cof-pais-btn > span:last-child{\n    display:block;width:100%;text-align:center;\n    white-space:nowrap;overflow:hidden;text-overflow:ellipsis;\n    color:#333;\n  }\n  .cof-pais-btn:hover{border-color:#7ED321;background:#F4FBE9;transform:translateY(-1px);}\n  .cof-pais-btn:hover > span:last-child{color:#5a8a1f;}\n  .cof-pais-btn:active{transform:translateY(0);}\n  .cof-flag{font-size:28px;line-height:1;}\n\n  \/* Bot\u00f3n \"Cambiar pa\u00eds\" \u2014 llamativo *\/\n  #cof-volver{\n    display:inline-flex;align-items:center;gap:6px;\n    background:#fff;border:2px solid #7ED321;color:#5a8a1f;\n    font-family:inherit;font-size:14px;font-weight:700;\n    padding:8px 16px;border-radius:50px;cursor:pointer;\n    margin:0 0 14px;transition:all .15s ease;\n    box-shadow:0 2px 6px rgba(126,211,33,.2);\n  }\n  #cof-volver:hover{background:#7ED321;color:#fff;box-shadow:0 4px 10px rgba(126,211,33,.35);transform:translateY(-1px);}\n  #cof-volver:active{transform:translateY(0);}\n\n  .cof-tel-boton,\n  .cof-tel-boton:link,\n  .cof-tel-boton:visited{\n    display:inline-flex!important;align-items:center!important;justify-content:center!important;\n    text-decoration:none!important;background:rgb(126,211,33)!important;color:#fff!important;\n    font-family:inherit!important;padding:0 15px!important;border-radius:50px!important;\n    box-shadow:0 0 0 6px rgba(191,233,144,.8)!important;\n    width:180px!important;height:45px!important;font-size:14px!important;font-weight:normal!important;cursor:pointer!important;\n    line-height:1!important;border:none!important;\n    transform:none!important;\n    transition:background-color .2s ease!important;\n  }\n  .cof-tel-boton:hover,\n  .cof-tel-boton:focus,\n  .cof-tel-boton:active{\n    background:rgb(107,179,28)!important;\n    color:#fff!important;\n    box-shadow:0 0 0 6px rgba(191,233,144,.8)!important;\n    transform:none!important;\n    text-decoration:none!important;\n  }\n\n  \/* Est\u00e9tica del widget Zadarma \u2014 igual al bot\u00f3n \"Llamada Telef\u00f3nica\":\n     misma altura fija (45px), mismo halo verde claro, mismo radio.\n     Quitamos el halo en estados connecting\/speaking\/finished porque ah\u00ed\n     cambia de color y un halo verde se ver\u00eda incoherente. *\/\n  #cof-widget-host .z-callme-widget{\n    height:45px!important;\n  }\n  #cof-widget-host .callme__content{\n    height:45px!important;min-height:45px!important;\n    border-radius:50px!important;\n    box-shadow:0 0 0 6px rgba(191,233,144,.8)!important;\n    transition:background-color .2s ease!important;\n  }\n  \/* Hover en estado default: el halo NO cambia *\/\n  #cof-widget-host .callme--default .callme__content:hover{\n    box-shadow:0 0 0 6px rgba(191,233,144,.8)!important;\n  }\n  \/* Sin halo cuando est\u00e1 conectando, hablando o finalizado *\/\n  #cof-widget-host .callme--connecting .callme__content,\n  #cof-widget-host .callme--connecting .callme__content:hover,\n  #cof-widget-host .callme--speaking .callme__content,\n  #cof-widget-host .callme--speaking .callme__content:hover,\n  #cof-widget-host .callme--finished .callme__content,\n  #cof-widget-host .callme--finished .callme__content:hover{\n    box-shadow:none!important;\n  }\n  #cof-widget-host .callme__icon__text{line-height:1!important;display:inline-block!important;vertical-align:middle!important;}\n<\/style>\n\n<script>\n(function(){\n  \/\/ ----------------------------------------------------------------\n  \/\/ Configuraci\u00f3n por pa\u00eds\n  \/\/ ----------------------------------------------------------------\n  var TEL_COLOMBIA = '+576044310502';\n\n  var WIDGETS = {\n    CO: {\n      nombre: 'Colombia',\n      flag: '\ud83c\udde8\ud83c\uddf4',\n      sipDisplayName: 'Llamada Web - Colombia',\n      widgetId: 'n4tHhudfJct51Rh4DebUR8HjxrjvF6eeuUX8P3d7NKve1tux87AdKhKd1asse7vXVkCfs8pDr5z6s8NbvhtDnCS77k56c5t649267d34efe99415624c986d691e81bc',\n      sipId: '466492_0'\n    },\n    CR: {\n      nombre: 'Costa Rica',\n      flag: '\ud83c\udde8\ud83c\uddf7',\n      sipDisplayName: 'Llamada Web - Costa Rica',\n      widgetId: '7ZeYfx713pvsr2czVM98tmP6mbCGadgzbh8nnz2yGn3vptvVLycyGSYerhnV7ej2gp88sR4982K5N7LGk2msjnt9BnmU8JZY2e623300f540f05fd15c46d25e6e9fbc',\n      sipId: '466492_2'\n    },\n    SV: {\n      nombre: 'El Salvador',\n      flag: '\ud83c\uddf8\ud83c\uddfb',\n      sipDisplayName: 'Llamada Web - El Salvador',\n      widgetId: '9rgFx7G9bxmYFYPkpf9f6ebdkf3kt3Ufs7m6H59HG6U7zd6g8tJcA6AyNnJpnbYE9d71kjBvbSg6chcgxd8kFKdd17b6ScPna56a571d1de416dcc8d08d234b20dfee',\n      sipId: '466492_0'\n    },\n    HN: {\n      nombre: 'Honduras',\n      flag: '\ud83c\udded\ud83c\uddf3',\n      sipDisplayName: 'Llamada Web - Honduras',\n      widgetId: 'a33th8VcPeNkz54UgvAegjBnucCuhvKrLT36aT4ZbptvsN7jppd68fVfb8a6rM3ahru8xs9NG48KJEDpy31G9k1pcstm2N3P3403eb0f0d9feff63f5868229ee70ea2',\n      sipId: '466492_0'\n    },\n    \/\/ Panam\u00e1 y Otro pa\u00eds no tienen widget propio: usan el de Colombia\n    PA: { nombre: 'Panam\u00e1',    flag: '\ud83c\uddf5\ud83c\udde6', sipDisplayName: 'Llamada Web - Panam\u00e1', alias: 'CO' },\n    OT: { nombre: 'tu pa\u00eds',   flag: '\ud83c\udf0e', sipDisplayName: 'Llamada Web - Otros',  alias: 'CO' }\n  };\n\n  var DISCLAIMER_LOCAL = function(pais){\n    return '<b>Antes de continuar:<\/b> la llamada por internet es gratuita desde tu navegador. ' +\n           'Necesitar\u00e1s permitir el acceso al micr\u00f3fono.';\n  };\n  var DISCLAIMER_CO =\n    '<b>Antes de continuar:<\/b> la llamada por internet es gratuita desde tu navegador. ' +\n    'La llamada telef\u00f3nica conecta con el COF en Colombia.';\n\n  \/\/ ----------------------------------------------------------------\n  \/\/ Render del widget Zadarma con auto-retry\n  \/\/ ----------------------------------------------------------------\n  var widgetInstance = null;\n  var retryState = { count: 0, max: 5, lastClickAt: 0, observer: null };\n\n  \/\/ Pa\u00eds actualmente seleccionado (para el monkey-patch del display_name SIP)\n  var paisActual = null;\n\n  \/\/ Una sola vez, monkey-patcheamos JsSIP.UA para inyectar nuestro display_name.\n  \/\/ El widget Zadarma usa `display_name: configs.username` (un valor generado\n  \/\/ por el servidor que la app m\u00f3vil muestra como \"widget\"). Sustituy\u00e9ndolo\n  \/\/ antes de que JsSIP construya el UA, hacemos que la app reciba un nombre\n  \/\/ legible como \"Llamada Web - Honduras\". Si el servidor SIP de Zadarma\n  \/\/ descarta el display_name (por pol\u00edtica), no rompe nada \u2014 solo seguir\u00e1\n  \/\/ mostrando el username gen\u00e9rico.\n  function patchJsSipUA(){\n    if (window.__cofJsSipPatched) return;\n    if (typeof window.JsSIP === 'undefined' || !window.JsSIP.UA) return;\n    window.__cofJsSipPatched = true;\n    var OriginalUA = window.JsSIP.UA;\n    function PatchedUA(configuration){\n      try {\n        if (configuration && paisActual && paisActual.sipDisplayName) {\n          configuration.display_name = paisActual.sipDisplayName;\n        }\n      } catch(e){}\n      return new OriginalUA(configuration);\n    }\n    PatchedUA.prototype = OriginalUA.prototype;\n    \/\/ Copiar propiedades est\u00e1ticas (C, etc.) por si el widget las usa\n    for (var k in OriginalUA){ if (OriginalUA.hasOwnProperty(k)) PatchedUA[k] = OriginalUA[k]; }\n    window.JsSIP.UA = PatchedUA;\n  }\n\n  function showLoadError(html){\n    var el = document.getElementById('cof-zad-loading');\n    if (!el) return;\n    el.innerHTML = html;\n    el.style.display = 'block';\n  }\n\n  \/\/ Cada vez que se monta un widget creamos un id \u00fanico para el div destino.\n  \/\/ IMPORTANTE: el ID debe ser un identificador JS v\u00e1lido (sin guiones) porque\n  \/\/ Zadarma genera un callback JSONP con la forma `<id>.zadarmaCreate(...)` y\n  \/\/ los guiones rompen la sintaxis. Adem\u00e1s, la instancia del widget debe estar\n  \/\/ expuesta en window con ese mismo nombre \u2014 eso ya lo hace el constructor\n  \/\/ de Zadarma internamente cuando le pasas el id.\n  var __zadCounter = 0;\n\n  function montarWidget(cfg){\n    var host = document.getElementById('cof-widget-host');\n    __zadCounter++;\n    var targetId = 'myZadarmaCallmeWidget' + __zadCounter; \/\/ sin guiones\n\n    host.innerHTML =\n      '<div id=\"' + targetId + '\" style=\"min-width:180px;min-height:45px;\"><\/div>' +\n      '<div id=\"cof-zad-loading\" style=\"display:none;font-size:13px;color:#a04040;margin-top:6px;text-align:center;line-height:1.35;\"><\/div>';\n\n    retryState.count = 0;\n    retryState.lastClickAt = 0;\n    if (retryState.observer) { try { retryState.observer.disconnect(); } catch(e){} retryState.observer = null; }\n\n    var attempts = 0;\n    var maxAttempts = 80; \/\/ ~24s total\n    var trySetup = function(){\n      attempts++;\n      if (window.__zadarmaLoaderError) {\n        showLoadError('\u26a0 No se pudo cargar la llamada web. Usa el bot\u00f3n <b>Llamada Telef\u00f3nica<\/b>.');\n        return;\n      }\n      \/\/ El loader de Zadarma carga 3 scripts: detectWebRTC (define DetectRTC),\n      \/\/ jssip (define JsSIP) y widget (define ZadarmaCallmeWidget).\n      \/\/ Esperamos a que las 3 dependencias est\u00e9n listas en el orden correcto.\n      var ready =\n        typeof window.ZadarmaCallmeWidget !== 'undefined' &&\n        typeof window.JsSIP !== 'undefined' &&\n        typeof window.DetectRTC !== 'undefined';\n      if (!ready) {\n        if (attempts > maxAttempts) {\n          showLoadError('\u26a0 La llamada web no est\u00e1 disponible en este momento. Usa el bot\u00f3n <b>Llamada Telef\u00f3nica<\/b>.');\n          return;\n        }\n        return setTimeout(trySetup, 300);\n      }\n      try {\n        \/\/ Aplicar el patch de JsSIP.UA para inyectar nuestro display_name\n        patchJsSipUA();\n        paisActual = cfg;\n        \/\/ Zadarma genera un JSONP del tipo `<targetId>.zadarmaCreate(...)`,\n        \/\/ as\u00ed que la instancia DEBE estar expuesta globalmente con ese nombre.\n        widgetInstance = new ZadarmaCallmeWidget(targetId);\n        window[targetId] = widgetInstance;\n        widgetInstance.create(\n          { widgetId: cfg.widgetId, sipId: cfg.sipId, domElement: targetId },\n          {\n            shape: 'rounded', language: 'en', width: '180', dtmf: false,\n            font: \"'Trebuchet MS','Helvetica CY',sans-serif\",\n            color_call: 'rgb(255,255,255)', color_bg_call: 'rgb(126,211,33)', color_border_call: 'rgb(191,233,144)',\n            is_custom_hover: 1,\n            color_call_hover: 'rgb(255,255,255)', bg_call_hover: 'rgb(107,179,28)', border_call_hover: 'rgb(176,214,132)',\n            color_connection: 'rgb(255,255,255)', color_bg_connection: 'rgb(33,211,166)', color_border_connection: 'rgb(144,233,211)',\n            color_calling: 'rgb(255,255,255)', color_border_calling: 'rgb(255,218,128)', color_bg_calling: 'rgb(255,181,0)',\n            color_ended: 'rgb(255,255,255)', color_bg_ended: 'rgb(164,164,164)', color_border_ended: 'rgb(210,210,210)'\n          }\n        );\n\n        \/\/ Cuando el bot\u00f3n aparezca en el DOM, quitamos el \"Cargando...\" y\n        \/\/ cambiamos el texto a \"Llamada Web\". Lo hacemos con polling cortito.\n        var poll = 0;\n        var finish = function(){\n          poll++;\n          var t = host.querySelector('.callme__icon__text');\n          var btn = host.querySelector('.callme__button');\n          if (t || btn) {\n            if (t) t.textContent = 'Llamada Web';\n            engancharAutoRetry(host);\n            return;\n          }\n          if (poll < 40) setTimeout(finish, 250);\n          else {\n            showLoadError(\n              '\u26a0 La llamada web no est\u00e1 disponible para este pa\u00eds en este momento.<br>' +\n              'Por favor usa el bot\u00f3n <b>Llamada Telef\u00f3nica<\/b> de abajo.'\n            );\n          }\n        };\n        setTimeout(finish, 400);\n      } catch(e){\n        console.warn('Zadarma widget init error:', e);\n        showLoadError('\u26a0 Error al iniciar la llamada web. Usa el bot\u00f3n <b>Llamada Telef\u00f3nica<\/b>.');\n      }\n    };\n    trySetup();\n  }\n\n  \/\/ El widget Zadarma usa estas clases CSS para reflejar su estado:\n  \/\/   callme--default     \u2192 reposo (bot\u00f3n verde, listo para llamar)\n  \/\/   callme--connecting  \u2192 conectando (amarillo) \u2014 el usuario hizo click\n  \/\/   callme--speaking    \u2192 en llamada activa (verde \"speaking\")\n  \/\/   callme--finished    \u2192 llamada terminada o fall\u00f3 (gris, dice \"Busy\"\/\"Call ended\")\n  \/\/\n  \/\/ Estrategia auto-retry:\n  \/\/ - Mientras el usuario haya pulsado hace <60s, observamos el bot\u00f3n.\n  \/\/ - Si pasa a \"callme--finished\" SIN haber pasado por \"callme--speaking\",\n  \/\/   esperamos un breve momento para que el widget se calme y forzamos un\n  \/\/   click para reintentar (hasta 3 veces con back-off).\n  \/\/ - El widget Zadarma pone .callme__button como contenedor; las clases de\n  \/\/   estado est\u00e1n en el contenedor `.z-callme-widget.callme.callme--xxx`,\n  \/\/   que es uno de los ancestros del bot\u00f3n. Observamos ese contenedor.\n  \/\/ El widget Zadarma se controla via `mousedown` (NO click) en `.z-callme-widget`.\n  \/\/ Su m\u00e1quina de estados:\n  \/\/   default \u2192 mousedown \u2192 connection \u2192 (auto) speaking [si contesta]\n  \/\/                                    \u2192 ended           [si busy\/falla]\n  \/\/   ended   \u2192 mousedown \u2192 default\n  \/\/   default \u2192 mousedown \u2192 connection ...\n  \/\/\n  \/\/ Por eso para reintentar hay que disparar DOS mousedown: el primero saca de\n  \/\/ \"ended\" a \"default\", el segundo inicia la llamada nuevamente. Hay un\n  \/\/ `busyTimeout` interno de 1s que ignora clicks consecutivos demasiado r\u00e1pido.\n  function engancharAutoRetry(host){\n    var stateNode = host.querySelector('.z-callme-widget');\n    var clickTarget = host.querySelector('.callme__content') || stateNode;\n    if (!stateNode || !clickTarget) {\n      return setTimeout(function(){ engancharAutoRetry(host); }, 400);\n    }\n\n    var sawSpeaking = false;\n    var userClickedAt = 0;\n    var retryTimer = null;\n    \/\/ Una vez que la llamada lleg\u00f3 a \"speaking\", el ciclo se da por completo\n    \/\/ (haya colgado el usuario o el agente). Bloqueamos cualquier reintento\n    \/\/ hasta que el usuario inicie un NUEVO click manualmente.\n    var cycleConsumed = false;\n\n    var fireMouseDown = function(el){\n      \/\/ Disparamos mousedown (que es lo que escucha el widget en desktop)\n      \/\/ y, en m\u00f3vil t\u00e1ctil, mousedown se entrega igualmente porque lo\n      \/\/ dispatchamos a mano \u2014 no dependemos del touch\u2192mouse sint\u00e9tico.\n      try {\n        var ev;\n        try { ev = new MouseEvent('mousedown', { bubbles: true, cancelable: true, view: window }); }\n        catch(_) {\n          ev = document.createEvent('MouseEvents');\n          ev.initMouseEvent('mousedown', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n        }\n        el.dispatchEvent(ev);\n      } catch(e){}\n    };\n\n    \/\/ El usuario marca el inicio de una llamada deseada (touch o mouse).\n    \/\/ Reglas:\n    \/\/ - Solo eventos reales (isTrusted) \u2014 los sint\u00e9ticos del retry se ignoran.\n    \/\/ - Solo si el widget est\u00e1 en estado 'default' o 'finished'. Si est\u00e1 en\n    \/\/   'connecting' o 'speaking', el click es para colgar la llamada actual,\n    \/\/   NO para iniciar una nueva \u2192 no debe resetear el flag de cycleConsumed.\n    var markUserClick = function(e){\n      if (e && e.isTrusted === false) return;\n      var c = classes();\n      if (c.indexOf('callme--connecting') !== -1) return;\n      if (c.indexOf('callme--speaking') !== -1) return;\n      userClickedAt = Date.now();\n      retryState.count = 0;\n      sawSpeaking = false;\n      cycleConsumed = false;\n    };\n    stateNode.addEventListener('mousedown', markUserClick, true);\n    stateNode.addEventListener('touchstart', markUserClick, true);\n\n    var classes = function(){ return stateNode.className || ''; };\n\n    var triggerRetry = function(){\n      \/\/ No reintentar si la llamada ya se complet\u00f3 al menos una vez\n      if (cycleConsumed) return;\n      var userWanted = userClickedAt && (Date.now() - userClickedAt) < 60000;\n      if (!userWanted) return;\n      if (retryState.count >= retryState.max) return;\n      retryState.count++;\n      \/\/ Backoff: 1.5s, 2.0s, 2.5s \u2014 busyTimeout interno es 1s, hay que esperar m\u00e1s\n      var delay = 1100 + retryState.count * 400;\n      if (retryTimer) clearTimeout(retryTimer);\n      retryTimer = setTimeout(function(){\n        \/\/ 1) Primer mousedown: ended \u2192 default\n        fireMouseDown(clickTarget);\n        \/\/ 2) Segundo mousedown tras un breve respiro: default \u2192 connection\n        setTimeout(function(){ fireMouseDown(clickTarget); }, 250);\n      }, delay);\n    };\n\n    var observer = new MutationObserver(function(){\n      var c = classes();\n\n      if (c.indexOf('callme--speaking') !== -1) {\n        sawSpeaking = true;\n        cycleConsumed = true; \/\/ ya hubo conversaci\u00f3n \u2192 no m\u00e1s auto-retry\n        retryState.count = 0;\n        if (retryTimer) { clearTimeout(retryTimer); retryTimer = null; }\n        return;\n      }\n      if (c.indexOf('callme--finished') !== -1) {\n        \/\/ Lleg\u00f3 a \"ended\" sin haber hablado \u2192 Busy \/ fallo \u2192 reintento.\n        \/\/ Si ya hubo conversaci\u00f3n, marcamos el ciclo consumido y no reintentamos.\n        if (sawSpeaking) { cycleConsumed = true; return; }\n        triggerRetry();\n        return;\n      }\n      if (c.indexOf('callme--connecting') !== -1) {\n        if (retryTimer) { clearTimeout(retryTimer); retryTimer = null; }\n        return;\n      }\n    });\n\n    observer.observe(stateNode, { attributes: true, attributeFilter: ['class'] });\n    retryState.observer = observer;\n  }\n\n  \/\/ ----------------------------------------------------------------\n  \/\/ Navegaci\u00f3n entre pasos\n  \/\/ ----------------------------------------------------------------\n  function elegirPais(codigo){\n    var cfg = WIDGETS[codigo];\n    if (!cfg) return;\n    var efectivo = cfg.alias ? WIDGETS[cfg.alias] : cfg;\n\n    document.getElementById('cof-step-pais').style.display = 'none';\n    document.getElementById('cof-step-llamada').style.display = 'block';\n    document.getElementById('cof-pais-elegido').innerHTML =\n      cfg.flag + ' ' + cfg.nombre;\n\n    document.getElementById('cof-disclaimer').innerHTML =\n      (codigo === 'CO') ? DISCLAIMER_CO : DISCLAIMER_LOCAL(cfg.nombre);\n\n    \/\/ Solo Colombia tiene bot\u00f3n de llamada telef\u00f3nica.\n    \/\/ Usamos setProperty con priority 'important' porque el CSS del bot\u00f3n\n    \/\/ tiene `display:inline-flex !important`, que ignorar\u00eda un display inline normal.\n    var telBtn = document.getElementById('cof-tel-btn');\n    if (telBtn) {\n      if (codigo === 'CO') {\n        telBtn.style.setProperty('display', 'inline-flex', 'important');\n      } else {\n        telBtn.style.setProperty('display', 'none', 'important');\n      }\n    }\n\n    montarWidget(efectivo);\n  }\n\n  function volver(){\n    document.getElementById('cof-step-llamada').style.display = 'none';\n    document.getElementById('cof-step-pais').style.display = 'block';\n    if (retryState.observer) { try { retryState.observer.disconnect(); } catch(e){} retryState.observer = null; }\n    document.getElementById('cof-widget-host').innerHTML = '';\n  }\n\n  \/\/ Listeners\n  var paisBtns = document.querySelectorAll('.cof-pais-btn');\n  for (var i = 0; i < paisBtns.length; i++) {\n    paisBtns[i].addEventListener('click', function(){\n      elegirPais(this.getAttribute('data-pais'));\n    });\n  }\n  document.getElementById('cof-volver').addEventListener('click', volver);\n})();\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4f59b03 elementor-widget elementor-widget-html\" data-id=\"4f59b03\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\n  #respondio__widget, iframe[src*=\"respond.io\"] {\n    display: none !important;\n    visibility: hidden !important;\n    opacity: 0 !important;\n    pointer-events: none !important;\n  }\n<\/style>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>Si el bot\u00f3n &#8220;Llamada Web&#8221; aparece como &#8220;Busy&#8221; en gris, por favor, p\u00falsalo repetidamente hasta que cambie a color amarillo y pueda realizar la llamada. \u00bfDesde qu\u00e9 pa\u00eds nos contactas? Selecciona tu pa\u00eds para conectarte con el COF. \ud83c\udde8\ud83c\uddf4Colombia \ud83c\udde8\ud83c\uddf7Costa Rica \ud83c\uddf8\ud83c\uddfbEl Salvador \ud83c\udded\ud83c\uddf3Honduras \ud83c\uddf5\ud83c\udde6Panam\u00e1 \ud83c\udf0eOtro pa\u00eds \u2039 Cambiar pa\u00eds Si el bot\u00f3n aparece gris [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"class_list":["post-2579","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Llamada COF - TuConsejeria<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.tuconsejeria.com\/llamadacof\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Llamada COF - TuConsejeria\" \/>\n<meta property=\"og:description\" content=\"Si el bot\u00f3n &#8220;Llamada Web&#8221; aparece como &#8220;Busy&#8221; en gris, por favor, p\u00falsalo repetidamente hasta que cambie a color amarillo y pueda realizar la llamada. \u00bfDesde qu\u00e9 pa\u00eds nos contactas? Selecciona tu pa\u00eds para conectarte con el COF. \ud83c\udde8\ud83c\uddf4Colombia \ud83c\udde8\ud83c\uddf7Costa Rica \ud83c\uddf8\ud83c\uddfbEl Salvador \ud83c\udded\ud83c\uddf3Honduras \ud83c\uddf5\ud83c\udde6Panam\u00e1 \ud83c\udf0eOtro pa\u00eds \u2039 Cambiar pa\u00eds Si el bot\u00f3n aparece gris [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.tuconsejeria.com\/llamadacof\/\" \/>\n<meta property=\"og:site_name\" content=\"TuConsejeria\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-29T22:01:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/tuconsejeria.com\/wp-content\/uploads\/2025\/05\/Se-vale-pedir-ayuda-y-querer-ser-escuchado-1024x1024.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.tuconsejeria.com\/llamadacof\/\",\"url\":\"https:\/\/www.tuconsejeria.com\/llamadacof\/\",\"name\":\"Llamada COF - TuConsejeria\",\"isPartOf\":{\"@id\":\"https:\/\/54.175.213.91\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.tuconsejeria.com\/llamadacof\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.tuconsejeria.com\/llamadacof\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/tuconsejeria.com\/wp-content\/uploads\/2025\/05\/Se-vale-pedir-ayuda-y-querer-ser-escuchado-1024x1024.png\",\"datePublished\":\"2025-03-01T22:59:31+00:00\",\"dateModified\":\"2026-04-29T22:01:29+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.tuconsejeria.com\/llamadacof\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.tuconsejeria.com\/llamadacof\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.tuconsejeria.com\/llamadacof\/#primaryimage\",\"url\":\"https:\/\/tuconsejeria.com\/wp-content\/uploads\/2025\/05\/Se-vale-pedir-ayuda-y-querer-ser-escuchado-1024x1024.png\",\"contentUrl\":\"https:\/\/tuconsejeria.com\/wp-content\/uploads\/2025\/05\/Se-vale-pedir-ayuda-y-querer-ser-escuchado-1024x1024.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.tuconsejeria.com\/llamadacof\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/tuconsejeria.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Llamada COF\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/54.175.213.91\/#website\",\"url\":\"https:\/\/54.175.213.91\/\",\"name\":\"TuConsejeria\",\"description\":\"Promovemos el bienestar emocional y psicol\u00f3gico a grupos vulnerables y desatendidos abordando sus necesidades espec\u00edficas.\",\"publisher\":{\"@id\":\"https:\/\/54.175.213.91\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/54.175.213.91\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/54.175.213.91\/#organization\",\"name\":\"TuConsejeria\",\"url\":\"https:\/\/54.175.213.91\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/54.175.213.91\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/tuconsejeria.com\/wp-content\/uploads\/2024\/11\/e37b110cd866adacdf88851140929316.svg\",\"contentUrl\":\"https:\/\/tuconsejeria.com\/wp-content\/uploads\/2024\/11\/e37b110cd866adacdf88851140929316.svg\",\"width\":184,\"height\":30,\"caption\":\"TuConsejeria\"},\"image\":{\"@id\":\"https:\/\/54.175.213.91\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Llamada COF - TuConsejeria","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.tuconsejeria.com\/llamadacof\/","og_locale":"en_US","og_type":"article","og_title":"Llamada COF - TuConsejeria","og_description":"Si el bot\u00f3n &#8220;Llamada Web&#8221; aparece como &#8220;Busy&#8221; en gris, por favor, p\u00falsalo repetidamente hasta que cambie a color amarillo y pueda realizar la llamada. \u00bfDesde qu\u00e9 pa\u00eds nos contactas? Selecciona tu pa\u00eds para conectarte con el COF. \ud83c\udde8\ud83c\uddf4Colombia \ud83c\udde8\ud83c\uddf7Costa Rica \ud83c\uddf8\ud83c\uddfbEl Salvador \ud83c\udded\ud83c\uddf3Honduras \ud83c\uddf5\ud83c\udde6Panam\u00e1 \ud83c\udf0eOtro pa\u00eds \u2039 Cambiar pa\u00eds Si el bot\u00f3n aparece gris [&hellip;]","og_url":"https:\/\/www.tuconsejeria.com\/llamadacof\/","og_site_name":"TuConsejeria","article_modified_time":"2026-04-29T22:01:29+00:00","og_image":[{"url":"https:\/\/tuconsejeria.com\/wp-content\/uploads\/2025\/05\/Se-vale-pedir-ayuda-y-querer-ser-escuchado-1024x1024.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.tuconsejeria.com\/llamadacof\/","url":"https:\/\/www.tuconsejeria.com\/llamadacof\/","name":"Llamada COF - TuConsejeria","isPartOf":{"@id":"https:\/\/54.175.213.91\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.tuconsejeria.com\/llamadacof\/#primaryimage"},"image":{"@id":"https:\/\/www.tuconsejeria.com\/llamadacof\/#primaryimage"},"thumbnailUrl":"https:\/\/tuconsejeria.com\/wp-content\/uploads\/2025\/05\/Se-vale-pedir-ayuda-y-querer-ser-escuchado-1024x1024.png","datePublished":"2025-03-01T22:59:31+00:00","dateModified":"2026-04-29T22:01:29+00:00","breadcrumb":{"@id":"https:\/\/www.tuconsejeria.com\/llamadacof\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.tuconsejeria.com\/llamadacof\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.tuconsejeria.com\/llamadacof\/#primaryimage","url":"https:\/\/tuconsejeria.com\/wp-content\/uploads\/2025\/05\/Se-vale-pedir-ayuda-y-querer-ser-escuchado-1024x1024.png","contentUrl":"https:\/\/tuconsejeria.com\/wp-content\/uploads\/2025\/05\/Se-vale-pedir-ayuda-y-querer-ser-escuchado-1024x1024.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.tuconsejeria.com\/llamadacof\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/tuconsejeria.com\/"},{"@type":"ListItem","position":2,"name":"Llamada COF"}]},{"@type":"WebSite","@id":"https:\/\/54.175.213.91\/#website","url":"https:\/\/54.175.213.91\/","name":"TuConsejeria","description":"Promovemos el bienestar emocional y psicol\u00f3gico a grupos vulnerables y desatendidos abordando sus necesidades espec\u00edficas.","publisher":{"@id":"https:\/\/54.175.213.91\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/54.175.213.91\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/54.175.213.91\/#organization","name":"TuConsejeria","url":"https:\/\/54.175.213.91\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/54.175.213.91\/#\/schema\/logo\/image\/","url":"https:\/\/tuconsejeria.com\/wp-content\/uploads\/2024\/11\/e37b110cd866adacdf88851140929316.svg","contentUrl":"https:\/\/tuconsejeria.com\/wp-content\/uploads\/2024\/11\/e37b110cd866adacdf88851140929316.svg","width":184,"height":30,"caption":"TuConsejeria"},"image":{"@id":"https:\/\/54.175.213.91\/#\/schema\/logo\/image\/"}}]}},"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tuconsejeria.com\/en\/wp-json\/wp\/v2\/pages\/2579","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tuconsejeria.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tuconsejeria.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tuconsejeria.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tuconsejeria.com\/en\/wp-json\/wp\/v2\/comments?post=2579"}],"version-history":[{"count":114,"href":"https:\/\/tuconsejeria.com\/en\/wp-json\/wp\/v2\/pages\/2579\/revisions"}],"predecessor-version":[{"id":3202,"href":"https:\/\/tuconsejeria.com\/en\/wp-json\/wp\/v2\/pages\/2579\/revisions\/3202"}],"wp:attachment":[{"href":"https:\/\/tuconsejeria.com\/en\/wp-json\/wp\/v2\/media?parent=2579"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}