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 .
  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.
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

Авторизация

Тип: 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)

Нюансы

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


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