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
Regístrate y crea un widget
Consigue tu ID de widget único en el panel
- 2
Copia tu código de instalación
Elige entre HTML, React, Next.js o WordPress
- 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ón | Tipo | Descripción |
|---|---|---|
| widgetId | string | Tu ID de widget único (obligatorio) |
| position | string | Posició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. |
| color | string | Color 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.