> ## Documentation Index
> Fetch the complete documentation index at: https://docs.voxworks.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Arrange Callback | (BETA)

> The composite tool that captures when a caller would like to be called back, confirms the window, and records a structured callback record — including human vs assistant callback modes and how to act on the record.

## What it does

**Arrange Callback | (BETA)** captures **when** the caller would like a callback — a window such as "tomorrow afternoon" (a day plus a rough time), not a calendar slot — echoes it back for confirmation, and records a structured callback record for your team (or the assistant) to act on. For actual appointments, use [Book Calendar Appointment | Pro](/tools/calendar/overview) instead.

It is a [composite tool](/tools/composite-tools): one step in your flow runs the whole exchange — asking when suits, handling "any time is fine" and "I'm busy right now", confirming the window, and writing the record. On **every** exit — arranged, declined, busy or no workable window — it writes a status and a record your flow can read.

This tool is in beta and intended for testing rather than production calls.

***

## Callback modes

### Human callback (default)

A person or a queue returns the call. The confirmation wording tells the caller *someone from the team* will ring them back in the agreed window, and the record is stamped `type: human`. Use this when the callback lands with your staff — dispatch the record to your team with a [webhook](/tools/webhook) or an SMS so they know who to call and when.

### Assistant callback

The AI places the return call. The confirmation wording changes accordingly ("I'll give you a call back...") and the record is stamped `type: assistant`. Use this when your own automation schedules an outbound AI call from the record.

### Validated vs unvalidated windows

When a **Callback Endpoint** is set, its schedule (from **Numbers & Routing** > **Endpoints**) defines the windows that can be offered, and the endpoint is recorded on the callback record. Validation of the caller's window against the endpoint's schedule is coming soon; until then the tool confirms whatever window the caller states. With no endpoint set, the tool always simply confirms the caller's stated window.

***

## Inputs

| Setting                | Description                                                                                                                                                                                            | Default          |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------- |
| **Callback Type**      | Who places the return call: `human` or `assistant`. Shapes the confirmation wording and the recorded type. Literal select.                                                                             | `human`          |
| **Callback Endpoint**  | Optional routing endpoint (from **Numbers & Routing** > **Endpoints**) whose schedule defines the bookable windows; also recorded on the callback record. Literal or variable.                         | —                |
| **Callback Purpose**   | Why the callback is happening, e.g. "to finish off your quote" — spoken only if the caller asks what it's about. Literal or variable.                                                                  | —                |
| **Confirm Window**     | Echo the agreed window back for confirmation before recording it. When off, an acceptable window is recorded directly. Literal toggle.                                                                 | On               |
| **Custom Opening Ask** | Custom first ask used in place of the standard opening line on the first visit, e.g. "When would suit you for one of the team to call you back?" — must end with a question mark. Literal or variable. | Standard wording |

***

## Outputs

| Output     | Description                                                                                                                          |
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| **result** | Hidden boolean — true when a callback window was confirmed and recorded; false on a decline, a too-busy caller, or no usable window. |

## Variables this tool writes

| Variable                       | Type   | Example                                                                                                                       | Description                                                                                        |
| ------------------------------ | ------ | ----------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
| `{{callback.callback_status}}` | string | `arranged`                                                                                                                    | Outcome of the exchange: `arranged`, `declined`, `busy` or `no_window`. Written on **every** exit. |
| `{{callback.record}}`          | object | `{"type": "human", "name": "Jane", "period": "tomorrow afternoon", "window_clock": "13:00-17:00", "status": "arranged", ...}` | The structured callback record, also written on every exit.                                        |

### The callback record

Read individual record fields with a dotted path — they appear in the `/` variable picker under the callback namespace.

| Field                               | Type    | Example                                     | Description                                                                            |
| ----------------------------------- | ------- | ------------------------------------------- | -------------------------------------------------------------------------------------- |
| `{{callback.record.type}}`          | string  | `human`                                     | Human or assistant callback, from **Callback Type**.                                   |
| `{{callback.record.name}}`          | string  | `Jane Citizen`                              | The name to ask for on the callback.                                                   |
| `{{callback.record.endpoint}}`      | string  | `sales_team`                                | The endpoint recorded from **Callback Endpoint**.                                      |
| `{{callback.record.purpose}}`       | string  | `Discuss upgrade options`                   | Purpose recorded from **Callback Purpose**.                                            |
| `{{callback.record.days}}`          | string  | `["2026-07-21", "2026-07-22"]`              | The accepted callback dates as a JSON list of ISO dates.                               |
| `{{callback.record.is_range}}`      | boolean | `false`                                     | True when the accepted days form a range rather than a single day.                     |
| `{{callback.record.period}}`        | string  | `afternoon`                                 | The period of day as the caller phrased it.                                            |
| `{{callback.record.window_clock}}`  | string  | `14:00-16:00`                               | The accepted window as `HH:MM-HH:MM` in the endpoint schedule's timezone.              |
| `{{callback.record.window_spoken}}` | string  | `Tuesday between 2 and 4 PM`                | The window phrase as it was confirmed with the caller.                                 |
| `{{callback.record.status}}`        | string  | `arranged`                                  | `arranged` when a window was agreed; `unscheduled` when the tool finished without one. |
| `{{callback.record.created_at}}`    | string  | `2026-07-17T14:35:02+10:00`                 | Creation timestamp of the record.                                                      |
| `{{callback.record.notes}}`         | string  | `Prefers mobile; do not call before lunch.` | Free-text hints for whoever makes the callback.                                        |

Fields beginning `temp_` in the `callback` namespace are the tool's private working state — never read or write them from your own steps.

***

## Routing and wiring tips

* **true** — window arranged: read `{{callback.record}}` and dispatch it (for example with [Send Webhook](/tools/webhook) or an SMS to your team). **Otherwise** — branch on `{{callback.callback_status}}` (string, e.g. `declined`) when your follow-up wording should differ between a decline, a busy caller and no workable window.
* The record is written even when the caller declines (with a not-arranged status) — always check `{{callback.callback_status}}` before acting on it.
* The tool records the window; it does not schedule anything by itself. Pair it with a dispatch step (webhook, SMS) or your own automation so the callback actually happens.
* A good pattern after a failed [warm handoff](/tools/warm-handoff) — especially out of hours — is to route the failure path into Arrange Callback so the caller still leaves with a commitment.

***

## Next Steps

* [Composite Tools](/tools/composite-tools) — how composite steps run, and how inputs, results and outputs connect to your call.
* [Book Calendar Appointment | Pro](/tools/calendar/overview) — for real calendar bookings rather than callback windows.
* [Warm Handoff](/tools/warm-handoff) — transfer live instead of arranging a callback, when someone is available now.
* [Endpoints](/routing/endpoints) — the routing endpoints whose schedules define callback windows.
