Схемы запросов и ответов сервера 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
}
Сервер клиента должен вернуть 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