Skip to main content

Guía de instalación del widget

Añade TapToChat a tu sitio web con un fragmento que copias y pegas. No necesitas saber programar.

Inicio rápido

3 pasos sencillos:

  1. 1

    Regístrate y crea un widget

    Consigue tu ID de widget único en el panel

  2. 2

    Copia tu código de instalación

    Elige entre HTML, React, Next.js o WordPress

  3. 3

    Pégalo antes de </body>

    ¡Añade el código a tu sitio web y listo!

Métodos de instalación

HTML / Sitios estáticos

Para sitios estáticos, HTML puro o cualquier web donde puedas añadir scripts.

<!-- TapToChat Widget -->
<script>
  (function(w,d,s,o,f,js,fjs){
    w['TapToChat']=o;w[o] = w[o] || function () { (w[o].q = w[o].q || []).push(arguments) };
    js = d.createElement(s), fjs = d.getElementsByTagName(s)[0];
    js.id = o; js.src = f; js.async = 1; fjs.parentNode.insertBefore(js, fjs);
  }(window, document, 'script', 'taptochat', 'https://cdn.taptochat.io/widget/v1/embed.js'));
  taptochat('init', { widgetId: 'YOUR_WIDGET_ID' });
</script>
<!-- End TapToChat Widget -->

React

Para aplicaciones React (Create React App, Vite, etc.).

// Add to your App.js or main component
import { useEffect } from 'react';

function App() {
  useEffect(() => {
    const config = { widgetId: 'YOUR_WIDGET_ID' };

    // Set the config BEFORE injecting the script: embed.js reads
    // window.TapToChatConfig as soon as it loads, so there is no onload
    // callback to race against.
    window.TapToChatConfig = config;

    if (window.TapToChat) {
      // Already loaded (a remount, or another component mounted it).
      window.TapToChat.init(config);
    } else if (!document.getElementById('taptochat')) {
      // Guarded by id so StrictMode's double-invoked effect cannot inject
      // the script twice.
      const script = document.createElement('script');
      script.src = 'https://cdn.taptochat.io/widget/v1/embed.js';
      script.async = true;
      script.id = 'taptochat';
      document.body.appendChild(script);
    }

    return () => {
      // destroy() removes the widget and detaches its listeners and timers.
      // The <script> stays on the page and cached, so a remount re-initialises
      // immediately via the branch above.
      if (window.TapToChat) window.TapToChat.destroy();
    };
  }, []);

  return <div className="App">{/* Your app */}</div>;
}

Next.js

Para Next.js 13+ con App Router.

// Create app/components/TapToChatWidget.tsx
'use client'

import { useEffect } from 'react'

declare global {
  interface Window {
    TapToChatConfig?: Record<string, unknown>
    TapToChat?: {
      init: (config?: Record<string, unknown>) => void
      open: () => void
      close: () => void
      toggle: () => void
      isOpen: () => boolean
      destroy: () => void
    }
  }
}

export function TapToChatWidget() {
  useEffect(() => {
    const config = { widgetId: 'YOUR_WIDGET_ID' }

    // Config first: embed.js auto-initialises from window.TapToChatConfig the
    // moment it loads, so nothing has to race an onload handler.
    window.TapToChatConfig = config

    if (window.TapToChat) {
      window.TapToChat.init(config)
    } else if (!document.getElementById('taptochat')) {
      // StrictMode runs this effect twice in development; the id guard keeps
      // the second pass from injecting a duplicate script.
      const script = document.createElement('script')
      script.src = 'https://cdn.taptochat.io/widget/v1/embed.js'
      script.async = true
      script.id = 'taptochat'
      document.body.appendChild(script)
    }

    return () => {
      window.TapToChat?.destroy()
    }
  }, [])

  return null
}

// Then in your app/layout.tsx:
import { TapToChatWidget } from './components/TapToChatWidget'

export default function RootLayout({ children }) {
  return (
    <html>
      <body>
        {children}
        <TapToChatWidget />
      </body>
    </html>
  )
}

WordPress

Para sitios WordPress. Añádelo a functions.php o usa un plugin como “Insert Headers and Footers”.

// Add to functions.php
function taptochat_widget() {
  ?>
  <!-- TapToChat Widget -->
  <script>
    (function(w,d,s,o,f,js,fjs){
      w['TapToChat']=o;w[o] = w[o] || function () { (w[o].q = w[o].q || []).push(arguments) };
      js = d.createElement(s), fjs = d.getElementsByTagName(s)[0];
      js.id = o; js.src = f; js.async = 1; fjs.parentNode.insertBefore(js, fjs);
    }(window, document, 'script', 'taptochat', 'https://cdn.taptochat.io/widget/v1/embed.js'));
    taptochat('init', { widgetId: 'YOUR_WIDGET_ID' });
  </script>
  <?php
}
add_action('wp_footer', 'taptochat_widget');

Opciones de configuración

Personaliza tu widget pasando opciones adicionales a la función init:

taptochat('init', {
  widgetId: 'YOUR_WIDGET_ID',  // Required
  position: 'bottom-right',     // Optional; a valid dashboard setting wins (embed.js 1.1.1+)
  color: '#3B82F6'              // Optional; a valid dashboard setting wins (embed.js 1.1.1+)
});
OpciónTipoDescripción
widgetIdstringTu ID de widget único (obligatorio)
positionstringPosición de respaldo del widget: 'bottom-right' o 'bottom-left'. Desde embed.js 1.1.1, el widget muestra la posición válida guardada en tu panel y usa este valor cuando no hay un ajuste válido del panel disponible (está vacío, no es válido o no se puede cargar); si tampoco hay este valor, usa la predeterminada. En las instalaciones fijadas a la versión 1.0.x o 1.1.0, el ajuste del panel no sustituye a este valor.
colorstringColor de respaldo del botón de apertura en formato hexadecimal (p. ej., '#3B82F6'). Desde embed.js 1.1.1, el widget muestra el color válido guardado en tu panel y usa este valor cuando no hay un ajuste válido del panel disponible (está vacío, no es válido o no se puede cargar); si tampoco hay este valor, usa el predeterminado. En las instalaciones fijadas a la versión 1.0.x o 1.1.0, el ajuste del panel no sustituye a este valor.

Versiones y fijación

Los fragmentos de arriba cargan la última versión 1.x del script del widget. Las correcciones y mejoras llegan a tu sitio automáticamente, en unos cinco minutos, y nunca cambian cómo instalas o configuras el widget.

Si tu política de seguridad exige un script que no cambie nunca, fija una versión exacta. Los navegadores de tus visitantes comparan el archivo con su hash de integridad y lo rechazan si no coincide. Para recibir correcciones, actualiza tú el fragmento.

<!-- TapToChat Widget -->
<script>
  (function(w,d,s,o,f,js,fjs){
    w['TapToChat']=o;w[o] = w[o] || function () { (w[o].q = w[o].q || []).push(arguments) };
    js = d.createElement(s), fjs = d.getElementsByTagName(s)[0];
    js.id = o; js.src = f; js.async = 1;
    js.integrity = 'sha384-Hzg8SyhG1oeTZdlxq12ixNKuS1aGiMmxQ3kpToMVROmqA1er0EcPHWPMtzX9Nuv+'; js.crossOrigin = 'anonymous'; fjs.parentNode.insertBefore(js, fjs);
  }(window, document, 'script', 'taptochat', 'https://cdn.taptochat.io/widget/1.1.8/embed.js'));
  taptochat('init', { widgetId: 'YOUR_WIDGET_ID' });
</script>
<!-- End TapToChat Widget -->

Política de seguridad de contenido (CSP)

Si tu sitio envía una cabecera Content-Security-Policy, permite https://cdn.taptochat.io en script-src y https://taptochat.io en frame-src.

Buenas prácticas

Colócalo antes de </body>

Añade el script justo antes de la etiqueta body de cierre para lograr el mejor rendimiento y asegurarte de que el DOM ya está cargado.

Carga asíncrona

El widget se carga de forma asíncrona, así que no bloquea el renderizado de tu página ni ralentiza tu sitio.

Pruébalo antes en staging

Prueba el widget en un entorno de desarrollo o staging antes de desplegarlo en producción.

Mantén el widget activo

Asegúrate de que tu widget esté marcado como “Activo” en los ajustes del panel para que aparezca en tu sitio.

Solución de problemas

¿El widget no aparece?

  • •Comprueba que tu widget esté marcado como “Activo” en el panel
  • •Verifica que el ID de widget de tu código coincida con el del panel
  • •Vacía la caché del navegador y recarga forzando (Ctrl+Shift+R o Cmd+Shift+R)
  • •Revisa la consola del navegador en busca de errores de JavaScript

¿Sigues teniendo problemas?

Escribe a nuestro equipo de soporte a hello+support@taptochat.io o usa el widget de chat de esta página.

¿Todo listo para empezar?

Crea tu cuenta gratuita y añade chat en vivo a tu sitio web hoy mismo.