ThunderPhone 2.0 đã chính thức ra mắt.Tự thiết lập, từ 2 xu/phút.Xem thông báo ra mắt

Widget

Thành phần React

Nhúng tiện ích giọng nói ThunderPhone vào ứng dụng React

Component ThunderPhoneWidget hiển thị thanh cuộc gọi hiệu ứng glassmorphism với các nút điều khiển tích hợp để tắt tiếng, kết thúc cuộc gọi và hiển thị trạng thái kết nối. Đây là cách nhanh nhất để thêm AI giọng nói vào ứng dụng React.

Cài đặt

npm install @thunderphone/widget

Cách dùng cơ bản

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

Thuộc tính

Component chấp nhận các thuộc tính sau thông qua ThunderPhoneWidgetProps:

Thuộc tínhKiểuBắt buộcMặc địnhMô tả
publishableKeystring--Khóa API có thể công khai (pk_live_...) trong phần cài đặt Nhà phát triển. Tác nhân AI được xác định tự động từ cấu hình widget của khóa.
theme'light' | 'dark'Không'light'Bảng màu. Áp dụng class tp--light hoặc tp--dark cho phần tử gốc của widget.
primaryColorstringKhông'#000000' (sáng) / '#ffffff' (tối)Chuỗi màu CSS được dùng làm màu nhấn (nút gọi, dạng sóng, chỉ báo đang hoạt động).
titlestringKhông'Voice assistant'Văn bản hiển thị trên thanh widget.
position'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'Không'bottom-right'Vị trí cố định trong khung nhìn cho widget.
apiBasestringKhông'https://api.thunderphone.com/v1'Ghi đè URL cơ sở API.
languagestringKhông--Ghi đè ngôn ngữ theo phiên -- mã ngôn ngữ hoặc locale như en, es hoặc fr-FR. Khi không được đặt, ngôn ngữ đã cấu hình của tác nhân AI sẽ được áp dụng.
voicestringKhông--Ghi đè giọng nói theo phiên -- tên giọng nói như maria. Khi không được đặt, giọng nói đã cấu hình của tác nhân AI sẽ được áp dụng.
contextstringKhông--Ngữ cảnh thực tế của trang hoặc website theo phiên được truyền cho tác nhân AI (ví dụ: thông tin chi tiết về trang mà khách truy cập đang xem). Được cắt bớt ở phía máy chủ còn 12.000 ký tự.
onConnect() => voidKhông--Được gọi khi phiên giọng nói kết nối thành công.
onDisconnect() => voidKhông--Được gọi khi phiên kết thúc.
onError(error) => voidKhông--Được gọi khi xảy ra lỗi. Đối tượng error có các trường error (mã) và message.
classNamestringKhông--Tên class CSS bổ sung được áp dụng cho vùng chứa widget.
ringtoneboolean | stringKhôngfalsePhát nhạc chuông trong khi kết nối. Dùng true cho nhạc chuông mặc định hoặc chuỗi URL cho âm thanh tùy chỉnh.

Ví dụ

Giao diện tối với màu tùy chỉnh

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

Vị trí tùy chỉnh

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

Ngôn ngữ, giọng nói và ngữ cảnh theo từng phiên

Các prop language, voicecontext được chuyển tiếp đến yêu cầu phiên (POST /widget/session) khi cuộc gọi bắt đầu, ghi đè các giá trị mặc định đã cấu hình của tác nhân AI cho phiê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%."
    />
  )
}

Dùng context để cung cấp cho tác nhân AI kiến thức thực tế về trang mà khách truy cập đang xem -- chi tiết sản phẩm, giá hoặc câu hỏi thường gặp dành riêng cho trang. Giá trị này được cắt ngắn ở phía máy chủ còn 12.000 ký tự.

Với callback sự kiện

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

Với kiểu dáng tùy chỉnh

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

Xem hướng dẫn kiểu dáng để biết tất cả lớp CSS và thuộc tính tùy chỉnh có sẵn.

Với nhạc chuông

Phát âm thanh chuông điện thoại trong khi thiết lập kết nối:

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

Dùng nhạc chuông tùy chỉnh bằng cách truyền URL của tệp âm thanh:

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

Nhạc chuông lặp lại khi widget ở trạng thái connecting và mờ dần một cách mượt mà khi tác nhân AI kết nối.

Với API Base tùy chỉnh

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

Xử lý lỗi

Khi callback onError được gọi, callback này nhận một đối tượng lỗi có hai trường:

TrườngLoạiMô tả
errorstringMã lỗi mà máy có thể đọc
messagestringMô tả lỗi mà con người có thể đọc

Các mã lỗi phổ biến gồm tên miền không được phép, không tìm thấy tác nhân AI và khóa API không hợp lệ.


Bước tiếp theo