Сценарий из mcp-everything. Актуально на 2026-10-24.
Звонок по кнопке в CRM или по событию: напоминание о записи, подтверждение заказа. Логика звонка живёт в JavaScript-сценарии Voximplant, API его запускает.
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"})))
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>. Токен короткоживущий (в библиотеках — около минуты), его генерируют на каждый запрос.
В ответе — account_id, account_name, account_email и др.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
cmd |
body | string | да | GetAccountInfo |
return_live_balance |
body | boolean | нет | Вернуть актуальный баланс |
Запускает 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.application/octet-stream.Если этого недостаточно — официальная документация: https://voximplant.com/docs/references/httpapi Вся интеграция одним документом: https://mcp-everything.ru/integrations/voximplant.md