Про API
Сopied

Для роботи Вам знадобиться ключ (токен) доступу до API.
Ключ дозволяє ідентифікувати Ваш проект та отримувати до нього доступ із максимальними привілеями без необхідності попередньої авторизації щоразу.
На сторінці особистого кабінету “API необхідно створити ключ:

Цей ключ необхідно вказувати при кожному запиті в заголовку Authorization.
Усі відносні шляхи усіх методів, описаних у цій документації, мають шляхи відносно https://api.unitalk.cloud/api
Усі запити до методів API виконуються у режимі POST.
Приклад задання режиму, необхідного заголовка авторизації та адреси методу для запиту в Postman виглядає наступним чином:

Також можна відправляти ключ у форматі Bearer *Ваш ключ*

Якщо ключ або заголовок авторизації відсутній або вказаний неправильно, результат виконання методу буде наступним:

{"status": "Error", "message": "Authorization invalid"}

Будь-який метод описаного API може повернути помилку:

{"status": "Error", "message": "Internal error"}

Про такі помилки повідомляйте, будь ласка, у технічну підтримку.

В загальному випадку помилки методів мають наступну структуру:

{
    "status": "Error",
    "message": "*Текст помилки*",
    "data": "*Додаткова інформація*"
}

Надалі в цій інструкції будуть розглядатися лише поля message та data (за наявності).

Так, ми знаємо що в JSON не може бути коментарів, але впевнені, що так зрозуміти буде простіше 🙂

Тарифікація
Сopied

Наше апі доволі швидке, і більшість ваших запитів буде займати мілісекунди, бо ми любимо кешувати все, що тільки можна. Але деякі можуть бути складніші, тож звертайте увагу на час їх виконання.

Обробка до 50мс – вважається одним запитом.
<200мс – 2 запити
<500мс – 3 запити
<1000мс – 4 запити
>1000мс – 5 запитів

Рекомендації по зниженню вартості та збільшенню швидкості:
Зверніть увагу, що ви можете інколи кардинально пришвидшити обробку, якщо використаєте фільтр по повному співпадінню, замість часткового. Або інколи запросити більше інформації, і відфільтрувати результат, може виявитись швидше ніж зробити декілька запитів зі складними фільтрами. Не обходьте стороною пакетні запити, як от в обдзвонах, адже додати 1000 номерів в обдзвон одним запитом, значно швидше та дешевше і вам і нам, ніж робити 1000 запитів (а якщо всі вони ще й прилетять одночасно – у нас і DOS захист може спрацювати). А інколи можна використати кеш, як це полюбляємо ми 😊
Інформацію щодо використання запитів по вашому тарифу, ви можете переглянути в розділі “Мій тариф” в особистому кабінеті.

Ліміти
Сopied

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

Обмеження кількості будь-яких HTTP запитів:
· Більше 30 запитів за 10 секунд – тимчасове блокування;
· Повторне перевищення – тимчасове блокування підвищенної тривалості;
· Більше 100 запитів за 10 секунд – постійне блокування.
Обмеження одночасних API дзвінків: 20 одночасних дзвінків.
Обмеження запитів API дзвінків: 15 за секунду.

Обдзвон номерів
Сopied

Робота з обдзвонами виконується за допомогою дій, метод:

Відносний шлях: /autodial/action
Режим: POST
Content-Type: application/json

Дії вказуються в тілі запиту в обов’язковому параметрі action та визначають перелік необхідних параметрів. Перелік існуючих дій:

GET_LISTОтримати список обдзвонів
GET_WITH_DATAОтримати список обдзвонів з повними даними
ADDДодати обдзвон
UPDATEОновити обдзвон
REMOVEВидалити обдзвон
REFRESHПродзвонити повторно
CANCELСкасувати обдзвон
PAUSEПоставити обдзвон на паузу
UNPAUSEЗняти обдзвон з паузи
ADD_NUMBERSДодати номери
GET_NUMBERОтримати інформацію про номер обдзвону
GET_NUMBERSОтримати інформацію про номери обдзвону
GET_CALLS_HISTORYОтримати інформацію про дзвінки обдзвону
REMOVE_NUMBERSВидалити номери з обдзвону
REMOVE_ALL_NUMBERSВидалити всі номери обдзвону

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

Можливі помилки:

Action is nullЦільова дія не вказана
Invalid actionЦільова дія вказано невірно

Отримання списку обдзвонів
Сopied

JSON запиту:

{ 
  "action": "GET_LIST" 
}

Приклад відповіді у разі успіху:

[
  {
    "id": 111, // Унікальний ідентифікатор обдзвону
    "name": "Sample_name", // Назва обдзвону
    "type": "AUTODIAL" // Тип обдзвону
  },
  ...
]

Існуючі типи обдзвонів приведені в відповідному словнику.

Отримання повної інформації про обдзвони з з додатковими даними
Сopied

Дія “Отримати список обдзвонів з повними даними” дозволяє отримати детальну інформацію про поточну конфігурацію обдзвонів проекта в масиві tasks. Окрім того додатково передаються словники, параметри та списки, що можуть знадобитись для інтерпретації та зміни конфігурацій обдзвонів.

Перелік додаткових списків:
· audios – масив аудіозаписів проекту з розділу “Автообдзвони”
· moh – масив аудіозаписів проекту з розділу “Мелодії очікування на лінії та черг”
· groups – масив груп внутрішніх ліній проекту
· scenarios – масив вхідних сценаріїв проекту
· outScenarios – масив вихідних сценаріїв проекту
· ttsSettings – масив профілей налаштувань синтезу мови проекту
· voiceSecretaries – масив голосових секретарів проекту
· Масиви triggerActionEventsData та triggerActionEventsAndTriggerActions надають таку інформацію про події обдзвонів як порядковий номер та список доступних обробників

Перелік додаткових словників:
· triggerActionEventsпрейти до словника
· taskStatusesперейти до словника
· Параметри autodialNumberStatesInfo та statesInfo містять інформацію відповідну словнику callState в різних представленнях
· autodialerTypesперейти до словника
· autodialerModesперейти до словника
· audioSynthesisDynamicValuesперейти до словника
· withdrawalCategories

Перелік додаткових параметрів:
· triggerActionsPresent – вказує на наявність в проекті обробників подій
· maxAddNumbersCount – максимальна кількість номерів, що можна додати за одну дію
· maxRemoveNumbersCount – максимальна кількість номерів, що можна видалити за одну дію
· multiAudiosLimit – максимальна кількість елементів в списку compositeAudio
· minMultiAudioSilenceMillis – мінімальна кількість мілісекунд в елементі silenceMillis масива compositeAudio
· maxMultiAudioSilenceMillis – максимальна кількість мілісекунд в елементі silenceMillis масива compositeAudio

JSON запиту:

{ 
  "action": "GET_WITH_DATA" 
}

Приклад відповіді у разі успіху:

{
    "audios": { // Масив аудіо
        "1234": "Sample_audio_name", // "ID": "Назва"
    ...
    },
    "moh": { // Масив мелодій очікування на лінії
        "2345": "Sample_moh_name", // "ID": "Назва"
    ...
    },
    "groups": { // Масив груп внутрішніх ліній
        "3456": "Sample_group_name", // "ID": "Назва"
    ...
    },
    "scenarios": { // Масив вхідних сценаріїв
        "4567": "Main with IVR", // "ID": "Назва"
    ...
    },
    "outScenarios": { // Масив вихідних сценаріїв
        "5678": "From a fixed number", // "ID": "Назва"
    ...
    },
    "ttsSettings": { // Масив профілів налаштувань синтезу мови
        "12": "Pretty woman voice", // "ID": "Назва"
    ...
    },
    "voiceSecretaries": { // Масив голосових секретарів
        "97": "Sample_voice_secretary_name", // "ID": "Назва"
    ...
    },
    "triggerActionEvents": { // Масив подій для обдзвону
        "AUTODIAL_FINISH": "Обзвон завершен", // "ID": "Назва"
    ...
    },
    "triggerActionEventsData": [ // Інформація про події обдзвонів
        {
            "event": "AUTODIAL_FINISH", // Подія
            "title": "Обзвон завершен", // Назва події
            "order": 200 // Порядковий номер
        },
    ...
    ],
    "triggerActionEventsAndTriggerActions": { // Списки доступних обробників для кожної події
        "AUTODIAL_FINISH": { // "Подія": {Список ддоступних обробників}
            "123": "[Telegram] Personal notification", // "ID": "Назва"
      ...
        },
    ...
    },
    "triggerActionsPresent": true, // Ознака наявності в проекті обробників події
    "autodialNumberStatesInfo": { // Інформація про стани номерів обдзвонів
        "lang": { // Мова проекту
            "locale": "ru",
            "shortLocaleCode": "ru",
            "code": "RU"
        },
        "orderedStates": [ // Впорядкований список станів на основі порядкового номеру
            "NEW",
      ...
        ],
        "statesAndTitles": { // Масив станів з назвами
            "DIALING": "В процессе обзвона",
      ...
        },
        "repeatableStates": [ // Список станів доступних для автоматичного повторного продзвону
            "BUSY",
      ...
        ],
        "refreshableStates": [ // Список станів доступних для методу REFRESH
            "FAIL", 
      ...
        ],
        "warningStates": [ // Список станів, що свідчать про можливі помилки в налаштуваннях обдзвонів або телефонії
            "AUDIO_ERR",
      ...
        ],
        "doneStates": [ // Список станів, що відповідають завершеним дзвінкам
            "ANSWER",
      ...
        ]
    },
    "taskStatuses": { // Масив статусів обдзвонів
        "IN_PROGRESS": "В процессе обзвона",
    ...
    },
    "autodialerTypes": { // Масив типів обдзвонів
        "AUTODIAL": "Autodialer",
        "GUARANTEED_DIAL": "Guaranteed autodialer",
        "VOICE_ROBOT": "Voice robot"
    }
  "autodialerModes": { // Масив режимів обдзвонів
        "FIXED": "By number of threads",
        "FREE": "By free operators",
        "SMART": "Smart selection"
    },
    "maxAddNumbersCount": 100000, // Максимальна кількість номерів, що можна додати за одну дію
    "maxRemoveNumbersCount": 10000, // Максимальна кількість номерів, що можна видалити за одну дію
    "multiAudiosLimit": 20, // Максимальна кількість елементів в списку compositeAudio
    "minMultiAudioSilenceMillis": 1, // Мінімальна кількість мілісекунд в елементі silenceMillis масива compositeAudio
    "maxMultiAudioSilenceMillis": 10000, // Максимальна кількість мілісекунд в елементі silenceMillis масива compositeAudio
    "audioSynthesisDynamicValues": { // Масив динамічних значень
        "NA": "Autodialer number: name",
        "NO": "Autodialer number: note",
        "LI": "Autodialer number: data for Web Dialer",
        "P1": "Autodialer number: parameter #1",
        "P2": "Autodialer number: parameter #2",
        "P3": "Autodialer number: parameter #3",
        "P4": "Autodialer number: parameter #4",
        "P5": "Autodialer number: parameter #5",
        "P6": "Autodialer number: parameter #6",
        "P7": "Autodialer number: parameter #7",
        "P8": "Autodialer number: parameter #8",
        "P9": "Autodialer number: parameter #9",
        "P10": "Autodialer number: parameter #10"
    },
    "withdrawalCategories": { // Масив категорій списань обдзвонів
        "CALL": "Совершение звонков",
        "AUTODIALER": "Обзвон",
        "VOICE_SECRETARY": "Голосовой секретарь",
        "TEXT_TO_SPEECH": "Синтез речи",
        "SPEECH_RECOGNITION": "Распознавание речи",
        "VOICE_ANALYTICS": "Речевая аналитика",
        "ANSWERING_MACHINE_DETECTION": "Распознавание автоответчика",
        "MESSAGE_SERVICE_MESSAGE": "Отправка сообщений"
    },
    "tasks": [ // Масив усіх обдзвонів
        {
            "id": 12345, // ID обдзвону
            "name": "Обзвон окна", // Назва обзвону
            "autodialerType": "AUTODIAL", // Тип обзвону
            "autodialerMode": "FIXED", // Режим обзвону
            "statistics": { // Статистика номерів обзвону
                "totalCount": 10, // Всього номерів
                "doneCount": 6, // Оброблено номерів
                "repeatCount": 2 // Повторних дзвінків
        "callsDoneCount": // Кількість завершених дзвінків
                "statesCount": { // Статистика номерів  по статусам
                    "NEW": 3, // "ID": Кількість
          ...
                }
            },
            "finishedDate": "2020-04-21", // Дата звершення обдзвону. Присутнє в обдзвонах з станом FINISHED 
            "threadCount": 1, // Кількість паралельних дзвінків. Присутнє в обдзвонах з режимом FIXED 
            "delay": 2, // Пауза між кінцем аудіозапису та запуском сценарію в секундах. Присутнє в обдзвонах з типом AUTODIAL
            "smartSpeed": 0, // Регулятор швидкості обдзвону. Присутнє в обдзвонах з режимом SMART
            "coldBaseStartCallsMultiplier": null, // Якщо не null, змінює кількість одночасних дзвінків в залежності від відсотка додзвону з указаним коефіцієнтом. Присутнє в обдзвонах з режимами FREE та SMART
            "callDelay": 0, // Пауза між дзвінками в секундах. Присутнє в обдзвонах з режимом FIXED та враховується лише при кількості потоків - 1
            "callDelayOnlyAnswered": true, // Пауза між дзвінками буде спрацьовувати лише після дзвінків на які відповів оператор. Присутнє в обдзвонах з режимом FIXED
            "compositeAudio": { // Містить інформацію про комбіноване аудіо, яке буде відтворено при відповіді клієнта на дзвінок. Присутнє в обдзвонах з типом AUTODIAL
                "multiAudios": [ // Список частин аудіо
                    {
                        "silenceMillis": 500 // Тривалість тиші в мілісекундах
                    },
                    {
                        "id": 46615 // ID аудіозапису проекту
                    },
                    {
                        "synthesisFromDynamicValue": { // Дані для синтезу мови
                            "dynamicValue": "NO", // Динамічне значення, значення якого буде синтезовно
                            "settingsId": 117 // ID профіля налаштувань синтезу мови, який буде використовуватись замість вказаного в налаштуваннях обдзвону. Може бути null
                        }
                    }
                ]
            },
            "moh": 53, // ID аудіо, яке клієнт буде чути під час очікування з'єднання з оператором. Може бути null. Присутнє в обдзвонах з типом GUARANTEED_DIAL
            "startDate": "2020-03-15", // Дата початку періода проведення обдзвону (включно) 
            "endDate": "2020-05-15", // Дата закінчення періода проведення обдзвону (включно) 
            "timeFrom": [ // Час початку обдзвону за днями тиждня в форматі "HH:mm"
                "09:00", // Понеділоу
                "11:00", // Вівторок
                "11:00", // Середа
                "11:00", // Четвер
                "11:00", // П'ятниця
                null, // Субота, null - обдзвон в цей день не працює 
                "14:00" // Неділя
            ],
            "timeTo": [ // Час закінчення обдзвону за днями тиждня
                "19:00",
                "19:00",
                "19:00",
                "19:00",
                "19:00",
                null,
                "17:00"
            ],
            "voiceSecretaryId": 25 // ID голосового секретаря. Присутнє в обдзвонах з типом VOICE_ROBOT
      "groupId": 300, // ID відділу телефонії на який будуть перенаправлятися дзвінки обдзвону. Присутнє в обдзвонах з типом GUARANTEED_DIAL або режимами FREE та SMART
            "pseudoGroupOperators": [
                "1000", ...
            ], // Список SIP ліній телефонії на який будуть перенаправлятися дзвінки обдзвону. Якщо вказано параметр groupId, цей параметр буде проігноровано.
            "scenarioId": null, // ID вхідного сценарію, який буде активовано, якщо клієнт залишиться на лінії після завершення аудіо. Може бути null. Присутнє в обдзвонах з типом AUTODIAL 
            "outScenarioId": null, // ID вихідного сценарію, який буде використовуватися для дзвінків обдзвону. Може бути null (55 сек за замовчуванням).
            "dialToClientTimeout": null, // Таймаут виклику до абонента. Може бути null.
            "pauseOperatorNoAnswerLimit": 5, // Кількість дзвінків поспіль, на які оператор не відповів, після якої він буде встановлений на паузу. Може бути null. Присутнє в обдзвонах з режимами FREE та SMART
            "ttsSettingsId": 18, // ID профілю налаштувань синтезу мови. Може бути null. Присутнє в обдзвонах з типами AUTODIAL та GUARANTEED_DIAL
            "useTaskAudioIfAudioError": false, // При помилці аудіо: true - “Використовувати аудіо обдзвону”, false - “Завершити дзвінок з помилкою”. Присутнє в обдзвонах з типами AUTODIAL та GUARANTEED_DIAL
            "repeatCallsSettings": { // Налаштування повторного дозвону. Може бути null
                "earlyStart": true, // Відповідає за ранній повторний дозвін. Якщо false або в обдзвоні понад 1 000 000 номерів — повторний дозвін почне виконуватись лише після завершення необроблених номерів
                "highPriority": true, // Відповідає за необхідність додавання повторних дзвінків у пріоритетну чергу
                "statesSettings": { // Масив статусів дзвінків, які підлягають повторному дозвону. Може бути порожнім або null, якщо repeatCallAttempts = null
                    "ANSWER": {
                        "attempts": 2, // Кількість повторних дозвонів. Доступні значення від 0 до 10. Значення 0 або null вимикають повторний дозвін
                        "intervalMinutes": 15, // Мінімальний інтервал між повторними дзвінками у хвилинах. Доступні значення від 5 до 1500
                        "secondsThreshold": 20 // Повторно дзвонити, якщо розмова тривала менше ніж зазначена кількість секунд
                    },
                    "NOANSWER": {
                        "attempts": 30, // Кількість повторних дозвонів. Доступні значення від 0 до 10. Значення 0 або null вимикають повторний дозвін
                        "intervalMinutes": 60 // Мінімальний інтервал між повторними дзвінками у хвилинах. Доступні значення від 5 до 1500
                    },
                    ...
                }
            },
            "repeatCallAttempts": 3, // [Застарілий параметр] Кількість повторних продзвонів. Значення 0 та null означають, що повторний продзвон вимкнено 
            "repeatCallIntervalMinutes": 30, // [Застарілий параметр] Мінімальний інтервал повторних продзвонів в хвилинах
            "repeatCallHighPriority": false, // [Застарілий параметр] Значення true вказує на необхідність внесення повторних продзвонів в пріорітетну чергу
            "repeatCallStates": [ // [Застарілий параметр] Список статусів дзвінків, які будуть повторно продзванюватись. Якщо пустий або null - повторний продзвон вимкнено
                "NOANSWER",
        ...
            ],
            "repeatCallEarly": true, // [Застарілий параметр] Значення true вказує на необхідність ранніх повторних дзвінків
            "callerIdPrefix": null, // Префікс, який буде відображено в SIP клієнті перед номером телефону. Може бути null
            "crmMode": "DONT_SEND", // Вказує які дзвінки будуть відправлені в CRM
            "clientCalledMode": "NEVER", // Вказує на необхідність ігнорувати номера абонентів від яких надходили дзвінки
            "displayName": false, // Вказує на необхідність відображати ім'я, що закріплено за номером, в SIP клієнті
            "displayNote": false, // Вказує на необхідність відображати примітку, що закріплено за номеров, в SIP клієнті
            "removeAfterFinish": false, // Вказує на необхідність видалення обдзвону після завершення
            "markAsBusySeconds": 60, // Кількість секунд на яку SIP лінія відмічається зайнятою після успішного дзвінка. Присутнє в обдзвонах з режимами FREE та SMART
            "markAsBusyMinSecondsTalk": 15, // Мінімальная тривалість дзвінка для спрацювання налаштування markAsBusySeconds в секундах. Присутнє в обдзвонах з режимами FREE та SMART
            "reservedSipsBusyOnlyForAutodials": true, // Вказує на доступність внутрішніх ліній для дзвінків, що надходять за вхідними сценаріями. Присутнє в обдзвонах з режимами FREE та SMART
            "triggerActions": { // Список подій та обробників, що за ними закріплені
                "AUTODIAL_NOANSWER": [ // Подія
                    2, // ID обробника подій
          ...
                ],
        ...
            },
            "withdrawalStatistics": { // Масив з інформацією про загальні витрати обдзвону
                "total": "12.47", // Сума списань за усіма категоріями
                "byCategories": { // Масив сумм списань за категоріями
                    "CALL": "0.60",
          ...
                }
            },
            "taskStatusInfo": { // Інформація про статус обдзвону
                "millis": 1631828328839,
                "status": "FINISHED",
                "dateForDescription": "2021-09-08",
                "durationMillis": 36253180657
            }
        },
    ...
    ],
    "statesInfo": [ // Інформація про статуси дзвінків обдзвону
        {
            "state": "NEW", // ID статусу
            "order": 10, // Порядковыий номер
            "title": "Не обработано", // Назва статусу
            "repeatable": false, // Доступний для автоматичного повторного продзвону (поле repeatCallStates)
            "refreshable": false, // Доступний для методу REFRESH
            "warning": false // Свідчить про можливі помилки в налаштування обдзвону або телефонії
        },
    ...
    ]
}

Створення та редагування обдзвонів
Сopied

Дії “Створити” та “Редагувати” дозволяють конфігурувати новий або існуючий обдзвони відповіно. Частина параметрів є спільною для усіх типів та режимів обдзвонів. Створення та редагування обдзвонів буде розглядатися на прикладі одного запиту, оскільки відмінності незначні:
· id – Унікальний ідентифікатор обдзвону, що редагується, не враховується при створенні
· autodialerType – Тип обдзвону не враховується при редагуванні
· При створенні обдзвону можна опціонально передати перелік номерів для обробки в параметрів numbers та вказати необхідність їх обробки в пріорітетній черзі в параметрі highPriority. Номери в масиві numbers необхідно вказувати в міжнародному форматі, усі сторонні символи будуть попередньо видалені. Для додання номерів в існуючий обдзвон використовуйте дію ADD_NUMBERS.

crmMode визначає інформація про які дзвінки буде передана в CRM. Доступні значення:
· DONT_SEND – Ніякі
· SEND_ANSWERED – Абонент відповів
· SEND_SUCCESS – Відповів абонент та оператор
· ALL_CALLS – Усі

clientCalledMode вказує на необхідність ігнорувати номери абонентів від яких надходили дзвінки. Доступні значення:
· NEVER – Ніколи
· ANSWERED_CALLS – Тільки якщо на дзвінок відповіли
· ALL_CALLS – Завжди

Приклад загальної частини JSON запиту:

{
    "action": "ADD", // Або "UPDATE"
    "task": {
        "id": 0, // ID існуючого обдзвону для "UPDATE". При "ADD" не враховується
        "name": "Обзвон", // Має бути унікальним
        "autodialerType": "AUTODIAL", // Тип обдзвону. При "UPDATE" не враховується
        "autodialerMode": "FIXED", // Режим обдзвону
        "startDate": "2020-03-15", // Дата початку періоду проведення обдзвону (включно) 
        "endDate": "2020-05-15", // Дата закінчення періоду проведення обдзвону (включно)
        "timeFrom": [ // Час початку обдзвону за днями тиждня в форматі "HH:mm". Може бути null
            "09:00", // Понеділок
            "11:00", // Вівторок
            "11:00", // Середа
            "11:00", // Четвер
            "11:00", // П'ятниця
            null, // Субота, null - обдзвон в цей день не працює 
            "14:00" // Воскресенье 
        ],
        "timeTo": [ // Час закінчення обдзвону за днями тиждня
            "19:00",
            "19:00",
            "19:00",
            "19:00",
            "19:00",
            null,
            "17:00"
        ],
        "outScenarioId": 567, // ID вихідного сценарію, який буде використовуватися для дзвінків обдзвону. Може бути null.
        "dialToClientTimeout": null, // Таймаут виклику до абонента. Доступні значення від 10 до 55. Може бути null (55 сек за замовчуванням).
        "triggerActions": { // Список подій та обробників, що за ними закріплені. До одної події можна закріпити максимум 5 обробників
            "AUTODIAL_NOANSWER": [ // Подія
                2, // ID обробника подій
         ...
            ],
       ...
        },
        "callerIdPrefix": "pref", // Префікс, що буде відображено в SIP клієнті перед номером телефону. Може бути null
        "crmMode": "DONT_SEND", // Вказує які дзвінки будуть відправлені в CRM
        "clientCalledMode": "NEVER", // Вказує на необхідність ігнорувати номера абонентів від яких надходили дзвінки
        "repeatCallsSettings": { // Налаштування повторного дозвону. Може бути null
            "earlyStart": true, // Відповідає за ранній повторний дозвін. Якщо false або в обдзвоні понад 1 000 000 номерів — повторний дозвін почне виконуватись лише після завершення необроблених номерів
            "highPriority": true, // Відповідає за необхідність додавання повторних дзвінків у пріоритетну чергу
            "statesSettings": { // Масив статусів дзвінків, які підлягають повторному дозвону
                "ANSWER": {
                    "attempts": 2, // Кількість повторних дозвонів. Доступні значення від 0 до 10. Значення 0 або null вимикають повторний дозвін
                    "intervalMinutes": 15, // Мінімальний інтервал між повторними дзвінками у хвилинах. Доступні значення від 5 до 1500
                    "secondsThreshold": 20 // Повторно дзвонити, якщо розмова тривала менше ніж зазначена кількість секунд
                },
                "NOANSWER": {
                    "attempts": 30, // Кількість повторних дозвонів. Доступні значення від 0 до 10. Значення 0 або null вимикають повторний дозвін
                    "intervalMinutes": 60 // Мінімальний інтервал між повторними дзвінками у хвилинах. Доступні значення від 5 до 1500
                },
        ...
            }
        }

     "displayName": false, // Вказує на необхідність відображати ім'я, що закріплено за номером, в SIP клієнті
        "displayNote": false, // Вказує на необхідність відображати примітку, що закріплено за номеров, в SIP клієнті
        "removeAfterFinish": false, // Вказує на необхідність видалення обдзвону після завершення
        "numbers": [ // Масив номерів для обдзвону. При "UPDATE" не враховується. Може бути null
            "+380971111111",
       ...
        ],
        "highPriority": true // Вказує на необхідність додання номерів з високим пріорітетом. Такі номери обдзвонюються в першу чергу. При "UPDATE" не враховуються
     ...
    }
}


Тип обдзвону, що створюється або редагується, впливає на перелік обов’язкових та допустимих параметрів, які будуть розглядатися окремо.

Для обдзвонів з типом AUTODIAL обов’язково наявність одного з параметрів compositeAudio та scenarioId. Параметр compositeAudio має містити об’єкт multiAudios який є масивом, що вказує аудіо. Кожен елемент масива multiAudios є посиланням на аудіозапис в проекті (id), тишою (silenceMillis) або синтезом аудіо (synthesisFromDynamicValue). Синтез аудіо має містити параметр dynamicValue, значення якого відповідая одному з ключів відповідного словника. Порядок розташування аудіо в масиві відповідає порядку відтворення. Для коректного синтезу аудіо обов’язкова наявність одного в параметрів settingsId частини синтезу та ttsSettingsId обдзвону.

Приклад специфічної для типу обдзвону AUTODIAL частини JSON запиту:

     ...
     "scenarioId": 70, // ID вхідного сценарію, який буде активовано, якщо клієнт залишиться на лінії після завершення аудіо
     "compositeAudio": {  // Містить інформацію про комбіноване аудіо, яке буде відтворено при відповіді клієнта на дзвінок
       "multiAudios": [ // Список частин аудіо
         {
           "silenceMillis": 500 // Тривалість тиші в мілісекундах
         },
         {
           "id": 46615  // ID аудіозапису проекту
         },
         {
           "synthesisFromDynamicValue": { // ані для синтезу мови
             "dynamicValue": "NO", // Динамічне значення, значення якого буде синтезовно
             "settingsId": 117 // ID профіля налаштувань синтезу мови, який буде використовуватись замість вказаного в налаштуваннях обдзвону. Може бути null
           }
         }
       ]
     },
     "ttsSettingsId": 18, // ID профілю налаштувань синтезу мови. Може бути null
     "useTaskAudioIfAudioError": true, // При помилці аудіо: true - “Використовувати аудіо обдзвону”, false - “Завершити дзвінок з помилкою”
     "delay": 2, // Пауза між кінцем аудіозапису та запуском сценарію в секундах. Може бути 0
     ...

Для обдзвонів з типом GUARANTEED_DIAL необхідно обов’язково вказати групу внутрішніх ліній в параметрі groupId чи pseudoGroupOperators .

Приклад специфічної для типу обдзвону GUARANTEED_DIAL частини JSON запиту:

     ...
     "moh": 255, // ID аудіо, яке клієнт буде чути під час очікування з'єднання з оператором. Може бути null
     "groupId": 300, // // ID відділу телефонії на який будуть перенаправлятися дзвінки обдзвону
     "pseudoGroupOperators": ["1000", ...], // Список SIP ліній телефонії на який будуть перенаправлятися дзвінки обдзвону. Якщо вказано параметр groupId, цей параметр буде проігноровано.
     "ttsSettingsId": 18, // ID профілю налаштувань синтезу мови. Може бути null
     "useTaskAudioIfAudioError": true, // При помилці аудіо: true - “Використовувати аудіо обдзвону”, false - “Завершити дзвінок з помилкою”
     ...

Для обдзвонів з типом VOICE_ROBOT необхідно обов’язково вказати голосовий секретар в параметрі voiceSecretaryId.

Приклад специфічної для типу обдзвону VOICE_ROBOT частини JSON запиту:

     ...
     "voiceSecretaryId": 25 // ID голосового секретаря
     ...


Режим обдзвону, що створюється або редагується, впливає на перелік обов’язкових та допустимих параметрів, які будуть розглянуті окремо.

Для обдзвонів з режимом FIXED необхідно обов’язково вказати кількість паралельниз дзвінків (потоків) в параметрі threadCount.

Приклад специфічної для режиму обдзвону FIXED частини JSON запиту:

     ...
     "threadCount": 1, // Кількість паралельних дзвінків
     "callDelay": 30, // Пауза між дзвінками в секундах. Враховується тільки при кількості паралельних дзвінків - 1
     "callDelayOnlyAnswered": true, // Пауза між дзвінками буде відпрацьовувати тільки після дзвінків, на які відповів оператор
     ...

Для обдзвонів з режимом FREE необхідно обов’язково вказати групу внутрішніх ліній в параметрі groupId. Окрім цього доступні додаткові параметри:
· coldBaseStartCallsMultiplier – Змінює кількість одночасних дзвінків в залежності від відсотка додзвону з вказаним коефіцієнтом. Доступні значення від 0.1 до 1.5
· pauseOperatorNoAnswerLimit – Кількість дзвінків поспіль, на які не відповів оператор, після якої він буде встановлений на паузу
· markAsBusySeconds – Кількість секунд на яку SIP лінія відмічається зайнятою після успішного дзвінка. Доступні значення від 0 до 3600
· markAsBusyMinSecondsTalk – Мінімальна тривалість дзвінка для спрацьовування налаштування markAsBusySeconds в секундах. Доступні значення від 0 до 3600
· reservedSipsBusyOnlyForAutodials – Визначає чи будуть внутрішні лінії з закріпленою групи обдзвону доступні для дзвінків, що надходять за вхідними сценаріями

Приклад специфічної для режиму обдзвону FREE частини JSON запиту:

     ...
     "groupId": 300, // ID відділу телефонії на який будуть перенаправлятися дзвінки обдзвону
     "pseudoGroupOperators": ["1000", ...], // Список SIP ліній телефонії на який будуть перенаправлятися дзвінки обдзвону. Якщо вказано параметр groupId, цей параметр буде проігноровано.
     "coldBaseStartCallsMultiplier": null, // Змінює кількість одночасних дзвінків в залежності від відсотка додзвону з вказаним коефіцієнтом
     "pauseOperatorNoAnswerLimit": 5, // Кількість дзвінків поспіль, на які не відповів оператор, після якої він буде встановлений на паузу
     "markAsBusySeconds":60, // Кількість секунд на яку SIP лінія відмічається зайнятою після успішного дзвінка
     "markAsBusyMinSecondsTalk":15, // Мінімальна тривалість дзвінка для спрацьовування налаштування markAsBusySeconds в секундах
     "reservedSipsBusyOnlyForAutodials": true, // Визначає чи будуть внутрішні лінії з закріпленою групи обдзвону доступні для дзвінків, що надходять за вхідними сценаріями
     ...

Для обдзвонів з режимом SMART необхідно обов’язково вказати групу внутрішніх ліній в параметрі groupId. Окрім цього доступні додаткові параметри:
· coldBaseStartCallsMultiplier – Змінює кількість одночасних дзвінків в залежності від відсотка додзвону з вказаним коефіцієнтом. Доступні значення від 0.1 до 1.5
· pauseOperatorNoAnswerLimit – Кількість дзвінків поспіль, на які не відповів оператор, після якої він буде встановлений на паузу
· markAsBusySeconds – Кількість секунд на яку SIP лінія відмічається зайнятою після успішного дзвінка. Доступні значення від 0 до 3600
· markAsBusyMinSecondsTalk – Мінімальна тривалість дзвінка для спрацьовування налаштування markAsBusySeconds в секундах. Доступні значення від 0 до 3600
· reservedSipsBusyOnlyForAutodials – Визначає чи будуть внутрішні лінії з закріпленою групи обдзвону доступні для дзвінків, що надходять за вхідними сценаріями
· smartSpeed – Допустимі значення від -10 до 10 пропорційно впливають на швидкість обдзвону

Приклад специфічної для режиму обдзвону SMART частини JSON запиту:

     ...
     "groupId": 300, // ID відділу телефонії на який будуть перенаправлятися дзвінки обдзвону
     "pseudoGroupOperators": ["1000", ...], // Список SIP ліній телефонії на який будуть перенаправлятися дзвінки обдзвону. Якщо вказано параметр groupId, цей параметр буде проігноровано.
     "coldBaseStartCallsMultiplier": null, // Змінює кількість одночасних дзвінків в залежності від відсотка додзвону з вказаним коефіцієнтом
     "pauseOperatorNoAnswerLimit": 5, // Кількість дзвінків поспіль, на які не відповів оператор, після якої він буде встановлений на паузу
     "markAsBusySeconds":60, // Кількість секунд на яку SIP лінія відмічається зайнятою після успішного дзвінка
     "markAsBusyMinSecondsTalk":15, // Мінімальна тривалість дзвінка для спрацьовування налаштування markAsBusySeconds в секундах
     "reservedSipsBusyOnlyForAutodials": true, // Указывает на доступность внутренних линий для звонков, поступающих по входящим сценариям
     "smartSpeed": 5, // Допустимі значення від -10 до 10 пропорційно впливають на швидкість обдзвону
     ...

Приклад відповіді у разі успіху:

{"status": "Success", "data": 12345}

При виконанні дії ADD в полі data передаеться id створеного обдзвону.
Можливі помилки:

task is nullПоле task не вказано у запиті
Please confirm phone numberНепідтверджені проекти не можуть створювати обдзвони
Billing not allowНа даному тарифі обдзвон недоступний, або тариф не сплачено
Task not foundОбдзвон не знайдено за id при UPDATE
groupId and pseudoGroupOperators is nulТип обдзвону GUARANTEED_DIAL або режим FREE чи SMART, але поле groupId чи pseudoGroupOperators не вказано у запиті
Operator not found: …В поле pseudoGroupOperators вказані невалідні чи неіснуючі SIP лінії
Group not foundТип обдзвону GUARANTEED_DIAL або режим FREE чи SMART, але група операторів з вказаним id не знайдена
Wrong group typeТип обдзвону GUARANTEED_DIAL або режим FREE чи SMART, але вказана група не є групою внутрішніх ліній
Moh not foundТип обдзвону GUARANTEED_DIAL, але аудіо мелодії очікування не знайдено за вказаним id
Wrong audio type: mohТип обдзвону GUARANTEED_DIAL, але за вказаним id знайдено аудіон іншох категорії
In scenario not foundТип обдзвону AUTODIAL, але вхідний сценарій за вказаним id не знайдено
Not found in scenario and audioТип обдзвону AUTODIAL, але ні аудіо, ні вхідний сценарій не вказані у запиті
voiceSecretaryId is nullТип обдзвону VOICE_ROBOT, але голосовий секретар не вказаний у запиті
Voice secretary not foundТип обдзвону VOICE_ROBOT, але голосовий секретар за вказаним id не знайдено
compositeAudioПомилка при вказанні комбінованого аудіо в обдзвонахи типу AUTODIAL. Можливі причини:
· too many audio parts – в комбінованому аудіо вказано більше 20 частин
· audio not found – аудіо не знайден за вказаним id
· audio type is not AUTODIAL – за вказаним id знайдено аудіо іншої категорії
· synthesis dynamicValue is null – в елементів синтезу мови не вказано параметр dynamicValue
· speech synthesis settings not found – за вказаним settingsId не знайдено профіль налаштувань синтезу аудіо
· invalid silenceMillis – значення silenceMillis не у діапазоні від 1 до 10 000
Wrong nameНазва не може бути порожньою або довшою за 45 символів
Name already presentОбдзвон з такою назвою вже існує в проекті
Not found out scenarioЗа вказаним id не знайдено вихідний сценарії
Wrong datesДати обдзвону не вказані, або дата старту обдзвону перевищує дату закінчення
Wrong time rangesВ масиві timeFrom або timeTo не 7 елементів, в будь якій парі timeFrom пізніше за timeTo або усі елементи null
Prefix is too longПрефікс не повинен перевищувати 20 символів
Handler is busy, try again laterОдин проект одночасно видаляти або додавати номери лише в один обдзвон.
В цей момент в одному з обдзвонів проекту відбувається видалення або додавання номерів.
Повторіть спробу пізніше, коли попередня операція завершиться.
Може виникнути лише якщо вказано параметр numbers при дії ADD
Wrong numbersВ масиві numbers присутні некоректні номери. В полі data буде вказано масив елементів numbers, що не пройшли валідацію
Repeat call states is emptyrepeatCallAttempts вказує на необхідність автоматичного продзвону номерів, алео repeatCallStates пустий або null
Repeat call state is not allowedВ масиві repeatCallStates було передано неприпустимий callState
Not found text to speech settingsЗа вказаним id не знайдено профіль налаштувань синтезу аудіо
Wrong trigger action eventВ масиві triggerActions передано неприпустимий triggerActionEvent або null
triggerActionIds is nullВ масиві  triggerActions у одного з triggerActionEvent неприпустиме значення або null
Too many trigger actionsВ масиві triggerActions для одного p triggerActionEvent передано масив з більш ніж 5 обробниками
Trigger action not foundЗа одним з вказаних в triggerActions id не знайдено обробник
Few trigger actions with same typeВ масиві triggerActions для одного з triggerActionEvent вказано 2 обробника подій з однаковим типом дії
Not compatible trigger actionВ масиві triggerActions для одного з triggerActionEvent вказано обробник подій, несумісний з цим triggerActionEvent
crmMode is nullПоле crmMode не вказано в запиті
clientCalledMode is nullПоле clientCalledMode  не вказано в запиті
Tasks limit exceededПеревищено максимальну кількість обдзвонів в проекті

Видалення обдзвону
Сopied

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

{
  "id": 1307, // ID цільового обдзвону
  "action": "REMOVE"
}

Відповідь у разі успіху:

{"status": "Success", "message": "Removed"}

Можливі помилки:

Task not foundОбдзвон не знайдено за вказаним id
Handler is busy, try again laterОдин проект одночасно видаляти або додавати номери лише в один обдзвон.
В цей момент в одному з обдзвонів проекту відбувається видалення або додавання номерів.
Повторіть спробу пізніше, коли попередня операція завершиться

Продзвонити повторно
Сopied

Дія “Продзвонити повторно” дозволяє перезапустити обробку номерів у вказаних статусах. Перелік статусів доступних для використання в цій дії наведено у відповідному словнику.

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

{
  "id": 1307, // ID цільового обдзвону
  "action": "REFRESH",
  "callStates": [ // Масив статусів, номери в яких будуть продзвонені повторно
    "NOANSWER",
    ...
  ]
}

Відповідь у разі успіху:

{"status": "Success"}

Успіше виконання цієї дії змінить статус обраних номерів на NEW.

Можливі помилки:

Task not foundОбдзвон не знайдено за вказаним id
states is null or emptyМасив callStates пустий або null
state is not allowedВ масиві callStates Вказано недопустимий для REFRESH статус
Try again laterПопереднє виконання дії для вказаного обдзвону відбулося менше хвилини тому
Numbers not found by statesНе знайдено жодного номеру з вказаними статусами

Скасування обдзвону
Сopied

Дія”Скасувати обдзвон” дозволяє зупинити обдзвон, що знаходиться в статусі WAITING, IN_PROGRESS або PAUSED. Застосування цієї дії до обдзвонів у статусах FINISHED та CANCELED спричинить помилку. Застосування до NEW – не призведе до будь-яких змін.

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

{
  "id": 1307, // ID цільового обдзвону
  "action": "CANCEL"
}

Відповідь у разі успіху:

{"status": "Success", "message": "Cancelled"}

Успіше виконання цієї дії змінить статус обраного обдзвону на CANCELED (доки в обдзвоні будуть незавершені дзвінки), згодом статус зміниться на FINISHED

Можливі помилки:

Task not foundОбдзвон не знайдено за вказаним id
Task is finishedНеможливо скасувати обдзвон у статусі FINISHED
Task is canceledНеможливо скасувати обдзвон у статусі CANCELED

Встановлення на паузу
Сopied

Дія “Поставити на паузу” дозволяє призупини обдзвон, що знаходиться в статусі WAITING або IN_PROGRESS. Застосування цієї дії до обдзвонів у статусах FINISHED та CANCELED спричинить помилку. Застосування до NEW або PAUSED – не призведе до будь-яких змін.

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

{
  "id": 1307, // ID цільового обдзвону
  "action": "PAUSE"
}

Відповідь у разі успіху:

{"status": "Success"}

Успіше виконання цієї дії змінить статус обраного обдзвону з WAITING або IN_PROGRESS на PAUSED.

Можливі помилки:

Task not foundОбдзвон не знайдено за вказаним id
Task is finishedНеможливо скасувати обдзвон у статусі FINISHED
Task is canceledНеможливо скасувати обдзвон у статусі CANCELED

Зняття з паузи
Сopied

Дія “Зняти з паузи” дозволяє продовжити обдзвон, що знаходиться у сатусі PAUSED. Застосування цієї дії до обдзвонів у статусах FINISHED та CANCELED спричинить помилку. Застосування до NEW, WAITING або IN_PROGRESS – не призведе до будь-яких змін.

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

{
  "id": 1307, // ID цільового обдзвону
  "action": "UNPAUSE"
}

Відповідь у разі успіху:

{"status": "Success"}

Успіше виконання цієї дії змінить статус обраного обдзвону з PAUSED на WAITING або IN_PROGRESS.

Можливі помилки:

Task not foundОбдзвон не знайдено за вказаним id
Task is finishedНеможливо скасувати обдзвон у статусі FINISHED
Task is canceledНеможливо скасувати обдзвон у статусі CANCELED

Додання номерів
Сopied

Дія “Додати номери” дозволяє додати номери в обдзвон двома способами: вказавши лише номери в масиві numbers або номери з додатковою інформацією в масиві numbersWithData. У випадку коли вказано обидва, будуть додані номери з обох масивів. За один запит можна додати до 100 000 номерів, але не більше 1 000 000 номерів на один обдзвон.

В запиті має бути присутній один з параметрів numbers та numbersWithData. Номери в масиві numbers або параметрі phone необхідно вказувати в міжнародному форматі, усі стороні символи будуть попередньо видалені. Масив numbersWithData дозволяє передавати номери у вигляді елементів з додатковими параметрами, єдиним обов’язковим параметром є phone.

Параметр audios є масивом, що використовується для вказання аудіо, яке буде відтворено замість основного аудіо обдзвону. Кожен елемент масива audios є посиланням на аудіозапис в проекті (id) або синтез аудіо (tts). В елементі має бути присутній один з параметрів id та tts, якщо вказано обидва буде використано id. Порядок розміщення аудіо в масиві відповідає порядку відтворення. Для типу обдзвону AUTODIAL максимум елементів – 5 (з яких 2 синтеза аудіо), для GUARANTEED_DIAL – 1, для VOICE_ROBOT параметр ігнорується.

Для типу обдзвону AUTODIAL id має вказувати на аудіозапис з розділу “Автообдзвони”, для GUARANTEED_DIAL – “Мелодії очікування”. В елементі tts має бути присутній один з параметрів text та ssml, якщо вказано обидва буде використано ssml, максимальна кількість символів – 2500. Параметр ssml має починатись та закінчуватись тегом speak. Процес озвучування відбувається перед стартом дзвінка. Синтезовані аудіо зберігаються до 7 днів по завершеню обдзвону, не більше 3 місяців з моменту створення та в списку аудіозаписів проекту не відображаються. У випадку коли синтезований текст та профіль налаштувань співпадаються – використовується попередньо синтезоване аудіо.

Пример JSON запроса:

{
  "id": 1307,  // ID цільового обдзвону
  "action": "ADD_NUMBERS",
  "refreshDuplicates": true,  // Вказує на необхідність повторно обробити номери, що вже присутні в обдзвоні
  "highPriority": true,  // Вказує на необхідність обробляти номери, що додаються, в першу чергу
  "numbers": [ // Масив номерів, які необхідно додати
    "380970000001",
    ...
  ],
  "numbersWithData": [ // Масив номерів з додатковою інформацією, які необхідно додати
    {
      "phone": "380670000002",
      "name": "sample_name", // Ім'я. Враховуються перші 100 символів. Може бути null
      "note": "sample_note", // Примітка. Враховуються перші 500 символів. Може бути null
      "link": "https://...", // Дані для Web Dialer. Враховуються перші 500 символів. Може бути null
      "params": { // Параметри які будуть закріплені за номером в обдзвоні. Може бути null
        "1": "sample_value", // Номер параметра (1-10): Значення параметра. Враховуються перші 500 символів. Може бути null
        ...
      },
      "audios": [ // Масив аудіозаписів та синтезу аудіо, які будуть відтворені при дзвінку на номер замість основного аудіо обдзвону. Може бути null
            {
                "id": 4953, // ID цільового аудіозапису
            },
            {
                "tts": { // Дані для синтезу аудіо
                    "text": "sample_text", // Текст який буде озвучено
                    "ssml": "<speak>sample_text</speak>",  // Текст яки буде озвучено в форматі ssml
                    "settingsId": 18 // ID профіля налаштування синтезу аудіо, який буде використано замість вказаного в налаштуваннях обдзвону. Може бути null
                }
            },
            ...
        ]
    },
    ...
  ]
}

Приклад відповіді у разі успіху:

{"status": "Success", "message": "Numbers added"}

Успішне додання номерів в завершений обдзвон (FINISHED) змінить статус на WAITING або IN_PROGRESS.

Можливі помилки:

Task not foundОбдзвон не знайдено за вканим id
Numbers is null or emptynumbers та numbersWithData пусті або null
Too many numbersПеревищено віміт в 100 000 номерів за одну дію
Numbers limit exceededПеревищено віміт в 1 000 000 номерів в обзвоні
Handler is busy, try again laterОдин проект одночасно видаляти або додавати номери лише в один обдзвон.
В цей момент в одному з обдзвонів проекту відбувається видалення або додавання номерів.
Повторіть спробу пізніше, коли попередня операція завершиться
Wrong numbersВ масиві numbers присутні некоректні номери. В полі data буде вказано масив елементів numbers, які не пройшли валідацію
Numbers not addedНе було збережено ні одного номера
Wrong audiosВ масиві numbersWithData присутні номери з некоректним audios.
В полі data буде вказано масив номерів з відповідною помилкою аудіо.
Можливі причини помилок:
· Too many audios – занадто багато елементів
· Too many text to speech – занадто багато елементів з синтезом аудіо
· Audio is null – присутні елементи з значенням null
· Audio not found by id – присутні id за якими не знайдено аудіозапис
· Wrong type of audio – присутні id які вказують на аудіозаписи недопустимого розділу
· Text to speech ‘text’ and ‘ssml’ is null – присутні tts в яких обидва text та ssml пусті
· Text to speech ‘text’ not valid – присутні tts в яких text перевищує 2500 символів
· Text to speech ‘ssml’ not valid – присутні tts в яких ssml перевищує 2500 символів або не починається та закінчується тегом speak
· Text to speech settings not found by id – присутні tts в яких за вказаним settingsId не знайдено профіль налаштувань синтезу аудіо
· Audio is empty – присутні елементи в яких обидва tts та id мають значення null
Not found in scenario and audioВ автообдзвоні не вказано ні аудіо, ні вхідний сценарій
Voice secretary not foundВ обдзвоні голосовим роботом не вказаний голосовий робот
Group not foundВ предиктивному обдзвоні не вказана група операторів
Too many paramsВ params передано білше 10 параметрів
Wrong parameter keyВ params передано ключ, який не є числом з діапазону від 1 до 10
Billing not allowТариф проекту неактивний або недостатній баланс

Отримання інформації про номер обдзвону
Сopied

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

{ 
  "id": 1307, // ID цільового обдзвону
  "action": "GET_NUMBER", 
  "number": "380971234567" // Номер телефону
}

Приклад відповіді у разі успіху:

{
    "taskId": 18700, // ID обдзвону
    "phone": "380441234567", // Номер телефону
    "state": "ANSWER", // Статус останнього дзвінка обдзвону за цим номером
    "stateDateTime": "2020-09-10 05:47:15" // Дата завершення останнього дзвінка обдзвону за цим номером
    "calledCount": 0, // Кількість дзвінків на цей номер з останнього запуску обдзвону
    "realCalledCount": 0, // Кількість дзвінків на цей номер в обдзвоні
    "highPriority": false, // Вказує чи знаходиться номер в пріорітетній черзі
    "name": null, // Ім'я закріплене за номером в обдзвоні
    "note": "9049", // Примітка закріплена за номером в обдзвоні
    "link": "https://...", // Дані для Web Dialer закріплені за номером в обдзвоні
    "params": { // Параметри закріплені за номером в обдзвоні
        "1": "sample_value", // Номер параметра (1-10): Значення параметра
        ...
    },
    "audios": [ // Аудіо закріплені за номером в обдзвоні
        {
            "id": 46644 // ID аудіозапису
        },
        {
            "tts": { // Параметри синтезу мови
                "text": "sample_text",
                "settingsId": 107
            }
        }
    ]
}

Можливі помилки:

Task not foundОбдзвон не знайдено за вказаним id
Wrong phone numberНомер телефону некоректний
Call not foundНомер не знайдено в обдзвоні

Отримання інформації про всі номери обдзвону
Сopied

Для отримання інформації про всі номери обдзвону необхідно вказати id цільового обдзвону. Кількість записів, які будуть отримані при цьому не перевищу значення параметра limit. За замовчанням limit дорівнює 1000, максимальне значення – 5000. Для отримання наступної групи записів, необхідно в параметрі offest вказати зсів відносно початку списку. Окірм того, записи можна попередньо відфільтрувати за цільовими статусами номерів, перелік яких наведено в відповідному словнику.

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

{
  "id": 1307, // ID цільового обдзвону
  "action": "GET_NUMBERS",
  "limit": 2000, // Максимальна кількість номері, які будут отримані у відповіді
  "offset": 4000, // Зсів записів, що будуть отримані, відносно початку списку
  "callStates": [ // Фільтр за callState. Може бути null або пустий
    "NOANSWER",
    ...
  ]
}

Приклад відповіді у разі успіху:

[ // Масив номерів обдзвону з додатковою інформацією
  {
    "taskId": 18700, // ID обдзвону
    "phone": "380441234567", // Номер телефону
    "state": "ANSWER", // Статус останнього дзвінка обдзвону за цим номером
    "stateDateTime": "2020-09-10 05:47:15" // Дата завершення останнього дзвінка обдзвону за цим номером
    "calledCount": 0, // Кількість дзвінків на цей номер з останнього запуску обдзвону
    "realCalledCount": 0, // Кількість дзвінків на цей номер в обдзвоні
    "highPriority": false, // Вказує чи знаходиться номер в пріорітетній черзі
    "name": null, // Ім'я закріплене за номером в обдзвоні
    "note": "9049", // Примітка закріплена за номером в обдзвоні
    "link": "https://...", // Дані для Web Dialer закріплені за номером в обдзвоні
    "params": { // Параметри закріплені за номером в обдзвоні
        "1": "sample_value", // Номер параметра (1-10): Значення параметра
        ...
    },
    "audios": [ // Аудіо закріплені за номером в обдзвоні
        {
            "id": 46644 // ID аудіозапису
        },
        {
            "tts": { // Параметри синтезу мови
                "text": "sample_text",
                "settingsId": 107
            }
        }
    ]
  },
  ...
]

Можливі помилки:

Task not foundОбдзвон не знайдено за вказаним id
Limit range is 1-5000Значення limit не в діапазоні від 1 до 5000
Offset cannot be negativeЗначення offset має бути додатнім

Отримання інформації про дзвінки обдзвону
Сopied

Для отримання інформації про дзвінки обдзвону необхідно, окрім дії, вказати id цільового обдзвону та параметр callHistoryRequest. callHistoryRequest не може бути null, але може бути пустим. Записи повертаються в порядку спадання id дзвінків.

Кількість записів, що будуть повернені при цьому не перевершу значення параметру limit. За замовчаннням limit становить 50, Максимальне значення – 1000. Для отримання наступної групи записів необхідно скористатися одним з двох способів:
· В параметрі offest вказати зсув відносно початку списку;
· В параметрі maxId вказати максимальний (включно) id запису, який буде повернено.

Записи дзвінків можна попередньо відфільтрувати параметрами:
· dateFrom – мінімальна дата та час дзвінка (включно) в форматі “yyyy-MM-dd HH:mm:ss”;
· dateTo – максимальна дата та час дзвінка (невключно) в форматі “yyyy-MM-dd HH:mm:ss”.

Окрім того, записи можна попередньо відфільтрувати в параметрі filter за:
· states – масив статусів дзвінків обдзвонів. Переліка наведено у відповідному словнику;
· phone – частина номеру абонента. Усі зайві символи будуть попередньо видалені;
· operatorNumber – точний номер оператора. Усі зайві символи будуть попередньо видалені;
· name – частина імені, закріпленого за номеров в обдзвоні на момент дзвінка;
· note – частина примітки, закріпленої за номером в обдзвоні на момент дзвінка;
· link – частина даних для Web Dialer, закріплених за номером в обдзвоні на момент дзвінка;
· param – частина будь-якого з параметрів, закріплених за номером в обдзвоні на момент дзвінка;
· voiceSecretaryIds – масив id голосових секретарів, які були використані в дзвінках;
· voiceSecretaryEndReasons – масив причин завершення голосового секретаря, який був використаний в дзвінку. Перелік наведено у відповідному словнику;
· voiceSecretaryEndNodeTypes – масив типів кінцевого вузла голосового секретаря, який був використаний в дзвінку. Перелік наведено у відповідному словнику.

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

{
  "action": "GET_CALLS_HISTORY",
  "id": 300, // Обов'язковий параметр. Ідентифікатор цільового обдзвона
  "callHistoryRequest": { // Обов'язковий параметр. Усі внутрішні параметри можуть бути null
    "dateFrom": "2023-10-24 00:00:00", // Мінімальна дата та час дзвінка
    "dateTo": "2023-10-25 00:00:00", // Максимальна дата та час дзвінка
    "offset": 0, // Зсув відносно початку виборки
    "limit": 50, // Максимальна кількість дзвінків, які будуть повернуті у відповіді
    "maxId": 150, // Максимальний ідентифікатор дзвінка
    "filter": { // Масив додаткових фільтрів. Усі внутрішні параметри можуть бути null
      "states": [ // Масив цільових статусів дзвінка
        "ANSWER",
        ...
      ],
      "phone": "38097", // Частина номерів
      "operatorNumber": "2045", // Номер лінії цільового оператора
      "name": "part of name", // Частина імені
      "note": "part of note", // Частина примітки
      "link": "part of data for webdialer ", // Частина даних для WebDialer
      "param": "part of param", // Частина одного з параметрів
      "voiceSecretaryIds": [ // Масив ідентифікаторів цільових голосових секретарів
        "118",
        ...
      ],
      "voiceSecretaryEndNodeTypes": [ // Масив цільових типів кінцевих вузлів узлов голосового секретаря
        "END_SUCCESS",
        ...
      ],
      "voiceSecretaryEndReasons": [ // Масив цільових причин завершення голосового секретаря
        "NORMAL",
        ...
      ]
    }
  }
}

Приклад відповіді у разі успіху:

{
  "count": 140, // Кількість відповідних результатів
  "offset": 0, // Використаний зсув
  "limit": 50, // Використаний ліміт
  "items": [ // Масив дзвінків обдзвонів
    {
      "id": 158, // Ідентифікатор дзвінка
      "phone": "380681234567", // Номер телефона
      "state": "ANSWER", // Статус завершення дзвінка
      "callEndTime": "2023-10-24 16:15:43", // Дата та час завершення дзвінка
      "operatorNumber": "2045", // Номер оператора. Може бути null
      "userId": 15, // Ідентифікатор оператора. Може бути null
      "calledCount": 1, // Кількість додзвонів
      "realCalledCount": 2, // Всього додзвонів
      "seconds": 3, // Тарифікований час дзвінка. Може бути null
      "secondsForClientAnswered": 16, // Час очікування до відповіді клієнта на дзвінок. Може бути null
      "secondsDialToClient": 16, // Час набору номера до того, як клієнт відповість або відхилить дзвінок. Може бути null, якщо дзвінок був відхилений системою (у тому сенсі, що дзвінок не був розпочатий)
      "secondsClientWaitOperator": 5, // Час очікування оператора. Може бути null
      "secondsOperatorWaitCall": 15, // Час очікування звонка. Може бути null
      "secondsForOperatorAnswered": 2, // Час до відповіді оператора. Може бути null
      "secondsTalk": 10, // Тривалість розмови. Може бути null
      "rid": 1052434886, // Випадковий ідентифікатор дзвінка
      "name": "some name", // Ім'я до номера обдзвону на момент дзвінка. Може бути null
      "note": "some note", // Примітка до номера обдзвону на момент дзвінка. Може бути null
      "link": "some data for web dialer", // Дані для WebDialer до номера обдзвону на момент дзвінка. Може бути null
      "params": { // Масив параметрів до номера обдзвону на момент дзвінка. Може бути null
        "1": "param 1 value", // "Номер": "Значення"
        ...
      },
      "withdrawTotal": "1.90", // Сумарна вартість дзвінка. Може бути null
      "withdrawByCategories": { // Масив списань за дзвінок за категоріями. Може бути null
        "SPEECH_RECOGNITION": "0.10", // Розпізнавання мови
        "TEXT_TO_SPEECH": "0.01", // Синтез мови
        "CALL": "0.50", // Здійснення дзвінка
        "VOICE_SECRETARY": "0.02", // Голосовий секретар
        "AUTODIALER": "0.02", // Додаткова вартість обдзвону
        "ANSWERING_MACHINE_DETECTION": "0.25" // Розпізнавання автовідповідача
        "MESSAGE_SERVICE_MESSAGE": "1" // Відправка повідомлень
      },
      "executedTriggerActionIds": [ // Масив ідентифікаторів виконаних за дзвінком обробників подій. Може бути null
        11,
        ...
      ],
      "sendFirstMessageToClientSuccess": true, // Ознака успішності відправки першого повідомлення за дзвінком
      "secretary": { // Масив даних про проходження голосового секретаря. Може бути null
        "id": 118, // Ідентифікатор
        "duration": 3, // Тривалість
        "endNodeType": "INTERMEDIATE", // Тип кінцевого вузла
        "endReason": "USER_REJECT", // Причина завершення
        "endNodeId": 1, // Ідентифікатор кінцевого вузла
        "endNodeTitle": "Action #1", // Назва кінцевого вузла
        "endVoiceSecretaryId": 118, // Ідентифікатор секретаря завершення (може відрізнятися, якщо завершення відбулося у фоновому)
        "steps": [ // Масив інформації про кроки секретаря
          {
            "nodeId": 1, // Ідентифікатор вузла
            "actionTitle": "Action #1", // Назва вузла
            "recognizedText": "Some text", // розпізнаний текст. Може бути null
            "recognizedDates": [ // Масив розпізнаних дат. Може бути null
              "2023-10-24",
              ...
            ],
            "alternativeAudioIndex": "1", // Індекс альтернативного аудіо, яке прослухав абонент. Може бути null
            "jumpToNode": false, // Ознака переходу на вузол дією "Перейти на інший вузол"
            "startBackgroundSecretaryId": null, // Ідентифікатор секретаря на який було виконано перехід. Може бути null
            "endBackgroundSecretaryId": null // Ідентифікатор фонового секретаря з якого вийшли на вузел. Може бути null
          },
          ...
        ]
      }
    },
    ...
  ]
}

Можливі помилки:

Task not foundОбзвон не найден по указанному id или параметр id не указан
Limit range is 1-5000Значення limit не в діапазоні від 1 до 5000
Offset is less than 0Значення offset має бути додатнім
callHistoryRequest is nullНе вказано параметр callHistoryRequest
Invalid date fromНекоректна дата та час “від” в фільтрах
Invalid date toНекоректна дата та час “до” в фільтрах

Видалення номерів
Сopied

Дія “Видалити номери” дозволяє видалити номери з обдзвону двома способами:вказавши номери або статуси номерів на видалення. Перелік необхідних номерів вказується в параметрі запиту numbers та може містити максимум 10 000 номерів. Номери необхідно вказувати в міжнародному форматі, усі сторонні сиволи будуть попередньо видалені. Статуси номерів вказуються в параметрі запиту callStates та наведені у відповідному словнику. В запиті має бути присутній один з параметрів callStates та numbers, у випадку коли вказано обидва – буде використано numbers.

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

{
   "action": "REMOVE_CALLS",
   "id": 1307,  // ID цільового обдзвону
   "callStates": [ // Масив статусів номери в яких будуть видалені
       "NOANSWER", 
       ...
   ],
   "numbers": [ // Масив номерів які будуть видалені
       "380970000001", 
       ...
   ]
}

Приклад відповіді у разі успіху:

{
    "status": "Success",
    "data": [ // Масив некоректних номерів
        "389833883838383838383838",
        ...
    ]
}

У разі успішного видалення хоча б одного номеру з використанням масиву numbers відповідть буде містити масив некоректних номерів в полі data.
Можливі помилки:

Task not foundОбдзвон не знайдено за вказаним id
numbers and states is nullОбидва параметри numbers та callStates null або пусті
Too many numbersВ масиві numbers передано більше 10 000 номерів
Phones not foundМасив numbers не містить ні одного номера
Numbers not foundЖодний з номерів масиву numbers не зайдено в обдзвоні
Numbers not found by statesЗа статусами з масиву callStates не знайдено ні одного номеру в обдзвоні
Handler is busy, try again laterОдин проект одночасно видаляти або додавати номери лише в один обдзвон.
В цей момент в одному з обдзвонів проекту відбувається видалення або додавання номерів.
Повторіть спробу пізніше, коли попередня операція завершиться

Видалення усіх номерів
Сopied

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

{
  "action": "REMOVE_ALL_CALLS",
  "id": 1307 // ID цільового обдзвону
}

Відповідь у разі успіху:

{"status": "Success", "message": "Removed"}

Можливі помилки:

Task not foundОбдзвон не знайдено за вказаним id
Numbers not foundУ вказаному обдзвоні відсутні номери
Handler is busy, try again laterОдин проект одночасно видаляти або додавати номери лише в один обдзвон.
В цей момент в одному з обдзвонів проекту відбувається видалення або додавання номерів.
Повторіть спробу пізніше, коли попередня операція завершиться

Словники
Сopied

autodialerType
Сopied

Типи обдзвонів:

AUTODIALАвтообдзвон. Використовується здебільшого для інформування клієнтів або проведення опитувань. Дзвінки автообдзвонів проходять відоповідно до вказаного вхідного сценарію
GUARANTEED_DIALГаратнований дозвон. Використовується здебільшого для оптимізації робочого часу оперторів. Дзвінки гарантованих дозвонів розподіляються напряму на операторів вказаної групи внутрішніх ліній
VOICE_ROBOTГолосовий робот. Використовується здебільшого для інформування клієнтів або проведення інтерактивних опитувань. При дзвінках голосових роботів відтворюється вказаний голосовий секретар

autodialerMode
Сopied

Режими обдзвонів:

FIXEDЗа кількістю потоків
FREEЗа вільними операторами
SMARTРозумний підбір

taskStatus
Сopied

Статуси обдзвонів:

NO_NUMBERSНомери не додано
IN_PROGRESSВ процесі обдзвону
WAITINGОчікування початку обдзвону
WAITING_OPERATORSОчікування вільних операторів
WAITING_REPEATОчікування спрацювання налаштування “Повторний дзвінок”
PAUSEDНа паузі
CANCELEDВідмінено, але ще не встиг завершитись (частина номерів обдзвону знаходиться в статусі DIALING)
FINISHEDЗавершено

audioSynthesisDynamicValues
Сopied

Данмічні значення для синтезу аудіо:

NAНомер обдзвона: ім’я
NOНомер обдзвона: примітка
LIНомер обдзвона: дані для Web Dialer
P1Номер обдзвона: параметр #1
P2Номер обдзвона: параметр #2
P3Номер обдзвона: параметр #3
P4Номер обдзвона: параметр #4
P5Номер обдзвона: параметр #5
P6Номер обдзвона: параметр #6
P7Номер обдзвона: параметр #7
P8Номер обдзвона: параметр #8
P9Номер обдзвона: параметр #9
P10Номер обдзвона: параметр #10

callState
Сopied

Стани дзвінків обдзвонів:

СтатусНазва статусуДоступний для автоматичного повторного продзвонювання (поле repeatCallStates)Доступний для методу REFRESHСвідчить про можливі проблеми в налаштуваннях обдзвону або телефоніїЄ статусом дзвінка
NEWНе оброблено
DIALINGУ процесі обдзвону
ANSWERБула відповідь абонентом та оператором++
ANSW_RJCTАбонент відповів та не було дзвінка операторам+++
NOANSWERНемає відповіді+++
BUSYЗайнято або скинуто+++
FAILЗбій з’єднання+++
BLOCKEDЗаблокований+
TALKINGАвтовідповідач: абонент розмовляє+++
UNREACHABLEАвтовідповідач: абонент недоступний+++
NOT_EXISTАвтовідповідач: номер не існує+++
VOICE_MAILАвтовідповідач: голосова пошта+++
CLIENT_CALLEDАбонент зателефонував сам або був вихідний+
CANCELСкасовано+
ANSW_NF_OPАбонент відповів але небуло вільних операторів++++
ANSW_OP_NAАбонент відповів та оператори не прийняли дзвінок++++
BUSYOUTНедостатньо ліній++++
AUDIO_ERRПомилка аудіо+++
WRONG_DIRНеправильний напрямок+++
AUTOCANCELСкасовано автоматично++

triggerActionEvent
Сopied

Події обдзвонів та дзвінків обдзвонів:

AUTODIAL_ANSWERДзвінок завершено – абонент та оператор відповіли
AUTODIAL_ANSW_RJCTДзвінок завершено – абонент відповів і не було дзвінка до операторів
AUTODIAL_ANSW_NF_OPДзвінок завершено – абонент відповів і не було вільних операторів
AUTODIAL_ANSW_OP_NAДзвінок завершено – абонент відповів та оператори не прийняли дзвінок
AUTODIAL_NOANSWERДзвінок завершено – немає відповіді
AUTODIAL_BUSYДзвінок завершено – зайнято або скинуто
AUTODIAL_CALL_FAILДзвінок завершено – збій з’єднання
AUTODIAL_TALKINGДзвінок завершено – абонент розмовляє
AUTODIAL_UNREACHABLEДзвінок завершено – абонент недоступний
AUTODIAL_NOT_EXISTДзвінок завершено – номер не існує
AUTODIAL_BUSYOUTДзвінок завершено – недостатньо ліній
AUTODIAL_WRONG_DIRДзвінок завершено – неправильний напрямок
AUTODIAL_AUDIO_ERRДзвінок завершено – помилка аудіо
AUTODIAL_NUMBER_BLOCKEDНомер заблокований налаштуваннями проекту
AUTODIAL_REPEAT_ATTEMPTS_ENDEDДзвінок завершено неуспішно і закінчилися спроби повторного продзвону
AUTODIAL_CLIENT_CALLEDАбонент зателефонував сам або був вихідний
AUTODIAL_USER_PAUSEDКористувач поставлено на паузу обдзвоном. Доступно лише для гарантованого дозвону
AUTODIAL_STATUS_CHANGEDСтатус обдзвону змінено
AUTODIAL_CANCELОбдзвон скасовано
AUTODIAL_AUTOCANCELОбдзвон скасовано автоматично
AUTODIAL_FINISHОбдзвон завершено

voiceSecretaryEndNodeTypes
Сopied

Типы кінцевих вузлів голосових секретарів:

INTERMEDIATEПроміжний
END_SUCCESSУспішний
END_FAILНеуспішний
BACKGROUNDФоновий
BACKGROUND_DEFERФоновий – перенос дзівнка

voiceSecretaryEndReasons
Сopied

Причини завершення голосових секретарів:

NORMALЗакінчився нормально
USER_REJECTАбонент завершив розмову
GREETING_SILENCEАбонент молчав під час привітання
ANSWERING_MACHINEРозпізнано автовідповідач
RECOGNITION_ERRORРозпізнавання мови перервалося з технічних причин
JUMP_LIMITПеревищено ліміт виконаних дій “Перейти на інший вузол”
NODE_LIMITПеревищено ліміт пройдених вузлів
FAILНевідома помилка

Ініціація дзвінків
Сopied

Прямий виклик SIP -> GSM
Сopied

Цей метод дозволяє інтегруватися з Вашим програмним забезпеченням і натисканням однієї кнопки відразу дзвонити на номер клієнта без необхідності введення номера вручну на SIP телефоні.
Це зазвичай використовується в CRM системах.
Як це працює: викликає цей метод — дзвонить сип клієнт як вхідний. Після відповіді одразу йде дзвінок на вказаний номер. Основна суть – не потрібно вводити номер руками.
/phones/directCall
Режим: POST
Content-Type: application/x-www-form-urlencoded
Надсилати форму з двома параметрами:
String sip — це номер внутрішньої лінії.
String number — gsm номер, що надсилається у міжнародному форматі. Наприклад: 380504443322.
String meta— String на 1000 символів. Це будь-яка інформація, яка має відображатися у вебхуках. Можливо null.

У разі успіху приклад відповіді:

{"status": "Success","message": "Called"}

Можливі помилки:

Sip not found
Sip not readyвказана лінія офлайн або зайнята
Wrong phone
Meta info is too bigmetaбільше 1000 символів

Також можна відправляти запит передаючи параметри у якості параметрів url, без тіла

Створення нового дзвінка
Сopied

Метод використовується якщо необхідно зателефонувати абоненту з метою інформування його про щось.
Після того, як абонент дослухає аудіозапис – дзвінок завершиться.
Аудіозапис необхідно попередньо додати до категорії «API дзвінки» тут:https ://my.unitalk.cloud/new/index.html#audio. Після завантаження Ви побачите її ID

Зверніть увагу! Інформаційні дзвінки не потрапляють в історію дзвінків проекта.

/calls/originateNew
Режим: POST
Content-Type: application/json
Приклад JSON запиту:

{
  "phone": "380503332211", // номер абонента, на який необхідно дзвонити. Чи не null.
  "outerLine": null // зовнішня лінія для дзвінка абоненту. Якщо null – то лінія буде обрана автоматично, згідно з правилами вихідних сценаріїв.
  "meta": "238", // String на 1000 символів. Це будь-яка інформація, яка має відображатися у вебхуках. Можливо null.
  "ivrId": 211, // id голосового меню, яке буде відтворено абоненту, який відповів на дзвінок. Якщо вказано audios - буде відтворено після них. Може бути null – якщо вказано параметр audios чи voiceSecretaryId. У голосовому меню дозволені лише дії: "Переклад дзвінка на внутрішню лінію", "Переклад дзвінка на групу номерів" та дозволена лише група внутрішніх ліній (SIP), "Відтворення голосового повідомлення".
  "voiceSecretaryId": 321, // id голосового секретаря, який буде викликаний при відповіді абонента на дзвінок. Якщо вказано audios - буде викликаний після них. Може бути null – якщо вказано параметр audios чи voiceSecretaryIds. У голосовому секретарі заборонені дії: "Перенаправлення дзвінка на номер GSM", "Активація сценарію", "Активація голосового меню" та "Перенаправлення дзвінка на відділ" з операторами на GSM.
  "audios": [ //масив аудіозаписів та тексту для озвучування з якого будуть синтезовані аудіо, які будуть відтворені абоненту як тільки він відповість на дзвінок. В якому порядку аудіо знаходяться в масиві, в такому відтворюватимуться. Максимум 5 елементів, з них максимум озвучень – 2. Озвучені з тексту аудіозапису у списку аудіозаписів проекту не відображаються. Можливо null.
    {
      "id": 4953, //id заздалегідь завантаженого аудіо для API дзвінків. Можливо null, у разі tts повинно бути null. Якщо id і tts не null, буде використовуватися id.
      "tts": null //дані для озвучування тексту можуть бути null, якщо вказано id
    },
    {
      "id": null,
      "tts": { //дані для озвучування тексту можуть бути null, якщо вказано id
        "text": "текст для озвучування", // текст, який буде озвучений, не може перевищувати 4960 символів. Може бути null, якщо вказано ssml. Якщо вказано обидва поля text та ssml - використовуватиметься ssml
        "ssml": "текст для озвучування" // Альтернатива полю text - текст у форматі ssml. Не може перевищувати 5000 символів. Повинний починатися та закінчуватися тегом speak. Можливо null, якщо вказано поле Text. Якщо вказано обидва поля text та ssml - використовуватиметься ssml
        "settingsId": 18 //налаштування синтезу мови, які будуть використовуватися під час озвучування. Не може бути null
      }
    }
  ]
}

У разі успіху:

{"status": "Success"}

Можливі помилки:

Call already in progressпопередній дзвінок цього абонента ще не завершився
Outer line not foundвказана зовнішня лінія для вихідного дзвінка не знайдена у проекті
Outer line is trackedзазначена зовнішня лінія бере участь у трекінгу. З неї не можна робити вихідні
Meta info is too bigmeta більше 1000 символів
No audio та IVRне вказано аудіозаписи audiosivrId і voiceSecretaryId, має бути зазначено хоча б щось одне
IVR може бути використаний для SIPs тількиу голосовому меню присутні невирішені дії
Service not paidТариф не активний, можливо, на рахунку немає коштів, або в тарифі немає API дзвінків
Limit of Simultaneously calls has reachedдосягнуто межу 20 одночасних дзвінків
Wrong phoneномер телефону абонента неправильний
audios: Too many audiosу масиві audiosзанадто багато елементів
audios: Too many text to speechу масиві audiosзанадто багато елементів із озвучуванням тексту tts
audios: Audio is nullу масиві audiosє null елемент
audios: Audio not found by idаудіозапис не знайдено у проекті за вказаним id
audios: Wrong type of audioзазначений audiosаудіозапис не знаходиться в категорії для API дзвінків
audios: Text для ‘text’ and ‘ssml’ is nullв ttsполя text< /span>і ssmlпусті, хоча б одне має бути не null
audios: Text до тексту ‘text’ not validв tts поле text< /span>довше 4960 символів
audios: Text для ‘ssml’ не validв ttsполе ssml< /span> довше 5000 символів або не починається і закінчується тегом speak
audios: Text to speech ‘settingsId’ is nullне вказано id налаштувань синтезу мови у tts
audios: Text для швидких налаштувань не знайдено idналаштування синтезу мови не знайдено в проекті ID, вказаному в tts.settingsId
audios: Audio is emptyу масиві audiosє елемент у якому id і ttsnull
audios: Text to speech failedпомилка синтезу аудіо з тексту

Незалежний click to call дзвінок
Сopied

Як це працює: так само як і звичайний с2с, тільки незалежність полягає в тому, що Вам не потрібно попередньо створювати сайт, додавати на нього кнопку зворотного дзвінка
Метод дозволяє створити негайний с2с дзвінок.
Цей дзвінок не буде видно у заявках та CRM системах, але буде в історії дзвінків та вебхуках.
Для його роботи не потрібно попередньо створювати сайт та підключати до нього кнопку зворотного дзвінка
POST /calls/originateC2c

{
  "clientNumber": "380935553322",
  "steps": [
    {
      "type": "GSM",
      "to": "380931111111",
      "awaitingTime": 5
    }
  ]
}

clientNumber — номер клієнта, якому треба дзвонити
steps — масив кроків переадресацій. Можна вказувати декілька.
steps.type — GSMSIPGROUP
steps.to — номер оператора
steps.awaitingTime — час виклику від 5 до 300 секунд

у полі steps.to необхідно вказувати:
GSM-> номер клієнта у міжнародному форматі (наприклад 380501112233)
SIP -> внутрішній номер лінії (наприклад, 5455)
GROUP -> ID групи (відділу). Id відображається зверху праворуч на кожному відділі в особистому кабінеті

Скидання дзвінка
Сopied

Цей метод дозволяє скинути активний дзвінок за його id, який ви отримуєте у вебхуках або за номером внутрішньої/зовнішньої лінії

/calls/hangup
Режим: POST
Content-Type: application/json
Приклад JSON запиту:

{
  "number": null,
  "id": 1474427802
}

У разі успіху:

{"status": "Success","message": "Found: 1"}

Можливі помилки:

Empty requestНе вказано ані id, ані number

Виклик суфлера
Сopied

Для ініціації підключення суфлера необхідно вказати два обов’язкових параметри:
· target – Номер внутрішньої лінії в дзвінку, до якої буде підключений суфлер;
· source – Номер внутрішньої лінії, яка буде підключена суфлером до активного дзвінка.

Відносний шлях: /calls/connectAsPrompter
Режим: POST
Content-Type: application/json

Права на виклик суфлера користувачами відповідних внутрішніх ліній не враховуються при виконанні запиту

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

{
  "target":"1111",
  "source":"2222"
}

Відповідь у разі успіху:

{"status": "Success"}

Можливі помилки:

Target not foundЦільова лінія не знайдена в проекті
Target is not in callЦільова лінія не знаходиться в дзвінку
Source not foundЛінія суфлера не знайдена
Source is offlineЛінія суфлера не в мережі

Мовна аналітика
Сopied

Для активації мовної аналітики за дзвінком необхідно вказати два обов’язкових параметри:
· callId – Ідентифікатор дзвінка. Може бути отриманий через API з історії дзвінків або у вебхуках за дзвінками;
· profileId – Ідентифікатор профіля аналітики. Може бути отриманий на сторінці особистого кабінету «Мовна аналітика» в шапці цільового профілю.

Відносний шлях: /calls/analytics/create
Режим: POST
Content-Type: —

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

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

/calls/analytics/create?callId=12345678&profileId=123

Приклад відповіді у разі успіху:

{
  "profileId": 123, // Ідентифікатор профілю, який використовувався для запиту мовного аналізу
  "profileName": "Sample Name", // Назва використаного профілю мовного аналізу
  "transcription": "00:00:00,000-->00:00:15,000\nOperator: Hello! This is sample speech", // Екранірована транскрипція діалогу
  "operatorTag": "Operator", // Діюча особа, яка вважається оператором

  "analyticsJson": "{\"dialogTopic\":{\"metricId\":1234,\"metricName\":\"Dialog topic\",\"value\":\"Voice message\",\"position\":0}, ... }",
  // Екранований рядок, що містить JSON з результатами аналітики (метриками) дзвінка.
  // Кожен ключ (наприклад, "dialogTopic" і т.д.) представляє метрику,
  // яка має наступні параметри:
  //    - metricId: унікальний ідентифікатор метрики;
  //    - metricName: назва метрики;
  //    - value: значення метрики (число, рядок, логічне так/ні, список або об'єкт);
  //    - position: позиція метрики для сортування або відображення.

  "analyticsSchema": "{\"$schema\":\"http://json-schema.org/draft-04/schema#\",\"type\":\"object\",\"properties\":{\"dialogTopic\":{\"type\":\"object\",\"properties\":{\"metricId\":{\"type\":\"integer\"},\"metricName\":{\"type\":\"string\"},\"value\":{\"type\":\"string\"},\"position\":{\"type\":\"integer\"}}}, ... }}",
  // Рядок, що містить JSON Schema, яка описує структуру об'єкта analyticsJson.
  // Схема використовується для валідації метрик і містить опис типів для кожного параметра.

  "languageData": { // Об'єкт, в якому містяться дані про мови аналітики
    "operatorLanguage": "english", // Мова мовлення оператора
    "clientLanguage": "english", // Мова мовлення клієнта
    "transcriptionLanguageCode": "en", // ISO код мови отриманої транскрипції
    "analyticsLanguageCode": "en", // ISO код мови, на якій були сформовані результати аналітики
    "translatedLangCode": null, // ISO код мови, на яку було здійснено переклад аналітики. Якщо переклад не проводився, значення null.
    "translatedLangName": null // Назва мови, на яку було здійснено переклад аналітики. Якщо переклад не проводився, значення null.
  },
  
  "plainTranscription": "Operator: Hello! This is sample speech" // Транскрипція діалогу
}

Параметр відповіді transcription містить рядки транскрипції діалогу в форматі:
· *Час початку проміжку репліки*–>*Час закінчення проміжку репліки* – Наприклад «00:00:00,000–>00:00:15,000»;
· *Діюча особа*: *Транскрипція репліки* – Например «Operator: Hello! This is sample speech»;
· Наступна репліка в аналогічному форматуванні;
· Часові проміжки та транскрипції реплік розділені між собою керуючими символами переносу рядка («\n»);
· В параметрі transcription на відміну від plainTranscription керуючі символи екрановані («\\n»), окрім того plainTranscription не містить часових проміжків реплік.

Можливі помилки:

Only 50 concurrent requests are allowedПеревищено ліміт одночасно оброблюваних дзвінків
Call does not existЗа вказаним callId не знайдено дзвінок
Profile does not existЗа вказаним profileId не знайдено профіль мовної аналітики
Analytics is not available for this callФормування мовної аналітики неможливо, оскільки для вказаного дзвінка відсутні роздільні записи
Voice analytics is already in progressОбробка мовної аналітики вказаним дзвінком вже запущена
Voice analytics is not availableПослуга мовної аналітики недоступна
Insufficient fundsНа балансі проекту недостатньо коштів

Аудіо
Сopied

Додавання аудіо файлів до проекту
Сopied

/audio/upload
Режим: POST
Content-Type: multipart/form-data
Надсилати multipart з трьома параметрами:

name (String)Не може бути null. Максимум 200 символів
type (String)GENERALСценаріїIVRГолосові менюMELODYМелодії очікування на лінії та чергиAUTODIALАвтодзвінкиAPIAPI дзвінки
file (File)Максимальний розмір: 15мб.
Дозволяється аудіо або відео файл будь-якого формату.
Його аудіо доріжка буде переконвертована та нормалізована під 0дб.У разі якщо тривалість файлу перевищує ці параметри – буде автоматично обрізано:IVR90 секундAUTODIAL, MELODY, API300 секундGENERAL30 секунд
temp (Boolean)Опціональний параметр. Якщо true — файл позначається як тимчасовий і буде автоматично вилучено о 04:00.

У разі успіху, в message повернеться id завантаженого аудіофайлу:

{"status": "Success","message": "432"}

Синтез аудіо з тексту
Сopied

Метод синтезує аудіо з тексту та додає аудіозаписи до проекту, із вказаним ім’ям та у вказаний розділ. За один раз можна озвучити до 5 аудіо.
/audio/tts
Режим: POST
Content-Type: application/json
Приклад JSON запиту:

{
 "data": [/ / масив даних для синтезу аудіо. Максимум 5 елементів
    { // перший елемент для озвучування
      "name": "аудіо для обдзвону", // назва з яким аудіо буде додано до проекту
      "type": "AUTODIAL", //розділ аудіо до якого буде додано аудіозапис. Можливі значення: GENERAL (Сценарії), IVR (Голосові меню), MELODY (Мелодії очікування на лінії та черг), AUTODIAL (Автодзвінки), API (API дзвінки)
      "tts": { //дані для озвучування тексту
        "text": "текст для озвучування", // текст, який буде озвучений, не може перевищувати 4960 символів. Може бути null, якщо вказано поле ssml. Якщо вказано обидва поля text та ssml - використовуватиметься ssml
        "ssml": null, / / ​​Альтернатива полю text - текст у форматі ssml. Не може перевищувати 5000 символів. Повинний починатися та закінчуватися тегом speak. Можливо null, якщо вказано поле Text. Якщо вказано обидва поля text та ssml - використовуватиметься ssml
        "settingsId": 18 //налаштування синтезу мови, які будуть використовуватися під час озвучування. Не може бути null
      }
    },
    { //Другий елемент для озвучування
      "name": "аудіо для апі дзвінка",
      "type": "API",
      "tts": {
        "text": null,
        "ssml": "текст для озвучування",
        "settingsId": 16
      }
    }
  ]
}

У разі успіху:

{
    "status": "Success",
    "message": "Success",
    "data": [//масив з результатом синтезу, по кожному аудіо. Якщо аудіо синтезовано успішно - буде вказано ID з яким воно збереглося в проект. У разі помилки – id буде null, а в полі error буде текст помилки
        { //Успішно синтезоване аудіо (є id)
            "name": "аудіо для обдзвону", // назва аудіо
            "id": 4962, //id нового аудіо (у разі успіху)
            "error": null //Текст помилки (у разі невдачі)
        },
        { //синтез невдалий чи виконаний (id немає, є error)
            "name": "аудіо для апі дзвінка",
            "id": null,
            "error": "Same name already present"
        }
    ]
}

Можливі значення поля error для кожного з елементів озвучення при Success:

type is nullне вказано розділ аудіо
Name is emptyім’я аудіо не вказано або порожнє
Name length more than 200 charsім’я аудіо занадто довге, допускається максимум 200 символів
Same name already presentаудіо з таким ім’ям вже існує у проекті
tts is nullне вказано дані для озвучення тексту
Text до звуку ‘text’ and ‘ssml’ is nullв ttsполя text< /span>і ssmlпусті, хоча б одне має бути не null
Text до тексту ‘text’ not validв tts поле text< /span> довше 4960 символів
Text для ‘ssml’ не validв ttsполе ssml< /span> довше 5000 символів або не починається і закінчується тегом speak
Text to speech ‘settingsId’ is nullне вказано id налаштувань синтезу мови у tts
Text для прослуховування не знайдено idналаштування синтезу мови не знайдено в проекті ID, вказаному в tts.settingsId
Text to speech failedпомилка синтезу аудіо з тексту
Internal errorневідома помилка при синтезі аудіо

Можливі помилки:

Завжди один simultaneous text to speech request per projectОдин і той самий проект не може викликати цей метод одночасно кілька разів. Зачекайте, поки завершиться попередній запит.
data is nullУ запиті немає параметра data
data is emptyУ параметрі data немає елементів
Too many elements in dataУ параметрі data занадто багато елементів. Дозволяється максимум 5 озвучень за 1 запит.
Service not paidТариф не активний, можливо, на рахунку немає коштів

Списки
Сopied

Робота з списками виконується за допомогою дій, метод:

Відносний шлях: /lists
Режим: POST
Content-Type: application/json

Цільовий список вказується в тілі запиту в обов’язковому параметрі list. Перелік існуючих списків:
· BLOCKED_PHONES – Список заблокованих номерів в міжнародному форматі, взаємодія з якими відхиляється;
· BLOCKED_FOR_AUTODIAL_PHONES – Список номерів в міжнародному форматі, які неможливо додати в обдзвони.
Дії вказуються в тілі запиту в обов’язковому параметрі operation. Перелік існуючих дій:
· GET – Отримання поточного списку;
· ADD – Додавання елементів в список;
· REMOVE – Видалення елементів з списку.
Для дій ADD та REMOVE обов’язкове зазначення массиву елементів які будуть додані або видалені в параметрі items. Максимальна кількість елементів в масиві items – 100.

Заблоковані номери
Сopied

Список заблокованих номерів в міжнародному форматі, взаємодія з якими відхиляється. Для роботи з списком заблокованих номерів в обов’язковому параметрі list необхідно вказати «BLOCKED_PHONES». Для дій ADD та REMOVE параметр items має являти собою массив номерів в міжнародному форматі.

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

{
  "list": "BLOCKED_PHONES",
  "operation": "GET"
}

Приклад відповіді:

["380123456789", ...]

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

{
  "list": "BLOCKED_PHONES",
  "operation": "ADD",
  "items": ["380123456789", ...]
}

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

{
  "list": "BLOCKED_PHONES",
  "operation": "REMOVE",
  "items": ["380123456789", ...]
}

Відповідь для ADD та REMOVE запитів:

{"status": "Success"}

Виключені з обдзвонів номери
Сopied

Список номерів в міжнародному форматі, які неможливо додати в обдзвони. Для роботи з списком номерів, які неможливо додати в обдзвони, в обов’язковому параметрі list необхідно вказати «BLOCKED_FOR_AUTODIAL_PHONES». Для дій ADD та REMOVE параметр items має являти собою массив номерів в міжнародному форматі.

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

{
  "list": "BLOCKED_FOR_AUTODIAL_PHONES"
  "operation": "GET"
}

Приклад відповіді:

["380123456789", ...]

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

{
  "list": "BLOCKED_FOR_AUTODIAL_PHONES",
  "operation": "ADD",
  "items": ["380123456789", ...]
}

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

{
  "list": "BLOCKED_FOR_AUTODIAL_PHONES",
  "operation": "REMOVE",
  "items": ["380123456789", ...]
}

Відповідь для ADD та REMOVE запитів:

{"status": "Success"}

Користувачі
Сopied

Історія роботи
Сopied

Історія роботи дозволяє отримати просумовану інформацію про тривалість перебування користувачів в різних статусах роботи за певну дату. Для цього необхідно вказати цільову дату в обов’язковому параметрі date у форматі «yyyy-MM-dd».

Відносний шлях: /users/workHistory
Режим: POST
Content-Type: —

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

/users/workHistory?date=2024-01-01

Приклад відопіді у разі успіху:

{
  "users": {
    "12345": { // "Унікальний ідентифікатор користувача": Масив з інформацією про відповідного користувача
      "firstName": "John", // Ім'я користувача
      "lastName": "Callid", // Прізвище користувача. Може бути null
      "phone": 1234, // Номер закріплений за користувачем. Може бути null
      "userTimeSeconds": { //  Масив з інформацією про час перебування в різних статусах
        "byPauses": { //  Масив з інформацією про час перебування в різних видах пауз
          "Launch": 1800, // "Назва виду статусу": Кількість секунд проведених в відповідному виді статусу
          ...
        },
        "byWork": { //  Масив з інформацією про час перебування в різних видах статусу "Працює"
          "Cold Calling": 18000, // "Назва виду статусу": Кількість секунд проведених в відповідному виді статусу
          ...
        },
        "byStop": { //  Масив з інформацією про час перебування в різних видах статусу "Не працює"
          "Non-working hours": 54000, // "Назва виду статусу": Кількість секунд проведених в відповідному виді статусу
          ...
        },
        "stop": 54000, // Кількість секунд в статусі "Не працює"
        "work": 28800, // Кількість секунд в статусі "Працює"
        "pause": 3600  // Кількість секунд на паузі
      },
      "middleName": "Triple" // По-батькові. Може бути null
    },
    ...
  }
}

Відлік кількості секунд проведених користувачем в певному статусі починається з першої зміни статусу після створення та додання користувача в проект.

Можливі помилки:

Future data is absentВказано майбутню дату, відповідні дані відсутні

Список користувачів
Сopied

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

Відносний шлях: /users/list
Режим: POST
Content-Type: —

Приклад відповіді:

[
  {
    "email": "example@gmail.com",
    "firstName": "John", // Ім'я користувача
    "lastName": "Callid", // Прізвище користувача. Може бути null
    "middleName": "Triple" // По-батькові. Може бути null
    "phone": 1234, // Номер закріплений за користувачем. Може бути null
    "role": "ADMIN", // Роль користувача в проекті
    "id": 12345, // Унікальний ідентифікатор користувача
    "workStatus": "WORK", // Статус роботи користувача
    "workStatusName": "Cold Calling" // Назва виду статусу. Може бути null
  },
  ...
]

Отримання статусів користувачів
Сopied

Для отримання списку користувачів та даних про їх статус роботи необхідно відправити пустий запит.

Відносний шлях: /users/getStatus
Режим: POST
Content-Type: —

Приклад відповіді:

[
  {
    "firstName": "John", // Ім'я користувача
    "lastName": "Callid", // Прізвище користувача. Може бути null
    "middleName": "Triple" // По-батькові. Може бути null
    "phone": 1234, // Номер закріплений за користувачем. Може бути null
    "workStatus": "WORK", // Статус роботи користувача
    "workStatusName": "Cold Calling" // Назва виду статусу. Може бути null
  },
  ...
]

Зміна статусу роботи
Сopied

Для зміни статусу роботи користувача необхідно вказати номер лінії оператора в параметрі number, новий статус роботи в параметрі status. Допустимі значення: WORK (“Працює”), STOP (“Не працює”), PAUS (“Пауза”). Опціаонально, в параметрі statusName можна вказати назву статусу роботи, яка має повністю співпадати з одним із існуючих в проекті.

Відносний шлях: /phones/inner/setStatus
Режим: POST
Content-Type: —

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

/phones/inner/setStatus?number=1234&status=WORK&statusName=Cold Calling

Відповідить у разі успіху:

{"status": "Success", "message": "Success"}

Внутрішні лінії
Сopied

Для отримання списку внутрішніх ліній та їх поточного статусу необхідно відправити пустий запит. У відповідь буде повернуто ассоціативний масив, де ключ – номер внутрішньої лінії, а значення – її поточний статус. Можливі статуси: online (лінія в мережі та не зайнята), busy (лінія в мережі і зайнята дзвінком) и offline (лінія не в мережі).

Відносний шлях: /phones/inner
Режим: POST
Content-Type: —

Приклад відповіді:

{
  "2022": "offline"
  "2023": "busy",
  "2024": "online",
  ... 
}

Відділи
Сopied

Отримання груп
Сopied

POST /groups/action
Приклад body JSON запиту:

{
   "action": "GET"
}

Відповідь:

{
   "status": "Success",
   "data": [
     {
       "id": 455, // id групи
       "name": "Відділ продажу", // ім'я групи
       "phones": [ // масив номерів, які містить група
         {
           "number": "4030", // номер
           "firstName": "Олександр", // ім'я користувача, якщо він є
           "lastName": "Максимов" // прізвище користувача, якщо він є
         }
       ]
     }
   ]
}

Видалення номера з групи
Сopied

POST /groups/action
Приклад body JSON запиту:

{
  "action": "REMOVE_NUMBER",
  "groupId": 141, // id групи
  "number": "2561" // номер, який потрібно видалити
}

Успіх:

{"status": "Success"}

Можливі помилки:

Group not foundВказана група не знайдена
Cant delete the last number from groupне можна видалити останній номер із групи
Група не містить певного номерагрупа не містить зазначеного номера

Додавання номера у групу
Сopied

POST /groups/action
Приклад body JSON запиту:

{
  "action": "ADD_NUMBER",
  "groupId": 5859,
  "number": "2222"
}

Успіх:

{"status": "Success"}

Можливі помилки:

Group not foundid вказує на невідому групу
GSM number is not validВ групу GSM додається номер в невірному форматі
Group is already contains specified numberЛінія вже в групі
Project does not contain the specified sip numberЛінія не знайдена

Створення групи
Сopied

POST /groups/action

Створює групу SIP ліній з вказаними номерами
Приклад body JSON запиту:

{
  "action": "CREATE",
  "name": "Group name",
  "numbers": ["2224"]
}

Успіх:

{
    "status": "Success",
    "data": {
        "id": 2925,
        "name": "Group name",
        "phones": [
            {
                "number": "2224",
                "firstName":"John",
                "lastName": "Dou"
            }
        ]
    }
}

Можливі помилки:

Group already existsгрупа з тою ж назвою вже існує
Numbers is emptyне вказані номери ліній
Not found: 2224sip лінія 2224 не знайдена в проекті

Статистика за операторами
Сopied

Для отримання статистики за операторами проекту необхідно вказати початок та кінець цільового періоду в параметрах from та to відповідно, в форматі “yyyy-MM-dd HH:mm:ss”.

Відносний шлях: /operator/statistic
Режим: POST
Content-Type: application/json

Окрім того, записи можна попередньо відфільтрувати в опціональному параметрі filter за:
· callTypes — Список типів дзвінків, за якими буде сформована статистика. Перелік допустимих значень наведено у відповідному словнику;
· innerPhones — Список номерів внутрішніх ліній, за якими буде сформована статистика;
· minTimeSeconds — Мінімальна тривалість розмови в секундах;
· minTimeAwaitingSeconds — Мінімальна тривалість очікування в секундах;
· maxTimeAwaitingSeconds — Максимальна тривалість очікування в секундах.

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

{
  "from": "2024-01-30 00:00:00",
  "to": "2024-02-05 23:59:59",
  "filter": {
    "callTypes": [
      "REGULAR",
      ...
    ],
    "innerPhones": [
      "1234",
      ...
    ],
    "minTimeSeconds": 1,
    "minTimeAwaitingSeconds": 1,
    "maxTimeAwaitingSeconds": 60
  }
}

Приклад відповіді у разі успіху:

[
  {
    "operatorName": "1234 (Sample Name)", // Загальна статистика: Оператор
    "operatorPhone": "1234", // Номер оператора
    "totalCount": 123, // Загальна статистика: Дзвінків
    "inCount": 123, // Загальна статистика: Вхідних
    "outCount": 123, // Загальна статистика: Вихідних
    "totalDuration": "59:59", // Загальна статистика: Тривалість розмов
    "inUniqueCount": 123, // Загальна статистика: Унікальних вхідних
    "answOpNaCount": 0, // Загальна статистика: Пропущених, на які не відповіли
    "outAnsweredCount": 123, // За вихідними: Успішних
    "outAnsweredPercentage": "100.0%", // За вихідними: Відсоток дзвінків, на які відповіли
    "outMissedCount": 0, // За вихідними: Без відповіді
    "outUniqueCount": 123, // За вихідними: На унікальні номери
    "outUniqueAnsweredCount": 123, // За вихідними: Кількість успішних дзвінків на унікальні номери
    "outUniqueAnsweredPercentage": "100.0%", // За вихідними: Відсоток успішних дзвінків на унікальні номери від загальної кількості вихідних
    "outDuration": "59:59", // За вихідними: Тривалість розмов
    "outAverageDuration": "05:30", // За вихідними: Середній час розмови
    "inAnsweredCount": 123, // За вхідними: Прийнятих
    "inAnsweredPercentage": "100.0%", // За вхідними: Відсоток дзвінків, на які відповіли
    "inMissedCount": 0, // За вхідними: Пропущених, на які не відповіли
    "inHangupByOperatorCount": 123, // Кількість вхідних, скинутих оператором
    "inHangupByClientCount": 123, // Кількість вхідних, скинутих клієнтом
    "inUniqueAnsweredCount": 123, // За вхідними: Дзвінків, на які відповіли, з унікальних номерів
    "inUniqueAnsweredPercentage": "100.0%", // За вхідними: Відсоток дзвінків, на які відповіли, з унікальних номерів
    "inAnsweredNewLeadCount": 123, // За вхідними: Прийнятих від нових клієнтів
    "inLostCount": 0, // За вхідними: Втрачених
    "inAverageAwaitingTime": "00:15", // За вхідними: Середній час очікування при відповіді
    "inTotalAwaitingTime": "02:30", // За вхідними: Загальний час очікування при відповіді
    "inDuration": "59:59", // За вхідними: Тривалість розмов
    "inAverageDuration": "05:30", // За вхідними: Середній час розмови
    "inUniqueRegularCount": 123, // За унікальними: Прямий дзвінок
    "inUniqueTrackingCount": 123, // За унікальними: Call tracking
    "inUniqueC2cButtonCount": 123, // За унікальними: Click to call
    "inUniqueC2cFormCount": 123, // За унікальними: Форма
    "inUniqueC2cApiCount": 123, // За унікальними: Click to call API
    "inUniqueAutodialCount": 123, // За унікальними: Обдзвон
    "inUniqueCallbackCount": 123, // За унікальними: Callback
    "inUniqueAutoCallbackCount": 123, // За унікальними: Автопередзвон
    "inUniqueApiCount": 123, // За унікальними: API дзвінок
    "inRegularCount": 123, // За джерелами: Прямий дзвінок
    "inTrackingCount": 123, // За джерелами: Call tracking
    "inC2cButtonCount": 123, // За джерелами: Click to call
    "inC2cFormCount": 123, // За джерелами: Форма
    "inC2cApiCount": 123, // За джерелами: Click to call API
    "inAutodialCount": 123, // За джерелами: Обдзвон
    "inCallbackCount": 123, // За джерелами: Callback
    "inAutoCallbackCount": 123, // За джерелами: Автопередзвон
    "inApiCount": 123, // За джерелами: API дзвінок
    "inMissedAnsweredCount": 0, // За пропущеними: Пропущених, на які відповіли
    "inMissedNewLeadCount": 0, // За пропущеними: Пропущених від нових клієнтів
    "inMissedPercentage": "0.0%", // За пропущеними: Відсоток пропущених дзвінків від усього дзвінків
    "inMissedAverageAwaitingTime": "00:00", // За пропущеними: Середній час очікування відповіді оператора
    "logInTime": "2024-01-30 08:40:00", // Логін
    "logOutTime": "2024-02-05 18:30:00", // Логаут
    "availableNotInWorkTime": "02:30:00", // Загальний Available
    "pauseTime": "05:30:00", // Пауза
    "wrapUpTime": "", // Загальний Wrap-up Time 
    "compoundTime": 123 // Загальний Compound Time
  },
  ...
]

Статистика являє собою список об’єктів інформації про усіх операторів та про кожного окремо, що відповідає табличному експорту на сторінці особистого кабінету “За операторами” розділу “Статистика з аналогічними критеріями пошуку.

Можливі помилки:

Wrong FROM dateНе вказана або некоректна дата та час початку цільового періоду
Wrong TO dateНе вказана або некоректна дата та час кінця цільового періоду

callType
Сopied

Типи джерел дзвінків:

AUTO_CBАвтопередзвон
AUTODIALОбдзвон
REGULARПрямий дзвінок
C2C_FORMФорма зворотнього дзвінка
APIAPI дзвінок
TRACKINGCall Tracking
CALLBACKCallback
C2C_BUTTONКнопка зворотнього дзвінка
C2C_APIAPI зворотній дзвінок

Історія дзвінків
Сopied

Для отримання історії дзвінків проекта необхідно вказати початок та кінець цільового періоду в параметрах dateFrom та dateTo відповідно, в форматі “yyyy-MM-dd HH:mm:ss”. Записи повертаються в порядку зменшення id. Кількість записів, які буть отримані при цьому не перевищує значення обов’язкового параметру limit. Допустимий діапазон limit — від 1 до 1000. Для отримання наступної групи дзвінків необхідно в параметрі offest вказати зсув відносно початку списку.

Відносний шлях: /history/get
Режим: POST
Content-Type: application/json

Окрім того, записи можна попередньо відфільтрувати в опціональному параметрі filter за:
· id — ID дзвінка на який відповіли. Допустимі значення: true – тільки з відповіддю, false – тільки без;
· direction — Напрямок дзвінків. Допустимі значення: IN – вхідні, OUT – вихідні, INNER – внутрішні;
· minDuration — Мінімальна тривалість розмови в секундах;
· calledFrom — Масив частин номерів з яких дзвонили;
· calledTo — Масив частин номерів на які дзвонили;
· outerNum — Масив номерів зовнішніх ліній на які надходили або через які виконувались дзвінки;
· exactPhone — Масив повних номерів, які здійснювали або приймали дзвінки;
· newLead — Ознака першого дзвінка за номером клієнта. Допустимі значення: true – тільки перші, false – тільки не перші;
· answered — Ознака дзвінка на який відповіли. Допустимі значення: true – тільки з відповіддю, false – тільки без;
· lost — Ознака втраченого дзвінка (пропущеного, за яким не перетелефонували). Допустимі значення: true – тільки втрачені, false – тільки не втрачені;
· voiceMessage — Ознака залишеного в дзвінку голосового повідомлення. Допустимі значення: true – тільки з голосовим повідомленням, false – тільки без.

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

{  
  "dateFrom": "2023-12-12 00:00:00",  
  "dateTo": "2024-01-01 00:00:00",  
  "limit": 50,  
  "offset": 0,  
  "filter": {
    "direction": "IN",
    "minDuration": 10,
    "calledFrom": ["3809533"],
    "calledTo": ["33"],
    "outerNum": ["380800123123"],
    "exactPhone": ["3333", "380955555555"],
    "newLead": false,
    "answered": true,
    "lost": false,
    "voiceMessage": false
  }  
}

Приклад відповіді у разі успіху:

{ 
  "count": 100, // Кількість дзвінків за вказаними критеріями
  "calls": [ // Масив дзвінків
    { 
      "id": 19990701, // Випадковий id дзвінка
      "dbid": 603, // id дзвінка в проекті
      "date": "2023-12-20 15:28:00", // Дата та час дзвінка
      "source": "REGULAR", // Джерело дзвінка
      "direction": "IN", // Напрямок дзвінка
      "from": "380955555555", // Номер, що дзвонив
      "to": ["3333"], // Масив номерів на які надійшов дзвінок
      "lastGroupName": "Sales managers", // Назва останньої групи внутрішніх ліній, на яку було переведено дзвінок
      "secondsFullTime": 300, // Повна тривалість дзвінка
      "secondsTalk": 285, // Тривалість розмови
      "link": "https://api.unitalk.cloud:8443/tracking/rec/1531144732.920/2023-12-20", // Посилання на запис дзвінка
      "comment": "That one was successful!", // Коментар
      "state": "ANSWER", // Стан дзвінка
      "cause": 16, // Код причини завершення
      "callback": false, // Ознака автопередзвону
      "utmSource": "google", // Мітка аналітики
      "utmMedium": "search", // Мітка аналітики
      "utmCampaign": "web", // Мітка аналітики
      "utmTerm": "best+product", // Мітка аналітики
      "utmContent": "content", // Мітка аналітики
      "outerNumber": "site.ua", // Мітка аналітики
      "googleId": "1182768620.1182768620", // Мітка аналітики
      "facebookClientId": "fb.1.1234567890", // Мітка аналітики
      "referer": "google.com" // Мітка аналітики
    },
    ...
  ] 
}

Можливі помилки:

Wrong FROM dateНе вказана або некоректна дата та час початку цільового періоду
Wrong TO dateНе вказана або некоректна дата та час кінця цільового періоду
Limit range is 1-1000Не вказано або некоректний параметр limit

Голосове меню (IVR)
Сopied

Історія голосового меню (IVR)
Сopied

Для отримання історії голосового меню проекта необхідно вказати початок та кінець цільового періоду в параметрах dateFrom та dateTo відповідно, в форматі “yyyy-MM-dd HH:mm:ss”. Записи повертаються в порядку зменшення id. Кількість записів, які буть отримані при цьому не перевищує значення обов’язкового параметру limit. Допустимий діапазон limit — від 1 до 1000. Для отримання наступної групи дзвінків необхідно в параметрі offest вказати зсув відносно початку списку.

Відносний шлях: /ivr/getHistory
Режим: POST
Content-Type: application/json

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

{
    "dateFrom": "2025-07-02 00:00:00", // Фільтр за датаою та часом (від)
    "dateTo": "2025-07-03 23:59:59", // Фільтр за датаою та часом (до)
    "limit": 500, // Максимальна кількість записів, що буде повернена у відповіді, від 1 до 1000
    "offset": 1500, // Зсув відносно першого елемента, вказувати не обов'язково
    "maxId": 1111, // Максимальний ідентифікатор елемента, вказувати його не обов'язково. Якщо вказано - будуть видані елементи у яких id менше або рівне цьому значенню.
    "filter": { // Об'єкт з додатковими фільтрами, вказувати не обов'язково. Жоден з фільтрів також не є обов'язковим.
        "clientNumber": "380971234567", // Частина номера абонента
        "ivrIds": [ // Масив id голосових меню
            "222",
            "777"
        ],
        "pressedDigits": [ // Масив чисел котрі натиснув абонент. Може приймати значення від 0 до 10, число 10 відповідає варіанту “Вибір не зроблено”
            "0",
            "1",
            "2",
            "3",
            "4",
            "5",
            "6",
            "7",
            "8",
            "9",
            "10"
        ],
        "actionSources": [ // Масив джерел дій
            "NO_CHOICE",
            "WRONG_DIGIT",
            "MAIN"
        ],
        "actionTypes": [ // Масив дій
            "TO_IVR",
            "TO_SCENARIO",
            "ENTER_NUMBER",
            "SKIP",
            "PLAYBACK",
            "REJECT",
            "TO_GROUP",
            "TO_GSM",
            "TO_SIP",
            "REPEAT_ENTER_NUMBER"
        ],
        "enteredNumber": "3333" // Номер який ввів абонент при дії “Введення номера лінії SIP”
    }
}

Приклад відповіді у разі успіху:

{
    "count": 2, // Кількість елементів, котрі підходять під передані фільтри
    "items": [ // Масив виборів які робив абонент в голосових меню. Одному дзвінку може відповідати декілька елементів з декількох голосових меню
        { // Елемент 1
            "id": 2, // ID елемента історії
            "pressedDigit": 1, // Натиснуте абонентом число. Може приймати значення від 0 до 10, число 10 відповідає варіанту “Вибір не зроблено”
            "clientNumber": "380934027182", // Номер телефону абонента
            "ivrId": 734, // ID голосового меню
            "dateTime": "2021-04-03 01:12:18", // Дата та час коли був зроблений вибір абоентом, за часовим поясом проекту
            "actionSource": "MAIN", // Джерело дії
            "actionType": "TO_SIP", // Дія
            "to": "2002", // Ціль дії, що це - залежить від типу дії
            "rid": 1722239417 // rid дзвінка, відповідає параметру id з API історії дзвінків
        },
        { // Елемент 2
            "id": 1,
            "pressedDigit": 10,
            "clientNumber": "380934027182",
            "ivrId": 734,
            "dateTime": "2021-04-03 01:10:26",
            "actionSource": "NO_CHOICE",
            "actionType": "SKIP",
            "to": null,
            "rid": 1885808603
        }
    ]
}

Можливі помилки:

Wrong FROM dateНе вказана або некоректна дата та час початку цільового періоду
Wrong TO dateНе вказана або некоректна дата та час кінця цільового періоду
Limit range is 1-1000Значення limit не вказано, або не в діапазоні від 1 до 1000
Offset is less than 0Значення offset має бути додатнім

Можливі значення джерел дій

MAINОсновна дія
NO_CHOICEДія відсутності вибору
WRONG_DIGITДія неправильного вибору

Можливі значення дій

TO_SIPОсновна дія
TO_GSMДія відсутності вибору
TO_GROUPДія неправильного вибору
TO_SCENARIOАктивація сценарію
TO_IVRАктивація голосового меню
ENTER_NUMBERВведення номера лінії SIP
REPEAT_ENTER_NUMBERПовторне введення лінії SIP
REJECTЗавершення дзвінка
SKIPВихід із голосового меню
PLAYBACKВідтворення аудіо

Можливі значення цілей дій

TO_SIPID внутрішньої лінії вказаної в налаштуваннях
TO_GSMID GSM номера вказаного в налаштуваннях
TO_GROUPID відділу вказаного в налаштуваннях
TO_SCENARIOID вхідного сценарію вказаного в налаштуваннях
TO_IVRID голосового меню вказаного в налаштуваннях
ENTER_NUMBERНомер SIP лінії який ввів абонент
PLAYBACKID аудіозапису вказаного в налаштуваннях

В інших випадках значення буде null

Вебхуки
Сopied

Ви можете використовувати систему вебхуків для отримання інформації про події телефонії. Крім того, UniTalk підтримує вхідні вебхуки.

Рух за балансом
Сopied

api_balance_webhook_url_ua

Вебхук “Рух за балансом” надає інформацію щодо кожної операції зміни балансу проекту і не може бути конфігурований, оскільки події даної категорії обробляються системою автоматично. Для роботи з цим вебхуком Ваш веб-додаток має приймати JSON методом POST за вказаною на сторінці особистого кабінету “API” URL.

Всього є 5 типів операцій:

MAIN_REFILLПоповнення основного рахунку
BONUS_REFILLПоповнення бонусного рахунку
CALLСписання за платний дзвінок
SMSСписання за відправку SMS
SERVICESСписання за послуги

Приклад JSON, що відправляється:

{
  "date": "2022-11-12 19:12:50", // Час проведення операції
  "type": "MAIN_REFILL", // Тип операції
  "sum": 500000, // Сума операції. 1000 відповідає одиниці валюти проекту
  "sumV2": 500000000, // Сума операції. 1000,000 відповідає одиниці валюти проекту
  "mainBalance": 15500000, // Основний баланс після завершення операції. 1000 відповідає одиниці валюти проекту
  "mainBalanceV2": 15500000000, // Основний баланс після завершення операції. 1000,000 відповідає одиниці валюти проекту
  "bonusBalance": 350000, // Бонусний баланс після завершення операції. 1000 відповідає одиниці валюти проекту
  "description": "Пополнение баланса на 500.00 UAH через LiqPay" // Опис операції
}

Обробка подій
Сopied

Надсилання вебхука може бути обране як тип дії під час створення або редагування дій на сторінці особистого кабінету “Обробка подій”. При конфігурації дії цього типу можна вказати:
1) URL на який буде надіслано вебхук;
2) HTTP метод, який буде використано;
3) Заголовки HTTP;
4) URL параметри;
5) Тип тіла запиту (Для POST, PUT, PATCH);
6) Вміст тіла запиту (Для типів “Вказаний JSON” та “Форма (urlencoded)”).
Події, за якими можна закріпити дії, існують 4 типів:
Типи подій

Події в обдзвонах номерівНалаштовуються для кожного окремого обдзвону номерів під час створення або редагування через API або у відповідному розділі особистого кабінету, наприклад, “Обдзвон завершено”.
Події у голосових менюНалаштовуються для кожного окремого голосового меню під час створення чи редагування на сторінці особистого кабінету “Голосове меню”, наприклад, натискання клієнтом клавіші “1
Події дзвінківНалаштовуються на сторінці особистого кабінету “API”, наприклад “Завершення дзвінка”. Зверніть увагу, дія закріплюється за подією дзвінка незалежно від зовнішньої лінії, яка задіяна при цьому
Подія черги з голосовим супроводомДоступно при створенні або редагуванні вхідного сценарію на сторінці особистого кабінету “Вхідні сценарії”, при виборі перенаправлення на “Черга з супроводом” та активації опції “Спеціальна дія

Докладніше з процесом обробки подій можна ознайомитись в інструкції з обробки подій.
Відправлення вебхука з типом тіла “Стандартний JSON” передбачає формування тіла запиту на підставі типу події, за якою було надіслано вебхук:
Стандартний JSON для подій дзвінків:

{
  "event": "CALL_END", // Подія, за якою було відправлено вебхук
  "call": { // Масив даних про дзвінок
    "id": 1091944, // Випадково генерований id дзвінка для зв'язку його з іншими подіями дзвінків
    "dbid": 275, // id під яким цей дзвінок було збережено до бази даних. Згодом дзвінок має саме цей id
    "from": "380505557182", // Номер з якого було здійснено дзвінок
    "to": [ // Масив номерів, на які було переадресовано дзвінок
      "2000"
    ],
    "lastGroupName": "Sales managers", // Назва останньої групи операторів, на яку було переведено дзвінок
    "outerNumber": "site.ua", // Зовнішня лінія, яка була використана для здійснення або отримання дзвінка. Містить назву сайту у разі зворотного дзвінка
    "direction": "IN", // Напрямок дзвінка: "IN" - вхідний, "OUT" - вихідний, "INNER" - внутрішній
    "date": "2018-07-09 16:58:52", // Дата та час прийняття дзвінка
    "secondsFullTime": 19, // Повний час дзвінка. Відомо лише у події CALL_END
    "secondsTalk": 9, // Час спілкування. Відомо лише у події CALL_END
    "utmSource": "google", // Мітки аналітики. Може бути null
    "utmMedium": "search", // Мітки аналітики. Може бути null
    "utmCampaign": "web", // Мітки аналітики. Може бути null
    "utmTerm": "ковры", // Мітки аналітики. Може бути null
    "utmContent": "content", // Мітки аналітики. Може бути null
    "googleId": "1182768620.1530916891", // Мітки аналітики. Може бути null
    "facebookClientId": "fb.1.1234567890", // Мітки аналітики. Може бути null
    "referer": "google.com", // Мітки аналітики. Може бути null
    "callback": true, // Вказує, чи є цей дзвінок зворотним. Застаріло. Використовуйте поле "source"
    "comment": "комментарий к звонку",
    "state": "ANSWER", // Стан дзвінка. Для подій CALL_NEW та CALL_REDIRECT - null
    "source": "REGULAR", // Джерело дзвінка
    "link": "https://api.unitalk.cloud:8443/tracking/rec/1531144732.920/2018-07-09", // Посилання на запис дзвінка. Присутня тільки у випадку полі state - "ANSWER"
    "meta": "some info", // Додаткова інформація, яка може бути задана під час ініціації дзвінка через API
    "cause": 16 // Код завершення дзвінка
  }
}

Масив “to”

При події CALL_NEW вхідного дзвінкаЗавжди порожній
При події CALL_REDIRECTМістить один або більше номерів
При події CALL_ANSWERМістить один номер
При події CALL_ENDМоже бути порожнім або містити номери операторів, яким надійшов дзвінок
Для API дзвінківМоже бути відсутнім, якщо дзвінок не був ні на кого перенаправлений

Поле “state”

ANSWERДзвінок було прийнято
BUSYЛінія була зайнята
FAILЗбій
NOANSWERДзвінок не було прийнято
CHANUNAVAILВикликаний номер був недоступний
NOMONEYНедостатньо коштів для здійснення дзвінка
BUSYOUTПід час здійснення дзвінка усі зовнішні лінії були зайняті
WRONGDIRНеправильний напрямок дзвінка
BLOCKEDДзвінок було заблоковано згідно з налаштуваннями проекту
DIALINGЙде виклик
UNREACHABLEАбонент недоступний або знаходиться поза зоною
NOT_EXISTВикликаний номер не існує

Поле “source”

REGULARЗвичайний прямий дзвінок
TRACKINGДзвінок колтрекінгу
CLICK2CALLЗворотній дзвінок з кнопки
LEAD_CATCHERОбратный звонок с попапа
FORMЗворотній дзвінок із форми
CALLBACKДзвінок за ознакою callback на зовнішньому номері
AUTO_CBАвтоматичний зворотній дзвінок на пропущений виклик
AUTODIALДзвінок із обдзвону номерів
API_CALLДзвінок ініційований через API
C2C_APIс2с дзвінок ініційований через API

Стандартний JSON для голосових подій:

{ 
    "ivrName":"Распределение по отделам", // Назва голосового меню
    "from":"380971234567", // Номер телефону абонента
    "outerNumber":"380441234567", // Зовнішня лінія, яка була використана для здійснення або отримання дзвінка. Містить назву сайту у разі зворотного дзвінка
    "pressedDigit":2, // Цифра, на яку натиснув абонент. Може бути null
    "actionType": "MAIN", // Тип дії. "MAIN" - основна дія, "NO_CHOICE" - дія відсутності вибору, "WRONG_DIGIT" - дія неправильного вибору
    "projectName": "myproject", // Назва проекту
    "utmCampaign": "sale2021", // Мітки аналітики. Може бути null
    "utmSource": "google", // Мітки аналітики. Може бути null
    "utmMedium": "email", // Мітки аналітики. Може бути null
    "utmTerm": "term", // Мітки аналітики. Може бути null
    "utmContent": "content", // Мітки аналітики. Може бути null
    "googleId": "11111.11111", // Мітки аналітики. Може бути null
    "facebookClientId": "fb.1.1234567890" // Мітки аналітики. Може бути null
}

Стандартний JSON для подій завершення обдзвонів номерів:

{
    "from": "380971234567", // Номер телефону абонента
    "operatorNumber": "2040", // Внутрішня лінія оператора. Може бути null
    "callName": "Владимир", // Ім'я закріплене за номером дзвінка
    "callNote": "покупал окна", // Нотатка до номера обдзвону
    "calledCount": 1, // Кількість дзвінків на цей номер в обдзвоні
    "callState": "ANSWER", // Статус завершення дзвінка. Детальніше у розділі "Обдзвон номерів" - "Загальні відомості"
    "dialName": "обзвон-окна", // Назва обдзвону
    "totalCount": 2000, // Кількість номерів у обдзвоні
    "doneCount": 537, // Кількість оброблених номерів обдзвону
    "projectName": "myproject" // Назва проекту
}

Стандартний JSON для подій обдзвонів номерів, не пов’язаних із дзвінками

{}

Стандартний JSON для події черги із голосовим супроводом

{ 
    "from":"380971234567", // Номер телефону абонента
    "projectName":"my-project", // Назва проекту
    "utmCampaign": "sale2021", // Мітки аналітики. Може бути null
    "utmSource": "google", // Мітки аналітики. Може бути null
    "utmMedium": "email", // Мітки аналітики. Може бути null
    "utmTerm": "term", // Мітки аналітики. Може бути null
    "utmContent": "content", // Мітки аналітики. Може бути null
    "googleId": "11111.11111", // Мітки аналітики. Може бути null
    "facebookClientId": "fb.1.1234567890", // Мітки аналітики. Може бути null
    "gclid": "gclid..." // Мітки аналітики. Може бути null
    "cdid": "cdid...", // Мітки аналітики. Може бути null
    "referer": "https://unitalk.cloud", // Мітки аналітики. Може бути null
    "ip": "111.111.111.111" // !
}

Видалення відкладених обробників подій
Сopied

Для видалення відкладених обробників подій необхідно вказати перелік телефонних номерів в міжнародному форматі, обробники подій для яких будуть видалені.

Відносний шлях: /api/eventHandlers/removeScheduledByPhones
Метод: POST
Content-Type: application/json

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

{
  "phones": [ // Масив номерів клієнтів
    "380123456789",
    ...
  ]
}

Приклад відповіді у разі успіху:

{"status": "Success", "data": 12345}

У разі успішного виконання запиту, в параметрі data буде повернута кількість видалених обробників.

Можливі помилки:

Phones is not specifiedПараметр phones не вказано або пустий
Too many phonesВ параметрі phones передано більше 100 елементів
Invalid phonesВ параметрі phones присутні некоректні номери. В параметрі відповіді data буде вказано масив елементів phones, які не пройшли валідацію
Wait until the previous request is processedОдин проект одночасно може запустити тільки один процес видалення відкладених обробників подій.
В цей момент в проекті відбувається видалення.
Повторіть спробу пізніше, коли попередня операція завершиться

Вхідні вебхуки
Сopied

UniTalk може приймати вебхуки з певною структурою та виконувати за ними дії.
Доступні на даний момент дії:
1) “AUTODIAL_ADD” – Додати номер телефону в обдзвон номерів
2) “AUTODIAL_REMOVE” – Видалити номер телефону з обдзвону номерів
Для використання вхідних вебхуків на сторінці особистого кабінету “API необхідно:
1) Згенерувати токен:

api_inbound_webhook_token_ua


2) Натиснути кнопку “Сгенерувати посилання“:

api_link_gen_ua


3) Обрати дію, обдзвон до якого вона застосовується, вказати додаткові опції та натиснути кнопку “Сгенерувати“:


4) Заповнити параметри посилання та надіслати на неї POST запит.
Параметри, що заповнюються при генерації автоматично:

tokenТокен для вхідних вебхуків
actionТип дії вебхука
idid обдзвону номерів

Додати номер в обдзвон
Сopied

Приклад згенерованого посилання:
https://api.unitalk.cloud:8443/tracking/webhook/event?token=LrqN7GRb1Y1Qx5wRoZHY&action=AUTODIAL_ADD&id=20461&name=&note=&link=&phones=
Параметри, які потрібно заповнити:

phonesНомер телефону або список номерів телефону через кому які необхідно додати до обдзвону
nameІм’я, яке буде закріплене за номерами, що додаються. Максимум – 100 символів. Необов’язкове поле
noteНотатка, яка буде закріплена за номерами, що додаються. Максимум – 500 символів. Необов’язкове поле
linkДані для Web Dialer, які будуть закріплені за номерами, що додаються. Максимум – 500 символів. Необов’язкове поле

Приклад заповненого посилання:
https://api.unitalk.cloud:8443/tracking/webhook/event?token=LrqN7GRb1Y1Qx5wRoZHY&action=AUTODIAL_ADD&id=20461&name=vasya&note=okna&phones=380971234567
При надсиланні запиту POST за цим посиланням, в обдзвон з id “20461” буде додано номер телефону “380971234567”, з ім’ям “vasya” і заміткою “okna”.
У разі успіху:

{"status": "Success"}

Можливі помилки:

Token not foundПереданий токен не знайдено в UniTalk
Action not foundВідсутній параметр action у посиланні
Id is nullВідсутній параметр id у посиланні
Autodial not foundОбдзвон не знайдено за id
Empty phonesПараметр phones не вказаний або порожній
Phones not foundПараметр phones не порожній, але в ньому не знайдено хоч би один коректний номер телефону
Phones not addedНе вдалося додати номери в обдзвон. Можливо номери вже були додані в обдзвон

Видалити номер з обдзвону
Сopied

Приклад згенерованого посилання:
https://api.unitalk.cloud:8443/tracking/webhook/event?token=LrqN7GRb1Y1Qx5wRoZHY&action=AUTODIAL_REMOVE&id=20461&phones=
Параметри, які потрібно заповнити:

phonesНомер телефону або список номерів телефону через кому які необхідно додати до обдзвону

Приклад заповненого посилання:
https://api.unitalk.cloud:8443/tracking/webhook/event?token=LrqN7GRb1Y1Qx5wRoZHY&action=AUTODIAL_REMOVE&id=20461&phones=380971234567,380670001000
При надсиланні запиту POST за цим посиланням, з обдзвону з id “20461” будуть видалені номери “380971234567” і “380670001000”.
У разі успіху:

{"status": "Success"}

Можливі помилки:

Token not foundПереданий токен не знайдено в UniTalk
Action not foundВідсутній параметр action у посиланні
Id is nullВідсутній параметр id у посиланні
Autodial not foundОбдзвон не знайдено за id
Empty phonesПараметр phones не вказаний або порожній
Phones not foundПараметр phones не порожній, але в ньому не знайдено хоч би один коректний номер телефону
Calls not foundНе вдалося видалити жоден номер. Можливо, в обдзвоні не було жодного із зазначених номерів

Переклад дзвінка на відповідального оператора
Сopied

api_operator_webhook_url_-ua

Вебхук «Переклад дзвінка на відповідального оператора» дозволяє отримати інформацію про виклик для подальшого вибору відповідального оператора Вашою системою. Для роботи з цим вебхуком Ваш веб-додаток повинен приймати JSON методом POST за вказаним під час створення або редагування вхідного сценарію на сторінці особистого кабінету «Вхідні сценарії», при виборі перенаправлення на «На відповідального менеджера» та активації опції «Запит у Ваш API» URL.

При виконанні цього перенаправлення, на вказаний URL буде надіслано запит з таким вмістом:

{  
  "event": "ROUTE",  
  "call": {  
    "from": "380505557182", // Номер абонента, що телефонує
    "outerNumber": "380442949168" // Зовнішня лінія, на яку було отримано дзвінок
  }  
}

У відповідь Ваш додаток має надіслати JSON наступної структури:

{  
  "operatorNumber": "2048",   // Номер телефону відповідального оператора. Можна вказати SIP або GSM. Може бути null
  "callerName": "Александр",  // Ім'я абонента, яке буде відображено у SIP клієнті
  "ivrId": 487 // id голосового меню, яке потрібно відтворити абоненту. Може бути null
}

Попередньо перевіряти чи вільний на даний момент оператор не потрібно: якщо він зайнятий, перенаправлення дзвінка на нього буде пропущено.

Керування чергою із голосовим супроводом
Сopied

Вебхук “Керування чергою із голосовим супроводом” дозволяє отримати інформацію про дзвінок для подальшої пріоритезації обробки клієнтів Вашою системою. Для роботи з цим вебхуком Ваш веб-додаток повинен приймати JSON методом POST за вказаним під час створення або редагування вхідного сценарію на сторінці особистого кабінету «Вхідні сценарії», при виборі перенаправлення на «Чергу з супроводом» та активації опції «Вебхук для керування» URL .

api_queue_webhook_url_ua


При виконанні цього перенаправлення, на вказаний URL буде надіслано запит з таким вмістом:

{
  "outerNumber": "380440000001", // Зовнішня лінія, на яку надійшов дзвінок
  "from": "380501234567", // Номер абонента
  "utmSource": null, // Мітки аналітики. Може бути null
  "utmMedium": null, // Мітки аналітики. Може бути null
  "utmCampaign": null, // Мітки аналітики. Може бути null
  "utmTerm": null, // Мітки аналітики. Може бути null
  "utmContent": null, // Мітки аналітики. Може бути null
  "googleId": null, // Мітки аналітики. Може бути null
  "facebookClientId": null, // Мітки аналітики. Може бути null
  "gclid": null, // Мітки аналітики. Може бути null
  "cdid": null, // Мітки аналітики. Може бути null
  "referer": null // Мітки аналітики. Може бути null
}

Черга з пріоритетом складається із 10 черг, які обробляються у порядку зменшення номера. За замовчуванням UniTalk визначає всі дзвінки в чергу з номером 5.
Ваша програма може змінити черговий номер, надіславши відповідь у наступні структури JSON:

{
  "setPriority": 7 // Номер черги від 1 до 10
}

Повідомлення
Сopied

Для відправки повідомлень через SMS та Viber на сторінці особистого кабінету «Сервіс відправки повідомлень» розділу «Інтеграція» має бути підключена інтеграція з сервісом відправки повідомлень. Доступність типів повідомлень та напрямків залежить від налаштування цієї інтеграції. Максимальна довжина тексту для Viber – 1000 символів, для SMS – залежить від сервісу відправки повідомлень.

Відправка повідомлення
Сopied

Відносний шлях: /message/send
Режим: POST
Content-Type: application/json

Приклад JSON запиту для SMS:

{
    "messageType": "SMS", // Тип повідомлення "SMS" (обов’язкове поле)
    "alfaName": "YourSmsAlphaName", // Альфа-ім’я відправника. Актуально лише для провайдера Unitalk, якщо у вас підключено більше ніж одне альфа-ім’я (необов’язковий параметр)
    "to": "380971234567", // Номер телефону отримувача у міжнародному форматі (обов’язкове поле)
    "text": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit" // Текст повідомлення (обов’язкове поле)
}

Приклад JSON запиту для Viber:

{
    "messageType": "VIBER", // Тип повідомлення "VIBER" (обов’язкове поле)
    "alfaName": "YourViberAlphaName", // Альфа-ім’я відправника. Актуально лише для провайдера Unitalk, якщо у вас підключено більше ніж одне альфа-ім’я (необов’язковий параметр)
    "to": "380971234567", // Номер телефону отримувача у міжнародному форматі (обов’язкове поле)
    "text": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit" // Текст повідомлення (обов’язкове поле)
}

Приклад відповіді у разі успіху:

{
    "status": "Success",
    "message": null,
    "rus": null,
    "data": 1234
}

Ідентифікатор повідомлення, що повертається в data, може бути використаний для подальшого отримання інформації про статус відправки повідомлення.

Можливі помилки:

Message service not connectedНе підключено сервіс відправки повідомлень
Validation errorПомилки валідації. Можливі причини:
· Неправильний номер телефону одержувача
· Відправка повідомлень за цим напрямком не дозволена налаштування інтеграції з сервісом відправки повідомлень
· Не обрано тип повідомлення
· Відправка SMS відключена в налаштуваннях сервіса відправки повідомлень
· Відправка повідомлень в Viber відключена в налаштуваннях сервіса відправки повідомлень
· Повідомлення не може бути пустим
· Повідомлення занадто довге
· Повідомлення містить недопустимі символи
UniTalk did not allow sendingUniTalk не дозволив відправку. Можливі причини:
· Недоступний напрямок для відправки
· На балансі недостатньо коштів
· Проект не активний
Service responseВідповідь сервіса. Можливі причини:
· Невірні дані авторизації
· Недостатньо коштів на балансі
· Перевищено ліміт запитів
· Дубль повідомлення
· IP адреса не дозволена в сервісі надсилання повідомлень
· м’я відправника заблоковано одержувачем
· Недоступна країна одержувача
· Номер одержувача заблоковано
· Недопустиме ім’я відправника
· Ім’я відправника на модерації
· Недопустимий номер одержувача
· Недопустимий текст
· Надсилання повідомлень у Viber недоступне
· Дані некоректні
· Сервіс надсилання повідомлень тимчасово недоступний
Unknown errorНевідома помилка

Масова відправка повідомлень
Сopied

Для відправки декількох повідомлень одним запитом може бути використана масова відправка повідомлень. Максимальна кількість повідомлень – 100. Запит може бути в двох варіантах:
· З вказанням загального тексту повідомлень в параметрі text та списку номерів телефонів отримувачів в міжнародному форматі в параметрі recipients;
· З вказанням номерів телефонів отримувачів в міжнародному форматі та відповідних текстів повідомлень в масиві messages, де ключ – номер телефону, а значення – текст повідомлення.
Якщо в запиті одночасно вказано параметри обох способів, будет використано параметр messages.

Відносний шлях: /message/sendBulk
Режим: POST
Content-Type: application/json

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

{
  "messagesType": "SMS", // Тип повідомлень. "SMS" або "VIBER"
  "recipients": [  // Номери телефонів отримувачів в міжнародному форматі
    "380971234567",
    "380981234567",
    ...
  ],
  "text": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit." // Текст повідомлень
}
{
  "messagesType": "SMS", // Тип повідомлень. "SMS" або "VIBER"
  "messages": { // Масив повідомлень
    "380971234567": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. 1", // "Номер телефону": "Текст повідомлення"
    "380981234567": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. 2", // "Номер телефону": "Текст повідомлення"
    ...
  }
}

Приклад відповіді у разі успіху:

{
  "status": "Success",
  "data": {
    "380971234567": { // Відправлено
      "id": 123451, // Ідентифікатор повідомлення
      "error": null // Текст помилки відправки повідомлення
    },
    "380981234567": { // Не відправлено
      "id": 123452, // Ідентифікатор повідомлення
      "error": "Sample error text" // Текст помилки відправки повідомлення
    },
    ...
  }
}

Масив, що повертається в data, містить ідентифікатор та текст помилки відправки кожного з повідомлень, що відправляються. Ідентифікатор може бути використано для подальшого отримання інформації про статус відправки повідомлення.

Можливі помилки:

Message service not connectedНе підключено сервіс відправки повідомлень
messagesType is nullНе обрано тип повідомлень
Messages not specifiedВ запиті не вказано ні параметр messages, ні recipients
Too many messagesМасив messages містить понад 100 пар
messages is emptyМасив messages пустий
messages contains null keyВ масиві messages присутній пустий ключ
messages contains null valueВ масиві messages присутнє пусте значення
Too many recipientsСписок recipients містить понад 100 номерів
recipients is emptyСписок recipients пустий
recipients contains nullВ списку recipients присутнє пусте значення
text is null or emptyДля відправки використовується список recipients, але текст не вказаний

Отримання статуса відправки повідомлення
Сopied

Для отримання статуса відправки повідомлення необхідно вказати ідентифікатор, отриманий при його відправці, в параметрі id.

Відносний шлях: /message/getStatus
Режим: POST
Content-Type: application/x-www-form-urlencoded (Також можна відправляти запит передаючи параметри у якості параметрів url, без тіла)

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

/message/getStatus?id=12345

Приклад відповіді у разі успіху:

{
  "status": "Success",
  "data": {
    "messageStatus": "ERROR", // Статус відправки повідомлення
    "errorText": "Service response: invalid authorization data" // Текст помилки. Якщо статус не ERROR - null
  }
}

Масив, що повертається в data, містить статус відправки повідомлення та текст помилки відправки, якщо статус відправки – ERROR.

Статуси відправки:
· SENT – Відправлено. Інформація про доставку відсутня;
· DELIVERED – Доставлено;
· NOT_DELIVERED – Не доставлено;
· ERROR – Помилка відправки.

Можливі помилки:

Invalid idПараметр id відсутній або некоректний
Message not foundЗа вказаним id не знайдено повідомлення

Отримання списку розсилок
Сopied

Для отримання списку розсилок та пов’язаної інформації необхідно відправити пустий запит.

Відносний шлях: /messageDistribution/getAll
Режим: POST
Content-Type: –

Приклад відповіді:

[
  {
    "id": 123, // Ідентифікатор розсилки
    "name": "Sample_name", // Назва
    "messageType": "SMS", // Тип повідомлень. "SMS" або "VIBER"
    "text": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.", // Текст розсилки
    "startTime": "2024-07-07 12:00:00", // Час запуску. Якщо запущена одразу - null
    "paused": false, // Ознака паузи. "true" - на паузі, "false" - ні
    "totalNumbersCount": 10, // Кількість номерів в розсилці
    "currentNumbersCount": 10, // Кількість необроблених номерів
    "status": "WAITING_START_TIME" // Статус розсилки
  },
  ...
]

Статуси розсилок:
· COMPLETED – Розсилку завершено;
· PAUSED – На паузі;
· WAITING_START_TIME – Очікування часу запуску;
· IN_PROGRESS – В процесі розсилки;
· MESSAGE_SERVICE_NOT_CONNECTED – Не підключено сервіс відправки повідомлень.

Створення розсилки
Сopied

Для створення розсилки в запиті необхідно вказати обов’язкові параметри:
· name – Унікальна назва нової розсилки. Максимальна довжина – 45 символів;
· messageType – Тип повідомлень. “SMS” або “VIBER“;
· numbers – Список номерів телефонів отримувачів у міжнародному форматі. Максимальна кількість номерів – 10000;
· text – Текст розсилки. Обмежання залежать від типу повідомлень та сервісу відправки повідомлень.
Опціонально в параметрі startTime можна вказати дату та час відкладеного запуску в форматі “yyyy-MM-dd HH:mm:ss”.

Відносний шлях: /messageDistribution/create
Режим: POST
Content-Type: application/json

Приклад JSON запиту для SMS розсилки:

{
    "name": "SmsDistributionName", // Назва розсилки (обов’язково)
    "messageType": "SMS", // Тип розсилки "SMS" (обов’язково)
    "alphaName": "YourSmsAlphaName", // Альфа-ім’я відправника. Актуально лише для провайдера Unitalk, якщо у вас підключено більше ніж 1 альфа-ім’я (необов’язково)
    "numbers": [ // Номери телефонів отримувачів у міжнародному форматі (обов’язково)
        "380971234567",
        "380671234567",
    ...
    ],
    "text": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit", // Текст розсилки (обов’язково)
    "startTime": "2029-07-07 12:00:00" // Дата і час відкладеного запуску. Може бути null — у такому разі розсилка буде запущена одразу (необов’язково)
}

Приклад JSON запиту для Viber Promo розсилки:

{
  "name": "ViberDistributionName", // Назва розсилки (обов’язково)
  "messageType": "VIBER", // Тип розсилки "VIBER" (обов’язково)
  "viberMessageType": "PROMO", // Тип Viber-повідомлень "PROMO" (обов’язково)
  "alphaName": "YourViberAlphaName", // Альфа-ім’я відправника. Актуально лише для провайдера Unitalk, якщо у вас підключено більше ніж 1 альфа-ім’я (необов’язково)
  "numbers": [ // Номери телефонів одержувачів у міжнародному форматі (обов’язково)
    "380971234567",
    "380671234567",
    ...
  ],
  "text": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.", // Текст розсилки (обов’язково)
  "base64Image": "iVBORw0KGgoAAA....", // Зображення у форматі base64, яке буде надіслано в розсилці (необов’язково)
  "mimeType": "image/jpeg", // mime-тип вашого base64-зображення (обов’язково, якщо використовується base64Image)
  "fileName": "promo_image", // Назва файлу із зображенням (до 20 символів), може використовуватись як метадані (обов’язково, якщо використовується base64Image)
  "buttonText": "Buy", // Текст кнопки (до 30 символів) (необов’язково)
  "buttonUrl": "https://example.com", // Посилання, яке відкриється після натискання на кнопку (обов’язково, якщо використовується buttonText)
  "viberTTL": 3600, // "Time to Live" Viber-повідомлення — скільки секунд воно може чекати доставки. Значення в секундах, від 60 до 86400 (обов’язково)
  "startTime": "2029-07-07 12:00:00" // Дата та час відкладеного запуску. Може бути null — тоді розсилка запуститься одразу (необов’язково)
}

Приклад JSON запиту для Viber Transactional розсилки:

{
  "name": "ViberDistributionName", // Назва розсилки (обов’язково)
  "messageType": "VIBER", // Тип розсилки "VIBER" (обов’язково)
  "viberMessageType": "TRANSACTIONAL", // Тип Viber-повідомлень "TRANSACTIONAL" (транзакційні повідомлення, обов’язково)
  "alphaName": "YourViberAlphaName", // Альфа-ім’я відправника. Актуально лише для провайдера Unitalk, якщо у вас підключено більше ніж одне альфа-ім’я (необов’язково)
  "numbers": [ // Номери телефонів одержувачів у міжнародному форматі (обов’язково)
    "380971234567",
    "380671234567",
    ...
  ],
  "text": "Your verification code is: 1234", // Текст розсилки (обов’язковий параметр)
  "viberTTL": 3600, // "Time to Live" Viber-повідомлення — скільки секунд повідомлення може чекати доставки. Вказується у секундах, від 60 до 86400 (обов’язково)
  "startTime": "2029-07-07 12:00:00" // Дата та час відкладеного запуску. Може бути null — тоді розсилка запуститься одразу (необов’язково)
}

Приклад JSON запиту для Viber Carousel розсилки:

{
    "name": "ViberDistributionName", // Назва розсилки (обов’язково)
    "messageType": "VIBER", // Тип розсилки "VIBER" (обов’язково)
    "viberMessageType": "CAROUSEL", // Тип Viber-повідомлення "CAROUSEL" (обов’язково)
    "alphaName": "YourViberAlphaName", // Альфа-ім’я відправника. Актуально лише для провайдера Unitalk, якщо у вас підключено більше ніж одне альфа-ім’я (необов’язково)
    "numbers": [ // Номери телефонів одержувачів у міжнародному форматі (обов’язково)
        "380971234567",
        "380671234567"
    ],
    "text": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.", // Текст розсилки (обов’язково)
    "carouselItems": [ // Елементи каруселі, від 2 до 5 (обов’язково)
        {
            "title": "Sneakers A1", // Назва елемента (2–38 символів, обов’язково)
            "base64Image": "iVBORw0KGgoAAA....", // Зображення у форматі base64 (обов’язково)
            "mimeType": "image/png", // MIME-тип вашого зображення (обов’язково)
            "fileName": "a1_carousel", // Назва файлу із зображенням (до 20 символів), може використовуватись як метадані (обов’язково)
            "primaryButton": { // Налаштування основної кнопки
                "label": "Buy", // Текст кнопки (до 10 символів, обов’язково)
                "actionUrl": "https://example.com/a1" // Посилання, яке відкриється при натисканні (обов’язково)
            },
            "secondaryButton": { // Налаштування другої кнопки (необов’язково)
                "label": "Details", // Текст (до 12 символів, необов’язково)
                "actionUrl": "https://example.com/a1/info" // Посилання, яке відкриється при натисканні (необов’язково)
            }
        },
        {
            "title": "Sneakers B2", // Назва другого елемента (обов’язково)
            "base64Image": "iVBORw0KGgoAAA....", // Зображення (обов’язково)
            "mimeType": "image/png", // MIME-тип (обов’язково)
            "fileName": "b2_carousel", // Назва файлу (обов’язково)
            "primaryButton": { // Основна кнопка (обов’язково)
                "label": "Buy", // Текст кнопки (до 10 символів, обов’язково)
                "actionUrl": "https://example.com/b2" // Посилання (обов’язково)
            }
        }
    ],
    "viberTTL": 3600, // "Time to Live" — скільки секунд Viber-повідомлення може чекати доставки (від 60 до 86400, обов’язково)
    "startTime": "2029-07-07 12:00:00" // Дата та час відкладеного запуску. Може бути null — тоді розсилка стартує одразу (необов’язково)
}

Приклад JSON запиту для Viber+SMS fallback розсилки:

{
    "name": "ViberWithSmsFallback", // Назва розсилки (обов’язково)
    "messageType": "VIBER", // Тип розсилки "VIBER" (обов’язково)
    "viberMessageType": "PROMO", // Тип Viber-повідомлень: "PROMO", "TRANSACTIONAL" або "CAROUSEL" (обов’язково)
    "alphaName": "YourViberAlphaName", // Альфа-ім’я відправника. Актуально лише для провайдера Unitalk, якщо у вас підключено більше ніж одне альфа-ім’я (необов’язково)
    "numbers": [ // Номери телефонів одержувачів у міжнародному форматі (обов’язково)
        "380971234567",
        "380671234567"
    ],
    "text": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit", // Текст Viber-розсилки (обов’язково)
    "viberTTL": 3600, // "Time to Live" — скільки секунд Viber-повідомлення може чекати доставки. Значення в секундах, від 60 до 86400 (обов’язково)
    // Для кожного типу viberMessageType успадковуються всі описані у попередніх JSON параметри
    ...
    "sendSmsAfterViber": true, // Параметр, який відповідає за активацію Viber+SMS fallback-розсилки (обов’язково)
    "smsText": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit", // Текст SMS-розсилки (обов’язково)
    "smsAlphaName": "YourSmsAlphaName", // Альфа-ім’я відправника для SMS. Актуально лише для провайдера Unitalk, якщо у вас підключено більше ніж одне альфа-ім’я (необов’язково)
    "startTime": "2029-07-07 12:00:00" // Дата та час відкладеного запуску. Може бути null — тоді розсилка стартує одразу (необов’язково)
}

Приклад відповіді у разі успіху:

{
    "status": "Success",
    "message": null,
    "rus": null,
    "data": 1234
}

Ідентифікатор розсилки, що повертається в data, може бути використаний для подальшої взаємодії з нею.

Можливі помилки:

The project does not have a messaging service connectedНе підключено сервіс відправки повідомлень
The name cannot be empty or contain more than 45 charactersНазва розсилки не вказана або перевищує 45 символів
The name already existsРозсилка з такою назвою вже існує
No customer numbers are listedНомери в списку numbers не вказані
There can be no more than 10000 numbers in the message distributionКількість номерів в списку numbers перевищує 10000
Wrong numbersВ списку numbers присутні некоректні номери.
В параметрі відповіді data буде повернений список некоректних номерів
Incorrect time formatНекоректний формат параметра startTime
Validation errorПомилки валідації. Можливі причини:
· Не обрано тип повідомлення
· Відправка SMS відключена в налаштуваннях сервіса відправки повідомлень
· Відправка повідомлень в Viber відключена в налаштуваннях сервіса відправки повідомлень
· Повідомлення не може бути пустим
· Повідомлення занадто довге
· Повідомлення містить недопустимі символи

Змінення розсилки
Сopied

Для змінення розсилки в запиті необхідно вказати обов’язкові параметри:
· id – Ідентифікатор розсилки;
· name – Унікальна назва розсилки. Максимальна довжина – 45 символів;
· messageType – Тип повідомлень. “SMS” або “VIBER“;
· text – Текст розсилки. Обмежання залежать від типу повідомлень та сервісу відправки повідомлень.
Опціонально в параметрі startTime можна вказати дату та час відкладеного запуску в форматі “yyyy-MM-dd HH:mm:ss”.

Відносний шлях: /messageDistribution/update
Режим: POST
Content-Type: application/json

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

{
  "id": 1234, // Ідентифікатор розсилки
  "name": "Sample_name", // Назва
  "messageType": "SMS", // Тип повідомлень. "SMS" або "VIBER"
  "text": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.", // Текст розсилки
  "startTime": "2024-07-07 12:00:00" // Дата та час відкладеного запуску. Може бути null, в такому випадку буде запущена одразу
}

Відповідь у разі успіху:

{"status": "Success"}

Можливі помилки:

The project does not have a messaging service connectedНе підключено сервіс відправки повідомлень
id is not specifiedОбов’язковий параметр id не вказано
Message distribution not foundРозсилку не знайдено за вказаним id
Message distribution completedРозсилка вже завершена
The name cannot be empty or contain more than 45 charactersНазва розсилки не вказана або перевищує 45 символів
The name already existsРозсилка з такою назвою вже існує
Incorrect time formatНекоректний формат параметра startTime
Validation errorПомилки валідації. Можливі причини:
· Не обрано тип повідомлення
· Відправка SMS відключена в налаштуваннях сервіса відправки повідомлень
· Відправка повідомлень в Viber відключена в налаштуваннях сервіса відправки повідомлень
· Повідомлення не може бути пустим
· Повідомлення занадто довге
· Повідомлення містить недопустимі символи

Видалення розсилки
Сopied

Для видалення розсилки необхідно вказати її ідентифікатор в параметрі id.

Відносний шлях: /messageDistribution/remove
Режим: POST
Content-Type: application/x-www-form-urlencoded (Також можна відправляти запит передаючи параметри у якості параметрів url, без тіла)

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

/messageDistribution/remove?id=1234

Відповідь у разі успіху:

{"status": "Success"}

Можливі помилки:

id is not specifiedОбов’язковий параметр id не вказано

Призупинення та відновлення розсилки
Сopied

Для призупинення або відновлення розсилки необхідно вказати її ідентифікатор в параметрі id та дію в параметрі paused:
· true – Поставити на паузу;
· false – Зняти з паузи.

Відносний шлях: /messageDistribution/setPaused
Режим: POST
Content-Type: application/x-www-form-urlencoded (Також можна відправляти запит передаючи параметри у якості параметрів url, без тіла)

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

/messageDistribution/setPaused?id=1234&id=true

Відповідь у разі успіху:

{"status": "Success"}

Можливі помилки:

id is not specifiedОбов’язковий параметр id не вказано
Message distribution not foundРозсилка не знайдена за вказаним id
Message distribution completedРозсилку вже завершено

Web Dialer
Сopied

Для роботи з віджетом Chrome (надалі Web Dialer) використовуються методи, що сгруповані за шляхом /widget/

Відправка сповіщень у Web Dialer
Сopied

Для відправки сповіщень у Web Dialer необхідно вказати:
· Масив ID користувачів, яким необхідно відобразити це сповіщення, в параметрі userIds;
· Як мінімум один параметр сповіщення в об’єкті data.

Відносний шлях: /widget/sendNotification
Режим: POST
Content-Type: application/json

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

{
  "userIds": [ // Масив ID користувачів
    1234,
    ...
  ],
  "data": { // Параметри сповіщення
    "contactName": "John", // Ім'я контакту
    "contactLink": "https://www.example-crm.com/leads/1", // Посилання на контакт
    "entityName": "Best deal", // Ім'я пов'язаної з контактом сутності
    "entityLink": "https://www.example-crm.com/deals/1", // Посилання на пов'язану сутність
    "responsible": "Manager #1" // Ім'я відповідального менеджера
  }
}

Приклад відповіді у разі успіху:

{
  "status":"Success",
  "data": {
    "notificationId": 1234567890 // ID відправленого сповіщення
  }
}

Параметр notificationId, що повертається в data, може бути використаний для подальшого приховання відправлених сповіщень.

Можливі помилки:

No users was specified for notifications sendНе було вказано жодного користувача для надсилання сповіщення
Data fields is all nullНе вказано значення жодного параметра об’єкта data
User with id *xxxx* not foundКористувач із зазначеним ID не був знайдений
No users with connected chrome extension was foundЗазначені користувачі не підключили Web Dialer

Приховання сповіщень у Web Dialer
Сopied

Для приховання сповіщень у Web Dialer необхідно вказати:
· Масив ID користувачів, у яких необхідно приховати сповіщення, в параметрі userIds;
· notificationId, отриманий при відправці сповіщення.

Відносний шлях: /widget/hideNotification
Режим: POST
Content-Type: application/json

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

{     
  "userIds": [ // Масив ID користувачів
    1234,
    ...
  ],
  "notificationId": 1234567890 // ID цільового сповіщення
}

Відповідь у разі успіху:

{"status": "Success"}

Можливі помилки:

No users was specified for notifications hideНе було вказано жодного користувача для приховування сповіщення
NotificationId not specifiednotificationId не вказано
The specified users are not found or chrome extension not connectedЗазначені користувачі не знайдені або у них не підключений Web Dialer

Словники
Сopied

Основні сутності
Сopied

Отримати id та назви сутностей проекта:

POST: /dictionary?type=…
можливі значення параметру type:

IVRid та назва голосових меню
INNER_PHONEномер SIP лінії та ім’я оператора закріпленого за нею
USERid та ім’я користувачів
SITEid та назва сайтів
IN_SCENARIOid та назва вхідних сценаріїв
OUT_SCENARIOid та назва вихідних сценаріїв
TTS_PROFILEid та назва профілів налаштувань синтезу аудіо
STT_PROFILEid та назва профілів налаштувань розпізнавання мовлення
PHONE_GROUPid та назва відділів телефонії
TRIGGER_ACTIONid та назва обробників подій
VOICE_ROBOTid та назва голосових роботів
MESSAGE_DISTRIBUTIONid та назва розсилок повідомлень
CONTACT_FORMSid та назва контакт форм
VOICE_ANALYTICS_PROFILEid та назва профілів мовної аналітики
AUDIO_ALLid та назва аудіо всіх типів
AUDIO_GENERALid та назва аудіо з типом Сценарії
AUDIO_IVRid та назва аудіо з типом Голсові меню
AUDIO_AUTODIALid та назва аудіо з типом Обдзвони
AUDIO_MELODYid та назва аудіо з типом Мелодії очікування на лінії та черг
AUDIO_APIid та назва аудіо з типом API дзвінки
AUDIO_VOICE_ROBOTid та назва аудіо з типом Голосові роботи
AUDIO_VOICE_QUEUEid та назва аудіо з типом Черги дзвінків із голосовим супроводом
AUTODIAL_ALLid та назва обдзвонів всіх типів
AUTODIAL_AUTODIALERid та назва обдзвонів з типом Автообдзвон
AUTODIAL_PREDICTIVEid та назва обдзвонів з типом Предиктивний дозвон
AUTODIAL_ROBOTid та назва обдзвонів з типом Обдзвон голосовим роботом
SALE_SCRIPTSid та назва скриптів продажів

Тіло відповіді:

{
    "734": "ivr name 1",
    "2135": "ivr name 2"
}