Deux chemins, selon ce que vous voulez : le plugin (recommandé, 3 minutes) ou une balise dans le thème (si vous refusez un plugin de plus).
Prérequis : le site est créé dans CONTROL et ses domaines sont déclarés. Voir le README.
CONTROL → INODESK → Sites & clés → onglet Intégration → bouton « Télécharger le plugin WordPress préconfiguré ».
Le zip contient déjà l'endpoint et la clé publique de votre site : c'est ce qui ramène l'installation à « activer, c'est fini ». La clé secrète, elle, n'y figure jamais — elle ne doit pas voyager dans un fichier qu'on va poser sur un serveur tiers.
WordPress → Extensions → Ajouter → Téléverser une extension → le zip → Installer → Activer.
Réglages → INODESK : vérifier que la clé et l'endpoint sont bien là, et que la commande curl de vérification affichée en bas de page répond {"ok":true,…}.
curl
{"ok":true,…}
C'est tout. Le widget apparaît sur le front.
INODSK_PUB_…
INODSK_SEC_…
https://messagerie.inovertix.com/api/inodesk
https://messagerie.inovertix.com/inodesk.js
[inodesk_form slug="contact"]
Affiche le formulaire en pleine page, dans n'importe quelle page ou article. Le slug est l'identifiant du formulaire (CONTROL → INODESK → Formulaires).
slug
Le formulaire n'est pas reconstruit en PHP. C'est la même définition que celle du widget et du portail hébergé : ajouter un champ dans CONTROL le fait apparaître partout, sans toucher au site. Reconstruire le formulaire côté WordPress créerait une deuxième définition, qui divergerait au premier champ ajouté.
Chaque formulaire intégré vit dans son propre shadow DOM : aucune règle CSS de votre thème ne peut le déformer, et aucune des nôtres ne peut fuir chez vous.
Le shortcode rend un <noscript> qui renvoie vers le portail hébergé. Le formulaire reste atteignable, ce qui est la seule chose qui compte.
<noscript>
[inodesk_reviews] → note agrégée + mur des avis publiés [inodesk_reviews mode="badge"] → la note seule, pour un pied de page [inodesk_reviews limite="6"] → borne le nombre d'avis affichés
Ce shortcode charge inodesk-reviews.js (~4 Ko), séparé du widget de contact : une page « Ils nous ont fait confiance » n'a aucune raison de télécharger le panneau complet. L'URL en est déduite de celle du widget — rien de plus à régler, y compris sur un domaine personnalisé ou derrière un CDN.
inodesk-reviews.js
Seuls les avis publiés dans CONTROL → INODESK → Avis apparaissent. La modération est obligatoire : rien ne se publie sans une action humaine, quelle que soit la note. Aucun avis publié → le bloc n'affiche rien. Un mur vide vaut mieux qu'un mur qui s'excuse d'être vide.
Référencement. Ce shortcode ne pose pas le balisage schema.org : un JSON-LD injecté en JavaScript est lu de façon inégale par les moteurs. Pour que Google affiche vos étoiles, posez-le côté serveur avec le filtre wp_head — l'implémentation complète est dans avis-seo.md. Sinon, liez simplement /care/{votre-site}/avis, déjà balisée et indexable.
wp_head
/care/{votre-site}/avis
Devis, Avis et Suivi de commande sont des onglets du widget déjà installé : rien à mettre à jour côté WordPress, rien à vider dans le cache des pages. On les active dans CONTROL → INODESK → Sites & clés → Widget, ils apparaissent au prochain rechargement.
Un onglet coché mais impossible ne s'affiche pas : « Devis » exige un formulaire de type devis, « Avis » la collecte ouverte, « Ma commande » une boutique INOSHOP liée.
Si la boutique du site est déjà synchronisée dans INOSHOP, liez-la au site INODESK (Sites & clés → Devis & avis → « Boutique INOSHOP liée »). L'onglet « Ma commande » devient alors utilisable : le client saisit son numéro de commande et le téléphone utilisé lors de l'achat, et lit son statut.
Le téléphone peut être saisi dans n'importe quel format (90 11 22 33, +228 90112233, 0022890112233) : la boutique le normalise avec son préfixe pays avant comparaison.
90 11 22 33
+228 90112233
0022890112233
⚠️ L'échec est volontairement muet : le même message, quelle que soit la cause, avec le même délai. N'essayez pas de l'améliorer dans un thème ou un plugin — c'est ce silence qui empêche la route de confirmer l'existence d'une commande à qui en devine le numéro.
Si vous ne voulez pas d'un plugin de plus, la balise suffit. Dans le functions.php de votre thème enfant :
functions.php
/** * INODESK — widget de contact. * * `wp_enqueue_script` plutôt qu'un echo dans le pied de page : le script passe ainsi * par la file d'attente de WordPress et respecte les plugins de cache. */ add_action('wp_enqueue_scripts', function () { if (is_admin()) { return; } wp_enqueue_script( 'inodesk-widget', 39;https://messagerie.inovertix.com/inodesk.js', array(), null, true // pied de page ); }); // WordPress ne sait pas poser d'attributs arbitraires sur un script mis en file : // on filtre le HTML produit, en ne touchant QUE notre propre handle. add_filter('script_loader_tag', function ($tag, $handle) { if ($handle !== 'inodesk-widget') { return $tag; } $attributes = ' data-site="INODSK_PUB_votre_cle"' .39; data-endpoint="https://messagerie.inovertix.com/api/inodesk" defer'; return str_replace(' src=', $attributes.' src=', $tag); }, 10, 2);
<button type="button" onclick="window.inodesk && window.inodesk('open', 'support')"> Nous contacter </button>
L'appel est sans effet si le widget n'a pas chargé — il ne lèvera jamais d'exception.
Cas typique : un client signale un problème sur une commande, et vous voulez que l'agent voie le numéro de commande sans le lui demander.
/** * Ouvre une demande INODESK avec le contexte de la commande. * * NON BLOQUANT : si CONTROL est injoignable, la boutique continue de fonctionner. * `blocking => false` rend la main immédiatement — on n'attend même pas la réponse. */ function mon_site_ouvrir_demande_inodesk(WC_Order $order, $message) { wp_remote_post(39;https://messagerie.inovertix.com/api/inodesk/tickets', array( 'timeout' => 4, 'blocking' => false, 'headers' => array( 'Content-Type' => 'application/json', // La clé SECRÈTE vit dans wp-config.php, jamais dans la base ni dans une page. 'Authorization' => 'Bearer '.INODESK_SECRET_KEY, ), 'body' => wp_json_encode(array( 'subject' => sprintf(39;Commande #%s', $order->get_order_number()), 'message' => $message, 'priority' => 'haute', 'contact' => array( 'name' => $order->get_billing_first_name().' '.$order->get_billing_last_name(), 'email' => $order->get_billing_email(), 'phone' => $order->get_billing_phone(), 'city' => $order->get_billing_city(), ), )), )); }
Dans wp-config.php :
wp-config.php
define('INODESK_SECRET_KEY', 'INODSK_SEC_votre_cle_secrete');
Le contact est dédupliqué automatiquement par (site, email) puis (site, téléphone) : le même client qui écrit trois fois n'a qu'une fiche, et l'agent voit son historique complet.
#PREFIXE-1
[inodesk_reviews]
[inodesk_reviews mode="badge"]
Si le SEO est visé : le code source de la page contient le application/ld+json, et la note balisée est celle affichée.
application/ld+json
Onglets activés dans CONTROL visibles après un simple rechargement, sans mise à jour du plugin.
Suivi de commande : une vraie commande remonte son statut ; un couple faux renvoie le même message et le même délai qu'un numéro inconnu.
/config
origin_not_allowed
https://exemple.com
https://www.exemple.com
invalid_api_key
[inodesk_form]
inodesk.js
Les codes d'erreur complets sont dans le tableau du README.