# Pokalbių valdiklio JS API

> Visos pokalbių valdiklio JavaScript komandos: init, identify, update, setTags, track, setContext, open, on ir off, reset, destroy. Su pavyzdžiais.

Svetainė valdo pokalbių valdiklį per vieną funkciją `HrcWidget`: perduoda, kas yra lankytojas, atidaro ir uždaro langą, klauso įvykių. Kiekvienas kvietimas atrodo taip: `HrcWidget('<komanda>', ...argumentai)`.

## Įkėlimas ir eilė

Naudokite [pilną įdėjimo kodą](https://hrc.lt/dokumentacija/valdiklis/idejimas). Kvietimai, padaryti iki įkėliklio atsisiuntimo, laukia eilėje `HrcWidget.q` ir įvykdomi iš eilės, įskaitant funkcijas (callback). Kvietimai po įkėliklio, bet iki `init`, saugomi iki 100; perpildžius pirmiausia atmetamas `track`, niekada `identify`, `reset` ar `on`.

Bloga reikšmė ar nežinoma komanda niekada nemeta klaidos jūsų puslapyje: ji praleidžiama su vienu įspėjimu konsolėje. `debug: true` parodo daugiau.

## TypeScript tipai

Tipai su visomis komandomis: [https://widget.hrc.lt/v1/hrc.d.ts](https://widget.hrc.lt/v1/hrc.d.ts). Atsisiųskite failą prie savo kodo:

```ts
// Atsisiųskite į projektą:
// https://widget.hrc.lt/v1/hrc.d.ts
/// <reference path="./hrc.d.ts" />

// redaktorius patikrina tipus
HrcWidget('open', { view: 'new', type: 'question' });
```

## init

Paleidžia valdiklį. Pakartotinis `init` su kitu raktu išjungia seną valdiklį ir paleidžia naują.

```js
HrcWidget('init', {
  // iš jūsų įdėjimo kodo
  widgetKey: 'wk_xxxxxxxxxxxxxxxxxxxx',
  // arba 'lt', 'en', 'ru', 'pl', ...
  locale: 'auto',
  // veikia kaip update
  profile: { attributes: { plan: 'pro' } },
  context: {
    appVersion: '3.8.1',
    custom: { page_type: 'checkout' },
  },
  // 'hidden' savo mygtukui
  launcher: 'default',
  zIndex: 2147483000,
  // true: rodo atmestas reikšmes
  debug: false,
});
```

| Parinktis   | Reikšmė                                                          |
| ----------- | ---------------------------------------------------------------- |
| `widgetKey` | Valdiklio raktas iš skilties Įdėjimas. Privalomas.               |
| `locale`    | `'auto'` arba kalbos kodas, pavyzdžiui `'lt'`.                   |
| `identity`  | Tas pats kaip `identify`.                                        |
| `profile`   | Tas pats kaip `update`, pritaikoma atsiradus sesijai.            |
| `context`   | Tas pats kaip `setContext`.                                      |
| `launcher`  | `'default'` arba `'hidden'` (mygtukas paslėptas, `open` veikia). |
| `zIndex`    | Valdiklio sluoksnis, pagal nutylėjimą 2147483000.                |
| `debug`     | `true` konsolėje paaiškina praleistas reikšmes.                  |

## identify

Atpažįsta prisijungusį naudotoją: jis mato savo pokalbius bet kuriame įrenginyje. `userHash` apskaičiuojamas jūsų serveryje, žr. [Naudotojų atpažinimas](https://hrc.lt/dokumentacija/valdiklis/naudotoju-atpazinimas). Kartu galite perduoti profilio laukus.

```js
HrcWidget('identify', {
  // jūsų naudotojo ID, visada tekstas
  externalId: String(user.id),
  email: user.email,
  name: user.name,
  // žr. „Naudotojų atpažinimas“
  userHash: userHashFromYourServer,
  company: { id: 'acme-1', name: 'Acme', plan: 'Pro' },
  attributes: { plan: 'pro', seats: 12, trial_ends_at: '2026-12-01' },
  tags: ['vip'],
});
```

## update

Dalinai atnaujina lankytojo profilį: vardą, telefoną, nuotrauką, įmonę ir iki 50 savų laukų. Laukai sujungiami po vieną; `null` arba `''` laukelį pašalina. Per 500 ms padaryti kvietimai išsiunčiami kartu. Taisyklės ir ribos: [Lankytojo profilis](https://hrc.lt/dokumentacija/valdiklis/lankytojo-profilis).

```js
HrcWidget('update', {
  phone: '+370 600 00000',
  company: {
    name: 'Acme',
    website: 'https://acme.example',
    plan: 'Pro',
  },
  // skaičius, taip/ne, data ar tekstas
  attributes: {
    orders: 14,
    newsletter: true,
    signed_up_at: new Date('2024-03-12'),
    app_version: '3.8.1',
    // null arba '' pašalina raktą
    coupon: null,
  },
});
```

## setTags

Masyvas prideda žymas, objektas prideda ir pašalina. Iki 20 žymų kontaktui, raidės, skaičiai ir brūkšnelis.

```js
// prideda šias žymas
HrcWidget('setTags', ['vip', 'beta']);
// prideda ir pašalina
HrcWidget('setTags', { add: ['churn-risk'], remove: ['beta'] });
```

## track

Įrašo vieną lankytojo veiksmą. Komanda šoninėje juostoje mato paskutinius 5, kontakto puslapyje visus.

```js
HrcWidget('track', 'plan-upgraded', { from: 'free', to: 'pro' });
HrcWidget('track', 'checkout.failed', {
  reason: 'card_declined',
  amount: 49.9,
});
```

## setContext

Pakeičia sesijos reikšmes, kurios siunčiamos su kiekviena kita žinute. Jos neišsaugomos profilyje. Iki 20 savų raktų, reikšmė iki 200 simbolių.

```js
// Tik kitoms šio apsilankymo žinutėms
HrcWidget('setContext', {
  appVersion: '3.8.1',
  custom: { cart_id: 'c-1042', step: 'payment' },
});
```

## open, close, toggle ir mygtukas

`open` atidaro langą: `view` yra `'home'`, `'new'` arba `'list'`, `type` yra `'bug'`, `'feature'` arba `'question'`. Su `view: 'new'` parinktis `message` įrašo tekstą į naujo pokalbio laukelį (neišsiunčia, iki 2000 simbolių).

```js
// pradinis langas
HrcWidget('open');
// lankytojo pokalbiai
HrcWidget('open', { view: 'list' });
// iš karto klaidos forma
HrcWidget('open', { view: 'new', type: 'bug' });
// tekstas rašymo lauke, neišsiųstas
HrcWidget('open', { view: 'new', message: 'Order #1042: ' });
HrcWidget('close');
HrcWidget('toggle');
// open() vis tiek veikia
HrcWidget('hideLauncher');
HrcWidget('showLauncher');
```

## on ir off: įvykiai

```js
function onUnread(event) {
  document.title = event.count ? '(' + event.count + ') Shop' : 'Shop';
}
// iš karto su dabartiniu skaičiumi
HrcWidget('on', 'unread', onUnread);
HrcWidget('on', 'ready', function (event) {
  console.log(event.isIdentified, event.locale);
});
HrcWidget('on', 'conversation-started', function (event) {
  console.log(event.type);
});
// pašalina šią funkciją
HrcWidget('off', 'unread', onUnread);
// pašalina visas ready funkcijas
HrcWidget('off', 'ready');
```

| Įvykis                 | Duomenys                                                  | Kada                                                                                                                     |
| ---------------------- | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| `ready`                | `{ isIdentified, hasConversations, unreadCount, locale }` | Valdiklis paleistas. Vėliau užregistruotas `on('ready')` gauna paskutinę reikšmę iš karto.                               |
| `open`                 | `{ view }`                                                | Kiekvieną kartą atidarius.                                                                                               |
| `close`                | `{}`                                                      | Kiekvieną kartą uždarius.                                                                                                |
| `unread`               | `{ count }`                                               | Iš karto su dabartine reikšme, tada po kiekvieno pasikeitimo.                                                            |
| `message`              | `{ unreadCount }`                                         | Atėjo komandos atsakymas, kurio lankytojas dar neperskaitė. Teksto nėra, kad kiti puslapio skriptai neskaitytų atsakymų. |
| `conversation-started` | `{ conversationId, type }`                                | Lankytojas pradėjo pokalbį.                                                                                              |
| `identified`           | `{}`                                                      | `identify` pavyko.                                                                                                       |
| `identify-failed`      | `{ code }`                                                | `identify` nepavyko, pavyzdžiui `IDENTITY_INVALID`.                                                                      |

Callback, kuris meta klaidą, parašo vieną įspėjimą ir nesustabdo nei valdiklio, nei kitų callback.

## setLocale, reset ir destroy

```js
// pakeičia kalbą iš karto, arba 'auto'
HrcWidget('setLocale', 'pl');
// atsijungus: pamiršta lankytoją
HrcWidget('reset');
// pašalina valdiklį; vėl kvieskite init
HrcWidget('destroy');
```

`reset` pamiršta sesiją, atpažinimą ir visus dar neišsiųstus profilio pakeitimus, žymas, veiksmus ir sesijos reikšmes. Kvieskite jį, kai naudotojas atsijungia.

## Vieno puslapio programos

Puslapio keitimą (`pushState`, `popstate`) įkėliklis pastebi pats, todėl žinutėse matote tikrą puslapį. React pavyzdys: [Įdėjimo kodas, React ir CSP](https://hrc.lt/dokumentacija/valdiklis/idejimas).
