Guide d’installation du widget
Ajoutez TapToChat à votre site web avec un seul extrait à copier-coller. Aucune compétence en développement requise.
Démarrage rapide
3 étapes simples :
- 1
Créez un compte et un widget
Récupérez votre identifiant de widget unique dans le tableau de bord
- 2
Copiez votre code d’installation
Choisissez HTML, React, Next.js ou WordPress
- 3
Collez-le avant </body>
Ajoutez le code à votre site web et c’est terminé !
Méthodes d’installation
HTML / Sites statiques
Pour les sites statiques, le HTML brut ou tout site où vous pouvez ajouter des 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
Pour les applications 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
Pour Next.js 13+ avec l’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
Pour les sites WordPress. Ajoutez-le à functions.php ou utilisez une extension comme « 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');Options de configuration
Personnalisez votre widget en passant des options supplémentaires à la fonction 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+)
});| Option | Type | Description |
|---|---|---|
| widgetId | string | Votre identifiant de widget unique (obligatoire) |
| position | string | Position de secours du widget : 'bottom-right' ou 'bottom-left'. À partir d’embed.js 1.1.1, le widget affiche la position valide enregistrée dans votre tableau de bord et utilise cette valeur lorsqu’aucun réglage valide du tableau de bord n’est disponible (vide, invalide ou impossible à charger), puis la position par défaut. Pour les installations figées sur la version 1.0.x ou 1.1.0, le réglage du tableau de bord ne remplace pas cette valeur. |
| color | string | Couleur de secours du bouton d’ouverture au format hexadécimal (par ex. '#3B82F6'). À partir d’embed.js 1.1.1, le widget affiche la couleur valide enregistrée dans votre tableau de bord et utilise cette valeur lorsqu’aucun réglage valide du tableau de bord n’est disponible (vide, invalide ou impossible à charger), puis la couleur par défaut. Pour les installations figées sur la version 1.0.x ou 1.1.0, le réglage du tableau de bord ne remplace pas cette valeur. |
Versions et épinglage
Les extraits ci-dessus chargent la dernière version 1.x du script du widget. Les correctifs et améliorations arrivent automatiquement sur votre site, en cinq minutes environ, sans jamais changer la façon d’installer ou de configurer le widget.
Si votre politique de sécurité exige un script qui ne change jamais, épinglez plutôt une version précise. Le navigateur de vos visiteurs compare le fichier à son empreinte d’intégrité et le refuse s’il diffère. Pour recevoir les correctifs, mettez à jour l’extrait vous-même.
<!-- 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 -->Content Security Policy
Si votre site envoie un en-tête Content-Security-Policy, autorisez https://cdn.taptochat.io dans script-src et https://taptochat.io dans frame-src.
Bonnes pratiques
À placer avant </body>
Ajoutez le script juste avant la balise body fermante, pour des performances optimales et pour garantir que le DOM est bien chargé.
Chargement asynchrone
Le widget se charge de façon asynchrone : il ne bloque pas le rendu de votre page et ne ralentit pas votre site.
Testez d’abord en préproduction
Testez le widget dans un environnement de développement ou de préproduction avant de le déployer en production.
Gardez le widget actif
Vérifiez que votre widget est bien réglé sur « Actif » dans les paramètres du tableau de bord pour qu’il s’affiche sur votre site.
Dépannage
Le widget ne s’affiche pas ?
- •Vérifiez que votre widget est réglé sur « Actif » dans le tableau de bord
- •Vérifiez que l’identifiant de widget de votre code correspond à celui du tableau de bord
- •Videz le cache de votre navigateur et forcez le rechargement (Ctrl+Shift+R ou Cmd+Shift+R)
- •Consultez la console du navigateur à la recherche d’erreurs JavaScript
Toujours un problème ?
Contactez notre équipe support à hello+support@taptochat.io ou utilisez le widget de chat de cette page.
Prêt à vous lancer ?
Créez votre compte gratuit et ajoutez le chat en direct à votre site web dès aujourd’hui.