INODESK est le hub de la relation client de CONTROL : formulaires, demandes, SLA, portail de suivi. Un site branché, c'est un formulaire qui arrive dans une file traitée par l'équipe INOVERTIX, avec un numéro de demande et un lien de suivi envoyés au client.
Ce guide fait tenir l'installation en cinq minutes. Les guides par stack (Next.js, WordPress, Laravel, HTML) reprennent les mêmes étapes avec les détails propres à chacun. Le référencement du mur d'avis a son guide dédié : avis-seo.md.
Quatre façons de faire entrer une demande. On choisit selon d'où elle vient, pas selon ce qu'on préfère.
inodesk.js
<script>
Origin
POST /submissions
/tickets
Authorization
POST /tickets
La règle qui compte : la clé publique vit dans le HTML du client, elle est donc lisible par tout le monde — c'est le contrôle du domaine d'origine qui la protège. La clé secrète, elle, ne doit jamais apparaître dans une page ni dans une URL.
Trois briques se sont ajoutées. Elles réutilisent exactement les mêmes clés, le même contrôle d'origine et le même format d'erreur : rien de neuf à installer si le widget est déjà en place — il suffit d'activer les onglets voulus dans CONTROL → INODESK → Sites & clés → Widget.
/q/{token}
/care/{site}/avis
inodesk-reviews.js
GET /reviews
/care/{site}/commande
Un onglet coché mais impossible ne s'affiche pas : « Devis » exige un formulaire de type devis, « Avis » la collecte ouverte, « Ma commande » une boutique liée. Le widget filtre lui-même — vous n'aurez jamais un onglet mort chez un client.
<div data-inodesk-reviews data-site="INODSK_PUB_votre_cle" data-endpoint="https://messagerie.inovertix.com/api/inodesk" data-mode="wall"></div> <script src="https://messagerie.inovertix.com/inodesk-reviews.js" defer></script>
Fichier séparé du widget (~4 Ko) : une page « Ils nous ont fait confiance » n'a aucune raison de télécharger le panneau de contact complet. data-mode="badge" n'affiche que la note ; data-limit="6" borne le nombre d'avis.
data-mode="badge"
data-limit="6"
Aucun avis publié → le bloc n'affiche rien. La modération est obligatoire : rien ne se publie sans une action dans CONTROL.
Référencement : ce script ne pose pas le balisage schema.org — un JSON-LD injecté en JavaScript est lu de façon inégale par les moteurs. Voir avis-seo.md. La page portail /care/{site}/avis, elle, est déjà balisée et indexable : c'est la solution sans travail.
?limit=
Cache-Control: 300 s
POST /reviews
rating
author_name
body
email
202
POST /order-lookup
order_number
phone
404
POST /order-issue
message
Les pages à jeton (/q/{token}, /r/{token}, /n/{token}) n'ont pas de clé : le jeton est l'autorisation, et le débit par IP rend son énumération sans objet.
/r/{token}
/n/{token}
Dans CONTROL → INODESK → Sites & clés → Déclarer un site.
Domaines autorisés : un par ligne, avec le schéma.
https://soraparfume.com https://www.soraparfume.com
⚠️ www et sans www sont deux domaines différents pour un navigateur. Les deux doivent être déclarés si les deux servent le site.
www
Emails de notification : les vôtres, ceux qui doivent savoir qu'une demande est arrivée.
À la validation, INODESK crée les deux clés du site et son formulaire « Contact » standard (nom, email, téléphone, ville, message).
Onglet Intégration du site. La clé publique y est affichée en clair — elle est de toute façon destinée à vivre dans votre HTML.
Le snippet est déjà pré-rempli avec votre clé, dans l'onglet Intégration. Il ressemble à ceci :
<script src="https://messagerie.inovertix.com/inodesk.js" data-site="INODSK_PUB_votre_cle" data-endpoint="https://messagerie.inovertix.com/api/inodesk" defer></script>
À placer avant </body>, sur toutes les pages. C'est tout : le widget dessine sa bulle, lit la configuration du site (couleurs, logo, onglets, formulaires) et s'adapte. Sur téléphone, le panneau passe en plein écran.
</body>
a. Vérifier la clé et le domaine
curl -sS "https://messagerie.inovertix.com/api/inodesk/ping?k=INODSK_PUB_votre_cle"
Réponse attendue :
{"ok":true,"site":{"name":"Sora Parfume","slug":"sora-parfume","timezone":"Africa/Lome"},"kind":"public"}
b. Envoyer une vraie demande depuis le widget de votre site.
c. Regarder la pastille dans l'onglet Intégration : elle passe de « Aucune demande reçue » à « Installation confirmée ». La demande apparaît dans INODESK → Inbox, et un accusé de réception part au contact avec son numéro et son lien de suivi.
/ping
"ok": true
#PREFIXE-1
/inodesk/devis
Le premier affichage passe le devis en « Vu » ; l'acceptation enregistre nom, IP, user-agent et horodatage, visibles dans la fiche.
CSAT : un ticket passé en « Résolu » déclenche l'email de satisfaction (délai réglable, 1 h par défaut) ; le clic sur une étoile enregistre le score.
Avis : [inodesk_reviews] ou data-inodesk-reviews affiche la note dès qu'un avis est publié, et rien avant.
[inodesk_reviews]
data-inodesk-reviews
/care/{site}/avis s'ouvre, affiche le mur, et son code source contient le application/ld+json.
application/ld+json
Commande : un couple (numéro, téléphone) réel renvoie le statut ; un couple faux renvoie le même message générique, sans indiquer lequel est faux.
Toutes les erreurs ont la même forme, celle d'INOTRACK :
{"statusCode":403,"name":"origin_not_allowed","message":"Domaine non autorisé pour cette clé publique."}
missing_api_key
data-site
invalid_api_key
secret_key_in_url
?k=
Authorization: Bearer
origin_not_allowed
site_inactive
secret_key_required
unknown_form
form_slug
validation_error
payload_too_large
rate_limit_exceeded
quote_not_found
feedback_not_found
portal_unavailable
found: false
POST /order-lookup est la seule route publique qui interroge de vraies commandes à partir d'informations devinables. Elle est donc protégée quatre fois : deux facteurs obligatoires, message d'échec unique, temps de réponse plancher (une réponse « trouvée » ne doit pas être plus lente qu'une réponse « pas trouvée », sinon le chronomètre répond à la place du serveur), et verrouillage de l'IP après une dizaine d'échecs.
Conséquence à connaître : un client qui se trompe plusieurs fois de suite peut être écarté une trentaine de minutes. Il recevra le même message que d'habitude. C'est voulu — l'écran ne lui dira pas qu'il a été repéré.
Le widget échoue toujours en silence : il ne casse jamais un site client. Pour diagnostiquer, ouvrez la console du navigateur, onglet Réseau :
/api/inodesk/config?k=… renvoie-t-il 200 ? Sinon, lisez le code d'erreur du tableau ci-dessus — c'est presque toujours origin_not_allowed.
/api/inodesk/config?k=…
L'adresse a-t-elle été saisie correctement dans le formulaire ? La demande est visible dans CONTROL même si l'email n'a pas pu partir.
L'adresse figure-t-elle dans la liste de suppression (une adresse qui a rejeté un envoi précédent y entre automatiquement) ? Cela se vérifie dans CONTROL.
Si les deux points sont bons, l'acheminement est en cause côté INOVERTIX : signalez-le, l'envoi se rejoue.
Le réglage URL publique du portail (INODESK → Paramètres) est la base de tous les liens envoyés aux contacts. Mal réglé, le module envoie des liens vers un domaine inexistant. C'est le premier réglage à vérifier après un déploiement.
Le widget ne pose aucun cookie et ne trace rien. Il lit seulement localStorage._inotrk_sid si le traqueur INOTRACK est déjà installé sur la page, pour rattacher la demande au parcours du visiteur.
localStorage._inotrk_sid
Les notifications internes envoyées à votre équipe ne contiennent aucune donnée personnelle : référence de demande, site, priorité, échéance. Le contenu se lit dans CONTROL, qui est authentifié.
Les IP sont anonymisées si le site INOTRACK lié anonymise (même politique pour les deux modules), et par défaut quand aucun site n'est lié.
La suppression d'un contact anonymise ses données (coordonnées, saisies, corps des messages) tout en conservant l'historique de traitement.
Les jetons de devis, de satisfaction et d'enquête sont hachés en base et ne sont jamais journalisés — ni dans les journaux d'application, ni dans le journal d'activité.
Une désinscription NPS vaut partout et pour toujours : le contact sort de toutes les audiences suivantes. Elle ne coupe pas les réponses à ses propres demandes.
La preuve d'acceptation d'un devis (nom, IP, user-agent, horodatage) est immuable : un devis décidé ne se modifie plus, il se duplique.
Un avis n'est jamais publié automatiquement, quelle que soit sa note et quelle que soit sa provenance.