---
title: "CDN / Oznaka skripta"
description: "Dodajte glasovni pripomoček ThunderPhone na katero koli spletno mesto brez združevalnika"
---

Različica CDN interno vključuje React, zato lahko gradnik uporabljate na statičnih spletnih mestih, v WordPressu, Webflowu ali na kateri koli strani, kamor lahko dodate HTML. npm, združevalnik ali ogrodje niso potrebni.

## URL-ji CDN

<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>
  URL-ji `latest` so tisti, ki jih ustvari generator izrezka za vdelavo na nadzorni plošči. Predpomnjeni so 5 minut in samodejno prevzamejo nove stabilne izdaje. Pripete poti `/widget/vX.Y.Z/` so nespremenljive in dolgoročno predpomnjene -- če pripnete različico, jo uskladite z izdajo npm `@thunderphone/widget`, za katero razvijate.
</Tip>

---

## Osnovna uporaba

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

Gradnik se priključi v ciljni element in se izriše kot **vrstica s fiksnim položajem v kotu vidnega polja** (privzeto `bottom-right`, nadzorovano z možnostjo `position`). Element priklopa je le koren React -- njegov položaj na strani ne vpliva na to, kje se gradnik prikaže.

---

## Možnosti priklopa

`ThunderPhone.mount()` sprejme enake možnosti kot komponenta React ter lastnost `element`:

| Možnost | Vrsta | Obvezno | Privzeto | Opis |
|--------|------|----------|---------|-------------|
| `element` | `string \| HTMLElement` | Da | -- | Izbirnik CSS (npr. `'#thunderphone'`) ali sklic na element DOM. |
| `publishableKey` | `string` | Da | -- | Javni ključ API (`pk_live_...`). Glasovni agent se samodejno določi iz konfiguracije gradnika ključa. |
| `theme` | `'light' \| 'dark'` | Ne | `'light'` | Barvna shema. |
| `primaryColor` | `string` | Ne | `'#000000'` (svetla) / `'#ffffff'` (temna) | Niz barve CSS, uporabljen kot poudarjena barva. |
| `title` | `string` | Ne | `'Voice assistant'` | Besedilo, prikazano v vrstici gradnika. |
| `position` | `'bottom-right' \| 'bottom-left' \| 'top-right' \| 'top-left'` | Ne | `'bottom-right'` | Fiksni položaj v vidnem polju. |
| `apiBase` | `string` | Ne | `'https://api.thunderphone.com/v1'` | Preglasitev osnovnega URL-ja API. |
| `language` | `string` | Ne | -- | Preglasitev jezika za posamezno sejo -- jezikovna koda ali območna nastavitev, kot so `en`, `es` ali `fr-FR`. Če ni nastavljena, se uporabi konfigurirani jezik agenta. |
| `voice` | `string` | Ne | -- | Preglasitev glasu za posamezno sejo -- ime glasu, kot je `maria`. Če ni nastavljeno, se uporabi konfigurirani glas agenta. |
| `context` | `string` | Ne | -- | Dejanski kontekst strani ali spletnega mesta za posamezno sejo, posredovan agentu. Na strežniški strani je skrajšan na 12.000 znakov. |
| `onConnect` | `() => void` | Ne | -- | Pokliče se, ko se glasovna seja poveže. |
| `onDisconnect` | `() => void` | Ne | -- | Pokliče se, ko se seja konča. |
| `onError` | `(error) => void` | Ne | -- | Pokliče se ob napakah. Napaka ima polji `error` (koda) in `message`. |
| `ringtone` | `boolean \| string` | Ne | `false` | Med povezovanjem predvaja melodijo zvonjenja. `true` za privzeto melodijo zvonjenja ali niz URL za zvok po meri. |

---

## Čiščenje

`ThunderPhone.mount()` vrne primerek pripomočka z metodami za čiščenje:

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

`unmount()` in `destroy()` naredita isto – prekineta vsako aktivno glasovno sejo in odstranita pripomoček iz DOM-a. Uporabite tisto, ki se bolje bere v vaši kodi.

<Note>
  Pri prehodu stran v enostranskih aplikacijah ali ob odstranitvi vsebujočega elementa vedno počistite pripomoček. Tako zagotovite, da so aktivne glasovne seje pravilno prekinjene.
</Note>

---

## Primeri

### Temna tema z barvo po meri

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

### Položaj po meri

```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 povratnimi klici dogodkov

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

### Z zvonjenjem

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

### Z uporabo sklica na element DOM

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

### Integracija z WordPressom / CMS-jem

To dodajte v blok HTML po meri ali v nogo svoje teme:

```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>` lahko postavite kamor koli – služi le kot točka vpetja. Sam pripomoček se prikaže kot fiksni prekrivni element v kotu vidnega polja (določenem z možnostjo `position`) in se ne prilagaja okoliški vsebini.
</Tip>

---

## Odpravljanje težav

<AccordionGroup>
  <Accordion title="Gradnik se ne prikaže">
    Prepričajte se, da sta naloženi datoteki CSS in JS. V konzoli brskalnika preverite omrežne napake. Pred klicem `ThunderPhone.mount()` preverite, ali ciljni element obstaja v DOM-u.
  </Accordion>

  <Accordion title="ThunderPhone ni definiran">
    Skript še ni naložen. Prepričajte se, da je oznaka `<script>` za `widget.js` pred vašim klicem za priklop, ali pa klic za priklop ovijte v poslušalnik `DOMContentLoaded`.
  </Accordion>

  <Accordion title="Napaka: domena ni dovoljena">
    Svojo domeno dodajte na seznam dovoljenih domen v nastavitvah **Razvijalci** na [app.thunderphone.com](https://app.thunderphone.com). Ne pozabite, da je `localhost` vedno dovoljen.
  </Accordion>
</AccordionGroup>

---

## Naslednji koraki

<CardGroup cols={2}>
  <Card title="Oblikovanje" icon="palette" href="/sl/widget/styling">
    Prilagodite videz gradnika z lastnostmi CSS po meri.
  </Card>
  <Card title="Komponenta React" icon="react" href="/sl/widget/react">
    Uporabljate React? Integracija komponente je preprostejša.
  </Card>
</CardGroup>
