Documentation
OneConnector rend votre site joignable par les IA. Une IA qui aide quelqu'un (Claude, ChatGPT, Le Chat de Mistral, ou toute IA compatible MCP) peut consulter vos disponibilités ou votre catalogue, et vous envoyer un message, une demande de devis, une réservation ou une commande. Les demandes arrivent dans votre espace et par e-mail, ou sur votre webhook (Make, Zapier, n8n, votre serveur).
1. Comment ça marche
IA du client ──MCP──▶ OneConnector ──▶ votre espace et votre e-mail
│ ou votre webhook signé (Make, serveur…)
◀── réponse à champs fermés ──┘
- Preuve du domaine. Une ligne posée sur votre page d'accueil prouve que le site est à vous. Sans elle, aucune IA ne peut vous joindre par OneConnector.
- Demandes signées. Chaque envoi à votre webhook porte une signature calculée avec votre secret.
- Réponse à champs fermés. L'IA ne lit jamais de texte libre venant de votre webhook : un statut, un créneau, un prix et une référence, rien d'autre. Personne ne peut donc la manipuler par ce biais.
- Le client confirme. Avant tout envoi, l'IA affiche une fiche : le client relit, saisit lui-même ses coordonnées et répond à vos questions, puis clique sur « Envoyer ».
2. Mettre en place
- Connectez-vous sur oneconnector.dev avec votre e-mail. Le lien reçu vaut 15 minutes et ne sert qu'une fois. Pas de mot de passe.
- Ajoutez votre site. Le webhook est facultatif : sans lui, les demandes arrivent dans votre espace et par e-mail.
-
Collez les deux lignes dans le pied de page de
votre site (elles doivent être sur la page d'accueil) :
Le lien, lisible sans JavaScript, dit aux IA qui lisent votre site qu'elles peuvent vous joindre, et mène à votre page publique (voir plus bas). Le script prouve que le site est à vous et transforme le lien en pastille « Joignable par les IA ». Le lien seul ne prouve rien : une zone de commentaires pourrait le laisser passer. Options :<a href="https://oneconnector.dev/b/mondomaine.fr" data-oc-badge>Joignable par les IA via OneConnector</a> <script src="https://oneconnector.dev/w.js" data-oc="oc_xxxxxxxx"></script>data-pos="bottom-right"ou"inline"pour la déplacer (bas gauche par défaut),data-lang="fr"ou"en"pour forcer sa langue (par défaut, celle de la page). Sans pastille, une balise suffit :<meta name="oneconnector" content="oc_xxxxxxxx">. - Cliquez sur « Vérifier ». OneConnector lit votre page d'accueil en HTML brut, sans exécuter de JavaScript : la ligne doit être présente dans le code envoyé par votre serveur, comme une vraie balise. Recopiée dans un commentaire, dans un texte ou dans l'attribut d'un autre élément, elle ne compte pas.
-
Testez votre webhook avec « Envoyer un exemple » :
vous recevez un JSON d'exemple du type choisi, marqué
"test": true, pour que Make apprenne sa structure.
Règles de vérification
- La vérification est refaite chaque jour. Si la ligne disparaît, l'accès est coupé jusqu'à la prochaine vérification réussie. Si votre site ne répond pas (panne, délai, protection anti-robots), rien ne change pendant 7 jours ; au-delà, faute d'avoir revu la ligne, l'accès est coupé.
- C'est la ligne qui décide, pas l'ordre d'arrivée : plusieurs inscriptions peuvent attendre pour un même domaine, mais une seule est vérifiée à la fois.
- Si une nouvelle inscription se vérifie alors qu'une autre l'est déjà, la première est revérifiée : si sa ligne a disparu, la nouvelle prend le relais ; si elle est toujours sur la page, la nouvelle est refusée.
- Une inscription sans compte jamais vérifiée est supprimée au bout de 7 jours.
Page publique
Une fois le site vérifié, OneConnector publie
oneconnector.dev/b/votre-domaine : une page en HTML
simple, lisible par les IA et les moteurs de recherche, avec votre
présentation, ce qu'on peut vous demander et la marche à suivre pour
vous joindre depuis une IA. Votre catalogue n'y figure pas : il reste
consultable par les IA via le connecteur. Elle figure dans le plan du site, et les
moteurs compatibles IndexNow (dont Bing) sont prévenus quand elle
change. L'onglet « Installation » affiche ses visites sur 30 jours
par type de visiteur (ChatGPT, Claude, Perplexity, moteurs, humains),
sans adresse IP. Vous pouvez la retirer à tout moment.
Identité affichée
À chaque vérification, OneConnector reprend de votre page d'accueil
votre nom (og:site_name, sinon le titre de la page),
votre couleur (<meta name="theme-color">) et votre
icône (PNG, JPEG, WebP, GIF ou ICO, pas de SVG, 64 ko au plus). Elles
s'affichent en tête des fiches que voit le client.
3. Types de demandes
Dans les réglages de votre site, vous cochez ce que les IA peuvent faire :
| Type | Famille | Ce que fait l'IA | Webhook |
|---|---|---|---|
availability |
consultation | consulte vos créneaux libres, sur 14 jours au plus | requis |
catalog |
consultation | cherche dans votre catalogue | facultatif (catalogue hébergé, voir 4) |
message |
demande | vous écrit | facultatif |
quote |
demande | vous demande un devis | facultatif |
booking |
demande | demande une réservation, sur 1 à 3 créneaux | facultatif |
order |
demande | passe une commande d'articles de votre catalogue | facultatif |
Consultations : aucune donnée du client n'est envoyée, OneConnector interroge votre webhook en direct (ou votre catalogue hébergé). Demandes : elles partent avec les coordonnées du client, après sa confirmation.
4. Sans webhook : votre espace
Chaque demande arrive dans « Demandes reçues » et par e-mail. Répondre à l'e-mail écrit directement au client. Dans l'espace, vous répondez avec les quatre champs fermés (voir 6) : accepter, refuser ou proposer autre chose, avec un créneau, un prix et une référence. L'IA du client lit votre réponse quand on lui demande où en est la demande.
Présentation
Quand une IA vous trouve, elle lit votre nom et une courte
description. Par défaut, ceux de votre page d'accueil (og:site_name
ou le titre, og:description ou
<meta name="description">), relus à chaque
vérification. Vous pouvez écrire les vôtres dans l'onglet « Réglages »
: ils remplacent ceux du site, et un champ vidé fait revenir à celui
du site. Nom en 60 caractères, description en 300, sur une ligne, sans
lien ni autre site que le vôtre. L'IA reçoit ce texte comme une donnée
fournie par le commerce, jamais comme une instruction.
Catalogue hébergé
Sans webhook, OneConnector peut aussi héberger votre catalogue : produits ou prestations, que les IA consultent et commandent par leur référence. Onglet « Catalogue » de votre site :
-
Flux produits : l'adresse du flux Google Shopping
de votre boutique (XML ou TSV :
g:id,g:title,g:price,g:sale_price,g:availability,g:link,g:description…). Il est relu chaque nuit ; rien n'est réécrit s'il n'a pas changé. L'adresse doit être en https, sur votre site ou chez votre service de flux, et le site doit être vérifié. - Copier-coller depuis un tableur, avec une ligne d'en-tête : Nom, Prix, Réf, Lien, Durée, Disponible, Description. Remplace tout le catalogue.
-
API :
PUT /business/:id/catalogavec le secret (voir 11).
Ce que lisent les IA reste borné : nom (80 caractères), prix en euros, disponibilité, durée et lien vers une page de votre site (les liens vers d'autres sites sont retirés). Les descriptions, catégories et marques servent seulement à la recherche. 2 000 articles au plus. S'il est rempli, le catalogue hébergé prime sur le webhook. Les disponibilités, elles, demandent toujours un webhook.
5. Ce que reçoit votre webhook
Un POST en JSON (Content-Type: application/json), avec trois en-têtes :
| En-tête | Contenu |
|---|---|
x-oneconnector-business |
votre identifiant oc_… |
x-oneconnector-timestamp |
heure d'envoi, en secondes depuis 1970 |
x-oneconnector-signature |
sha256=…, voir 9 |
Champs communs
| Champ | Type | Description |
|---|---|---|
v |
nombre | version du contrat, 1 |
id |
texte |
req_… pour une demande, rd_… pour une
consultation
|
kind |
texte | le type (voir 3) |
test |
booléen |
true pour un exemple envoyé depuis l'espace, absent
sinon
|
sent_at |
date ISO | heure d'envoi, en UTC |
timezone |
texte | votre fuseau horaire (ex. Europe/Paris) |
Demandes (message, quote,
booking, order)
| Champ | Types | Description |
|---|---|---|
message |
tous |
le besoin du client, 600 caractères au plus ; obligatoire pour
message et quote
|
service |
booking | prestation souhaitée, 120 caractères au plus |
slots |
booking |
1 à 3 créneaux souhaités, dans votre heure
locale (ex. 2026-10-18T10:00)
|
slots_utc |
booking | les mêmes en UTC (ce qu'attendent Calendly, Cal.com, Google Agenda) |
party_size |
booking | nombre de personnes, de 1 à 50 |
address |
quote | adresse ou commune concernée, 200 caractères au plus |
deadline |
quote | date souhaitée, AAAA-MM-JJ |
items |
order |
1 à 20 articles { "sku", "qty" }, quantités de 1 à
99
|
pickup, pickup_utc |
order | retrait souhaité, en heure locale et en UTC |
fields |
tous | réponses à vos questions (voir 8) |
contact |
tous |
{ "name", "email", "phone" }, saisis par le client
; e-mail ou téléphone toujours présent
|
answer_url |
tous | adresse pour répondre plus tard (voir 7) |
Un champ sans valeur est absent du JSON. Exemple de réservation :
{
"v": 1,
"id": "req_8kq2m7xw4p",
"kind": "booking",
"sent_at": "2026-10-14T16:02:11.482Z",
"timezone": "Europe/Paris",
"message": "Coupe et barbe si possible.",
"service": "Coupe homme",
"slots": ["2026-10-18T10:00", "2026-10-18T11:30"],
"slots_utc": ["2026-10-18T08:00:00.000Z", "2026-10-18T09:30:00.000Z"],
"party_size": 1,
"fields": [{ "key": "q1", "label": "Allergies", "value": "aucune" }],
"contact": { "name": "Julien Martin", "email": "julien@example.com" },
"answer_url": "https://oneconnector.dev/requests/req_8kq2m7xw4p/answer"
}
Consultations
| Type | Champs |
|---|---|
availability |
from et to (AAAA-MM-JJ,
14 jours au plus), service si précisé
|
catalog |
q (ce que cherche le client, 120 caractères au
plus), limit (de 1 à 20, 10 par défaut)
|
6. Ce que votre webhook répond
Répondez en moins de 10 secondes, avec un code HTTP 2xx et du JSON. Les redirections ne sont pas suivies. Un délai dépassé ou un code d'erreur vaut « non transmise », et l'IA en est informée. Tout champ inconnu ou invalide est ignoré : il n'est jamais transmis à l'IA.
Pour une demande
| Champ | Valeurs |
|---|---|
status |
received (par défaut), accepted,
declined ou
proposed (contre-proposition)
|
slot |
un créneau, date ISO (2026-10-18T14:00 en heure
locale, ou avec décalage)
|
price_eur |
un nombre, de 0 à 1 000 000 |
reference |
1 à 24 lettres, chiffres ou tirets |
{ "status": "proposed", "slot": "2026-10-18T14:00", "price_eur": 35, "reference": "A7K2" }
Pour availability
{ "slots": ["2026-10-18T10:00", "2026-10-18T11:00", "2026-10-18T14:00"] }
Dates ISO, en heure locale ou avec décalage. Les valeurs invalides sont jetées, les doublons retirés, le tout trié, 50 créneaux au plus.
Pour catalog
{ "items": [
{ "sku": "PAIN-500", "name": "Pain de campagne 500 g", "price_eur": 3.2, "in_stock": true },
{ "sku": "ATELIER", "name": "Atelier pâtisserie", "price_eur": 45, "duration_min": 120, "starts_at": "2026-10-25T14:00" }
] }
| Champ | Règle |
|---|---|
sku |
obligatoire, 1 à 64 lettres, chiffres, .,
_ ou - ; c'est lui qui sert à
commander
|
name |
obligatoire, ramené sur une ligne et coupé à 80 caractères ; un nom qui contient un lien fait jeter l'article |
price_eur, in_stock |
facultatifs : nombre, booléen |
url |
facultatif : page du produit, gardée seulement si elle est sur votre domaine vérifié (https) |
duration_min, starts_at |
facultatifs : minutes (1 à 1440), date ISO (ateliers, séances) |
7. Répondre plus tard
Si vous ne savez pas répondre tout de suite, renvoyez
{ "status": "received" }, puis répondez quand vous le
pouvez, depuis votre espace ou par un appel à
answer_url avec votre secret et le même JSON fermé :
curl -X POST https://oneconnector.dev/requests/req_8kq2m7xw4p/answer \
-H "Authorization: Bearer VOTRE_SECRET" \
-H "Content-Type: application/json" \
-d '{ "status": "accepted", "slot": "2026-10-18T10:00", "reference": "B-12" }'
Votre secret est visible dans votre espace (réglages du site, « Afficher »). L'IA du client lit la réponse quand il lui demande où en est sa demande.
8. Questions au client
Dans les réglages de votre site, « Questions au client » : jusqu'à 3 questions auxquelles le client répond lui-même dans la fiche, avant d'envoyer sa demande. Exemples : le modèle du véhicule pour un garage, le nombre de parts pour une pâtisserie, un budget pour un artisan.
- Intitulé : 2 à 40 caractères, sur une ligne, sans lien.
- Type : texte (200 caractères au plus), nombre, date ou liste de choix (2 à 6 choix de 30 caractères).
- Obligatoire ou non : une demande sans réponse à une question obligatoire est refusée.
-
Clés stables : chaque question garde sa clé
(
q1,q2…), même si vous en retirez une autre. Vos correspondances dans Make ne bougent pas.
Les réponses arrivent dans fields, dans l'ordre de vos
questions, avec une valeur typée (un nombre pour une question « nombre
») :
"fields": [
{ "key": "q1", "label": "Nombre de parts", "value": 12 },
{ "key": "q2", "label": "Parfum", "value": "Chocolat" }
]
Elles figurent aussi dans l'e-mail d'avis et dans votre espace. Une question sans réponse (facultative) est absente.
9. Vérifier la signature
La signature vaut sha256= suivi du HMAC-SHA256 en
hexadécimal de horodatage + "." + corps brut, avec votre
secret comme clé. Vérifiez-la sur le corps exact reçu, avant de le
transformer, et refusez un horodatage de plus de 5 minutes. En Node.js
:
import { createHmac, timingSafeEqual } from "node:crypto";
function verify(secret, headers, rawBody) {
const ts = headers["x-oneconnector-timestamp"];
const given = String(headers["x-oneconnector-signature"] ?? "").replace(/^sha256=/, "");
const expected = createHmac("sha256", secret).update(`${ts}.${rawBody}`).digest("hex");
const fresh = Math.abs(Date.now() / 1000 - Number(ts)) < 300;
return fresh && given.length === expected.length && timingSafeEqual(Buffer.from(given), Buffer.from(expected));
}
10. Recettes Make
Toujours Webhooks → Custom webhook en entrée (aucune
connexion à créer), un Router sur kind,
et Webhooks → Webhook response en sortie, avec
l'en-tête Content-Type: application/json.
-
E-mail : Gmail → Send an email, puis la réponse
{"status":"received"}. Pour répondre plus tard, un module HTTP vers{{1.answer_url}}avec votre secret. -
Calendly (offre payante pour réserver) :
availability→ Get available times →{"slots": [...]};booking→ Book a meeting sur un desslots_utc→{"status":"accepted", …}. -
Catalogue : Google Sheets (filtre « contient » sur
q) ou une base vectorielle (Pinecone, avecsku,name,price_eur,in_stocken métadonnées) →{"items": [...]}. -
Questions : chaque réponse se trouve dans
fields; dans Make, filtrez surkeypour retrouver une question donnée.
Après un changement de votre site (types, questions), cliquez sur « Envoyer un exemple » puis, dans Make, sur « Redetermine data structure ».
11. API
Tout ce que fait l'espace se fait aussi par API, avec l'identifiant et le secret d'un site :
| Appel | Accès | Rôle |
|---|---|---|
POST /register |
libre |
inscrire un site sans compte (domain,
webhook_url obligatoire, kinds,
timezone) ; renvoie l'identifiant, le secret et la
ligne à poser
|
PATCH /business/:id |
secret |
modifier webhook_url, kinds,
timezone, questions,
name, description (vide : ceux du
site)
|
DELETE /business/:id |
secret | supprimer l'inscription et ses demandes |
POST /verify/:id |
secret ou session | vérifier la ligne sur la page d'accueil |
GET /status/:id |
libre | domaine, types, fuseau, date de vérification |
POST /test/:id?kind=… |
secret ou session | envoyer un exemple au webhook |
POST /requests/:id/answer |
secret | répondre plus tard (voir 7) |
PUT /business/:id/catalog |
secret |
remplacer le catalogue hébergé :
{ "items": [{ "sku", "name", "price_eur", "in_stock", "url",
"duration_min", "description" }] }
ou { "text": "…" } (tableau)
|
Le secret se passe dans l'en-tête
Authorization: Bearer … ; depuis l'espace, votre session
suffit. Un site inscrit par API se rattache à votre compte dans
l'espace (« Rattacher un site »).
12. Le connecteur
Adresse du connecteur : https://oneconnector.dev/mcp.
C'est un serveur MCP standard (Streamable HTTP, sans authentification)
: il fonctionne avec toute application IA compatible MCP, dont Claude,
ChatGPT et Le Chat de Mistral. Dans les réglages des connecteurs de
votre application, ajoutez un connecteur MCP personnalisé avec cette
adresse. Selon l'application, il faut parfois une offre payante, un
mode développeur ou un compte administrateur. Outils exposés :
| Outil | Rôle |
|---|---|
resolve |
le site est-il joignable, que peut-on y consulter et lui demander, et comment le commerce se présente (nom, description) |
get_availability |
créneaux libres, avec une grille cliquable |
search_catalog |
recherche dans le catalogue |
prepare_request |
prépare la demande et l'affiche en fiche de confirmation ; n'envoie rien |
send_request |
envoie la demande confirmée ; un même brouillon ne part jamais deux fois |
get_request |
état d'une demande, y compris une réponse arrivée plus tard |
Les fiches s'affichent dans les applications compatibles MCP Apps (Claude, ChatGPT, VS Code…). Ailleurs, l'IA travaille en texte : elle demande les coordonnées et les réponses dans la conversation, avec le même contrôle.