---
title: "CDN / skriptisilt"
description: "Lisa ThunderPhone'i häälvidin mis tahes veebisaidile ilma bundlerita"
---

CDN-i build sisaldab Reacti sisemiselt, seega saad vidinat kasutada staatilistel saitidel, WordPressis, Webflow's või mis tahes lehel, kuhu saad lisada HTML-i. npm-i, bundlerit ega raamistikku pole vaja.

## CDN-i URL-id

<CodeGroup>
```html Latest (recommended)
<link rel="stylesheet" href="https://cdn.thunderphone.com/widget/latest/style.css" />
<script src="https://cdn.thunderphone.com/widget/latest/widget.js"></script>
```

```html Pinned version
<!-- 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>
```
</CodeGroup>

<Tip>
  `latest`-i URL-id loob juhtpaneeli manustuskoodi generaator. Neid vahemällu salvestatakse 5 minutiks ning need võtavad uued stabiilsed väljalasked automaatselt kasutusele. Kinnitatud `/widget/vX.Y.Z/` teed on muutumatud ja pikaajalise vahemäluga -- kui kinnitad versiooni, vii see vastavusse `@thunderphone/widget` npm-i väljalaskega, mille vastu arendad.
</Tip>

---

## Põhikasutus

```html
<!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>
```

Vidina paigaldatakse sihtelementi ja see kuvatakse **fikseeritud asukohaga ribana vaateala nurgas** (vaikimisi `bottom-right`, mida juhib suvand `position`). Paigalduselement on ainult Reacti juurelement -- selle asukoht lehel ei mõjuta vidina kuvamiskohta.

---

## Paigaldussuvandid

`ThunderPhone.mount()` aktsepteerib samu suvandeid nagu Reacti komponent ning lisaks omadust `element`:

| Suvand | Tüüp | Kohustuslik | Vaikimisi | Kirjeldus |
|--------|------|----------|---------|-------------|
| `element` | `string \| HTMLElement` | Jah | -- | CSS-i selektor (nt `'#thunderphone'`) või DOM-i elemendi viide. |
| `publishableKey` | `string` | Jah | -- | Avalik API-võti (`pk_live_...`). Häälagent määratakse võtme vidina konfiguratsiooni põhjal automaatselt. |
| `theme` | `'light' \| 'dark'` | Ei | `'light'` | Värviskeem. |
| `primaryColor` | `string` | Ei | `'#000000'` (hele) / `'#ffffff'` (tume) | Aktsentvärvina kasutatav CSS-i värvistring. |
| `title` | `string` | Ei | `'Voice assistant'` | Vidinaribal kuvatav tekst. |
| `position` | `'bottom-right' \| 'bottom-left' \| 'top-right' \| 'top-left'` | Ei | `'bottom-right'` | Fikseeritud asukoht vaatealas. |
| `apiBase` | `string` | Ei | `'https://api.thunderphone.com/v1'` | API baas-URL-i ülekirjutus. |
| `language` | `string` | Ei | -- | Seansipõhine keele ülekirjutus -- keelekood või lokaat, näiteks `en`, `es` või `fr-FR`. Kui see pole määratud, kasutatakse häälagendi seadistatud keelt. |
| `voice` | `string` | Ei | -- | Seansipõhine hääle ülekirjutus -- hääle nimi, näiteks `maria`. Kui see pole määratud, kasutatakse häälagendi seadistatud häält. |
| `context` | `string` | Ei | -- | Häälagendile edastatav seansipõhine faktiline lehe või saidi kontekst. Serveris kärbitakse see 12 000 tähemärgini. |
| `onConnect` | `() => void` | Ei | -- | Kutsutakse välja, kui hääleseanss ühendub. |
| `onDisconnect` | `() => void` | Ei | -- | Kutsutakse välja, kui seanss lõpeb. |
| `onError` | `(error) => void` | Ei | -- | Kutsutakse välja vigade korral. Vead sisaldavad välju `error` (kood) ja `message`. |
| `ringtone` | `boolean \| string` | Ei | `false` | Esita ühenduse loomise ajal helinat. Vaikimisi helina jaoks kasuta `true` või kohandatud heli jaoks URL-stringi. |

---

## Puhastamine

`ThunderPhone.mount()` tagastab vidina eksemplari puhastusmeetoditega:

```html
<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>
```

Nii `unmount()` kui ka `destroy()` teevad sama asja -- katkestavad aktiivse häälseansi ja eemaldavad vidina DOM-ist. Kasuta oma koodis seda, mis loetavam tundub.

<Note>
  Puhasta vidin alati ühe lehe rakendustes teisele lehele liikudes või siis, kui seda sisaldav element eemaldatakse. See tagab, et aktiivsed häälseansid katkestatakse nõuetekohaselt.
</Note>

---

## Näited

### Tume teema kohandatud värviga

```html
<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>
```

### Kohandatud asukoht

```html
<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>
```

### Sündmuste tagasihelistustega

```html
<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>
```

### Helinaga

```html
<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-elemendi viite kasutamine

```html
<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>
```

### WordPressi / CMS-i integreerimine

Lisa see kohandatud HTML-i plokki või oma teema jalusesse:

```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>
```

<Tip>
  `<div>` võib asuda ükskõik kus -- see on ainult ühenduspunkt. Vidin ise renderdatakse fikseeritud ülekattena vaateala nurgas (määratud suvandiga `position`) ega paigutu koos ümbritseva sisuga.
</Tip>

---

## Tõrkeotsing

<AccordionGroup>
  <Accordion title="Vidinat ei kuvata">
    Veendu, et nii CSS- kui ka JS-failid on laaditud. Kontrolli brauseri konsoolist võrguvigu. Enne `ThunderPhone.mount()` käivitamist veendu, et sihtelement on DOM-is olemas.
  </Accordion>

  <Accordion title="ThunderPhone pole määratletud">
    Skript pole veel laaditud. Veendu, et `widget.js`-i `<script>`-silt asub enne mount-kutset, või mähi mount-kutse `DOMContentLoaded` kuulaja sisse.
  </Accordion>

  <Accordion title="Domeen pole lubatud">
    Lisa oma domeen lubatud domeenide loendisse [app.thunderphone.com](https://app.thunderphone.com) jaotise **Arendajad** seadetes. Pea meeles, et `localhost` on alati lubatud.
  </Accordion>
</AccordionGroup>

---

## Järgmised sammud

<CardGroup cols={2}>
  <Card title="Stiilimine" icon="palette" href="/et/widget/styling">
    Kohanda vidina välimust CSS-i kohandatud omadustega.
  </Card>
  <Card title="Reacti komponent" icon="react" href="/et/widget/react">
    Kasutad Reacti? Komponendi integreerimine on lihtsam.
  </Card>
</CardGroup>
