Vytvorte integráciu nástroja (API)
Integrácia nástroja je opakovane použiteľný HTTP koncový bod, ktorý môže agent vyvolať počas hovoru. ThunderPhone poskytnete popis nástroja vo formáte schémy JSON spolu s adresou URL koncového bodu; agent na základe konverzácie rozhodne, kedy ho vyvolať, a ThunderPhone zo svojich serverov vykoná odchádzajúcu požiadavku HTTP a vráti odpoveď agentovi.
Tento návod vás krok za krokom prevedie vytvorením nástroja na vyhľadávanie počasia.
Štruktúra nástroja
Dve časti:
- Schéma — definícia funkcie v štýle OpenAI
(
{type: "function", function: {name, description, parameters}}), ktorá LLM informuje o funkcii nástroja a argumentoch, ktoré prijíma. - Koncový bod — adresa URL, ktorú servery ThunderPhone vyvolajú, keď sa LLM rozhodne použiť nástroj. Požiadavka je JSON POST s argumentmi vybranými LLM v tele požiadavky.
1. Vyberte stratégiu ukladania
Pripojte jednorazový nástroj k poľu tools agenta. Je to jednoduché,
ale nie opakovane použiteľné.
Uložte nástroj ako opakovane použiteľnú integráciu a prepojte ju s viacerými agentmi. Odporúča sa pre všetko, čo používate viac než raz.
Tento návod používa postup s uloženou integráciou.
2. Vytvorte integráciu
curl -X POST https://api.thunderphone.com/v1/integrations \
-H "Authorization: Bearer sk_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"display_name": "Weather API",
"spec": {
"type": "function",
"function": {
"name": "get_weather",
"description": "Return the current weather for a zip code.",
"parameters": {
"type": "object",
"properties": {
"zip": { "type": "string", "description": "5-digit US ZIP code" }
},
"required": ["zip"]
}
}
},
"endpoint_url": "https://api.example.com/weather",
"endpoint_method": "GET",
"headers": [
{ "key": "X-Api-Key", "value": "your-provider-key" }
]
}'
Uložte vrátené id (UUID).
3. Otestujte koncový bod v sandboxe
Pred prepojením integrácie s agentom odošlite podpísanú požiadavku zo serverov ThunderPhone na potvrdenie pripojenia:
curl -X POST https://api.thunderphone.com/v1/integrations/test-request \
-H "Authorization: Bearer sk_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://api.example.com/weather?zip=94110",
"method": "GET",
"headers": { "X-Api-Key": "your-provider-key" }
}'
{
"ok": true,
"status": 200,
"elapsed_ms": 187,
"response_headers": { "content-type": "application/json" },
"response_preview": "{\"temperature_f\": 64, ...}"
}
Tento test tiež posilňuje ochrany ThunderPhone proti SSRF — požiadavky na
localhost alebo súkromné rozsahy IP vrátia 400 code=url_not_allowed.
4. Prepojte integráciu s agentom
Pri vytváraní alebo aktualizácii hlasového agenta ju pripojte prostredníctvom integration_ids:
curl -X PATCH https://api.thunderphone.com/v1/agents/12 \
-H "Authorization: Bearer sk_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"integration_ids": ["f9b5a1a4-..."]
}'
K jednému hlasovému agentovi môžete pripojiť viacero integrácií. Prompt hlasového agenta na ne môže
odkazovať podľa názvu — „použite get_weather, keď volajúci žiada
informácie o podmienkach“ — alebo ich môže implicitne rozpoznať z
popisov schémy.
5. Implementujte koncový bod
Keď hlasový agent vyvolá nástroj, ThunderPhone odošle na váš
endpoint_url podpísaný požiadavok POST:
POST /weather HTTP/1.1
Host: api.example.com
X-Api-Key: your-provider-key
X-ThunderPhone-Signature: <HMAC-SHA256 hex>
X-ThunderPhone-Call-ID: 987654321
Content-Type: application/json
{"zip": "94110"}
Váš server odpovie JSON-om, ktorý sa odošle späť do LLM:
{"temperature_f": 64, "condition": "Partly cloudy", "wind_mph": 8}
LLM spracuje túto odpoveď a volajúcemu ju zhrnie prirodzenou rečou.
6. Otestujte celý cyklus
Spustite reláciu s mikrofónom proti hlasovému agentovi a položte otázku, ktorú váš nástroj spracúva („Aké je počasie v 94110?“). Prepis hovoru zobrazuje celý cyklus:
{
"call_id": 987654321,
"transcripts": [
{ "role": "user",
"content": "What's the weather in 94110?" },
{ "role": "tool_call",
"content": "{\"tool_call\": \"get_weather\", \"arguments\": {\"zip\": \"94110\"}}" },
{ "role": "tool_response",
"content": "{\"tool_name\": \"get_weather\", \"response\": {\"temperature_f\": 64, \"condition\": \"Partly cloudy\"}}" },
{ "role": "agent",
"content": "It's 64 degrees and partly cloudy." }
]
}
Môžete ho získať prostredníctvom
GET /v1/calls/{call_id}/transcript;
nespracovaný tok udalostí (s časovaním jednotlivých položiek a posunmi zvuku) nájdete na
GET /v1/calls/{call_id}/history.
Bežné problémy
Agent nikdy nevyvolá nástroj
LLM rozhoduje na základe popisu nástroja. Ak otázka volajúceho
nezodpovedá popisu, model nástroj nevyvolá. Spresnite popis (pridajte bežné synonymá a
formulácie) alebo ho výslovne uveďte v prompte hlasového agenta („Keď
volajúci žiada informácie o počasí, použite get_weather.“).
Nástroj vracia príliš veľa údajov
Odpovede väčšie ako 6 kB sa v náhľade prepisu skrátia. Vráťte iba polia, ktoré LLM potrebuje — nie celý váš riadok.
Časové limity
Koncové body nástrojov majú predvolený časový limit 10 sekúnd. Ak potrebujete viac času,
spracujte to asynchrónne: vráťte {"status": "pending", "request_id": "..."}
a výsledok zobrazte prostredníctvom samostatného volania nástroja.
Verzionovanie
Každý PATCH integrácie vytvorí novú revíziu. Skontrolujte
GET /v1/integrations/{id}/versions,
aby ste zistili, kto čo zmenil. Ak pokazíte schému nástroja, môžete ju
manuálne vrátiť späť použitím PATCH so staršou snímkou.