Brug OpenAPI-kontrakten til at generere en integrationsklient. Det offentlige API, dashboardet og MCP-administrationsendpointet arbejder på de samme arbejdsområderessourcer og tilladelser.
| Funktion | Endpoint |
|---|---|
| Genbrugelige værktøjer | GET / POST /api/v1/voice/tools |
| Læs / opdater / slet et værktøj | GET / PATCH / DELETE /api/v1/voice/tools/{id} |
| Forhåndsvis eller test et værktøj | POST /api/v1/voice/tools/{id}/test |
| Bind værktøjer til en agent | PUT /api/v1/voice/agents/{id}/tools |
| Vidensbaser | GET / POST /api/v1/voice/knowledge-bases |
| Læs / opdater / slet en vidensbase | GET / PATCH / DELETE /api/v1/voice/knowledge-bases/{id} |
| Tilføj / vis dokumenter | POST / GET /api/v1/voice/knowledge-bases/{id}/documents |
| Læs / slet et dokument | GET / DELETE /api/v1/voice/knowledge-bases/{id}/documents/{doc_id} |
| Abonnementer på opkaldshændelser | GET / POST /api/v1/voice/webhooks |
| Læs / opdater / slet et abonnement | GET / PATCH / DELETE /api/v1/voice/webhooks/{id} |
| Send en signeret testhændelse | POST /api/v1/voice/webhooks/{id}/test |
| Find eksterne MCP-værktøjer | POST /api/v1/voice/mcp/discover |
| MCP-administrationsendpoint | /api/v1/voice/mcp |
Registrer et HTTP-værktøj, der forespørger 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 returnerer { "data": { "id": "TOOL_ID", ... } }. Bind dets definition til en agent med PUT /agents/AGENT_ID/tools og { "tool_ids": ["TOOL_ID"] }. Det erstatter hele værktøjslisten med øjebliksbilleder; bind igen, når et biblioteksværktøj ændres. Sletning af en definition i biblioteket beholder eksisterende øjebliksbilleder. Du kan også læse og erstatte indlejrede definitioner med agent-API'ets felt tools. Brug analysis_config og widget_config til at konfigurere analysen og widgetten via agent-API'et.
Et værktøj kan bruge GET, POST, PUT, PATCH eller DELETE. query og request_body accepterer indlejrede JSON-skabeloner som { "customer": { "id": "{{customer_id}}" } }. En hel pladsholder bevarer den oprindelige JSON-type. Pladsholdere i URL'en kodes og må kun stå efter en fast, offentlig HTTPS-vært. Uden request_body modtager værktøjer, der ikke er GET, { "arguments": {...}, "call": { "callId": "...", "agentId": "...", "toolCallId": "...", "idempotencyKey": "..." } }. response_path vælger et felt med punktnotation. Simple parameters accepteres stadig; input_schema understøtter desuden indlejrede objekter, arrays, opregninger og numeriske grænser. Eksterne skemareferencer og regulære udtryk accepteres ikke.
static_args: værdier, der sendes med hvert kald, uanset hvad modellen skriver, som et butiks-id; de udfylder også {{name}} i adressen og kroppen.extract: [{name, path}] beholder felter fra en funktions svar (data.id) til senere funktioners {{name}}, så et opslags customer_id kan gå ind i den ordre, der følger, uden at modellen gentager det. Felter fra et startopslag beholdes på samme måde.reject_when: op til 5 regler {on: caller|agent, pattern, negate}; så længe alle gælder for de seneste ord, køres funktionen ikke, og agenten får reject_message.model_says: ved hvert kald skriver modellen én sætning, der siges, mens funktionen kører, i stedet for det faste speak_before.Forbind en app under Integrationer → Webhooks og notifikationer → Forbundne apps, og brug derefter „Tilføj en færdig funktion” på agentens fane Viden og værktøjer; du behøver ikke noget eget endpoint:
check_availability (ledige tider på en dato) og book_appointment (booker den tid, opringeren valgte). Tider i Google Calendar følger den tidszone, de åbne dage, de timer og den aftalelængde, du angiver; Cal.com bruger begivenhedstypens egen tilgængelighed og en reserve-e-mailadresse, du angiver til, når opringeren ikke opgiver nogen.save_to_sheet, som tilføjer en række med de kolonner, du angiver, plus opkaldets ID og tid.notify_team, som sender en besked, agenten skriver, til en Slack-kanal (incoming webhook).EvaSays kontrolplan kører disse funktioner med den konto, du har forbundet; hverken workeren eller agentdefinitionen opbevarer appens legitimationsoplysninger. Når en agent læses via API'et, vises de som kind: "app" (med app, action, connection_id, app_config); send dem tilbage uændret, når du erstatter tools, for at beholde dem. Apps forbindes kun i dashboardet.
Sæt run_at_start: true på et af en agents værktøjer, så kaldes det, når hvert opkald begynder, før agenten hilser eller svarer. Parametre med navnene caller_number, called_number, direction, channel eller call_id udfyldes for det. De felter, det returnerer, udfylder {{variables}} i first_message, system_prompt og idle_messages (felter et niveau nede som {{customer.name}}), og hele svaret gives til agenten som baggrund. En hilsen med variabler venter op til 3 sekunder på svaret; alt, hvad der ikke findes, efterlades tomt. Ét værktøj pr. agent kan køre ved start.
Legitimationsoplysninger konfigureres i servermiljøet for dit arbejdsområde og din destination; bed support@evasay.com om at oprette en credential_ref. Læg ikke API-nøgler i agentdefinitioner, headers, prompter eller værktøjsparametre. Din adapter kan opbevare CRM-legitimationsoplysninger i sit eget miljø.
Forhåndsvis et værktøj, før du sender anmodninger til forretningssystemet:
{
"arguments": { "customer_id": "customer-123" },
"dry_run": true,
"mock_result": { "name": "Alex", "order_status": "shipped" }
}
En forhåndsvisning validerer parametrene og viser den afbildede anmodning; den kører ingen samtale og kontakter ikke forretningssystemet. Sæt dry_run=false for en reel kørsel. En reel skrivetest kræver også confirmed=true og idempotency_key (8–128 bogstaver, tal, punktummer, understregninger, kolon eller bindestreger). Testsvar indeholder ok, status, duration_ms og et afgrænset resultat. De returnerer ikke legitimationsoplysninger. Læse- og skrivetest kræver skrivetilladelse i arbejdsområdet.
Under et opkald bærer forretningsanmodninger en stabil Idempotency-Key. Dit forretningsendpoint skal respektere den. Identiske skrivninger inden for et opkald afdubleres, også operationer med ukendt udfald efter en timeout. En anden tilsigtet operation har brug for et selvstændigt forretningsargument, som operation_id. EvaSay genafspiller ikke skrivninger automatisk. Hændelser for værktøjskørsel indeholder status og varighed; samtaletestfunktionen er stadig en tekstsimulering, ikke en test af værktøjskørsel.
POST /mcp/discover accepterer { "url": "https://crm.example.com/mcp", "credential_ref": "crm" } og returnerer serverens værktøjer og skemaer. Registrer kun det valgte værktøj:
{
"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"]
}
}
Kun registrerede værktøjer bliver tilgængelige for agenten. Fjernforbindelser understøtter Streamable HTTP med JSON- eller SSE-svar på anmodninger, offentlige HTTPS-destinationer og forudkonfigurerede legitimationsoplysninger. Ældre SSE-endpoints, OAuth-forhandling, serverinitieret sampling/elicitation og binære vedhæftninger understøttes ikke. Opdagelse giver ikke automatisk adgang til alle serverens værktøjer. Fjernværktøjets skema skal være indlejret og bruge den understøttede delmængde af JSON Schema.