Skip to main content

REST API для CDR Asterisk — список звонков, фильтры, скачивание записей

Project description

asterisk-cdr-api

PyPI Python License: MIT

REST API для Asterisk CDR — список звонков с фильтрами, сортировкой и скачиванием записей.

Доступы к БД читаются автоматически из конфигов Asterisk: /etc/asterisk/cdr_adaptive_odbc.confres_odbc.conf/etc/odbc.ini


Быстрая установка (Debian/Ubuntu)

curl -fsSL https://raw.githubusercontent.com/it-healer/asterisk-cdr-api/main/scripts/install.sh | sudo bash

Скрипт сам:

  • Установит Python-зависимости
  • Создаст virtualenv в /opt/asterisk-cdr-api/
  • Сгенерирует случайный API ключ
  • Спросит IP и порт HTTP сервера (по умолчанию 0.0.0.0:8000) и сохранит их в systemd сервис
  • Зарегистрирует и запустит systemd сервис

После установки в консоли будет выведен URL и API ключ.

Неинтерактивная установка

Если запускаете через пайп (curl … | sudo bash), интерактивный ввод недоступен — передайте параметры через переменные окружения:

curl -fsSL https://raw.githubusercontent.com/it-healer/asterisk-cdr-api/main/scripts/install.sh \
  | sudo CDR_HOST=127.0.0.1 CDR_PORT=9000 bash

Без переменных будут использованы значения по умолчанию 0.0.0.0:8000.

Изменить IP/порт после установки:

sudo nano /etc/systemd/system/asterisk-cdr-api.service
# Измените строки:
#   Environment="CDR_HOST=0.0.0.0"
#   Environment="CDR_PORT=8000"
sudo systemctl daemon-reload && sudo systemctl restart asterisk-cdr-api

Установка вручную

# 1. Системные зависимости
sudo apt-get install python3-venv python3-pip -y

# 2. Виртуальное окружение
sudo mkdir -p /opt/asterisk-cdr-api
sudo python3 -m venv /opt/asterisk-cdr-api/venv

# 3. Установка пакета с PyPI
sudo /opt/asterisk-cdr-api/venv/bin/pip install asterisk-cdr-api

# 4. Запуск для проверки
sudo CDR_API_KEY="мой-ключ" /opt/asterisk-cdr-api/venv/bin/asterisk-cdr-api

Настройка systemd

Скопировать сервис-файл:

sudo cp debian/asterisk-cdr-api.service /etc/systemd/system/

Задать API ключ:

sudo nano /etc/systemd/system/asterisk-cdr-api.service
# Изменить строку:
# Environment="CDR_API_KEY=change-me-please"

Запустить:

sudo systemctl daemon-reload
sudo systemctl enable asterisk-cdr-api
sudo systemctl start  asterisk-cdr-api
sudo systemctl status asterisk-cdr-api

Логи:

journalctl -u asterisk-cdr-api -f

Переменные окружения

Переменная По умолчанию Описание
CDR_API_KEY change-me-please Секретный ключ API
CDR_HOST 0.0.0.0 Адрес для прослушивания
CDR_PORT 8000 Порт

API

Все запросы (кроме /health) требуют заголовок X-Api-Key.

Swagger UI

http://SERVER:8000/docs

Эндпоинты

Метод Путь Описание
GET /calls Список звонков с фильтрами
GET /calls/{id} Один звонок
GET /calls/{id}/download Скачать MP3
GET /stats Статистика
GET /config Текущая конфигурация
GET /health Проверка работы

Параметры /calls

Параметр Описание Пример
src Номер звонящего 613610
dst Номер назначения 7903
disposition Статус ANSWERED
date_from Дата от 2026-05-01
date_to Дата до 2026-05-20
has_recording Есть запись true
order_by Сортировка calldate, billsec
order_dir Направление asc, desc
limit Записей на стр. 50
offset Смещение 0

Примеры запросов

# Список отвеченных звонков за май
curl -H "X-Api-Key: мой-ключ" \
  "http://SERVER:8000/calls?disposition=ANSWERED&date_from=2026-05-01"

# Звонки с конкретного номера, с записями
curl -H "X-Api-Key: мой-ключ" \
  "http://SERVER:8000/calls?src=613610&has_recording=true"

# Скачать запись звонка с id=42
curl -H "X-Api-Key: мой-ключ" \
  "http://SERVER:8000/calls/42/download" -o call_42.mp3

# Статистика за неделю
curl -H "X-Api-Key: мой-ключ" \
  "http://SERVER:8000/stats?date_from=2026-05-13"

# Что прочиталось из конфигов
curl -H "X-Api-Key: мой-ключ" \
  "http://SERVER:8000/config"

Обновление на боевом сервере

После того как новая версия опубликована на PyPI:

curl -fsSL https://raw.githubusercontent.com/it-healer/asterisk-cdr-api/main/scripts/update.sh | sudo bash

Или вручную:

sudo /opt/asterisk-cdr-api/venv/bin/pip install --upgrade asterisk-cdr-api
sudo systemctl restart asterisk-cdr-api

Проверить установленную версию:

curl -s http://localhost:8000/health
# {"status":"ok","service":"Asterisk CDR API","version":"1.0.1"}

Удаление

sudo bash scripts/uninstall.sh

Или одной строкой:

curl -fsSL https://raw.githubusercontent.com/it-healer/asterisk-cdr-api/main/scripts/uninstall.sh | sudo bash

Выпуск новой версии (для разработчика)

Версия пакета — единственный источник истины в asterisk_cdr_api/__init__.py (__version__); pyproject.toml подтягивает её через dynamic.

Самый простой путь — скрипт scripts/bump.sh:

./scripts/bump.sh patch   # 1.0.0 → 1.0.1
./scripts/bump.sh minor   # 1.0.0 → 1.1.0
./scripts/bump.sh major   # 1.0.0 → 2.0.0
./scripts/bump.sh 1.2.3   # явная версия

Скрипт:

  1. Поднимает __version__.
  2. Делает git commit -m "release: X.Y.Z".
  3. Создаёт тег vX.Y.Z и пушит его.

GitHub Actions workflow .github/workflows/publish.yml подхватывает тег, собирает пакет и публикует его на PyPI через Trusted Publishing (без токенов).

Первоначальная настройка Trusted Publisher на PyPI: Account → Publishing → Add a new pending publisher

Поле Значение
PyPI Project Name asterisk-cdr-api
Owner it-healer
Repository name asterisk-cdr-api
Workflow name publish.yml
Environment name pypi

Локальная сборка пакета

python -m pip install --upgrade build
python -m build
# В каталоге dist/ появятся файлы:
#   asterisk_cdr_api-1.0.0-py3-none-any.whl
#   asterisk_cdr_api-1.0.0.tar.gz

Лицензия

MIT — см. LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

asterisk_cdr_api-1.0.3.tar.gz (16.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

asterisk_cdr_api-1.0.3-py3-none-any.whl (10.9 kB view details)

Uploaded Python 3

File details

Details for the file asterisk_cdr_api-1.0.3.tar.gz.

File metadata

  • Download URL: asterisk_cdr_api-1.0.3.tar.gz
  • Upload date:
  • Size: 16.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for asterisk_cdr_api-1.0.3.tar.gz
Algorithm Hash digest
SHA256 396825a6e314a669daedfbe82b8b5bc9bb2193afff9f877f83a04988561c40a0
MD5 05931423d9e1ed7b52524500bd08976d
BLAKE2b-256 77361b53663d1fc9b31c35be2890f29c97b3f4c884c30e9802df230ce80338d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for asterisk_cdr_api-1.0.3.tar.gz:

Publisher: publish.yml on it-healer/asterisk-cdr-api

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file asterisk_cdr_api-1.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for asterisk_cdr_api-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 a0319ae74f3a46ad0ef3f6d5c43b6a095ed975af93a136616545cc1730edd382
MD5 0a340b5e918ae13aac9a839a860ef03b
BLAKE2b-256 e1f9fba4b3198c3144bddd9ffca0214844279b8a6a36a40dc058e4129296d70d

See more details on using hashes here.

Provenance

The following attestation bundles were made for asterisk_cdr_api-1.0.3-py3-none-any.whl:

Publisher: publish.yml on it-healer/asterisk-cdr-api

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page