# Voximplant Management API: Позвонить клиенту из своей системы

Сценарий из mcp-everything. Актуально на 2026-10-24.

Звонок по кнопке в CRM или по событию: напоминание о записи, подтверждение заказа. Логика звонка живёт в JavaScript-сценарии Voximplant, API его запускает.

1. Создай сервисный аккаунт в панели управления (Settings → Service accounts) и скачай JSON с account_id, key_id и private_key.
2. На каждый запрос подписывай короткоживущий JWT алгоритмом RS256: iss = account_id, iat и exp (около минуты), в заголовке токена kid = key_id. Передавай его в заголовке Authorization: Bearer <token>.
3. Проверь доступ: GetAccountInfo — вернёт account_id и баланс.
4. Запусти сценарий: StartScenarios с rule_id (правило с привязанным сценарием) и script_custom_data — например, номером клиента; в сценарии он доступен через VoxEngine.customData().
5. Все методы — POST на https://api.voximplant.com/platform_api с параметром cmd и остальными полями формы. Ошибка приходит в объекте error с code и msg.

```python
import json, time, jwt, requests  # pip install pyjwt cryptography requests

creds = json.load(open("credentials.json"))

def vox(cmd: str, **params) -> dict:
    now = int(time.time())
    token = jwt.encode({"iss": creds["account_id"], "iat": now, "exp": now + 60},
                       creds["private_key"], algorithm="RS256", headers={"kid": creds["key_id"]})
    r = requests.post("https://api.voximplant.com/platform_api",
                      headers={"Authorization": f"Bearer {token}"}, data={"cmd": cmd, **params}).json()
    if "error" in r:
        raise RuntimeError(r["error"])
    return r

print(vox("StartScenarios", rule_id=123456, script_custom_data=json.dumps({"phone": "79991234567", "order": "1042"})))
```

## Базовые URL

- Боевой: `https://api.voximplant.com`

## Авторизация

Тип: Bearer-токен

Сервисный аккаунт: JSON-файл с ключом (`account_id`, `key_id`, `private_key`) создаётся в панели управления (`https://manage.voximplant.com/settings/service_accounts`) или методом `CreateKey`. Клиент подписывает JWT алгоритмом RS256 (`iss` — ID аккаунта, `iat`, `exp`; в заголовке токена `kid` — `key_id`) и передаёт его в заголовке `Authorization: Bearer <token>`. Токен короткоживущий (в библиотеках — около минуты), его генерируют на каждый запрос.

## Методы сценария

### POST /platform_api — GetAccountInfo: информация об аккаунте

В ответе — `account_id`, `account_name`, `account_email` и др.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `cmd` | body | string | да | GetAccountInfo |
| `return_live_balance` | body | boolean | нет | Вернуть актуальный баланс |

### POST /platform_api — StartScenarios: запуск сценария

Запускает JavaScript-сценарий в новой медиасессии по правилу маршрутизации. В ответе: `result`, `media_session_access_url`, `media_session_access_secure_url` (HTTP-запрос на них вызывает событие `AppEvents.HttpRequest` в сценарии), `call_session_history_id`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `cmd` | body | string | да | StartScenarios |
| `rule_id` | body | integer | да | ID правила (обязателен, если нет rule_name); к правилу должен быть привязан сценарий |
| `rule_name` | body | string | нет | Имя правила вместо rule_id |
| `user_id` | body | integer | нет | Запуск от имени пользователя (или user_name) |
| `user_name` | body | string | нет | Имя пользователя |
| `application_id` | body | integer | нет | ID приложения (или application_name) |
| `application_name` | body | string | нет | Имя приложения |
| `script_custom_data` | body | string | нет | Данные, доступные в сценарии через VoxEngine.customData() |
| `reference_ip` | body | string | нет | IP для выбора ближайшего сервера |
| `server_location` | body | string | нет | Расположение сервера (приоритетнее reference_ip) |

## Нюансы

- Параметры передаются формой (`multipart/form-data`); списки — строкой через `;`.
- Даты — `YYYY-MM-DD HH:mm:ss`.
- При ошибке в ответе объект `error` с полями `code` и `msg`.
- Некоторые методы (отчёты, детали списков в CSV) возвращают файл `application/octet-stream`.
- Всего в API около 400 методов: правила и сценарии, очереди ACD и SmartQueue, ключи и роли, KV-хранилище, SIP, push-учётки, дочерние аккаунты, счета.

## Другие сценарии

- [Автообзвон по списку номеров](https://mcp-everything.ru/integrations/voximplant/scenarios/avtoobzvon-po-spisku-nomerov.md)
- [Отправить SMS с номера Voximplant](https://mcp-everything.ru/integrations/voximplant/scenarios/otpravit-sms-s-nomera-voximplant.md)
- [Выгрузить историю звонков](https://mcp-everything.ru/integrations/voximplant/scenarios/vygruzit-istoriyu-zvonkov.md)
- [Создать приложение и пользователя для звонков из браузера или приложения](https://mcp-everything.ru/integrations/voximplant/scenarios/sozdat-prilozhenie-i-polzovatelya-dlya.md)

---

Если этого недостаточно — официальная документация: https://voximplant.com/docs/references/httpapi
Вся интеграция одним документом: https://mcp-everything.ru/integrations/voximplant.md
