Схемы запросов и ответов сервера https://api.sprecord.cloud/docs
Для получения событий в реальном времени существует 2 механизма:
Для получения web hook на свой сервер, необходимо выполнить запрос /sys/subscribe_events с параметрами:
{
  "hook": "https://your_url_here.com",
  "subscribe": [
    "answer_elsewhere",
    "incoming_call",
    "call_end"
  ]
}
Перед тем как сохранить параметры API сервер проверяет, что сервер клиента доступен. Для этого он делает POST запрос c параметрами:
{
  device_id = device_id,
  event_type = verification,
  payload = verification_str
}
Сервер клиента должен вернуть JSON вида
{
  "result": MD5_HASH
}
MD5 hash строки verification_str. Если они совпадут этого события добавятся в список хуков и сервер вернет ответ вида
{
  "hook": "https://your_url_here.com",
  "subscribe": [
    "answer_elsewhere",
    "incoming_call",
    "call_end"
  ]
}
где будут отражены текущие настройки web hook.
SSE может использоваться, когда развёртывание сервера на стороне клиента затруднительно. Делается GET запрос /sys/events. Соединение данного типа не закрывается и данные от сервера приходят асинхронно. Сервер поддерживает до 3-х одновременных соединений. Принцип передачи похож на WebSocket, только в одну сторону (от сервера к клиенту). Тестировать можно с помощью браузера.
Формат данных при использовании хуков и SSE идентичен и содержит в себе следующую информацию:
{"device_id": "Y7d6hP0mjNBI+WBT+yptpgY7uY+zX1Oumg9CQ7nr7HACJHy9Fg8IhCr41wO3j0Jl7zUU=", "event_type": "incoming_call",
"payload": {"call_id": 8,
            "call_src": "+798299xxxxx",
            "call_dst": "107", 
            "trunk": "GSM1"}}}
Пример события конца разговора:
{"device_id": "Y7d6hP0mjNBI+WBT+yptpgY7uY+zX1Oumg9CQ7nr7HACJHy9Fg8IhCr41wO3j0Jl7zUU=", "event_type": "call_end",
 "payload": {"call_id": "8", 
             "record_id": 8,
             "duration": 0,
              "status": "no_answer"}
Payload в зависимости от событий может отличаться. Ниже приведены данные для основных событий
{}
для события startup нет дополнительных данных
    call_id: str
    call_src: str
    call_dst: str
    trunk: str
    call_id: str
    record_id: int
    duration: Optional[int]
    status: RecordCallStatus
    'not_def'
    'no_answer'
    'overload'
    'error'
    'busy'
    'success'
    sms_src: str
    text: str
    trunk: str
    date: datetime
    call_id: str
    number: str