Documentation Index
Fetch the complete documentation index at: https://docs.nedzo.ai/llms.txt
Use this file to discover all available pages before exploring further.
Actions let your agent do things during a conversation — book a meeting, transfer a call, send an email, post to Slack, or call an external API. Configure actions from the Actions tab.
Each action has a condition that tells the agent when to use it. Write it in plain language, like “When the contact wants to book an appointment” or “When the caller asks to speak with a manager”.
Calendar booking
Book meetings on your connected calendar during a call or chat.
Setup:
- Connect a calendar provider in Settings > Integrations (Google Calendar, Calendly, Cal.com, or GoHighLevel)
- Add a calendar action on the Actions tab
- Set the condition, select the provider, and choose the calendar
Configuration:
| Field | Description |
|---|
| Name | Action display name |
| Condition | When the agent should offer booking |
| Calendar type | Google Calendar, Calendly, Cal.com, or LeadConnector |
| Calendar ID | Which specific calendar to use |
| Timezone | IANA timezone, or leave blank to let the AI ask the contact |
The agent checks real-time availability and books directly on your calendar.
The default booking flow (asking for the contact’s timezone, offering a couple of slots at a time, collecting name + email only after a slot is selected) lives in your agent’s prompt and is fully editable. See Calendar booking instructions to customize it.
Call transfer
Transfer a live call to a human or another phone number.
Transfer types:
| Type | Description |
|---|
| Warm | The agent introduces the caller before connecting them |
| Cold | The agent connects the caller directly without introduction |
Configuration:
| Field | Description |
|---|
| Name | Transfer target name (e.g., “Sales Team”) |
| Condition | When to transfer (e.g., “Caller asks for a human”) |
| Transfer type | Warm or Cold |
| Phone number | E.164 format destination number |
| Say line | What the agent says before transferring |
Email
Send an email during or after a conversation.
Requires: A verified email domain in Settings > Integrations > Email.
Configuration:
| Field | Description |
|---|
| Name | Action name |
| Condition | When to send |
| From name | Sender display name |
| From address | Email local part (domain comes from your email integration) |
| Subject | Email subject (supports {{contact.X}} variables) |
| Body | The email content. Supports {{contact.X}} variables and the dynamic variable picker. |
| Recipient type | Contact’s email, a specific address, or ask the contact |
Slack message
Post a message to a Slack channel during a conversation.
Requires: Slack connected in Settings > Integrations > Slack.
Configuration:
| Field | Description |
|---|
| Name | Action name |
| Condition | When to send |
| Channel | Which Slack channel to post to |
| Message | Slack message body. Supports {{contact.X}} variables and the dynamic variable picker. |
SMS
Send a text message to a contact during a conversation.
Configuration:
| Field | Description |
|---|
| Name | Action name |
| Condition | When to send |
| Message | SMS content. Supports {{contact.X}} variables and the dynamic variable picker. |
Custom action
Call any external API during a conversation. Use this to look up data, update records, or trigger actions in systems that don’t have a native integration.
Configuration:
| Field | Description |
|---|
| Name | Action name |
| Condition | When to trigger |
| Method | GET, POST, PUT, PATCH, or DELETE |
| URL | The endpoint to call |
| Parameters | Named parameters the agent collects from the conversation |
| Auth type | None, Bearer token, API key, or Basic auth |
| Headers | Custom HTTP headers |
How parameters work:
Define parameters with a name and description. The agent gathers the required information from the conversation and includes it in the API call. For example, a parameter named order_number with description “The customer’s order number” tells the agent to ask for and extract that value.
When the action triggers, the voice engine sends an HTTP request to your configured URL. The request body contains a message object with the tool call details and the parameters the agent extracted from the conversation.
Example request:
POST https://your-api.com/check-order
Content-Type: application/json
Authorization: Bearer your-secret-token
{
"message": {
"toolCallList": [
{
"id": "test_call_id",
"type": "function",
"function": {
"name": "check_order",
"arguments": {
"order_number": "ORD-12345",
"customer_name": "John Doe"
}
}
}
]
}
}
The toolCallList array contains one object per tool call. Each tool call includes:
| Field | Type | Description |
|---|
id | string | Unique identifier for this tool call |
type | string | Always "function" |
function.name | string | The action name (lowercased, spaces replaced with underscores) |
function.arguments | object | Key-value pairs where each key matches a parameter name you defined, and the value is what the agent extracted from the conversation |
Headers sent with the request:
| Auth type | Header added |
|---|
| Bearer token | Authorization: Bearer {your token} |
| API key | X-API-Key: {your key} |
| Basic auth | Authorization: Basic {your credentials} |
Any custom headers you configured are also included.
Your endpoint must return a JSON response. The agent reads the response and uses it to continue the conversation.
Successful response (200):
{
"results": [
{
"toolCallId": "test_call_id",
"result": "Order ORD-12345 is currently in transit and expected to arrive on January 20th."
}
]
}
The results array should contain one object with:
| Field | Type | Description |
|---|
toolCallId | string | The tool call ID from the request (echo it back) |
result | string | The information the agent should use in the conversation |
The agent takes the result string and incorporates it into its response to the contact. Keep the result concise and factual — the agent will phrase it naturally.
Error response:
If something goes wrong, return an error message in the result. The agent will handle it gracefully:
{
"results": [
{
"toolCallId": "test_call_id",
"result": "Error: Order not found."
}
]
}
The action executes synchronously — the call pauses briefly while waiting for your endpoint to respond. Keep your endpoint fast (under a few seconds) to avoid awkward silence during the call.
Managing actions
- Click Add to create a new action
- Use the menu on each action to Edit or Delete it
- Toggle Active/Inactive on each action to enable or disable it without deleting