Bruk OpenAPI-kontrakten til å generere en integrasjonsklient. Det offentlige API-et, panelet og MCP-administrasjonsendpointet arbeider på de samme arbeidsområderessursene og tillatelsene.
| Funksjon | Endpoint |
|---|---|
| Gjenbrukbare verktøy | GET / POST /api/v1/voice/tools |
| Les / oppdater / slett et verktøy | GET / PATCH / DELETE /api/v1/voice/tools/{id} |
| Forhåndsvis eller test et verktøy | POST /api/v1/voice/tools/{id}/test |
| Bind verktøy til en agent | PUT /api/v1/voice/agents/{id}/tools |
| Kunnskapsbaser | GET / POST /api/v1/voice/knowledge-bases |
| Les / oppdater / slett en kunnskapsbase | GET / PATCH / DELETE /api/v1/voice/knowledge-bases/{id} |
| Legg til / list dokumenter | POST / GET /api/v1/voice/knowledge-bases/{id}/documents |
| Les / slett et dokument | GET / DELETE /api/v1/voice/knowledge-bases/{id}/documents/{doc_id} |
| Abonnementer på samtalehendelser | GET / POST /api/v1/voice/webhooks |
| Les / oppdater / slett et abonnement | GET / PATCH / DELETE /api/v1/voice/webhooks/{id} |
| Send en signert testhendelse | POST /api/v1/voice/webhooks/{id}/test |
| Finn eksterne MCP-verktøy | POST /api/v1/voice/mcp/discover |
| MCP-administrasjonsendpoint | /api/v1/voice/mcp |
Registrer et HTTP-verktøy som spør CRM-adapteren din:
{
"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 definisjonen til en agent med PUT /agents/AGENT_ID/tools og { "tool_ids": ["TOOL_ID"] }. Dette erstatter hele verktøylisten med øyeblikksbilder; bind på nytt når et bibliotekverktøy endres. Å slette en definisjon i biblioteket beholder eksisterende øyeblikksbilder. Du kan også lese og erstatte innebygde definisjoner med agent-API-ets felt tools. Bruk analysis_config og widget_config for å konfigurere analysen og widgeten via agent-API-et.
Et verktøy kan bruke GET, POST, PUT, PATCH eller DELETE. query og request_body godtar nestede JSON-maler som { "customer": { "id": "{{customer_id}}" } }. En hel plassholder beholder den opprinnelige JSON-typen. Plassholdere i URL-en kodes og kan bare stå etter en fast, offentlig HTTPS-vert. Uten request_body får verktøy som ikke er GET, { "arguments": {...}, "call": { "callId": "...", "agentId": "...", "toolCallId": "...", "idempotencyKey": "..." } }. response_path velger et felt med punktnotasjon. Enkle parameters godtas fortsatt; input_schema støtter i tillegg nestede objekter, matriser, opplistinger og numeriske grenser. Eksterne skjemareferanser og regulære uttrykk godtas ikke.
static_args: verdier som sendes med hvert kall uansett hva modellen skriver, som en butikk-id; de fyller også {{name}} i adressen og kroppen.extract: [{name, path}] beholder felt fra en funksjons svar (data.id) til senere funksjoners {{name}}, slik at et oppslags customer_id kan gå inn i bestillingen som følger uten at modellen gjentar det. Felt fra et startoppslag beholdes på samme måte.reject_when: opptil 5 regler {on: caller|agent, pattern, negate}; så lenge alle gjelder for de siste ordene, kjøres ikke funksjonen, og agenten får reject_message.model_says: ved hvert kall skriver modellen én setning som sies mens funksjonen kjører, i stedet for det faste speak_before.Koble til en app under Integrasjoner → Webhooks og varsler → Tilkoblede apper, og bruk deretter «Legg til en ferdig funksjon» på agentens fane Kunnskap og verktøy; du trenger ikke noe eget endpoint:
check_availability (ledige tider på en dato) og book_appointment (bestiller tiden innringeren valgte). Tider i Google Calendar følger tidssonen, åpne dager, timer og avtalelengde du angir; Cal.com bruker hendelsestypens egen tilgjengelighet og en reserve-e-postadresse du angir for når innringeren ikke oppgir noen.save_to_sheet, som legger til en rad med kolonnene du lister, pluss samtalens ID og tid.notify_team, som poster en melding agenten skriver, i en Slack-kanal (incoming webhook).EvaSays kontrollplan kjører disse funksjonene med kontoen du koblet til; verken workeren eller agentdefinisjonen har appens legitimasjon. Når en agent leses via API-et, vises de som kind: "app" (med app, action, connection_id, app_config); send dem tilbake uendret når du erstatter tools, for å beholde dem. Apper kobles bare til i panelet.
Sett run_at_start: true på et av en agents verktøy, så kalles det når hver samtale begynner, før agenten hilser eller svarer. Parametere med navnene caller_number, called_number, direction, channel eller call_id fylles ut for det. Feltene det returnerer, fyller {{variables}} i first_message, system_prompt og idle_messages (felt ett nivå ned som {{customer.name}}), og hele svaret gis til agenten som bakgrunn. En hilsen med variabler venter opptil 3 sekunder på svaret; alt som ikke finnes, blir stående tomt. Ett verktøy per agent kan kjøre ved start.
Legitimasjon konfigureres i servermiljøet for arbeidsområdet og målet ditt; be support@evasay.com opprette en credential_ref. Ikke legg API-nøkler i agentdefinisjoner, headere, prompter eller verktøyparametere. Adapteren din kan ha CRM-legitimasjonen i sitt eget miljø.
Forhåndsvis et verktøy før du sender forespørsler til forretningssystemet:
{
"arguments": { "customer_id": "customer-123" },
"dry_run": true,
"mock_result": { "name": "Alex", "order_status": "shipped" }
}
En forhåndsvisning validerer parameterne og viser den avbildede forespørselen; den kjører ingen samtale og kontakter ikke forretningssystemet. Sett dry_run=false for en reell kjøring. En reell skrivetest krever også confirmed=true og idempotency_key (8–128 bokstaver, tall, punktum, understreker, kolon eller bindestreker). Testsvar inneholder ok, status, duration_ms og et avgrenset resultat. De returnerer ikke legitimasjon. Lese- og skrivetester krever skrivetillatelse i arbeidsområdet.
Under en samtale bærer forretningsforespørsler en stabil Idempotency-Key. Forretningsendpointet ditt må respektere den. Identiske skrivinger innenfor en samtale avdupliseres, også operasjoner med ukjent utfall etter en tidsavbrytelse. En annen tilsiktet operasjon trenger et eget forretningsargument, som operation_id. EvaSay spiller ikke av skrivinger automatisk på nytt. Hendelser for verktøykjøring inneholder status og varighet; samtaletestfunksjonen er fortsatt en tekstsimulering, ikke en test av verktøykjøring.
POST /mcp/discover godtar { "url": "https://crm.example.com/mcp", "credential_ref": "crm" } og returnerer serverens verktøy og skjemaer. Registrer bare det valgte verktøyet:
{
"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"]
}
}
Bare registrerte verktøy blir tilgjengelige for agenten. Eksterne tilkoblinger støtter Streamable HTTP med JSON- eller SSE-svar på forespørsler, offentlige HTTPS-mål og forhåndskonfigurert legitimasjon. Eldre SSE-endpoints, OAuth-forhandling, serverinitiert sampling/elicitation og binære vedlegg støttes ikke. Oppdaging gir ikke automatisk tilgang til alle serverens verktøy. Det eksterne verktøyets skjema må være innebygd og bruke den støttede delmengden av JSON Schema.