Données de la boutique pour le bot
Le bot de l'IA dans le chat peut répondre non seulement à partir de la base de connaissances, mais aussi avec les données en direct de la boutique : où en est la commande, quel est le numéro de suivi, le produit est-il en stock, combien coûte la livraison, comment retourner un achat. Et si vous l'autorisez, il peut annuler une commande non payée ou transmettre à la boutique une demande de retour ou de modification de la livraison. Pour cela, la boutique se connecte au bot via le protocole MCP (Model Context Protocol) : le bot appelle les outils de la boutique, qui lui répond avec ses données.
La boutique peut se connecter avec n'importe quel forfait, mais le bot, comme toute l'IA du chat, fonctionne avec un forfait payant : les réponses utilisant les données de la boutique se paient comme les autres réponses de l'IA, sur le solde du projet : voir Paiement.
Connexion
Le plus simple est de passer par notre module pour la boutique. Le module démarre lui-même le serveur et le connecte au projet à l'enregistrement des réglages :
| Plateforme | Où l'activer |
|---|---|
| WooCommerce | WooCommerce → Settings → OneTrace.ru → AI chat bot: store MCP |
| Magento 2 | Stores → Configuration → OneTrace.ru → AI chat bot: store MCP → Connect to the chat bot |
| 1C-Bitrix | Réglages du module → onglet du site → bloc AI chat bot: store MCP → Connect to the chat bot |
La clé secrète du module doit disposer de l'autorisation « Connexion du serveur MCP de la boutique au bot IA » (chats.manage). Les autorisations d'une clé ne peuvent pas être modifiées après sa création : si la clé du module ne l'a pas, créez dans la section Clés API une nouvelle clé avec les mêmes autorisations plus celle-ci et indiquez-la dans les réglages du module. Les sites d'un même projet ne se connectent qu'une fois.
Une boutique sur mesure en PHP ou Laravel se connecte avec le serveur prêt à l'emploi de la bibliothèque PHP et du paquet Laravel : il ne reste au développeur qu'à écrire les gestionnaires des outils. Tout autre serveur qui respecte le contrat MCP de la boutique se connecte manuellement : dans Chats → Réglages du chat → Bot → Boutique (MCP), indiquez l'adresse https://…, la clé d'accès émise par la boutique et un nom. Le contrat, avec la description des outils, des erreurs et de la vérification du client, figure dans la section Pour les développeurs.

La section Boutique (MCP) indique si le serveur fonctionne et quels outils la boutique a autorisés pour le bot. L'interrupteur désactive temporairement le serveur ; le bouton d'actualisation le vérifie de nouveau et relit les outils (la plateforme le fait aussi d'elle-même une fois par jour).
Ce que le bot peut faire
C'est la boutique qui décide de ce qui est autorisé au bot, dans les réglages du module. Par défaut, seule la lecture est activée :
| Outil | Ce que fait le bot |
|---|---|
| Commandes du client, commande | trouve les commandes du client et donne le détail d'une commande : articles, montant, paiement, mode de livraison, adresse |
| Suivi | indique le transporteur et le numéro de suivi, donne le lien de suivi |
| Disponibilité et prix | cherche un produit par nom ou référence, dit s'il est disponible et dans quelles variantes |
| Livraison | énumère les modes de livraison avec leur prix et le seuil de livraison gratuite |
| Conditions de retour | résume les conditions de retour de la boutique |
Les actions restent désactivées tant que la boutique ne les autorise pas :
| Action | Ce qui se passe |
|---|---|
| Annulation de la commande | le bot annule une commande pour laquelle rien n'a été payé ni expédié |
| Demande de retour | la demande part à la boutique, en commentaire de la commande et par e-mail à l'équipe |
| Modification de la livraison | la demande de nouvelle adresse, date ou heure part à la boutique de la même façon |
Les descriptions des outils destinées au modèle sont fixées par la plateforme, et non par la boutique, et le bot traite les réponses de la boutique comme des données, jamais comme des instructions. Si la réponse du bot contient des prix, des délais ou des promesses absents des données de la boutique, le contrôle de la réponse ne la laisse pas partir vers le client.
Vérification du client
Les commandes et les actions sur celles-ci ne sont accessibles qu'à un client vérifié : le bot ne montrera pas la commande de quelqu'un d'autre et ne confirmera même pas qu'elle existe. Le client peut être vérifié de deux façons :
- Connexion sur le site. Si le client est connecté à son compte de la boutique, le module transmet au widget du chat un jeton signé : le bot sait tout de suite qui écrit.
- Code. Dans les messageries et pour les visiteurs non connectés, le bot demande l'e-mail indiqué dans la boutique ; la boutique y envoie un code à 6 chiffres, que le client saisit dans le chat. Le code est valable 10 minutes, avec au plus 5 codes par heure pour une même adresse.
La vérification reste valable 24 heures. L'opérateur la voit dans la fenêtre de la conversation : « client confirmé : connecté sur le site » ou « client confirmé par un code ». Le jeton du client est conservé chiffré dans la conversation ; ni le modèle ni les opérateurs ne le voient.
Actions dans la boutique
Le bot n'effectue une action qu'après l'accord explicite du client :
- Le bot décrit ce qu'il va faire (numéro de commande, articles) et demande confirmation.
- Le client donne son accord dans le chat, par exemple « oui, annulez ».
- Un modèle d'évaluation distinct vérifie que le client a bien accepté cette action précise. Une question, un doute ou une autre demande ne valent pas accord.
- La boutique effectue l'action ; un nouvel appel de la même action ne la répète pas.
Dans les échanges apparaît la ligne « Le bot a effectué dans la boutique : … » avec le résultat, et dans le journal d'audit du projet, l'entrée « Action du bot dans la boutique ». Le brouillon de l'opérateur n'utilise les données de la boutique qu'en lecture : les actions, l'opérateur les effectue lui-même dans la boutique.

Pour les développeurs
Votre propre serveur peut être connecté s'il respecte la version 1 du contrat MCP de la boutique. Pour PHP et Laravel, le contrat est déjà implémenté : la classe StoreMcp\Server de la bibliothèque PHP et la route POST /onetrace/mcp du paquet Laravel ; il ne reste qu'à écrire les gestionnaires des outils.
Transport. MCP Streamable HTTP, version du protocole 2025-06-18 : une seule adresse, des requêtes POST en JSON-RPC 2.0, une réponse en JSON ou un flux text/event-stream contenant une seule réponse. L'adresse est uniquement en https:// sur une IP publique, sans redirection. La réponse doit arriver en 10 secondes au plus et ne pas dépasser 256 Ko. La plateforme appelle initialize, notifications/initialized, tools/list et tools/call ; l'en-tête Mcp-Session-Id est pris en charge, mais pas obligatoire.
Accès. Chaque requête porte Authorization: Bearer <clé> ; la clé est créée par la boutique et compte au moins 32 caractères aléatoires. Une requête sans clé ou avec une autre clé reçoit la réponse 401.
Marqueur du contrat. Dans la réponse à initialize, le serveur déclare capabilities.experimental["onetrace/store"] = { "version": 1 } ; sans ce marqueur, le serveur n'est pas connecté.
Outils. Les noms sont exactement ceux du tableau ; tools/list ne renvoie que ceux autorisés par le propriétaire. Chacun porte l'annotation readOnlyHint: true (lecture) ou destructiveHint: true (action) et _meta["onetrace/auth"] : customer exige un client vérifié, none non. Le résultat est structuredContent, avec le même JSON sous forme de texte dans content[0].text. Les montants sont au format { "amount": 1250.5, "currency": "RUB" }, les dates en ISO 8601.
| Outil | Accès | Entrée | Résultat |
|---|---|---|---|
store_start_verification |
none | contact, order |
sent, channel, destination |
store_verify |
none | contact, code |
customer_token, expires_at |
store_get_customer |
customer | — | id, email, phone, first_name |
store_find_orders |
customer | status, limit (jusqu'à 20) |
orders : order, created_at, status, status_label, total, items_count |
store_get_order |
customer | order |
commande avec items, total, payment, shipping, can_cancel, can_return |
store_get_tracking |
customer | order |
carrier, tracking_number, tracking_url, status, events |
store_check_availability |
none | query, sku ou product_id |
products (jusqu'à 10) avec in_stock, quantity, variants |
store_get_delivery_options |
none | country, city, postcode, total |
methods : name, price, free_from, min_days, max_days |
store_get_return_policy |
none | — | days, conditions, text, url |
store_cancel_order |
customer | order, reason |
order, status, message |
store_create_return |
customer | order, items, reason |
return_id, status, instructions |
store_change_delivery |
customer | order, address, date, time_window |
order, message |
Le statut de commande est l'une des valeurs pending, processing, on_hold, shipped, delivered, completed, cancelled, refunded, failed. Pour la commande d'un autre client, la réponse est not_found, comme si elle n'existait pas.
Client. Le jeton customer_token est émis et vérifié par la boutique, pour une durée de 24 heures au plus. La boutique envoie elle-même le code de confirmation et répond de la même façon que le client existe ou non ; le code compte 6 chiffres, vaut 10 minutes, avec 5 tentatives au plus et 5 codes par heure au plus pour une même adresse. Pour un client connecté, la page transmet le jeton au traceur : cdp.chatCustomer('…').
Contexte de l'appel dans params._meta : onetrace/customer_token, onetrace/language (langue de la conversation), onetrace/conversation, et pour les actions onetrace/confirmed: true et onetrace/idempotency_key. Le serveur refuse une action sans onetrace/confirmed ; une répétition avec la même clé d'idempotence renvoie le même résultat sans refaire l'action.
Erreurs : isError: true et structuredContent: { "error": "<code>", "message": "<texte pour le client>" } :
| Code | Quand |
|---|---|
auth_required |
un client vérifié est requis |
invalid_code |
code erroné ou expiré |
not_found |
cette commande ou ce produit n'existe pas |
not_allowed |
l'action n'est pas possible dans cet état ou a été désactivée par le propriétaire |
invalid_input |
arguments invalides |
rate_limited |
trop de requêtes ou de codes |
unavailable |
panne temporaire de la boutique |
Connexion depuis un module. Le module enregistre son serveur avec une clé secrète disposant de l'autorisation chats.manage : PUT /api/v1/chat/store-mcp avec url, key, name, platform connecte ou met à jour le serveur, DELETE /api/v1/chat/store-mcp avec url le déconnecte.