ThunderPhone 2.0 уже доступен.Самостоятельный запуск — от 2 ¢/мин.Читать анонс

Getting Started

ThunderPhone CLI

Входите в систему, управляйте голосовыми агентами и звонками, настраивайте клиенты MCP и создавайте каркасы проектов из терминала.

Для CLI требуется Node.js 18.18 или новее. Запустите его через npx или установите глобально:

npm install -g thunderphone
thunderphone --help

Войдите в систему

npx thunderphone login
thunderphone whoami --json

Вход выводит код подтверждения, открывает браузер и ожидает авторизации. На машине без графического интерфейса используйте --no-browser и откройте выведенный URL в другом месте. Для входа с устройства требуется поддержка OAuth device flow в API. Ключ API организации в THUNDERPHONE_API_KEY также может аутентифицировать команды и имеет приоритет над сохранёнными учётными данными для входа.

Учётные данные хранятся по профилям в ~/.config/thunderphone/credentials.json с режимом файла 0600. XDG_CONFIG_HOME и THUNDERPHONE_CONFIG_DIR переопределяют каталог. Токены доступа обновляются автоматически, а ротируемые токены обновления сохраняются атомарно. Токены никогда не выводятся командой входа.

thunderphone login --profile work
thunderphone agents list --profile work --json
thunderphone logout --profile work

THUNDERPHONE_PROFILE задаёт профиль по умолчанию. Выход удаляет локальные учётные данные; он не отзывает серверное разрешение. API по умолчанию — https://api.thunderphone.com. Используйте --api-base-url или THUNDERPHONE_API_BASE_URL для другого API. Токен профиля нельзя отправить на другой настроенный URL API; войдите на этот URL, используя отдельный профиль.

Команды

Каждая команда поддерживает --json. Данные при успешном выполнении выводятся в stdout; ошибки — в stderr с ненулевым кодом выхода. Без --json выводится компактная таблица или список полей. JSON сохраняет структуру ответа API, при этом поля с учётными данными скрываются. Обслуживание MCP резервирует stdout для протокола MCP.

КомандаНазначение
login [--no-browser] [--scope "scopes"]Авторизоваться с помощью кода устройства
logout, whoamiУдалить локальные учётные данные; вывести список доступных организаций
agents list, agents get IDПолучить агентов
agents create --file agent.jsonСоздать агента
agents update ID --file agent.jsonСохранить черновик агента
agents deploy ID, agents delete IDРазвернуть черновик; удалить агента
numbers listПолучить номера телефонов
numbers provision --country US --area-code 415Выделить входящий номер США
numbers assign NUMBER_ID --agent IDНазначить входящего агента
sms send TO --from FROM --body TEXT --idempotency-key KEYОтправить SMS через номер оператора, подключённого клиентом, с безопасным повторным выполнением
sms list [--limit N], sms get UUIDВывести список или проверить записи SMS
call TO --agent ID --from FROM [--wait]Выполнить исходящий звонок; при необходимости дождаться его расшифровки
calls list [--limit N] [--agent ID]Вывести список звонков (лимит 1–200)
calls get ID, calls transcript IDПолучить один звонок или его расшифровку
test run AGENT_ID [--scenario ID] --consent-to-chargeЗапустить платные сохранённые сценарии через веб-канал
test status RUN_ID [--agent ID]Проверить пакет, включая сведения о сценариях при указании агента
import VENDOR export.jsonПодготовить импорт JSON от поставщика для проверки
imports get UUID, imports commit UUIDПроверить импорт; подтвердить выбранных агентов после проверки
mcp setup, mcp serveНастроить клиент; запустить мост stdio
init [directory]Создать каркас проекта

Для исходящих звонков требуется номер с поддержкой исходящих вызовов. THUNDERPHONE_FROM_NUMBER может передавать значение для --from. Клиентские номера VoIP продолжают поддерживать исходящие звонки. Номера, выделенные ThunderPhone, изначально поддерживают только входящие вызовы; администратор организации может запросить исходящие звонки на странице «Номера телефонов», где каждый запрос проверяется вручную. По умолчанию для --wait установлен тайм-аут в один час; используйте --timeout SECONDS, чтобы изменить его. Тайм-аут прекращает ожидание, не завершая звонок.

Для SMS также требуется номер с поддержкой SMS в вашей подключённой учётной записи Twilio или Telnyx. SMS никогда не отправляются с номера, принадлежащего ThunderPhone. Повторно используйте ключ идемпотентности только при повторной попытке отправить сообщение с точно таким же отправителем, получателем и текстом.

Импорт поддерживает vapi, retell, elevenlabs и bland. Второй аргумент — это путь к экспорту JSON поставщика, а не удалённый идентификатор поставщика. API асинхронно подготавливает сопоставление; проверьте его с помощью imports get UUID и подтверждайте только после готовности, а также после проверки сопоставленных полей и предупреждений. См. импорт агентов.

Настройка MCP

thunderphone mcp setup --client cursor --api-key-env THUNDERPHONE_API_KEY
thunderphone mcp setup --client codex --scope user --api-key-env THUNDERPHONE_API_KEY
thunderphone mcp setup --client claude-desktop --scope user

Клиенты: claude-code, codex, cursor, vscode, gemini, claude-desktop и windsurf. По умолчанию используется область проекта. Для Desktop и Windsurf требуется область пользователя. Не указывайте --client, чтобы определить единственный клиент в проекте; при неоднозначном определении CLI запрашивает выбор в интерактивном режиме или завершает работу с инструкциями в неинтерактивном сеансе. Настройка выводит путь к созданному файлу и сохраняет несвязанные серверы. Существующий JSON должен быть корректным строгим JSON; значения TOML для Codex сохраняются, но комментарии могут быть переформатированы.

Настройка предпочитает прямой удалённый HTTP. При использовании --api-key-env она записывает ссылку на переменную, но не сам ключ. Без этого параметра прямой HTTP использует поддержку OAuth клиента; файл учётных данных CLI не используется. Чтобы повторно использовать учётные данные thunderphone login в любом клиенте с поддержкой stdio, используйте:

{
  "mcpServers": {
    "thunderphone": {
      "command": "npx",
      "args": ["-y", "@thunderphone/mcp"]
    }
  }
}

Обёртка проверяет THUNDERPHONE_API_KEY, затем текущий профиль CLI (обновляя его при необходимости), после чего передаёт OAuth в mcp-remote. THUNDERPHONE_MCP_URL переопределяет конечную точку. Телеметрия не отправляется. Отдельная настройка также доступна через npx -y @thunderphone/mcp setup --client cursor или thunderphone-mcp setup после глобальной установки @thunderphone/mcp.

Создание проекта

npx create-thunderphone-agent my-receptionist
npx create-thunderphone-agent my-outbound --template python --agent-type outbound
# Equivalent:
thunderphone init my-receptionist --template node --agent-type receptionist

Доступные шаблоны: node и python; типы агентов: receptionist, outbound и custom. Агент по умолчанию — англо-испанский администратор стоматологической клиники с явно заданными демонстрационными данными. Проекты включают agent.json, скрипты развёртывания, конфигурации MCP для Claude Code, Cursor и VS Code, инструкции для агента, .env.example и README. Создание каркаса работает офлайн и не перезаписывает непустой каталог.

Перед развёртыванием отредактируйте сведения о компании. Экспортируйте API-ключ, подключённый номер звонящего и получателя тестового звонка, как указано в созданном README. npm run deploy или python deploy.py создаёт или обновляет агента, развёртывает его черновик и выполняет платный тестовый звонок. Скрипты используют аутентификацию по API-ключу; CLI и обёртка MCP для stdio также поддерживают вход с устройства. Для скриптов Python требуется Python 3.9 или новее.