Chatwick
Retour au site Tableau de bord

Documentation

Branchez un assistant IA qui répond depuis le contenu de votre site, sur WordPress ou sur n'importe quel framework.

Comment ça marche

Chatwick ajoute un assistant conversationnel à votre site. Il répond à partir du contenu réel de votre site (pages, articles, produits), pas avec des réponses génériques. Les clés des fournisseurs d'IA restent chez nous : votre site ne détient qu'une clé de compte.

Deux voies d'intégration, au choix :

  • WordPress : l'extension officielle, la plus simple (aucun code).
  • API ouverte : pour tout autre site ou framework (React, Vue, Next.js, Laravel, Symfony, Rails, site statique...).

Dans les deux cas, la facturation est identique : crédits prépayés, 1 crédit = 1 conversation, solde partagé entre vos sites.

WordPress le plus simple

  1. Installez l'extension « Chatwick » depuis l'annuaire des extensions de votre administration WordPress, ou depuis wordpress.org/plugins/chatwick.
  2. Créez une clé de site dans votre tableau de bord (« Ajouter un site »), puis collez-la dans le plugin : réglages, « Connexion Cloud », « Clé de compte ».
  3. Indexez votre contenu : « Base de connaissances », « Synchroniser » (la synchro est ensuite automatique à chaque publication ou modification).
  4. Activez la bulle de chat, ou posez le shortcode [waicb_chatbot] où vous voulez.

C'est tout. Le plugin gère l'apparence, la persona et la connexion au service ; vous n'avez aucun code à écrire.

Autres sites et frameworks (API ouverte)

Sur un site non-WordPress, on ajoute le widget via un petit script. Votre clé secrète reste sur votre serveur : le navigateur ne reçoit qu'un jeton de session court, renouvelé automatiquement. Trois étapes.

1. Créez et configurez une clé

Dans votre tableau de bord, ajoutez un site pour obtenir une clé. Dans l'éditeur de la clé, réglez l'apparence du widget (titre, couleur, message d'accueil, position) et la persona (instructions de l'assistant). Cette clé est votre clé secrète : elle ne doit jamais apparaître côté navigateur.

2. Un endpoint « token » sur votre serveur

Il appelle notre API avec votre clé secrète et renvoie au navigateur le jeton (et la configuration d'affichage). Quelques exemples :

Laravel

Route::get('/chatwick-token', fn () =>
    Http::withToken(config('services.chatwick.key'))
        ->post('https://api.chatwick.app/api/session.php')->json());

Next.js (route handler)

export async function GET() {
  const r = await fetch('https://api.chatwick.app/api/session.php', {
    method: 'POST',
    headers: { Authorization: `Bearer ${process.env.CHATWICK_KEY}` }
  });
  return Response.json(await r.json());
}

Node.js / Express

app.get('/chatwick-token', async (req, res) => {
  const r = await fetch('https://api.chatwick.app/api/session.php', {
    method: 'POST',
    headers: { Authorization: `Bearer ${process.env.CHATWICK_KEY}` }
  });
  res.json(await r.json());
});

Cloudflare Worker / serverless (utile même pour un site statique)

export default {
  async fetch(request, env) {
    const r = await fetch('https://api.chatwick.app/api/session.php', {
      method: 'POST',
      headers: { Authorization: `Bearer ${env.CHATWICK_KEY}` }
    });
    return new Response(await r.text(), {
      headers: { 'content-type': 'application/json' }
    });
  }
};

3. Le script sur vos pages

<script src="https://api.chatwick.app/widget.js"
        data-token-url="/chatwick-token" defer></script>

Le widget récupère le jeton et la configuration, s'affiche et discute. Le jeton expire au bout de 20 minutes et est renouvelé automatiquement via votre endpoint.

Bon à savoir : le data-token-url doit pointer vers votre propre endpoint (celui de l'étape 2), qui, lui seul, connaît la clé secrète. Vous pouvez aussi injecter un jeton déjà émis via data-token="...".

Indexer le contenu (hors WordPress)

Au départ, le chat ne connaît que la persona. Pour qu'il réponde depuis vos pages, tarifs et articles, deux options, au choix :

  • Ingestion (push) : votre serveur nous envoie le contenu. Contrôle total, idéal quand il provient d'une base ou d'un CMS.
  • Crawler : Chatwick explore votre site tout seul et réindexe chaque semaine. Rien à coder.

Ingestion (push)

Un appel serveur-à-serveur avec votre clé secrète, comme le fait la synchro du plugin WordPress.

curl -X POST https://api.chatwick.app/api/kb-ingest.php \
  -H "Authorization: Bearer VOTRE_CLE_SECRETE" \
  -H "Content-Type: application/json" \
  -d '{
    "documents": [
      { "id": "accueil", "title": "Accueil", "url": "https://monsite.com/",       "content": "Texte de la page d accueil..." },
      { "id": "tarifs",  "title": "Tarifs",  "url": "https://monsite.com/tarifs", "content": "Nos formules et prix..." }
    ]
  }'

# 200 -> { "ok": true, "results": { "indexed": 2, ... }, "chunks_total": ... }

Règles utiles :

  • id : identifiant stable et unique par document (URL ou slug). Renvoyer le même id met le document à jour au lieu de le dupliquer.
  • content : le texte de la page (sans HTML).
  • Jusqu'à 50 documents par requête ; réappelez quand votre contenu change (un contenu inchangé n'est pas ré-indexé).
  • Retirer un document de l'index : { "id": "tarifs", "deleted": true }.

Après l'ingestion, le bot répond depuis ce contenu (avec citation des sources), exactement comme sur WordPress. Chaque site a sa base cloisonnée.

Crawler (indexation automatique)

Laissez Chatwick explorer votre site tout seul : il lit le sitemap (ou suit les liens internes), extrait le texte et réindexe. Rien à coder.

  • Depuis le tableau de bord, éditez la clé du site : renseignez l'URL, cochez « Réindexer automatiquement chaque semaine », ou cliquez « Crawler maintenant ».
  • Par API (serveur) : POST /api/kb-crawl.php avec la clé secrète (déclenche un crawl à la demande).

Sécurité : le crawl est limité au domaine de votre clé et refuse les adresses privées ou internes.

Référence API

Base : https://api.chatwick.app. Toutes les requêtes sont en POST, corps JSON.

POST /api/session.php serveur

Émet un jeton de session court. À appeler depuis votre serveur, avec la clé secrète en en-tête Authorization: Bearer.

curl -X POST https://api.chatwick.app/api/session.php \
  -H "Authorization: Bearer VOTRE_CLE_SECRETE"

# 200 -> { "token": "...", "expires_in": 1200,
#          "config": { "title", "color", "welcome", "position" } }

POST /api/chat.php

Envoie un message et reçoit la réponse. Deux modes d'authentification :

  • navigateur Authorization: Bearer <jeton de session> (obtenu ci-dessus).
  • serveur champ account_key dans le corps (mode utilisé par le plugin WordPress).
curl -X POST https://api.chatwick.app/api/chat.php \
  -H "Authorization: Bearer JETON_DE_SESSION" \
  -H "Content-Type: application/json" \
  -d '{"message":"Bonjour","conversation_id":"abc123"}'

# 200 -> { "reply": "...", "model": "...", "credits_left": 812, "sources": [...] }
# 402 -> crédits épuisés / quota atteint     401 -> auth invalide

Champs du corps : message (requis), conversation_id (recommandé, regroupe les échanges d'un visiteur pour la facturation), history (optionnel, tableau {role, content}), site_url (optionnel). En mode navigateur, l'appel doit venir du domaine lié à la clé (vérifié via l'en-tête Origin).

POST /api/kb-ingest.php serveur

Indexe (ou met à jour, ou retire) des documents. Auth par clé secrète. Corps : { documents: [ { id, title?, url?, content } | { id, deleted:true } ] }. Voir la section « Ingestion (push) ».

POST /api/kb-crawl.php serveur

Déclenche l'indexation autonome (crawl) du site. Auth par clé secrète. Corps optionnel : { url?, max_pages? } (URL déduite du domaine de la clé). Voir la section « Crawler ».

Configuration du widget

L'apparence et la persona se règlent par clé, dans le tableau de bord (éditeur d'une clé). Aucune de ces valeurs n'est à coder côté site :

  • Titre, couleur, message d'accueil, position (bas droite ou bas gauche) : renvoyés au widget dans config.
  • Persona (instructions de l'assistant) : appliquée côté serveur, jamais exposée au visiteur.

Facturation

Crédits prépayés, sans abonnement. 1 crédit = 1 conversation : les échanges d'un même visiteur sur une fenêtre de temps comptent pour un seul crédit. Le solde est partagé entre tous vos sites ; un quota mensuel par site permet d'en plafonner un sans toucher aux autres. Recharge par mobile money (Orange Money, Wave, Free Money) ou carte, sans engagement.

Sécurité

  • La clé secrète ne quitte jamais votre serveur ; le navigateur ne détient qu'un jeton de session court.
  • Le jeton est lié à votre domaine : une page sur un autre domaine est refusée (vérification de l'Origin, non falsifiable par du JavaScript).
  • Un plafond de conversations par jour et par clé (réglable) borne toute consommation anormale.
  • Les clés des fournisseurs d'IA (OpenAI, Anthropic) restent côté service, jamais exposées à votre site.

Dépannage

« Domaine non autorisé »

La clé (ou le jeton) est utilisée depuis un domaine différent de celui lié à la clé. Utilisez la clé créée pour ce site précis, ou vérifiez le domaine lié dans le tableau de bord.

Le chat ne répond plus

Vérifiez le solde de crédits et le quota du site. Un solde à zéro coupe le chat de tout le compte ; un site ayant atteint son quota mensuel est mis en pause (les autres continuent).

L'assistant répond à côté

Indexez (ou réindexez) votre contenu, et précisez la persona dans l'éditeur de la clé pour cadrer le ton et le périmètre des réponses.

Besoin d'aide ? Écrivez-nous à contact@im-mass.com, ou créez un compte pour obtenir votre clé.