L’agent commercial répond dans le widget de votre siteTous les articles

L’agent commercial répond dans le widget de votre site

Les demandes arrivent la nuit et le week-end. Ce cas montre comment un widget y répond sans qu’un script de navigateur voie jamais votre clé API.

Publié: 2026-09-12Temps de lecture: 5 minAPI tapinomahub & processus
API & processusAPIAftermarket automobileMarketplacesPrix & évaluationCommerce de piècesCommerce automobile

Beaucoup de demandes sur une pièce d’occasion sont les trois mêmes questions : convient-elle à mon véhicule, combien coûte le port, dans quel état est-elle. Elles arrivent le soir et le week-end, et qui attend lundi achète ailleurs. Un formulaire recueille la question mais n’y répond pas.

L’agent commercial répond dans le widget de votre siteEntrée : un visiteur ouvre le widget ; il s’authentifie par une clé de canal, jamais votre clé API 1. Configurer le widget (GET /web/channel): title, greeting, accentColor, locale et maxMessageChars pour l’interface 2. Démarrer la conversation (POST /web/conversations): conversationId et la première réponse, avec needsHuman et owner 3. Poursuivre l’échange (POST /web/conversations/{conversationId}/messages): Une réponse par tour avec seq ; le même clientMessageId renvoie la réponse enregistrée 4. Clore la conversation (POST /web/conversations/{conversationId}/close): Une conversation close qui reste traçable dans la boîte de réception Sortie : demandes traitées en continu, avec transfert à un humain si nécessaire needsHuman n’est pas une erreur mais la limite intégrée de l’agent. L’ignorer, c’est vendre la confiance.L’agent commercial répond dans le widget de votre siteEntrée : un visiteur ouvre le widget ; il s’authentifie par une clé de canal, jamais votre clé API01Configurer le widgetGET /web/channeltitle, greeting, accentColor, locale et maxMessageChars pour l’interface02Démarrer la conversationPOST /web/conversationsconversationId et la première réponse, avec needsHuman et owner03Poursuivre l’échangePOST /web/conversations/{conversationId}/messagesUne réponse par tour avec seq ; le même clientMessageId renvoie la réponse enregistrée04Clore la conversationPOST /web/conversations/{conversationId}/closeUne conversation close qui reste traçable dans la boîte de réceptionSortie : demandes traitées en continu, avec transfert à un humain si nécessaireneedsHuman n’est pas une erreur mais la limite intégrée de l’agent. L’ignorer, c’est vendre la confiance.
Quatre appels de la passerelle navigateur. needsHuman et owner indiquent à chaque réponse qui est compétent.

Le canal site est conçu comme une passerelle navigateur, non comme un appel Hub à identifiant caché : le widget s’authentifie par une clé de canal, remplaçable à tout moment. Votre clé API reste sur le serveur, à sa place.

SurfaceRôles
Agent commercialCommerce de pièces, Commerce automobile, Plateforme et marketplace

Ce que ce cas suppose

  • Un profil configuré. L’agent répond selon son instruction ; sans profil, ni ton, ni règles, ni permissions.
  • Un canal site avec origines autorisées. allowedOrigins définit depuis quelles adresses le widget peut parler — c’est la protection contre l’usage abusif de la clé de canal. À la configuration du widget et au démarrage d’une conversation, l’Origin de la requête doit figurer parmi ces origines, sinon la passerelle répond par origin_not_allowed.
  • Le jeton de visiteur. GET /web/channel le délivre ; la passerelle l’attend en retour dans l’en-tête X-Agent-Visitor.
  • Un endroit où aboutissent les transferts. needsHuman sans boîte de réception est un avertissement que personne ne lit.

Le déroulement

Le tableau indique pour chaque étape l’appel compétent et ce qui existe ensuite. La justification de l’étape figure en dessous.

La chaîne d’appels de ce cas d’usage
ÉtapeAppelCe qui existe ensuite
Configurer le widgetGET /web/channeltitle, greeting, accentColor, locale et maxMessageChars pour l’interface
Démarrer la conversationPOST /web/conversationsconversationId et la première réponse, avec needsHuman et owner
Poursuivre l’échangePOST /web/conversations/{conversationId}/messagesUne réponse par tour avec seq ; le même clientMessageId renvoie la réponse enregistrée
Clore la conversationPOST /web/conversations/{conversationId}/closeUne conversation close qui reste traçable dans la boîte de réception

Pourquoi chaque étape est nécessaire

  1. Configurer le widget. GET /web/channel renvoie title, greeting, accentColor, locale, pollIntervalSeconds et maxMessageChars. L’interface n’est donc pas câblée dans le script mais chargée du canal — changer le message d’accueil n’exige aucune reconstruction de page.
  2. Démarrer la conversation. POST /web/conversations accepte le premier message et exécute aussitôt le premier tour. Reviennent conversationId, seq et la réponse, avec needsHuman et owner. Un second appel pour la première réponse serait une attente évitable.
  3. Poursuivre l’échange. POST /web/conversations/{conversationId}/messages exécute chaque tour suivant. Le clientMessageId compte plus qu’il n’y paraît : si un message est renvoyé avec le même clientMessageId, l’appel renvoie la réponse enregistrée au lieu de recommencer.
  4. Clore la conversation. POST /web/conversations/{conversationId}/close la termine. Close ne veut pas dire supprimée — l’historique reste traçable dans la boîte, et c’est précisément utile en cas de réclamation.
Démarrer une conversation depuis le widget
curl -X POST \
  -H 'X-Agent-Channel-Key: <KANALSCHLUESSEL>' \
  -H 'X-Agent-Visitor: <BESUCHERTOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{"message":"Passt der Scheinwerfer an einen Golf 7 Facelift?","clientMessageId":"m-1"}' \
  'https://api.tapinomahub.com/agent/api/index.php/web/conversations'

Ce que l’on obtient

Au final, le site répond lui-même aux questions récurrentes et transmet les autres, avec leur historique, à un collègue. Le visiteur n’attend pas lundi, et le collègue ne part pas de zéro.

Où cela figure dans la documentation

Les listes de champs contractuelles, les codes d’erreur et les réponses d’exemple se trouvent dans le contrat OpenAPI de cette surface, à l’adresse docs.tapinomahub.com (tapinoma-agent). Tous les cas d’usage classés par surface et par rôle : aperçu des cas d’usage.

Sources et références juridiques

Questions fréquentes

Ma clé API arrive-t-elle dans le navigateur ?

Non. Le widget s’authentifie par une clé de canal valable pour ce seul canal, et remplaçable. La clé API reste côté serveur.

Et si un tiers copie la clé de canal ?

C’est l’objet des origines autorisées et de la possibilité de changer la clé. S’y ajoutent des limites de tours par visiteur et de conversations par heure.

Puis-je changer l’accueil sans reconstruire la page ?

Oui. Le widget charge titre, accueil et couleur d’accent depuis le canal. Une modification du canal prend effet au chargement suivant.