> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ukrgsm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Переведення дзвінка

> Переводьте активні телефонні дзвінки на статичні адресати або визначайте адресата динамічно під час дзвінка.

Інструмент «Переведення дзвінка» дозволяє ШІ-агенту перевести активний телефонний дзвінок на номер телефону чи SIP-ендпоінт. Можна налаштувати фіксований адресат, використати шаблон з контексту дзвінка або визначити адресата в момент переведення через виклик вашого HTTP-ендпоінта.

Використовуйте цей інструмент, коли абонент має поговорити з людиною-оператором, конкретним відділом, чергою ескалації, чергою підтримки чи іншою телефонною системою.

## Підтримувані провайдери

Переведення дзвінка доступне для телефонних дзвінків через провайдерів Twilio, Telnyx або Asterisk ARI.

<Warning>
  Веб-дзвінки не підтримують переведення.
</Warning>

## Як працює переведення дзвінка

Коли LLM вирішує, що потрібне переведення, вона викликає інструмент «Переведення дзвінка». Платформа визначає адресата, перевіряє налаштування переведення, а потім запускає переведення через провайдера.

Для успішного переведення:

1. Агент викликає інструмент «Переведення дзвінка».
2. Платформа визначає адресата — зі статичної конфігурації або через динамічний HTTP-резолвер.
3. За бажанням програється повідомлення перед переведенням.
4. Платформа починає набір адресата через провайдера телефонії.
5. Абонент чує музику очікування, поки встановлюється з'єднання з адресатом.
6. Коли адресат відповідає, платформа з'єднує абонента й завершує участь ШІ-агента.

Переведення — сліпе (blind transfer). Платформа наразі не передає контекст розмови людині, яка приймає дзвінок.

## Джерело адресата

Для кожного інструмента «Переведення дзвінка» потрібно обрати одне джерело адресата.

### Статичний / шаблон

Використовуйте, коли адресат переведення вже відомий заздалегідь.

Статичний адресат може бути:

* фіксованим номером у форматі E.164, наприклад `+380441234567`;
* SIP-ендпоінтом, наприклад `PJSIP/sales-queue`;
* шаблонним значенням із контексту, наприклад `{{initial_context.transfer_destination}}`.

Це найпростіший варіант для фіксованих ліній підтримки, конкретних відділів або випадків, коли адресат відомий ще до початку дзвінка.

### Динамічний HTTP-резолвер

Використовуйте, коли адресат потрібно визначити під час розмови.

Платформа надсилає `POST`-запит на ваш ендпоінт-резолвер перед початком переведення. Ваш ендпоінт повертає адресата й може повернути власне повідомлення, яке програється перед набором.

Типові сценарії використання:

* маршрутизація за регіоном, часовим поясом чи мовою;
* пошук потрібної команди у вашій системі роботи з клієнтами;
* маршрутизація за рівнем клієнта чи статусом акаунта;
* маршрутизація за типом звернення, мовою чи відділом;
* використання бізнес-логіки вашого бекенду замість жорстко закодованих номерів у сценарії.

## Запит до динамічного резолвера

Тіло запиту до резолвера — плаский JSON-об'єкт.

Платформа формує його з:

* **параметрів LLM**: значень, які агент видобуває з розмови в момент виклику інструмента переведення;
* **заданих параметрів**: значень, які платформа підставляє з фіксованих значень або шаблонів на кшталт `{{initial_context.account_id}}` чи `{{gathered_context.billing_issue_type}}`.

Якщо обидва джерела визначають той самий ключ, пріоритет мають задані параметри.

Приклад тіла запиту:

```json theme={null}
{
  "account_id": "acct_123",
  "plan": "enterprise",
  "billing_issue_type": "invoice_dispute"
}
```

<Note>
  Платформа не надсилає резолверу повний транскрипт розмови. Додайте конкретні потрібні значення як параметри LLM або задані параметри.
</Note>

## Відповідь динамічного резолвера

Ваш резолвер має повернути JSON-об'єкт з полем `transfer_context.destination`.

Поле `transfer_context.custom_message` необов'язкове.

```json theme={null}
{
  "transfer_context": {
    "destination": "+380441234567",
    "custom_message": "Зачекайте, будь ласка, з'єдную вас із відділом білінгу для корпоративних клієнтів."
  }
}
```

<Warning>
  Дотримуйтесь цього формату відповіді точно. Платформа читає конкретні ключі з відповіді резолвера. Для динамічного визначення адресата некоректна відповідь не має тихого запасного варіанта: переведення не відбувається до початку набору.
</Warning>

Поведінка полів:

* `destination`: обов'язкове. Номер у форматі E.164 або SIP-ендпоінт.
* `custom_message`: необов'язкове. Якщо повернуто, це повідомлення програється перед переведенням через провайдера.

Якщо резолвер завершується помилкою, таймаутом, повертає некоректний JSON або не містить `transfer_context.destination`, переведення коректно скасовується, і агент може продовжити розмову з абонентом.

## Налаштування динамічного резолвера

При використанні динамічного резолвера налаштуйте:

* **URL резолвера**: HTTPS- чи HTTP-ендпоінт, який платформа викликає через `POST`.
* **Таймаут резолвера**: скільки часу платформа чекає на відповідь резолвера.
* **Повідомлення очікування резолвера**: необов'язкове повідомлення, що озвучується, поки платформа чекає відповіді, наприклад «Зачекайте хвилинку, я знаходжу потрібну команду».
* **Параметри LLM**: значення, які агент має видобути з розмови, наприклад `billing_issue_type` чи `requested_department`.
* **Задані параметри**: значення, які платформа підставляє з контексту або фіксованих значень.
* **Власні заголовки**: статичні заголовки, що надсилаються на ендпоінт резолвера.
* **Облікові дані**: необов'язкові збережені облікові дані для автентифікації запиту до резолвера.

<Note>
  Динамічний резолвер використовує лише `POST`. Якщо потрібна власна логіка на бекенді, реалізуйте її за вашим ендпоінтом-резолвером і поверніть очікувану структуру `transfer_context`.
</Note>

## Повідомлення перед переведенням

«Переведення дзвінка» підтримує спільне налаштування повідомлення перед переведенням як для статичного, так і для динамічного адресата.

Для статичного переведення:

1. Платформа визначає статичний або шаблонний адресат.
2. Програється налаштоване повідомлення перед переведенням, якщо воно задане.
3. Платформа починає переведення через провайдера.

Для динамічного переведення:

1. Платформа може програти повідомлення очікування резолвера, поки триває виклик вашого резолвера.
2. Якщо резолвер повертає `custom_message`, платформа програє це повідомлення.
3. Якщо резолвер не повертає `custom_message`, платформа використовує налаштоване повідомлення перед переведенням.
4. Платформа починає переведення через провайдера.

`custom_message` від резолвера перевизначає налаштоване повідомлення перед переведенням для цієї спроби.

## Таймаут переведення

Таймаут переведення — це максимальний час, який платформа чекає, поки адресат відповість після початку переведення через провайдера.

Цей таймаут застосовується як до статичного, так і до динамічного переведення.

Таймаут резолвера — окремий параметр. Він контролює лише, скільки часу платформа чекає відповіді вашого HTTP-резолвера перед початком набору.

## Формати адресата

### Twilio та Telnyx

Використовуйте номери у форматі E.164:

```text theme={null}
+380441234567
```

Номер має бути досяжним через вашого провайдера телефонії.

### Asterisk ARI

Використовуйте SIP-ендпоінти:

```text theme={null}
PJSIP/sales-queue
SIP/1001
```

<Warning>
  Переведення через Asterisk ARI працює лише з SIP-ендпоінтами, налаштованими на вашому сервері Asterisk. Для зовнішніх телефонних номерів потрібне налаштування PSTN-транку на вашому Asterisk.
</Warning>

## Приклад: маршрутизація дзвінків з питаннями білінгу для корпоративних клієнтів

Використовуйте це налаштування, коли агент визначає проблему з білінгом, а ваш бекенд вирішує, направити абонента до стандартного білінгу, корпоративного білінгу чи стягнення заборгованості.

Налаштуйте параметри LLM:

```json theme={null}
[
  {
    "name": "billing_issue_type",
    "type": "string",
    "description": "Проблема з білінгом, з якою звернувся абонент, наприклад invoice_dispute, payment_failed, refund_request або plan_change.",
    "required": true
  },
  {
    "name": "requested_department",
    "type": "string",
    "description": "Відділ, який просить абонент, якщо він явно його назвав.",
    "required": false
  }
]
```

Налаштуйте задані параметри:

```json theme={null}
[
  {
    "name": "account_id",
    "type": "string",
    "value_template": "{{initial_context.account_id}}",
    "required": true
  },
  {
    "name": "plan",
    "type": "string",
    "value_template": "{{initial_context.plan}}",
    "required": true
  }
]
```

Ваш резолвер отримує:

```json theme={null}
{
  "billing_issue_type": "invoice_dispute",
  "requested_department": "billing",
  "account_id": "acct_123",
  "plan": "enterprise"
}
```

Ваш резолвер повертає:

```json theme={null}
{
  "transfer_context": {
    "destination": "+380441234567",
    "custom_message": "Зачекайте, будь ласка, з'єдную вас із відділом білінгу для корпоративних клієнтів."
  }
}
```

## Найкращі практики

* Тримайте затримку резолвера низькою. Орієнтуйтесь на 2–3 секунди.
* Використовуйте повідомлення очікування резолвера, якщо відповідь може займати помітний час.
* Надсилайте резолверу лише ті параметри, які йому справді потрібні.
* Надавайте перевагу заданим параметрам для значень, уже доступних в `initial_context` чи `gathered_context`.
* Робіть описи параметрів LLM явними, щоб агент розумів, що саме видобувати.
* Тестуйте як успішне переведення, так і сценарій помилки резолвера перед виходом у продакшн.
* Тримайте логіку перевірки адресата й маршрутизації на своєму бекенді, якщо вона залежить від даних акаунта чи бізнес-правил.

## Усунення несправностей

### Інструмент переведення не викликається

Перевірте, що інструмент прикріплено до потрібного вузла і що промпт вузла чітко вказує агенту, коли переводити дзвінок.

### Статичне переведення завершується помилкою через відсутність адресата

Статичний режим вимагає налаштованого адресата. Використайте фіксований адресат або шаблон, що дає непорожнє значення.

### Динамічне переведення завершується помилкою до набору

Перевірте відповідь резолвера. Вона має містити:

```json theme={null}
{
  "transfer_context": {
    "destination": "+380441234567"
  }
}
```

Також перевірте URL резолвера, заголовки автентифікації, облікові дані й таймаут.

### Резолвер отримує неповні параметри

Переконайтесь, що параметр налаштовано як один із варіантів:

* параметр LLM, якщо агент має видобути його з розмови;
* заданий параметр, якщо платформа має підставити його з контексту.

Для відомих контекстних значень надавайте перевагу заданим параметрам на кшталт `{{initial_context.account_id}}` або `{{gathered_context.billing_issue_type}}`.

### Адресат не відповідає

Перевірте, що номер телефону чи SIP-ендпоінт коректний і досяжний через налаштованого провайдера телефонії.
