/
Забираем звонки из Webitel

Забираем звонки из Webitel

Довольно часто наши клиенты сталкиваются с необходимостью выгрузить информацию о звонках из раздела Call Detail Record к себе. Как вы уже знаете (даже если взять во внимание предыдущую запись в этом блоге, а именно 📲 Липкость звонка), вся историческая статистика хранится в базе elasticsearch. В документации вы так же могли увидеть пример получения данных с помощью нашего REST API. Но, что если звонков несколько сотен? Или несколько тысяч? Как правильно получить такой объем данных? Сегодня я расскажу как работать с большими объемами данных.

Scroll

Для получения большого количества данных, в elasticsearch предусмотрен функционал scroll, который мы повторили и в нашем REST API. Рассмотрим на примере:

webitel_scroll_request.json
{ "scroll" : "5m", "limit": 1000, "sort": { "created_time": { "order": "desc", "unmapped_type": "boolean" } }, "index": "cdr-a", "query": "*", "columns": [ "created_time", "uuid", "direction", "duration" ], "filter": [ { "bool": { "must": [ { "range": { "created_time": { "gte": "now/w", "lte": "now" } } } ] } } ] }

В тело нашего запроса мы добавили 2 новых параметра:

  • scroll - как долго на сервере держать результат запроса

  • limit - какими порциями возвращать результат запроса

Дальше, выполняем первый запрос с указанным телом на REST API, для простоты я использую консольную утилиту cURL:

curl -s -L -XPOST \ -H 'Content-Type: application/json' \ -H 'X-Access-Token: ciOiJIUzI1NiJ9.jEyM2UxNThjLWVkNzMtNDAwi'\ "https://pre.webitel.com/engine/api/v2/cdr/text" -d@webitel_scroll_request.json

Вместе с результатом, который не будет превышать заданного в limit значения, мы получим _scroll_id:

Теперь все последующие запросы мы выполняем уже с scrollId в теле запроса. Пример:

curl -s -L -XPOST \ -H 'Content-Type: application/json' \ -H 'X-Access-Token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6I9.IjKpitL05OLjUPeUQyd4E'\ "https://pre.webitel.com/engine/api/v2/cdr/text/scroll" -d ' { "scroll": "5m", "scrollId": 'МНОГО_БУКВ_ПОЛУЧЕННОГО_ИД' }'

Повторяем запрос, пока не заберем все данные с сервера.

Бонус

В качестве бонуса, подготовил небольшой bash скрипт, который с помощью cURL и jq поможет вам выкачать необходимые данные и сохранить в CSV файл:

Тело запроса должно находится в файле webitel_scroll_request.json в возле данного скрипта.

Удачи с запросами!

Related content

Агрегированные показатели по звонкам
Агрегированные показатели по звонкам
More like this
Использование REST API
Использование REST API
More like this
Функциональные возможности Webitel
Функциональные возможности Webitel
More like this
Функциональные возможности Webitel
Функциональные возможности Webitel
More like this
Первичная настройка системы
Первичная настройка системы
More like this