Använd OpenAPI-kontraktet för att generera en integrationsklient. Det publika API:et, panelen och MCP-hanteringsendpointen arbetar på samma arbetsyteresurser och behörigheter.
| Förmåga | Endpoint |
|---|---|
| Återanvändbara verktyg | GET / POST /api/v1/voice/tools |
| Läsa / uppdatera / ta bort ett verktyg | GET / PATCH / DELETE /api/v1/voice/tools/{id} |
| Förhandsgranska eller testa ett verktyg | POST /api/v1/voice/tools/{id}/test |
| Koppla verktyg till en agent | PUT /api/v1/voice/agents/{id}/tools |
| Kunskapsbaser | GET / POST /api/v1/voice/knowledge-bases |
| Läsa / uppdatera / ta bort en kunskapsbas | GET / PATCH / DELETE /api/v1/voice/knowledge-bases/{id} |
| Lägga till / lista dokument | POST / GET /api/v1/voice/knowledge-bases/{id}/documents |
| Läsa / ta bort ett dokument | GET / DELETE /api/v1/voice/knowledge-bases/{id}/documents/{doc_id} |
| Prenumerationer på samtalshändelser | GET / POST /api/v1/voice/webhooks |
| Läsa / uppdatera / ta bort en prenumeration | GET / PATCH / DELETE /api/v1/voice/webhooks/{id} |
| Skicka en signerad testhändelse | POST /api/v1/voice/webhooks/{id}/test |
| Upptäcka fjärr-MCP-verktyg | POST /api/v1/voice/mcp/discover |
| MCP-hanteringsendpoint | /api/v1/voice/mcp |
Registrera ett HTTP-verktyg som frågar din CRM-adapter:
{
"name": "lookup_customer",
"description": "Find a customer after confirming their customer ID.",
"kind": "http",
"url": "https://crm.example.com/customers/{{customer_id}}",
"method": "GET",
"read_only": true,
"credential_ref": "crm",
"input_schema": {
"type": "object",
"properties": { "customer_id": { "type": "string" } },
"required": ["customer_id"],
"additionalProperties": false
},
"response_path": "data"
}
POST /tools returnerar { "data": { "id": "TOOL_ID", ... } }. Koppla dess definition till en agent med PUT /agents/AGENT_ID/tools och { "tool_ids": ["TOOL_ID"] }. Det ersätter hela verktygslistan med ögonblicksbilder; koppla om när ett bibliotekverktyg ändras. Att ta bort en definition i biblioteket behåller befintliga ögonblicksbilder. Du kan också läsa och ersätta inbäddade definitioner med agent-API:ets fält tools. Använd analysis_config och widget_config för att konfigurera analys och widget via agent-API:et.
Ett verktyg kan använda GET, POST, PUT, PATCH eller DELETE. query och request_body accepterar nästlade JSON-mallar som { "customer": { "id": "{{customer_id}}" } }. En hel platshållare behåller den ursprungliga JSON-typen. Platshållare i URL:en kodas och får bara stå efter en fast, publik HTTPS-värd. Utan request_body får verktyg som inte är GET { "arguments": {...}, "call": { "callId": "...", "agentId": "...", "toolCallId": "...", "idempotencyKey": "..." } }. response_path väljer ett fält med punktnotation. Enkla parameters accepteras fortfarande; input_schema stöder dessutom nästlade objekt, matriser, uppräkningar och numeriska gränser. Externa schemareferenser och reguljära uttryck accepteras inte.
static_args: värden som skickas med varje anrop oavsett vad modellen skriver, som ett butiks-id; de fyller också {{name}} i adressen och kroppen.extract: [{name, path}] behåller fält ur en funktions svar (data.id) till senare funktioners {{name}}, så att ett uppslags customer_id kan gå in i den beställning som följer utan att modellen upprepar det. Fält från ett startuppslag behålls på samma sätt.reject_when: upp till 5 regler {on: caller|agent, pattern, negate}; så länge alla gäller för de senaste orden körs inte funktionen och agenten får reject_message.model_says: vid varje anrop skriver modellen en mening som sägs medan funktionen körs, i stället för det fasta speak_before.Anslut en app under Integrationer → Webhooks och aviseringar → Anslutna appar och använd sedan „Lägg till en färdig funktion” på agentens flik Kunskap och verktyg; du behöver ingen egen endpoint:
check_availability (lediga tider ett visst datum) och book_appointment (bokar den tid uppringaren valde). Tider i Google Calendar följer den tidszon, de öppna dagar, de timmar och den mötestid du anger; Cal.com använder händelsetypens egen tillgänglighet och en reservadress för e-post som du anger för när uppringaren inte uppger någon.save_to_sheet, som lägger till en rad med de kolumner du listar, plus samtalets ID och tid.notify_team, som postar ett meddelande som agenten skriver i en Slack-kanal (incoming webhook).EvaSays kontrollplan kör dessa funktioner med det konto du anslöt; varken workern eller agentdefinitionen håller appens inloggningsuppgifter. När en agent läses via API:et visas de som kind: "app" (med app, action, connection_id, app_config); skicka tillbaka dem oförändrade när du ersätter tools för att behålla dem. Appar ansluts bara i panelen.
Sätt run_at_start: true på ett av en agents verktyg så anropas det när varje samtal börjar, innan agenten hälsar eller svarar. Parametrar som heter caller_number, called_number, direction, channel eller call_id fylls i åt det. De fält det returnerar fyller {{variables}} i first_message, system_prompt och idle_messages (fält en nivå ner som {{customer.name}}), och hela svaret ges till agenten som bakgrund. En hälsning med variabler väntar upp till 3 sekunder på svaret; allt som inte hittas lämnas tomt. Ett verktyg per agent kan köras vid start.
Inloggningsuppgifter konfigureras i servermiljön för din arbetsyta och ditt mål; be support@evasay.com att tillhandahålla en credential_ref. Lägg inte API-nycklar i agentdefinitioner, headers, prompter eller verktygsparametrar. Din adapter kan hålla CRM-inloggningsuppgifter i sin egen miljö.
Förhandsgranska ett verktyg innan du gör anrop till affärssystemet:
{
"arguments": { "customer_id": "customer-123" },
"dry_run": true,
"mock_result": { "name": "Alex", "order_status": "shipped" }
}
En förhandsgranskning validerar parametrarna och visar det mappade anropet; den kör inget samtal och kontaktar inte affärssystemet. Sätt dry_run=false för en verklig körning. Ett verkligt skrivtest kräver också confirmed=true och idempotency_key (8–128 bokstäver, siffror, punkter, understreck, kolon eller bindestreck). Testsvar innehåller ok, status, duration_ms och ett begränsat resultat. De returnerar inga inloggningsuppgifter. Läs- och skrivtest kräver skrivbehörighet i arbetsytan.
Under ett samtal bär affärsanrop en stabil Idempotency-Key. Din affärsendpoint måste respektera den. Identiska skrivningar inom ett samtal avdupliceras, även operationer med okänt utfall efter en timeout. En annan avsiktlig operation behöver ett eget affärsargument, som operation_id. EvaSay spelar inte upp skrivningar automatiskt igen. Händelser för verktygskörning innehåller status och längd; samtalstestfunktionen förblir en textsimulering, inte ett test av verktygskörning.
POST /mcp/discover accepterar { "url": "https://crm.example.com/mcp", "credential_ref": "crm" } och returnerar serverns verktyg och scheman. Registrera bara det valda verktyget:
{
"name": "lookup_customer",
"description": "Find a CRM customer by confirmed ID.",
"kind": "mcp",
"url": "https://crm.example.com/mcp",
"mcp_tool": "get_customer",
"credential_ref": "crm",
"read_only": true,
"input_schema": {
"type": "object",
"properties": { "customer_id": { "type": "string" } },
"required": ["customer_id"]
}
}
Bara registrerade verktyg blir tillgängliga för agenten. Fjärranslutningar stöder Streamable HTTP med JSON- eller SSE-svar på anrop, publika HTTPS-mål och förkonfigurerade inloggningsuppgifter. Äldre SSE-endpoints, OAuth-förhandling, serverinitierad sampling/elicitation och binära bilagor stöds inte. Upptäckt ger inte automatiskt åtkomst till alla serverns verktyg. Fjärrverktygets schema måste vara inbäddat och använda den stödda delmängden av JSON Schema.