REST API для CDR Asterisk — список звонков, фильтры, скачивание записей
Project description
asterisk-cdr-api
REST API для Asterisk CDR — список звонков с фильтрами, сортировкой и скачиванием записей.
Доступы к БД читаются автоматически из конфигов Asterisk:
/etc/asterisk/cdr_adaptive_odbc.conf → res_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"
Удаление
sudo bash scripts/uninstall.sh
Или одной строкой:
curl -fsSL https://raw.githubusercontent.com/it-healer/asterisk-cdr-api/main/scripts/uninstall.sh | sudo bash
Публикация новой версии на PyPI
-
Обновите
versionвpyproject.tomlиasterisk_cdr_api/__init__.py. -
Создайте git-тег и пушните:
git tag v1.0.1 git push origin v1.0.1
-
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file asterisk_cdr_api-1.0.0.tar.gz.
File metadata
- Download URL: asterisk_cdr_api-1.0.0.tar.gz
- Upload date:
- Size: 10.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f63f552d410d2a8bf9d4b8fcd1317575a9aea09a3f7e9e19639c8eb3fafaf2df
|
|
| MD5 |
094165e0f73e8c5cf76d5017db28300f
|
|
| BLAKE2b-256 |
0a031740dc2463b913a4e83a43bddcc108d7551898e4f3913ce11175d4861b9b
|
Provenance
The following attestation bundles were made for asterisk_cdr_api-1.0.0.tar.gz:
Publisher:
publish.yml on it-healer/asterisk-cdr-api
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
asterisk_cdr_api-1.0.0.tar.gz -
Subject digest:
f63f552d410d2a8bf9d4b8fcd1317575a9aea09a3f7e9e19639c8eb3fafaf2df - Sigstore transparency entry: 1580262875
- Sigstore integration time:
-
Permalink:
it-healer/asterisk-cdr-api@5f23179d4b4ef66bbdbf47d0c007c2304876b842 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/it-healer
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@5f23179d4b4ef66bbdbf47d0c007c2304876b842 -
Trigger Event:
push
-
Statement type:
File details
Details for the file asterisk_cdr_api-1.0.0-py3-none-any.whl.
File metadata
- Download URL: asterisk_cdr_api-1.0.0-py3-none-any.whl
- Upload date:
- Size: 9.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8103c2cc4485157c06a0199a6bdaaec6977e04b32f322ce193d372d14d6a6996
|
|
| MD5 |
dcc4bed1312d3d3ae097dfd437e75001
|
|
| BLAKE2b-256 |
4bbbef131f43bda7f1916b251f4e96a88db016ac1aa43c1bffb729e182ce3ba0
|
Provenance
The following attestation bundles were made for asterisk_cdr_api-1.0.0-py3-none-any.whl:
Publisher:
publish.yml on it-healer/asterisk-cdr-api
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
asterisk_cdr_api-1.0.0-py3-none-any.whl -
Subject digest:
8103c2cc4485157c06a0199a6bdaaec6977e04b32f322ce193d372d14d6a6996 - Sigstore transparency entry: 1580263009
- Sigstore integration time:
-
Permalink:
it-healer/asterisk-cdr-api@5f23179d4b4ef66bbdbf47d0c007c2304876b842 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/it-healer
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@5f23179d4b4ef66bbdbf47d0c007c2304876b842 -
Trigger Event:
push
-
Statement type: