Passer au contenu principal

Intégrer Raison dans un LMS personnalisé

Comment placer le widget JavaScript sur vos pages et transmettre l’identité de l’apprenant.

Écrit par Steven Ching

Voici comment intégrer Raison dans un LMS interne ou personnalisé qui ne prend pas en charge LTI. Vous placez un widget JavaScript sur vos pages, puis vous transmettez l’identité de l’apprenant dans un attribut data-user. Le widget envoie cette charge à Raison avec la clé API de votre organisation.

Si votre LMS prend en charge LTI (Canvas, Moodle, Blackboard), utilisez plutôt les guides de configuration par plateforme.

Parcours court pour créer l’assistant et copier le snippet :

Créer l’assistant et copier le snippet

Créez un assistant comme d’habitude. Ouvrez Partager, puis Intégration personnalisée. Copiez Chatbot ou Panneau. Le snippet est déjà rempli avec l’identifiant de cet assistant.

Chatbot (bulle flottante) :

<script src="https://static.raison.is/widget.js" data-name="COROLAIR_EMBED" data-tutor-id="YOUR_ASSISTANT_ID"></script>

Panneau (panneau latéral) :

<script src="https://static.raison.is/widget.js" data-name="COROLAIR_EMBED" data-sidepanel="true" data-tutor-id="YOUR_ASSISTANT_ID"></script>

Collez le script juste avant la balise </body> de toute page où l’assistant doit apparaître.

L’option Iframe dans Partager intègre l’assistant dans la mise en page. Elle ne transmet pas l’identité de l’apprenant. Pour un LMS personnalisé, utilisez Chatbot ou Panneau plus data-user.

Le widget cherche le premier script[data-name="COROLAIR_EMBED"] de la page. Un seul script d’embed par page.

Créer une clé API

Dans Raison, allez dans Organisation → Intégrations → API et créez une clé API. Elle n’est affichée qu’une fois. Conservez-la comme un mot de passe.

La clé authentifie votre organisation. Elle apparaît dans le HTML de la page, dans data-user : n’installez le widget que sur des pages que vous contrôlez. Si une clé fuit, créez-en une nouvelle.

Transmettre l’identité de l’apprenant

Ajoutez un attribut data-user. Sa valeur doit être une chaîne JSON (sérialisée), pas un objet brut. Entourez l’attribut de simples quotes pour que les doubles quotes du JSON restent valides :

<script src="https://static.raison.is/widget.js" data-name="COROLAIR_EMBED" data-sidepanel="true" data-tutor-id="YOUR_ASSISTANT_ID" data-user='{"apiKey":"YOUR_API_KEY","provider":"custom","userId":"user_1","email":"[email protected]","firstName":"Jean","lastName":"Jaille"}'></script>

Construisez ce JSON côté serveur à partir de l’apprenant connecté, puis sérialisez-le (JSON.stringify en JavaScript) avant d’écrire l’attribut.

Champs de data-user

Les six champs sont obligatoires. Les chaînes vides sont refusées.

Champ

Quoi envoyer

apiKey

La clé API de l’organisation, depuis Organisation → Intégrations → API. Elle doit être valide, sinon l’identification échoue et les conversations existantes ne sont pas restaurées. Non affichée dans l’interface Raison.

provider

Doit être exactement custom (minuscules). Toute autre valeur est refusée.

userId

L’identifiant unique de l’apprenant dans votre plateforme. Raison retrouve le même apprenant aux visites suivantes grâce à cette valeur. Gardez-la stable.

email

Une adresse email valide. Utile pour les exports et le rapprochement. Non affichée à l’apprenant dans le widget.

firstName

Prénom de l’apprenant. Affiché en introduction des conversations et dans les analytiques enseignant.

lastName

Nom de l’apprenant. Affiché dans les analytiques enseignant. Une initiale convient (J), une chaîne vide non.

Exemple de charge avant sérialisation :

{"apiKey":"YOUR_API_KEY","provider":"custom","userId":"user_1","email":"[email protected]","firstName":"Jean","lastName":"Jaille"}

Ce qui se passe au lancement

Le widget lit data-tutor-id et data-user, puis appelle Raison pour identifier l’apprenant. Si la clé API est valide, Raison crée ou met à jour l’apprenant (rapprochement sur userId dans votre organisation) et ouvre l’assistant. La visite suivante avec le même userId retrouve cet apprenant et ses conversations.

Avez-vous trouvé la réponse à votre question ?