https://www.tella.tv/video/windowopenai-3gnz
<aside> 🔌
Window.openai vous donne du fil à retordre ?
La communication entre votre interface et ChatGPT nécessite une compréhension fine des événements et du système de state. Nous pouvons vous débloquer.
👉 Parlons de vos défis techniques
</aside>
Votre application s'affiche dans une iframe à l'intérieur de ChatGPT. Pour des raisons de sécurité, cette iframe est isolée : votre code JavaScript ne peut pas accéder directement à ChatGPT. Mais alors, comment votre interface peut-elle recevoir des données et envoyer des actions ?
La réponse : window.openai
window.openai ?window.openai est un objet JavaScript que ChatGPT injecte automatiquement dans votre iframe. C'est le pont de communication entre votre interface et ChatGPT.
Analogie : Imaginez que votre interface est dans une pièce fermée (l'iframe), et ChatGPT est dans une autre pièce. Vous ne pouvez pas vous parler directement, mais il y a un interphone sur le mur. Cet interphone, c'est window.openai.
La communication entre ChatGPT et votre interface fonctionne via un système d'événements JavaScript.
Au lieu que votre interface "interroge" constamment ChatGPT pour savoir si quelque chose a changé (polling), ChatGPT envoie automatiquement des événements à chaque changement. Votre interface écoute ces événements et réagit en conséquence.
Analogie : C'est comme une sonnette à la porte. Vous n'avez pas besoin d'aller vérifier toutes les 5 secondes si quelqu'un est là. Quand quelqu'un arrive, la sonnette retentit, et vous réagissez.
openai:set_globalsQuand est-il déclenché ? Chaque fois qu'une propriété de window.openai change (thème, displayMode, widgetState, toolOutput, etc.).
À quoi ça sert ? Détecter les changements d'état et mettre à jour votre interface en conséquence.
// Votre interface écoute l'événement
window.addEventListener("openai:set_globals", (event) => {
const changes = event.detail.globals;
// Détecter les changements et réagir
if (changes.toolOutput) {
updateUI(changes.toolOutput);
}
if (changes.theme) {
applyTheme(changes.theme);
}
});
✅ Réactif : Votre interface se met à jour instantanément quand les données changent