Installez le boxed tag

Une intégration par un développeur front sera nécessaire pour installer le tag dans une iFrame et initialiser nos outils (web sdk et boutons personnalisés). 

1. Prérequis techniques 

  • Une page html hébergée sur un site différent (mais sur le même domaine de premier niveau),
  • Un canal de communication entre les deux pages, pour gérer la navigation et le positionnement et la taille de l'iframe.

2. Périmètre fonctionnel

✅ Je peux

  • Accéder aux fonctionnalités d’affichage des notifications de la chatbox,
  • Garder une continuité de la conversation sans avoir à accéder aux données privées ou confidentielles de la page principale.

Je ne peux pas

  • Créer une règle de ciblage basée sur l'origine du visiteur (règle de ciblage "Informations sur le visiteur - provient de ce site web") 
  • Créer une règle de ciblage basée sur la taille de la fenêtre (règle de ciblage "Informations sur le visiteur - largeur de la fenêtre du navigateur" et "Informations sur le visiteur - hauteur de la fenêtre du navigateur") 
  • Utiliser les fonctionnalités Mirroring / co-browsing
  • Proposer une expérience vidéo
  • Proposer une expérience d'appel

3. Implémentez le boxed tag

Installez la librairie npm dans votre projet

npm i @iadvize-oss/boxed-tag

Créez le script de l'iframe

Créez un fichier js qui importera le script iframe. Puis appelez initIAdvizeIframe pour écouter les messages de l'hôte. L'appel à initIAdvizeIframe  est fourni avec 2 arguments :

  • sid : your iAdvize sid.
  • iAdvizePlatform : the iadvize platform (default: ha).

import { initIAdvizeIframe } from '@iadvize-oss/boxed-tag';
initIAdvizeIframe(<sid>, <iAdvizePlatform>);

Ajout d'une iframe 

Ajoutez une iframe sur la page principale de votre site.

<iframe>
sandbox="allow-scripts allow-same-origin"
src="https://my-iframe-script-url"
id="myIframeId">
</iframe>

Ajoutez le script host sur la page principale de votre site

Créez un fichier js avec l'import de la librairie host. Puis appelez initIAdvizeHost pour écouter les messages de l'iframe.

import { initIAdvizeHost } from '@iadvize-oss/boxed-tag' ;
initIAdvizeHost('myIframeId');

4. Communication entre l'iframe et l'hôte, et inversement

De l'iframe à l'hôte

Envoi d'un message de l'iframe isolée vers la fenêtre de l'hôte. Utilisez l'iAdvizeInterface pour ajouter des callbacks, qui seront gérés une fois que la balise iAdvize sera chargée.

window.iAdvizeInterface.push(function () {
window.parent.postMessage({ foo: 'bar' });
});

Réception du message sur la page principale de l'hôte

window.addEventListener('message', (e) => {
if (e.data.foo) {
// Do something with the data sent
}
});

De l'hôte à l'iframe

Envoi d'un message de la fenêtre hôte à l'iframe isolée.

const iAdvizeSandbox = document.getElementById('myIframeId');

iAdvizeSandbox.onload = function () {
iAdvizeSandbox.contentWindow.postMessage({ foo: 'bar' }, '*');
};

Réception du message sur l'iframe

window.addEventListener('message', ({ data: { foo } }) => {
// Do something with the data sent
});

Appeler les méthodes du SDK Web à partir de l'hôte

Les méthodes du SDK Web ne peuvent pas être appelées à partir du contexte de l'hôte parce que la balise iAdvize est isolée dans l'iframe. Nous devons donc indiquer à l'iframe ce que nous voulons appeler.

Après avoir appelé initIAdvizeHost, un objet iAdvizeBoxedInterface est disponible dans le contexte de la fenêtre hôte.

Cet objet envoie le nom de la méthode et les arguments à l'iframe, qui appellera le SDK web. Les méthodes activate et get peuvent renvoyer une valeur à l'hôte : pour la récupérer, ajoutez un window.addEventListener("message") et vérifiez la propriété e.data.method pour reconnaître la méthode appelée.

Navigate

// Web SDK navigate
window.iAdvizeBoxedInterface.push({
method: 'navigate',
args: [window.location.href],
});

Activate

L'hôte peut écouter le résultat de l'appel activate. Pour une authentification anonyme :

  // Web SDK activate anonymous
window.iAdvizeBoxedInterface.push({
method:'activate',
args: { authenticationOption: { type: 'ANONYMOUS' },
},
});

// Listen to activate result
window.addEventListener('message', ({ data: { method, activation } }) => {
if (method === 'activate') {
console.log(activation); // activation return object : success or failure
}
});

Pour une authentification sécurisée :

  • Le jeton JWE doit être généré du côté de l'hôte et envoyé à l'iframe.
  • L'hôte doit écouter un message get-activate-auth-token initié par l'iframe.
  • Il appelle ensuite l'API de votre backend pour obtenir le jeton JWE, puis envoyer le jeton à l'iframe sous la forme d'un message set-activate-auth-token.
  • Le message get-activate-auth-token permet à l'iframe de demander un rafraîchissement du jeton si nécessaire.

Exemple de mise en œuvre de l'authentification sécurisée :

// Web SDK activate secured auth
const getJweToken = Promise.resolve('myJWEToken');// your backend logic to generate a JWE

window.iAdvizeBoxedInterface.push({
method:'activate',
args: {
authenticationOption: {
type: 'SECURED_AUTHENTICATION',
}, },
});

// Listen to activate result
window.addEventListener('message', ({ data: { method, activation } }) => {
// Handle authentication token
if (method === 'get-activate-auth-token') {
getJweToken().then((token) =>
window.iAdvizeBoxedInterface.push({ method: 'set-activate-auth-token',
args: `${token}`,
}),
);
}
if (method === 'activate') {
console.log(activation); // activation return object : success or failure
}
});

Logout

L'hôte peut écouter le résultat de l'appel de logout. Exemple de mise en œuvre :

// Web SDK logout
window.iAdvizeBoxedInterface.push({
method: 'logout',
});

// Listen to logout
window.addEventListener('message', ({ data: { method } }) => {
if (method === 'logout') {
// Do something after logout
}
});

On

L'hôte peut écouter le résultat de l'appel on. Exemple de mise en œuvre :

// Web SDK on
window.iAdvizeBoxedInterface.push({
method: 'on',
args: ['visitor:cookiesConsentChanged'],
});

// Listen to cookiesConsentChanged result
window.addEventListener('message', ({ data: { method, args, value } }) => {
if (method === 'on' && args.includes('visitor:cookiesConsentChanged')){
console.log(value); // cookiesConsentChanged value
}
});

Off

// Web SDK off
window.iAdvizeBoxedInterface.push({
method: 'off',
args: ['visitor:cookiesConsentChanged'],
});

Set

### Set // Web SDK set
window.iAdvizeBoxedInterface.push({
method: 'set',
args:['visitor:GDPRConsent', true],
});

Get

L'hôte peut écouter le résultat de l'appel get. Exemple de mise en œuvre :

// Web SDK get
window.iAdvizeBoxedInterface.push({
method: 'get',
args: ['visitor:cookiesConsent'],
});

// Listen to cookiesConsent get
window.addEventListener('message', ({ data: { method,args, value } }) => {
if (method === 'get' && args.includes('visitor:cookiesConsent')) {
console.log(value); // cookiesConsent value
}
});