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 ключ
  • Зарегистрирует и запустит systemd сервис

После установки в консоли будет выведен URL и 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.1.tar.gz (15.7 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.1-py3-none-any.whl (10.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: asterisk_cdr_api-1.0.1.tar.gz
  • Upload date:
  • Size: 15.7 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.1.tar.gz
Algorithm Hash digest
SHA256 12ba371168048b17d9c8fcfa5c24e385f7874a240147bc302b84af1079e0e75a
MD5 887284fb8236e8968434bda450ae5070
BLAKE2b-256 d69b26faecb037499ae3c9d07e22acade8102436603cf09e6ab55119c878d27c

See more details on using hashes here.

Provenance

The following attestation bundles were made for asterisk_cdr_api-1.0.1.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.1-py3-none-any.whl.

File metadata

File hashes

Hashes for asterisk_cdr_api-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a3a810d10842de6a3419142491973852471f4c6b32c187b659330e2cd9e0201b
MD5 5c46adee5abcaf099666bb3e5d234ee6
BLAKE2b-256 c94f930f506d051605f8afed1b3f2e5179a8f0e6d3178ea03d9fe3bf5152a4f3

See more details on using hashes here.

Provenance

The following attestation bundles were made for asterisk_cdr_api-1.0.1-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