ThunderPhone 2.0 est disponible.En libre-service, à partir de 2 ¢/min.Découvrir l’annonce

Widget

Composant React

Intégrez le widget vocal ThunderPhone dans une application React

Le composant ThunderPhoneWidget affiche une barre d'appel au style glassmorphique avec des commandes intégrées pour couper le son, terminer l'appel et afficher l'état de connexion. C'est le moyen le plus rapide d'ajouter une IA vocale à une application React.

Installation

npm install @thunderphone/widget

Utilisation de base

import { ThunderPhoneWidget } from '@thunderphone/widget'
import '@thunderphone/widget/style.css'
 
function App() {
  return (
    <ThunderPhoneWidget
      publishableKey="pk_live_your_publishable_key"
    />
  )
}

Props

Le composant accepte les props suivantes via ThunderPhoneWidgetProps :

PropTypeObligatoirePar défautDescription
publishableKeystringOui--Clé API publiable (pk_live_...) des paramètres Développeurs. L'agent est résolu automatiquement à partir de la configuration du widget de la clé.
theme'light' | 'dark'Non'light'Jeu de couleurs. Applique la classe tp--light ou tp--dark à la racine du widget.
primaryColorstringNon'#000000' (clair) / '#ffffff' (foncé)Chaîne de couleur CSS utilisée comme couleur d'accentuation (bouton d'appel, forme d'onde, indicateurs actifs).
titlestringNon'Voice assistant'Texte affiché dans la barre du widget.
position'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'Non'bottom-right'Position fixe du widget dans la fenêtre d'affichage.
apiBasestringNon'https://api.thunderphone.com/v1'Remplacement de l'URL de base de l'API.
languagestringNon--Remplacement de la langue par session -- un code de langue ou des paramètres régionaux tels que en, es ou fr-FR. Lorsqu'elle n'est pas définie, la langue configurée de l'agent s'applique.
voicestringNon--Remplacement de la voix par session -- un nom de voix tel que maria. Lorsqu'elle n'est pas définie, la voix configurée de l'agent s'applique.
contextstringNon--Contexte factuel de la page ou du site, transmis à l'agent pour chaque session (par exemple, les détails de la page consultée par le visiteur). Tronqué côté serveur à 12 000 caractères.
onConnect() => voidNon--Appelé lorsque la session vocale se connecte avec succès.
onDisconnect() => voidNon--Appelé lorsque la session se termine.
onError(error) => voidNon--Appelé en cas d'erreur. L'objet error comporte les champs error (code) et message.
classNamestringNon--Nom de classe CSS supplémentaire appliqué au conteneur du widget.
ringtoneboolean | stringNonfalseJoue une sonnerie pendant la connexion. true pour la sonnerie par défaut, ou une chaîne d'URL pour un audio personnalisé.

Exemples

Thème sombre avec couleur personnalisée

import { ThunderPhoneWidget } from '@thunderphone/widget'
import '@thunderphone/widget/style.css'
 
function App() {
  return (
    <ThunderPhoneWidget
      publishableKey="pk_live_your_publishable_key"
      theme="dark"
      primaryColor="#8b5cf6"
      title="Talk to our AI"
    />
  )
}

Position personnalisée

import { ThunderPhoneWidget } from '@thunderphone/widget'
import '@thunderphone/widget/style.css'
 
function App() {
  return (
    <ThunderPhoneWidget
      publishableKey="pk_live_your_publishable_key"
      position="bottom-left"
    />
  )
}

Langue, voix et contexte par session

Les props language, voice et context sont transmises à la requête de session (POST /widget/session) au démarrage d’un appel, en remplaçant les valeurs par défaut configurées de l’agent pour cette session :

import { ThunderPhoneWidget } from '@thunderphone/widget'
import '@thunderphone/widget/style.css'
 
function PricingPageWidget() {
  return (
    <ThunderPhoneWidget
      publishableKey="pk_live_your_publishable_key"
      language="es"
      voice="maria"
      context="Page: Pricing. Plans: Starter $29/mo, Pro $99/mo. Annual billing saves 20%."
    />
  )
}

Utilisez context pour fournir à l’agent des informations factuelles sur la page consultée par le visiteur : détails du produit, tarifs ou FAQ propres à la page. Son contenu est tronqué côté serveur à 12 000 caractères.

Avec des rappels d’événements

import { ThunderPhoneWidget } from '@thunderphone/widget'
import '@thunderphone/widget/style.css'
 
function SupportWidget() {
  return (
    <ThunderPhoneWidget
      publishableKey="pk_live_your_publishable_key"
      onConnect={() => {
        console.log('Voice session connected')
        analytics.track('widget_call_started')
      }}
      onDisconnect={() => {
        console.log('Voice session ended')
        analytics.track('widget_call_ended')
      }}
      onError={(error) => {
        console.error(`Widget error: ${error.error} - ${error.message}`)
      }}
    />
  )
}

Avec un style personnalisé

import { ThunderPhoneWidget } from '@thunderphone/widget'
import '@thunderphone/widget/style.css'
 
function BrandedWidget() {
  return (
    <ThunderPhoneWidget
      publishableKey="pk_live_your_publishable_key"
      primaryColor="#4a90d9"
      className="my-custom-widget"
    />
  )
}
.my-custom-widget .tp-button--end {
  background-color: #e74c3c;
}

Consultez le guide de style pour voir toutes les classes CSS et propriétés personnalisées disponibles.

Avec sonnerie

Jouez un son de téléphone qui sonne pendant l’établissement de la connexion :

import { ThunderPhoneWidget } from '@thunderphone/widget'
import '@thunderphone/widget/style.css'
 
function PhoneWidget() {
  return (
    <ThunderPhoneWidget
      publishableKey="pk_live_your_publishable_key"
      ringtone={true}
    />
  )
}

Utilisez une sonnerie personnalisée en transmettant l’URL d’un fichier audio :

<ThunderPhoneWidget
  publishableKey="pk_live_your_publishable_key"
  ringtone="https://example.com/my-ringtone.mp3"
/>

La sonnerie se répète tant que le widget est dans l’état connecting et s’estompe progressivement lorsque l’agent se connecte.

Avec une base API personnalisée

<ThunderPhoneWidget
  publishableKey="pk_live_your_publishable_key"
  apiBase="https://your-proxy.example.com/v1"
/>

Gestion des erreurs

Lorsque le rappel onError est déclenché, il reçoit un objet d’erreur comportant deux champs :

ChampTypeDescription
errorstringCode d’erreur lisible par machine
messagestringDescription d’erreur lisible par un humain

Les codes d’erreur courants incluent un domaine non autorisé, un agent introuvable et une clé API non valide.


Étapes suivantes