dooCall · API

API для разработчиков

API сервиса DooCall позволяет сторонним системам (CRM, BI, собственные приложения) получать звонки, записи разговоров и список сотрудников компании, а также принимать события о новых звонках через webhooks.

Обзор

Все запросы отправляются методом POST на единый адрес вашего аккаунта:

https://<account>.doocall.uz/api/v1

Тело запроса — JSON (заголовок Content-Type: application/json). Выполняемое действие передаётся в поле action, параметры авторизации — в каждом запросе.

Аутентификация

ПараметрТипОбяз.Описание
user_namestringдаE-mail пользователя кабинета DooCall.
api_keystringдаКлюч API компании. Находится в кабинете: Настройки → Интеграция → Параметры API. При смене ключа старый перестаёт действовать.
actionstringдаИмя действия, например calls.list.
POST https://mycompany.doocall.uz/api/v1
Content-Type: application/json

{
  "user_name": "admin@mycompany.uz",
  "api_key": "1f3c9a4b8d2e4f6a9c1b3d5e7f9a0b2c",
  "action": "calls.list",
  "limit": 20
}

Формат ответов и ошибки

Успешный ответ всегда содержит "success": true. Ошибка:

{
  "success": false,
  "message": "invalid api_key",
  "error_code": "INVALID_API_KEY"
}
HTTPerror_codeПричина
400MISSING_FIELDНе хватает поля или неизвестный action
401INVALID_API_KEYНеверный api_key / user_name, либо чужой домен аккаунта
429THROTTLEDПревышен лимит запросов

calls.list — список звонков

ПараметрТипОбяз.Описание
from_dateint | ISO-8601нетНачало периода (unix-время в секундах или ISO-строка).
to_dateint | ISO-8601нетКонец периода.
phonestringнетФильтр по номеру клиента (подстрока).
call_typestringнетinbound или outbound.
offsetintнетСмещение (по умолчанию 0).
limitintнетКол-во записей, максимум 200 (по умолчанию 50).
// Ответ
{
  "success": true,
  "total": 1342,
  "offset": 0,
  "limit": 20,
  "calls": [
    {
      "server_id": "srv_9f1c2b3a4d5e6f708192a3b4c5d6e7f8",
      "call_id": "1724495961-998901234567",
      "call_type": "inbound",
      "call_status": "answered",
      "from": "+998901234567",
      "to": "+998712005050",
      "counterparty_number": "+998901234567",
      "counterparty_name": "Aziz Karimov",
      "operator": "operator1",
      "operator_number": "+998712005050",
      "duration": 214,
      "start_time": "2026-09-01T12:39:21+00:00",
      "received_at": "2026-09-01T12:43:02+00:00",
      "record_url": "https://mycompany.doocall.uz/api/public/rec/9f1c…?sig=…"
    }
  ]
}

calls.get — один звонок

ПараметрТипОбяз.Описание
server_idstringнетСерверный идентификатор (srv_…).
call_idstringнетЛибо клиентский идентификатор звонка.

Нужен один из двух параметров. Ответ — объект call в том же формате, что и в calls.list.

users.list — сотрудники

{
  "success": true,
  "users": [
    { "user_name": "operator1", "full_name": "Alisher N.", "is_active": true,
      "phones": ["+998712005050"] }
  ]
}

account.info — аккаунт

{
  "success": true,
  "account": { "name": "My Company", "slug": "mycompany",
               "status": "active", "operators": 12 }
}

Записи разговоров

Поле record_url — постоянная подписанная ссылка. Её можно сохранять в CRM: при открытии она отдаёт 302-редирект на свежий URL аудиофайла. Ссылка действует, пока запись хранится согласно сроку хранения аудио вашего тарифа.

Webhooks (события)

Укажите URL приёмника в кабинете (Настройки → Интеграция → Webhook). При каждом новом звонке DooCall отправит POST-запрос:

POST <your URL>
Content-Type: application/json
X-Doocall-Signature: hmac_sha256(secret, raw_body)   // hex

{
  "event": "call.received",
  "call_id": "1724495961-998901234567",
  "server_id": "srv_9f1c2b3a4d5e6f708192a3b4c5d6e7f8",
  "call_type": "inbound",
  "call_status": "answered",
  "from": "+998901234567",
  "to": "+998712005050",
  "counterparty_number": "+998901234567",
  "counterparty_name": "Aziz Karimov",
  "duration": 214,
  "start_time": "2026-09-01T12:39:21+00:00",
  "received_at": "2026-09-01T12:43:02+00:00"
}

Секрет подписи выдаётся один раз при первом сохранении URL. Проверяйте заголовок X-Doocall-Signature — это HMAC-SHA256 от «сырого» тела запроса. Ожидается ответ 2xx; при ошибке доставка повторяется до 3 раз с нарастающей задержкой.

Ограничения

  • До 120 запросов в минуту на аккаунт (HTTP 429 при превышении).
  • limit в calls.list — не более 200.
  • Запросы принимаются только на домене вашего аккаунта (<аккаунт>.doocall.uz).