CDN / Ознака скрипте

CDN издање интерно обједињује React, тако да можете да користите виџет на статичким сајтовима, у WordPress-у, Webflow-у или на било којој страници на коју можете да додате HTML. Нису потребни npm, обједињивач нити оквир.

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 увек дозвољен.


Следећи кораци