ThunderPhone 2.0 jest już dostępny.Uruchom samodzielnie, od 2¢/min.Przeczytaj komunikat

Getting Started

ThunderPhone CLI

Zaloguj się, zarządzaj agentami głosowymi i połączeniami, konfiguruj klientów MCP oraz twórz szkielety projektów z terminala.

CLI wymaga Node.js 18.18 lub nowszego. Uruchom je za pomocą npx albo zainstaluj globalnie:

npm install -g thunderphone
thunderphone --help

Zaloguj się

npx thunderphone login
thunderphone whoami --json

Logowanie wyświetla kod weryfikacyjny, otwiera przeglądarkę i czeka na autoryzację. Na komputerze bez interfejsu graficznego użyj --no-browser i otwórz wyświetlony adres URL w innym miejscu. Logowanie urządzenia wymaga wdrożenia przepływu OAuth dla urządzeń przez API. Klucz API organizacji w THUNDERPHONE_API_KEY może również uwierzytelniać polecenia i ma pierwszeństwo przed zapisanymi poświadczeniami logowania.

Poświadczenia są przechowywane według profilu w ~/.config/thunderphone/credentials.json z trybem pliku 0600. XDG_CONFIG_HOME i THUNDERPHONE_CONFIG_DIR zastępują katalog. Tokeny dostępu są odświeżane automatycznie, a rotacyjne tokeny odświeżania są zapisywane atomowo. Tokeny nigdy nie są wyświetlane podczas logowania.

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

THUNDERPHONE_PROFILE ustawia domyślny profil. Wylogowanie usuwa lokalne poświadczenia; nie unieważnia uprawnienia na serwerze. Domyślne API to https://api.thunderphone.com. Użyj --api-base-url lub THUNDERPHONE_API_BASE_URL dla innego API. Token profilu nie może zostać wysłany do innego skonfigurowanego adresu URL API; zaloguj się do tego adresu URL przy użyciu osobnego profilu.

Polecenia

Każde polecenie obsługuje --json. Pomyślne dane trafiają do stdout; błędy trafiają do stderr z niezerowym kodem zakończenia. Bez --json dane wyjściowe mają postać zwięzłej tabeli lub listy pól. JSON zachowuje strukturę odpowiedzi API, z zamaskowanymi polami poświadczeń. Obsługa MCP rezerwuje stdout dla protokołu MCP.

PolecenieCel
login [--no-browser] [--scope "scopes"]Autoryzuj za pomocą kodu urządzenia
logout, whoamiUsuń lokalne poświadczenia; wyświetl dostępne organizacje
agents list, agents get IDOdczytaj agentów
agents create --file agent.jsonUtwórz agenta
agents update ID --file agent.jsonZapisz wersję roboczą agenta
agents deploy ID, agents delete IDWdróż wersję roboczą; usuń agenta
numbers listOdczytaj numery telefonów
numbers provision --country US --area-code 415Udostępnij amerykański numer przychodzący
numbers assign NUMBER_ID --agent IDPrzypisz agenta do połączeń przychodzących
sms send TO --from FROM --body TEXT --idempotency-key KEYWyślij SMS przez numer operatora podłączony przez klienta z bezpiecznym ponowieniem
sms list [--limit N], sms get UUIDWyświetl lub sprawdź rekordy SMS
call TO --agent ID --from FROM [--wait]Wykonaj połączenie wychodzące; opcjonalnie czekaj na jego transkrypcję
calls list [--limit N] [--agent ID]Wyświetl połączenia (limit 1–200)
calls get ID, calls transcript IDOdczytaj jedno połączenie lub jego transkrypcję
test run AGENT_ID [--scenario ID] --consent-to-chargeUruchom płatne zapisane scenariusze za pomocą kanału internetowego
test status RUN_ID [--agent ID]Sprawdź partię wraz ze szczegółami scenariusza, gdy podano agenta
import VENDOR export.jsonPrzygotuj import JSON dostawcy do sprawdzenia
imports get UUID, imports commit UUIDSprawdź import; zatwierdź wybranych agentów po sprawdzeniu
mcp setup, mcp serveSkonfiguruj klienta; uruchom most stdio
init [directory]Utwórz szkielet projektu

Połączenia wychodzące wymagają numeru z włączonymi połączeniami wychodzącymi. THUNDERPHONE_FROM_NUMBER może dostarczyć wartość dla --from. Numery VoIP klientów nadal obsługują połączenia wychodzące. Numery udostępnione przez ThunderPhone początkowo obsługują tylko połączenia przychodzące; administrator organizacji może poprosić o połączenia wychodzące na stronie Numery telefonów, gdzie każdy wniosek jest sprawdzany ręcznie. Domyślny limit czasu dla --wait wynosi godzinę; ustaw --timeout SECONDS, aby go zmienić. Przekroczenie limitu czasu przestaje czekać bez kończenia połączenia.

SMS wymaga również numeru obsługującego SMS na połączonym koncie Twilio lub Telnyx. Nigdy nie jest wysyłany z numeru należącego do ThunderPhone. Używaj ponownie klucza idempotencji wyłącznie podczas ponawiania dokładnie tego samego nadawcy, odbiorcy i treści.

Importy obsługują vapi, retell, elevenlabs i bland. Drugi argument to ścieżka do eksportu JSON dostawcy, a nie zdalny identyfikator dostawcy. API przygotowuje mapowanie asynchronicznie; sprawdź je za pomocą imports get UUID i zatwierdź dopiero, gdy będzie gotowe oraz po sprawdzeniu zmapowanych pól i ostrzeżeń. Zobacz importy agentów.

Konfiguracja 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

Klienci: claude-code, codex, cursor, vscode, gemini, claude-desktop i windsurf. Zakres projektu jest domyślny. Desktop i Windsurf wymagają zakresu użytkownika. Pomiń --client, aby wykryć pojedynczego klienta w projekcie; niejednoznaczne wykrycie wyświetla interaktywny monit lub kończy się niepowodzeniem z instrukcjami w sesji nieinteraktywnej. Konfiguracja wyświetla zapisany plik i zachowuje niepowiązane serwery. Istniejący JSON musi być prawidłowym ścisłym JSON-em; wartości TOML dla Codex są zachowywane, ale komentarze mogą zostać przeformatowane.

Konfiguracja preferuje bezpośrednie zdalne HTTP. Przy użyciu --api-key-env zapisuje odwołanie do zmiennej, nigdy klucz. Bez tej opcji bezpośrednie HTTP korzysta z obsługi OAuth klienta; nie używa pliku poświadczeń CLI. Aby ponownie wykorzystać poświadczenia thunderphone login w dowolnym kliencie obsługującym stdio, użyj:

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

Wrapper sprawdza THUNDERPHONE_API_KEY, następnie bieżący profil CLI (odświeżając go w razie potrzeby), a następnie przekazuje OAuth do mcp-remote. THUNDERPHONE_MCP_URL zastępuje punkt końcowy. Nie wysyła telemetrii. Samodzielna konfiguracja jest również dostępna przez npx -y @thunderphone/mcp setup --client cursor lub thunderphone-mcp setup po globalnej instalacji @thunderphone/mcp.

Utwórz projekt

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

Szablony to node i python; typy agentów to receptionist, outbound i custom. Domyślny agent to angielsko-hiszpańska recepcjonistka stomatologiczna z wyraźnie określonymi faktami demonstracyjnymi. Projekty zawierają agent.json, skrypty wdrażania, konfiguracje MCP dla Claude Code, Cursor i VS Code, instrukcje agenta, .env.example oraz README. Tworzenie szkieletu działa offline i nie pozwala nadpisać niepustego katalogu.

Przed wdrożeniem edytuj informacje o firmie. Wyeksportuj klucz API, podłączony numer rozmówcy i odbiorcę połączenia testowego zgodnie z dokumentacją w wygenerowanym README. npm run deploy lub python deploy.py tworzy lub aktualizuje agenta, wdraża jego wersję roboczą i wykonuje rozliczane połączenie testowe. Skrypty używają uwierzytelniania kluczem API; CLI i wrapper MCP stdio obsługują również logowanie urządzenia. Skrypty Python wymagają Python 3.9 lub nowszego.