ThunderPhone 2.0 ya está disponible.Empieza por tu cuenta desde 2¢/min.Lee el anuncio

Widget

Componente de React

Incorpora el widget de voz de ThunderPhone en una aplicación de React

El componente ThunderPhoneWidget muestra una barra de llamada con efecto de vidrio esmerilado y controles integrados para silenciar, finalizar la llamada y mostrar el estado de conexión. Es la forma más rápida de agregar IA de voz a una app de React.

Instalación

npm install @thunderphone/widget

Uso básico

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

Propiedades

El componente acepta las siguientes propiedades mediante ThunderPhoneWidgetProps:

PropiedadTipoObligatoriaPredeterminadoDescripción
publishableKeystring--Clave de API publicable (pk_live_...) de la configuración de Desarrolladores. El agente se resuelve automáticamente a partir de la configuración del widget de la clave.
theme'light' | 'dark'No'light'Esquema de color. Aplica la clase tp--light o tp--dark a la raíz del widget.
primaryColorstringNo'#000000' (claro) / '#ffffff' (oscuro)Cadena de color CSS utilizada como color de acento (botón de llamada, forma de onda, indicadores activos).
titlestringNo'Voice assistant'Texto que se muestra en la barra del widget.
position'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'No'bottom-right'Posición fija del widget en la ventana gráfica.
apiBasestringNo'https://api.thunderphone.com/v1'Anulación de la URL base de la API.
languagestringNo--Anulación del idioma por sesión: un código de idioma o una configuración regional, como en, es o fr-FR. Cuando no se configura, se usa el idioma configurado del agente.
voicestringNo--Anulación de la voz por sesión: un nombre de voz como maria. Cuando no se configura, se usa la voz configurada del agente.
contextstringNo--Contexto factual de la página o el sitio por sesión que se pasa al agente (por ejemplo, detalles de la página que está viendo el visitante). Se trunca en el servidor a 12,000 caracteres.
onConnect() => voidNo--Se llama cuando la sesión de voz se conecta correctamente.
onDisconnect() => voidNo--Se llama cuando finaliza la sesión.
onError(error) => voidNo--Se llama cuando ocurren errores. El objeto error tiene los campos error (código) y message.
classNamestringNo--Nombre de clase CSS adicional aplicado al contenedor del widget.
ringtoneboolean | stringNofalseReproduce un tono de llamada durante la conexión. true para el tono de llamada predeterminado o una cadena de URL para audio personalizado.

Ejemplos

Tema oscuro con color personalizado

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"
    />
  )
}

Posición personalizada

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

Idioma, voz y contexto por sesión

Las props language, voice y context se reenvían a la solicitud de sesión (POST /widget/session) cuando inicia una llamada, reemplazando los valores predeterminados configurados del agente para esa sesión:

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%."
    />
  )
}

Usa context para proporcionar al agente conocimiento factual sobre la página en la que se encuentra el visitante: detalles del producto, precios o preguntas frecuentes específicas de la página. Se trunca del lado del servidor a 12,000 caracteres.

Con callbacks de eventos

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}`)
      }}
    />
  )
}

Con estilos personalizados

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;
}

Consulta la guía de estilos para ver todas las clases de CSS y propiedades personalizadas disponibles.

Con tono de llamada

Reproduce un sonido de teléfono sonando mientras se establece la conexión:

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

Usa un tono de llamada personalizado pasando la URL de un archivo de audio:

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

El tono de llamada se repite mientras el widget está en el estado connecting y se desvanece suavemente cuando el agente se conecta.

Con una base de API personalizada

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

Manejo de errores

Cuando se activa el callback onError, recibe un objeto de error con dos campos:

CampoTipoDescripción
errorstringCódigo de error legible por máquinas
messagestringDescripción de error legible por humanos

Los códigos de error comunes incluyen dominio no permitido, agente no encontrado y clave de API no válida.


Próximos pasos