Sign In
Sign In
  1. Accueil
  2. INTÉGRER
  3. Configurer votre Widget
  4. Sécuriser les User Channel Variables
INTÉGRER
28 articles
1. Donner à ViaSay l'accès à votre Page
Agent Channels8
Configurer votre Widget4
Tester le bot en production
Gérer la visibilité de votre widget
Transmettre des variables via le script du widget
Sécuriser les User Channel Variables
AI Tools
Comment arrêter un chatbot Messenger (et le reprendre plus tard)
User Channels3

Sécuriser les User Channel Variables

Permet de signer les User Channel Variables de votre widget pour qu'un visiteur ne puisse pas les modifier dans son navigateur.

Mis à jour le 1 octobre 2026

Votre site remplit les User Channel Variables que le widget transmet à votre chatbot : un email, un numéro client, un numéro de commande. Comme elles sont écrites dans la page, un visiteur peut les modifier dans son navigateur avant qu'elles n'arrivent au chatbot. Rien dans email=jane@exemple.fr ne distingue une vraie valeur d'une valeur modifiée.

Quand votre chatbot s'appuie sur ces variables pour identifier le visiteur ou pour appeler vos API en son nom, vous pouvez exiger une signature sur les variables de votre choix. Votre serveur calcule la signature à partir de la valeur et d'une clé secrète partagée avec ViaSay, et votre page l'envoie à côté de la valeur. ViaSay la vérifie à chaque message : une valeur qui ne correspond pas n'arrive jamais jusqu'à votre chatbot.

📘 Où la trouver

La signature est disponible sur les canaux widget. Allez dans Integrate → Channels, ouvrez votre widget, puis l'onglet Security. L'onglet est visible par les utilisateurs qui ont le rôle Manager ou Platform Administrator.

Quand sécuriser une variable

Sécurisez toute variable à laquelle votre chatbot fait confiance :

  • Identité : un email, un numéro client ou un numéro de téléphone qui sert à reconnaître le visiteur.

  • Paramètres d'API : un identifiant transmis à un appel d'API pour récupérer des commandes, des réservations ou des informations de compte.

  • Handover : un email ou un numéro de téléphone qui sert à retrouver le compte du client quand la conversation passe à un agent.

Une variable qui sert seulement à personnaliser la conversation, comme la catégorie de la page ou le produit consulté, n'a pas besoin de signature : une valeur modifiée ne change que ce que voit le visiteur.

Ce que votre page envoie

Chaque variable sécurisée est accompagnée d'un attribut supplémentaire qui porte le même nom suivi de _signature. Ici, la page envoie un email signé :

HTML
<script>
  var widget = document.createElement("destygo-webchat");
  widget.setAttribute('token', "<your channel token>");
  widget.setAttribute('email', "jane@exemple.fr");
  widget.setAttribute('email_signature', "77e12a4f8d86c8feae63e2cfcd8290876fbfc8c3884ef5dc946831a4f68fdabb");
  document.body.appendChild(widget);
</script>

La signature est le HMAC-SHA256 de la valeur, calculé avec la clé secrète partagée et écrit en hexadécimal minuscule. Les attributs _signature ne servent qu'à la vérification : ils n'arrivent jamais jusqu'à votre chatbot, vos analytics ou vos historiques de conversation.

Votre page continue d'envoyer les variables exactement comme avant. Le seul ajout est une ligne _signature par variable sécurisée.

Calculer la signature sur votre serveur

Votre serveur sait déjà qui est connecté : il calcule la signature au moment où il génère la page, avec la clé que vous enregistrez dans l'onglet Security.

Node.js

JavaScript
const crypto = require('crypto');

// The key saved in the Security tab, read from your server's configuration.
const SECRET = process.env.VIASAY_SIGNATURE_SECRET;

function sign(value) {
  return crypto.createHmac('sha256', SECRET).update(value, 'utf8').digest('hex');
}

sign('jane@exemple.fr'); // 77e12a4f8d86c8feae63e2cfcd8290876fbfc8c3884ef5dc946831a4f68fdabb

Python

Python
import hashlib
import hmac
import os

# The key saved in the Security tab, read from your server's configuration.
SECRET = os.environ["VIASAY_SIGNATURE_SECRET"]

def sign(value: str) -> str:
    return hmac.new(SECRET.encode("utf-8"), value.encode("utf-8"), hashlib.sha256).hexdigest()

sign("jane@exemple.fr")  # 77e12a4f8d86c8feae63e2cfcd8290876fbfc8c3884ef5dc946831a4f68fdabb

PHP

PHP
<?php
// The key saved in the Security tab, read from your server's configuration.
$secret = getenv('VIASAY_SIGNATURE_SECRET');

function sign(string $value, string $secret): string {
    return hash_hmac('sha256', $value, $secret);
}

sign('jane@exemple.fr', $secret); // 77e12a4f8d86c8feae63e2cfcd8290876fbfc8c3884ef5dc946831a4f68fdabb

Java

Java
import java.nio.charset.StandardCharsets;
import java.util.HexFormat;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

public final class ViaSaySignature {
    // The key saved in the Security tab, read from your server's configuration.
    private static final String SECRET = System.getenv("VIASAY_SIGNATURE_SECRET");

    // sign("jane@exemple.fr") returns 77e12a4f8d86c8feae63e2cfcd8290876fbfc8c3884ef5dc946831a4f68fdabb
    public static String sign(String value) throws Exception {
        Mac mac = Mac.getInstance("HmacSHA256");
        mac.init(new SecretKeySpec(SECRET.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
        return HexFormat.of().formatHex(mac.doFinal(value.getBytes(StandardCharsets.UTF_8)));
    }
}

Pour vérifier votre implémentation, utilisez ce couple de test. Votre code doit produire exactement la signature attendue :

Clé secrète

Valeur

Signature attendue

exemple-de-secret-a-ne-pas-utiliser

jane@exemple.fr

77e12a4f8d86c8feae63e2cfcd8290876fbfc8c3884ef5dc946831a4f68fdabb

🚧 Quatre règles

  • Calculez la signature sur votre serveur, jamais dans le navigateur. Une clé écrite dans le JavaScript de votre page peut être lue par n'importe qui, et ne protège alors plus rien.

  • Signez exactement la chaîne que vous envoyez, majuscules et espaces compris : Jane@Exemple.fr et jane@exemple.fr n'ont pas la même signature. Signez la valeur brute, avant tout échappement HTML ou JavaScript.

  • Utilisez la clé telle quelle, comme du texte. Ne la décodez pas depuis l'hexadécimal ou le Base64, même si elle ressemble à de l'hexadécimal : une clé générée s'utilise caractère par caractère.

  • Utilisez une clé aléatoire d'au moins 32 caractères, réservée à cette intégration. Le bouton Generate en crée une pour vous.

Configurer l'onglet Security

L'onglet Security vous guide en quatre étapes. Tout ce que vous enregistrez aux étapes 1 à 3 est un brouillon : vos visiteurs ne sont vérifiés qu'une fois la configuration publiée, vous pouvez donc préparer et tester à votre rythme.

L'onglet Security d'un canal widget, avec le guide sur la droite.

Étape 1 : enregistrer une clé secrète partagée

Collez la clé que votre serveur utilisera, ou cliquez sur Generate pour en créer une au hasard. Une clé générée s'affiche en clair avec un bouton de copie : copiez-la tout de suite sur votre serveur, car elle n'est plus jamais affichée une fois enregistrée. Cliquez ensuite sur Save key.

Une clé générée, prête à être copiée sur votre serveur avant l'enregistrement.

La clé est stockée chiffrée et n'est plus jamais affichée : l'onglet indique seulement qu'une clé existe. Une clé qui vient d'être enregistrée apparaît comme New key, en attente de publication : elle ne s'applique qu'au moment où vous publiez.

Étape 2 : choisir les variables à sécuriser

Cliquez sur Add a variable et choisissez les variables que votre page signe. Seules les User Channel Variables sont proposées : si celle dont vous avez besoin n'existe pas encore, créez-la d'abord. Vos choix sont enregistrés au fur et à mesure.

email et customer_id sont sécurisées. Les autres User Channel Variables restent disponibles dans la liste.

Quelques règles s'appliquent aux noms des variables sécurisées :

  • 50 variables au maximum par widget.

  • Un nom ne peut pas se terminer par _signature : sécurisez email, et votre page envoie email_signature.

  • Les noms réservés par le widget, comme token ou id, ne peuvent pas être sécurisés.

Étape 3 : vérifier vos signatures

Avant de publier, vérifiez que ce que produit votre serveur correspond à ce qu'attend ViaSay. Trois façons de tester, de la plus rapide à la plus complète :

Test

Quand l'utiliser

Ce que vous saisissez

Check the key only

Le code de votre serveur n'est pas encore prêt.

La clé que votre serveur utilisera. Une valeur d'exemple est signée dans votre navigateur et comparée à la clé enregistrée. La clé elle-même n'est jamais envoyée.

Paste the widget script from your page

Votre serveur signe déjà. C'est le test le plus complet.

Ouvrez une page de votre site où un visiteur est connecté, copiez le script du widget généré par votre serveur, et collez-le tel quel.

Enter values and signatures

Vous voulez tester quelques valeurs à la main.

Pour chaque variable sécurisée, une valeur et la signature calculée par votre serveur.

Cliquez sur Run test. Le résultat vous indique, variable par variable, ce que ViaSay conclurait sur un vrai message.

Le script du widget d'une page connectée, collé tel quel : chaque variable sécurisée est correctement signée.

Quand une variable échoue, le résultat indique pourquoi et quoi corriger :

L'email a été modifié après la signature : sa signature ne correspond plus.

Résultat

Ce que cela signifie

Que faire

Valid

La signature correspond à la valeur.

Rien.

Variable not sent

Le test ne contient pas cette variable.

Vérifiez que votre page l'envoie avec sa signature.

Signature missing

La valeur est là, mais pas son attribut _signature.

Envoyez la signature à côté de la valeur.

Signature does not match

La signature n'a pas été calculée à partir de cette valeur exacte avec cette clé.

Vérifiez que votre serveur signe la valeur exacte, avec la clé enregistrée à l'étape 1.

Value not accepted

La valeur n'est pas du texte.

Vérifiez ce que votre page envoie pour cette variable.

No key saved

Aucune clé n'est enregistrée pour ce canal.

Revenez à l'étape 1.

Étape 4 : publier

Une fois le test réussi, cliquez sur Publish en haut à droite de la page du canal. Le bandeau en haut de l'onglet vous indique où vous en êtes dans la configuration.

Le test est réussi : Publish, en haut à droite, applique la configuration.

Publish reste bloqué tant que votre dernière modification n'a pas passé un test. Si vous changez la clé ou les variables après un test, relancez-en un.

Après la publication, l'étape 4 indique que les signatures sont exigées pour vos visiteurs, depuis quand, et sur quelles variables :

La protection est active sur email et customer_id.

Ce qui se passe à chaque message

Une fois la configuration publiée, chaque message du widget est vérifié, et votre chatbot détient toujours ce que votre page certifie à cet instant :

Situation

Ce que reçoit votre chatbot

La conversation

La signature est valide.

La valeur.

Se poursuit normalement.

La signature est absente ou fausse, ou la valeur a été modifiée.

Une valeur vide.

Se poursuit avec un visiteur anonyme. Elle n'est jamais bloquée.

La page n'envoie aucune variable sécurisée : le visiteur n'est pas connecté.

Une valeur vide.

Se poursuit normalement : ce n'est pas une erreur.

La page cesse d'envoyer la valeur signée, par exemple après une déconnexion.

Une valeur vide, dès le message suivant.

Se poursuit : le chatbot oublie l'identité qu'on lui avait donnée.

👍 Prévoyez le cas vide dans vos parcours

Une variable sécurisée peut arriver vide à tout moment. Avant de l'utiliser, par exemple dans un appel d'API, assurez-vous qu'elle contient une valeur, et prévoyez un autre chemin quand elle est vide : demander au visiteur de se connecter, ou continuer sans son compte.

Au handover

Quand la conversation passe à un agent via Freshchat ou ViaFlow, seul un email, un numéro de téléphone ou un identifiant de contact arrivé avec une signature valide sert à retrouver le compte du client. Une valeur que le visiteur a tapée dans la conversation ou modifiée dans la page n'est jamais rattachée à un compte existant : personne ne peut ouvrir la fiche d'un autre client en tapant son email.

Changer de clé

Changez de clé régulièrement, ou immédiatement si elle a pu être exposée. L'ancienne clé reste acceptée après la publication : vos serveurs peuvent passer à la nouvelle clé sans interrompre vos visiteurs.

  1. Cliquez sur Replace key, collez ou générez la nouvelle clé, puis enregistrez-la. Elle apparaît comme New key, en attente de publication. Vos visiteurs sont toujours vérifiés avec la clé actuelle.

  2. Lancez un test avec la nouvelle clé à l'étape 3.

  3. Publiez. La nouvelle clé devient la clé actuelle, et l'ancienne devient la Previous key : les deux sont acceptées.

  4. Mettez à jour vos serveurs pour qu'ils signent avec la nouvelle clé.

  5. Une fois que toutes vos pages signent avec la nouvelle clé, cliquez sur Remove à côté de la clé précédente.

Une nouvelle clé attend la publication. D'ici là, les signatures sont vérifiées avec la clé actuelle.
Après la publication, la clé précédente reste acceptée jusqu'à ce que vous la supprimiez.

🚧 Changez vos serveurs après la publication, pas avant

Tant que vous n'avez pas publié, seule la clé actuelle est acceptée : une page signée avec la nouvelle clé rendrait ses visiteurs anonymes. Si l'ancienne clé a été exposée, publiez tout de suite et supprimez la clé précédente dès que vos serveurs utilisent la nouvelle.

Changer les variables sécurisées

Vous pouvez ajouter ou retirer des variables sécurisées à tout moment. Tant que vous n'avez pas publié, la modification reste un brouillon : vos visiteurs sont toujours vérifiés avec les variables publiées. Lancez un test, puis publiez pour l'appliquer.

Arrêter la vérification des signatures

Cliquez sur Stop enforcing à l'étape 4. Les signatures cessent d'être vérifiées immédiatement, et les variables envoyées par votre page sont de nouveau acceptées sans signature. Votre clé et vos variables sont conservées : vous pouvez republier à tout moment sans rien ressaisir.

Dépannage

Un visiteur connecté est traité comme anonyme. Vérifiez que chaque page qui charge le widget pour un visiteur connecté envoie bien les valeurs signées. Une page qui charge le widget sans elles rend le visiteur anonyme dès le message suivant.

Le test indique « Signature does not match ». Comparez avec le couple de test ci-dessus : si votre code ne produit pas 77e12a4f…68fdabb, c'est le code de signature qui est en cause. Sinon, vérifiez que votre serveur utilise la clé enregistrée à l'étape 1, et qu'il signe la valeur exactement comme la page l'envoie.

Publish est grisé. Votre dernière modification n'a pas encore passé de test. Lancez un test à l'étape 3.

Ne mettez pas en cache les pages qui contiennent une signature. Une signature prouve à qui appartient la valeur : une page en cache servie à un autre visiteur lui donnerait l'identité du premier.

Cet article vous a-t-il aidé ?

Sur cette page
  • Étape 1 : enregistrer une clé secrète partagée
  • Étape 2 : choisir les variables à sécuriser
  • Étape 3 : vérifier vos signatures
  • Étape 4 : publier
  • Au handover

Made from France 💙

Catégories

  • ANALYTIQUE
  • CONSTRUIRE
  • LOUIS AI
  • INTÉGRER

🔗 Useful Links

  • Sign In
  • Website
  • Terms & Conditions

© 2026

MindsayPropulsé par Mindsay

Rechercher dans le centre d’aide…

Rechercher des articles du centre d’aide