CDN / Скриптов таг

CDN компилацията включва React вътрешно, така че можете да използвате уиджета в статични сайтове, WordPress, Webflow или всяка страница, където можете да добавяте HTML. Не са необходими npm, пакетиращ инструмент или framework.

CDN URL адреси

<link rel="stylesheet" href="https://cdn.thunderphone.com/widget/latest/style.css" />
<script src="https://cdn.thunderphone.com/widget/latest/widget.js"></script>
<!-- Each stable release also publishes an immutable /widget/vX.Y.Z/ path
     matching the @thunderphone/widget npm version (v1.1.2 at the time of
     writing). If you pin, you own updating the URL for new releases. -->
<link rel="stylesheet" href="https://cdn.thunderphone.com/widget/v1.1.2/style.css" />
<script src="https://cdn.thunderphone.com/widget/v1.1.2/widget.js"></script>

Основна употреба

<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" href="https://cdn.thunderphone.com/widget/latest/style.css" />
</head>
<body>

  <div id="thunderphone"></div>

  <script src="https://cdn.thunderphone.com/widget/latest/widget.js"></script>
  <script>
    ThunderPhone.mount({
      element: '#thunderphone',
      publishableKey: 'pk_live_your_publishable_key',
    })
  </script>

</body>
</html>

Уиджетът се монтира в целевия елемент и се визуализира като лента с фиксирана позиция в ъгъл на прозореца за преглед (по подразбиране bottom-right, управлявано от опцията position). Елементът за монтиране е само React коренът -- местоположението му в страницата не влияе върху мястото, където се показва уиджетът.


Опции за монтиране

ThunderPhone.mount() приема същите опции като React компонента, плюс свойството element:

ОпцияТипЗадължителноПо подразбиранеОписание
elementstring | HTMLElementДа--CSS селектор (напр. '#thunderphone') или референция към DOM елемент.
publishableKeystringДа--Публичен API ключ (pk_live_...). Агентът се определя автоматично от конфигурацията на уиджета за ключа.
theme'light' | 'dark'Не'light'Цветова схема.
primaryColorstringНе'#000000' (светла) / '#ffffff' (тъмна)CSS низ за цвят, използван като акцентен цвят.
titlestringНе'Voice assistant'Текст, показван в лентата на уиджета.
position'bottom-right' | 'bottom-left' | 'top-right' | 'top-left'Не'bottom-right'Фиксирана позиция в прозореца за преглед.
apiBasestringНе'https://api.thunderphone.com/v1'Замяна на базовия URL адрес на API.
languagestringНе--Замяна на езика за сесията -- езиков код или локал, като en, es или fr-FR. Когато не е зададено, се използва конфигурираният език на агента.
voicestringНе--Замяна на гласа за сесията -- име на глас, като maria. Когато не е зададено, се използва конфигурираният глас на агента.
contextstringНе--Фактически контекст за страница или сайт за сесията, подаден към агента. Сървърът го съкращава до 12 000 знака.
onConnect() => voidНе--Извиква се при свързване на гласовата сесия.
onDisconnect() => voidНе--Извиква се при приключване на сесията.
onError(error) => voidНе--Извиква се при грешки. Грешката има полета error (код) и message.
ringtoneboolean | stringНеfalseВъзпроизвежда мелодия при свързване. true за мелодията по подразбиране или URL низ за персонализирано аудио.

Почистване

ThunderPhone.mount() връща екземпляр на джаджата с методи за почистване:

<script>
  var widget = ThunderPhone.mount({
    element: '#thunderphone',
    publishableKey: 'pk_live_your_publishable_key',
  })

  // Later, when you want to remove the widget:
  widget.unmount()

  // Or equivalently:
  widget.destroy()
</script>

И unmount(), и destroy() правят едно и също -- прекъсват всяка активна гласова сесия и премахват джаджата от DOM. Използвайте този, който се чете по-добре във вашия код.


Примери

Тъмна тема с персонализиран цвят

<div id="thunderphone"></div>

<link rel="stylesheet" href="https://cdn.thunderphone.com/widget/latest/style.css" />
<script src="https://cdn.thunderphone.com/widget/latest/widget.js"></script>
<script>
  ThunderPhone.mount({
    element: '#thunderphone',
    publishableKey: 'pk_live_your_publishable_key',
    theme: 'dark',
    primaryColor: '#8b5cf6',
    title: 'Talk to our AI',
  })
</script>

Персонализирана позиция

<div id="thunderphone"></div>

<script src="https://cdn.thunderphone.com/widget/latest/widget.js"></script>
<script>
  ThunderPhone.mount({
    element: '#thunderphone',
    publishableKey: 'pk_live_your_publishable_key',
    position: 'bottom-left',
  })
</script>

С обратни извиквания за събития

<div id="thunderphone"></div>

<link rel="stylesheet" href="https://cdn.thunderphone.com/widget/latest/style.css" />
<script src="https://cdn.thunderphone.com/widget/latest/widget.js"></script>
<script>
  ThunderPhone.mount({
    element: '#thunderphone',
    publishableKey: 'pk_live_your_publishable_key',
    onConnect: function () {
      console.log('Call started')
    },
    onDisconnect: function () {
      console.log('Call ended')
    },
    onError: function (error) {
      console.error('Widget error:', error.error, error.message)
    },
  })
</script>

С мелодия за позвъняване

<div id="thunderphone"></div>

<link rel="stylesheet" href="https://cdn.thunderphone.com/widget/latest/style.css" />
<script src="https://cdn.thunderphone.com/widget/latest/widget.js"></script>
<script>
  ThunderPhone.mount({
    element: '#thunderphone',
    publishableKey: 'pk_live_your_publishable_key',
    ringtone: true, // or a custom URL: 'https://example.com/ringtone.mp3'
  })
</script>

Използване на референция към DOM елемент

<div id="thunderphone"></div>

<script src="https://cdn.thunderphone.com/widget/latest/widget.js"></script>
<script>
  var container = document.getElementById('thunderphone')

  ThunderPhone.mount({
    element: container,
    publishableKey: 'pk_live_your_publishable_key',
  })
</script>

Интеграция с WordPress / CMS

Добавете това в блок за персонализиран HTML или във футъра на вашата тема:

<link rel="stylesheet" href="https://cdn.thunderphone.com/widget/latest/style.css" />
<script src="https://cdn.thunderphone.com/widget/latest/widget.js"></script>

<div id="thunderphone-widget"></div>
<script>
  ThunderPhone.mount({
    element: '#thunderphone-widget',
    publishableKey: 'pk_live_your_publishable_key',
  })
</script>

Отстраняване на проблеми

Уиджетът не се показва

Уверете се, че са заредени както CSS, така и JS файловете. Проверете конзолата на браузъра за мрежови грешки. Уверете се, че целевият елемент съществува в DOM, преди да извикате ThunderPhone.mount().

ThunderPhone не е дефиниран

Скриптът все още не е зареден. Уверете се, че тагът <script> за widget.js се намира преди извикването за монтиране или обградете извикването за монтиране със слушател за DOMContentLoaded.

Грешка: домейнът не е разрешен

Добавете своя домейн към списъка с разрешени домейни в настройките Разработчици на app.thunderphone.com. Не забравяйте, че localhost винаги е разрешен.


Следващи стъпки