Użyj kontraktu OpenAPI, aby wygenerować klienta integracji. Publiczne API, panel i endpoint zarządzania MCP działają na tych samych zasobach i uprawnieniach przestrzeni roboczej.
| Możliwość | Endpoint |
|---|---|
| Narzędzia wielokrotnego użytku | GET / POST /api/v1/voice/tools |
| Odczyt / aktualizacja / usunięcie narzędzia | GET / PATCH / DELETE /api/v1/voice/tools/{id} |
| Podgląd lub test narzędzia | POST /api/v1/voice/tools/{id}/test |
| Powiązanie narzędzi z agentem | PUT /api/v1/voice/agents/{id}/tools |
| Bazy wiedzy | GET / POST /api/v1/voice/knowledge-bases |
| Odczyt / aktualizacja / usunięcie bazy wiedzy | GET / PATCH / DELETE /api/v1/voice/knowledge-bases/{id} |
| Dodanie / lista dokumentów | POST / GET /api/v1/voice/knowledge-bases/{id}/documents |
| Odczyt / usunięcie dokumentu | GET / DELETE /api/v1/voice/knowledge-bases/{id}/documents/{doc_id} |
| Subskrypcje zdarzeń połączeń | GET / POST /api/v1/voice/webhooks |
| Odczyt / aktualizacja / usunięcie subskrypcji | GET / PATCH / DELETE /api/v1/voice/webhooks/{id} |
| Wysłanie podpisanego zdarzenia testowego | POST /api/v1/voice/webhooks/{id}/test |
| Wykrywanie zdalnych narzędzi MCP | POST /api/v1/voice/mcp/discover |
| Endpoint zarządzania MCP | /api/v1/voice/mcp |
Zarejestruj narzędzie HTTP, które odpytuje Twój adapter CRM:
{
"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 zwraca { "data": { "id": "TOOL_ID", ... } }. Powiąż jego definicję z agentem przez PUT /agents/AGENT_ID/tools z { "tool_ids": ["TOOL_ID"] }. To zastępuje całą listę narzędzi migawkami; powiąż ponownie, gdy narzędzie z biblioteki się zmieni. Usunięcie definicji z biblioteki zachowuje istniejące migawki. Definicje wbudowane możesz też odczytywać i zastępować polem tools API agenta. Użyj analysis_config i widget_config, aby przez API agenta skonfigurować analizę i widżet.
Narzędzie może używać GET, POST, PUT, PATCH lub DELETE. query i request_body przyjmują zagnieżdżone szablony JSON, takie jak { "customer": { "id": "{{customer_id}}" } }. Symbol zastępczy zajmujący całą wartość zachowuje pierwotny typ JSON. Symbole zastępcze w adresie URL są kodowane i mogą występować tylko po stałym, publicznym hoście HTTPS. Bez request_body narzędzia inne niż GET otrzymują { "arguments": {...}, "call": { "callId": "...", "agentId": "...", "toolCallId": "...", "idempotencyKey": "..." } }. response_path wybiera pole w notacji z kropkami. Proste parameters są nadal akceptowane; input_schema obsługuje dodatkowo zagnieżdżone obiekty, tablice, wyliczenia i granice liczbowe. Zewnętrzne odwołania do schematów i wyrażenia regularne nie są akceptowane.
static_args: wartości wysyłane z każdym wywołaniem bez względu na to, co napisze model, na przykład identyfikator sklepu; wypełniają też {{name}} w adresie i treści.extract: [{name, path}] zachowuje pola z odpowiedzi funkcji (data.id) dla {{name}} w kolejnych funkcjach, więc customer_id z wyszukiwania może trafić do następnego zamówienia bez powtarzania przez model. Pola zapytania startowego są zachowywane tak samo.reject_when: do 5 reguł {on: caller|agent, pattern, negate}; dopóki wszystkie są spełnione dla ostatnich słów, funkcja się nie uruchamia, a agent dostaje reject_message.model_says: przy każdym wywołaniu model pisze jedno zdanie, które jest wypowiadane w trakcie działania funkcji, zamiast stałego speak_before.Połącz aplikację w Integracje → Webhooki i powiadomienia → Połączone aplikacje, a potem użyj „Dodaj gotową funkcję” na karcie Wiedza i narzędzia agenta; nie potrzebujesz własnego endpointu:
check_availability (wolne terminy danego dnia) i book_appointment (rezerwuje termin wybrany przez rozmówcę). Terminy w Google Calendar zależą od ustawionej strefy czasowej, dni otwarcia, godzin i długości wizyty; Cal.com korzysta z własnej dostępności typu wydarzenia oraz z zapasowego adresu e-mail, który ustawisz na wypadek, gdy rozmówca żadnego nie poda.save_to_sheet, która dopisuje wiersz z wymienionymi przez Ciebie kolumnami oraz identyfikatorem i czasem połączenia.notify_team, która publikuje na kanale Slack (incoming webhook) wiadomość napisaną przez agenta.Płaszczyzna sterowania EvaSay uruchamia te funkcje na koncie, które połączyłeś; ani worker, ani definicja agenta nie przechowują danych logowania aplikacji. Przy odczycie agenta przez API występują jako kind: "app" (z app, action, connection_id, app_config); odeślij je bez zmian przy zastępowaniu tools, aby je zachować. Aplikacje łączy się wyłącznie w panelu.
Ustaw run_at_start: true na jednym z narzędzi agenta, a zostanie ono wywołane na początku każdego połączenia, zanim agent się przywita lub odpowie. Parametry o nazwach caller_number, called_number, direction, channel lub call_id są dla niego wypełniane automatycznie. Zwrócone pola wypełniają {{variables}} w first_message, system_prompt i idle_messages (pola piętro niżej jako {{customer.name}}), a cała odpowiedź trafia do agenta jako tło. Powitanie ze zmiennymi czeka na odpowiedź do 3 sekund; wszystko, czego nie znaleziono, zostaje puste. Na starcie może działać jedno narzędzie na agenta.
Dane logowania konfiguruje się w środowisku serwera dla Twojej przestrzeni roboczej i adresu docelowego; poproś support@evasay.com o przydzielenie credential_ref. Nie umieszczaj kluczy API w definicjach agentów, nagłówkach, promptach ani parametrach narzędzi. Twój adapter może trzymać dane logowania do CRM we własnym środowisku.
Zobacz podgląd narzędzia, zanim wyślesz żądania do systemu biznesowego:
{
"arguments": { "customer_id": "customer-123" },
"dry_run": true,
"mock_result": { "name": "Alex", "order_status": "shipped" }
}
Podgląd sprawdza parametry i pokazuje zbudowane żądanie; nie prowadzi rozmowy ani nie łączy się z systemem biznesowym. Ustaw dry_run=false dla prawdziwego wykonania. Prawdziwy test zapisu wymaga też confirmed=true i idempotency_key (8–128 liter, cyfr, kropek, podkreślników, dwukropków lub myślników). Odpowiedzi testów zawierają ok, status, duration_ms i ograniczony wynik. Nie zwracają danych logowania. Testy odczytu i zapisu wymagają uprawnienia do zapisu w przestrzeni roboczej.
Podczas połączenia żądania biznesowe niosą stały Idempotency-Key. Twój endpoint biznesowy musi go respektować. Identyczne zapisy w obrębie połączenia są deduplikowane, także operacje o nieznanym wyniku po przekroczeniu czasu. Inna, zamierzona operacja wymaga odrębnego argumentu biznesowego, np. operation_id. EvaSay nie powtarza zapisów automatycznie. Zdarzenia wykonania narzędzi zawierają status i czas trwania; funkcja testu rozmowy pozostaje symulacją tekstową, a nie testem wykonania narzędzi.
POST /mcp/discover przyjmuje { "url": "https://crm.example.com/mcp", "credential_ref": "crm" } i zwraca narzędzia oraz schematy serwera. Zarejestruj tylko wybrane narzędzie:
{
"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"]
}
}
Agentowi dostępne stają się tylko zarejestrowane narzędzia. Połączenia zdalne obsługują Streamable HTTP z odpowiedziami JSON lub SSE na żądania, publiczne cele HTTPS i wstępnie skonfigurowane dane logowania. Nie są obsługiwane starsze endpointy SSE, negocjacja OAuth, inicjowane przez serwer sampling i elicitation ani załączniki binarne. Wykrywanie nie przyznaje automatycznie dostępu do wszystkich narzędzi serwera. Schemat zdalnego narzędzia musi być wbudowany i używać obsługiwanego podzbioru JSON Schema.