T
Telephony SOPKnowledge Base
Search
← All topics

SignalWire AI Receptionist — No-Code Voice Agent in the Portal

Build a voice AI receptionist inside the SignalWire portal without writing code. Covers AI Agent Resource setup, prompt configuration, SWAIG tool definitions in the UI, voice/language picker, assigning to a phone number or as a Call Flow Builder node, and billing model.

signalwireai-receptionistno-codevoice-aiai-agent-resource
Agent trigger phrases: AI receptionist SignalWire · no-code voice AI · AI Agent Resource setup · AI receptionist prompt · assign AI agent to phone number · AI agent billing per minute

SignalWire AI Receptionist

A no-code path to a voice AI agent. Lives in the SignalWire portal under Resources → AI Agent. Generates SWML under the hood, then exposes the agent for assignment to a phone number or selection inside a Call Flow Builder AI Agent node.

Use the portal AI Agent when:

  • You want to ship without a backend.
  • The agent's tools fit DataMap (no custom auth flows).
  • Non-technical team members will edit prompts.

Use the Python Agents SDK when:

  • Tools need custom auth, mutation, or branching logic.
  • You want git-versioned prompts.
  • You're integrating with a wider Python codebase.

Creating an AI Agent Resource

  1. Dashboard → Resources+ Add NewAI AgentCustom AI Agent.
  2. Name the agent (this becomes the dropdown label everywhere the agent is referenced).
  3. Configure the four pillars: prompt, voice/language, tools, post-call settings.
  4. Save and fund the project (AI agents are billed per minute of conversation).

The four configuration pillars

1. Prompt

The persona block. Markdown formatting is recommended — LLMs follow structure better than prose.

## Role
You are a friendly receptionist for Acme Plumbing.

## Goals
- Greet the caller warmly.
- Identify whether they need a quote, a repair, or to follow up on existing work.
- Capture name, address, and a callback number.
- Offer the next-available appointment slot.

## Guidelines
- Be concise — 2 sentences max per turn.
- Never quote prices over the phone.
- If you cannot help, transfer to a human at extension 100.

2. Voice and language

  • Language — primary ISO code (e.g., en-US).
  • Voice — pick a TTS voice from the SignalWire catalog (Rime, ElevenLabs, Deepgram, Cartesia, etc.).
  • Additional languages — optional list, each with its own voice.

Rime voices (e.g., rime.spore, rime.luna) are the default for fast TTS. Premium voices (ElevenLabs, Cartesia) are billed at a premium TTS rate.

3. SWAIG tools

Tools are defined in the AI Agent UI. Each tool can be:

| Tool type | Configure in UI | |---|---| | DataMap (HTTP API, no server) | URL, method, headers, body template, response template | | External webhook | URL — your server returns the SWAIG response | | Native (built-in platform) | Toggle from the list (e.g., check_time) |

For each tool: name, description (AI uses this to decide when to call), parameters (JSON schema), optional fillers ("One moment...").

4. Post-call settings

  • Post prompt — instruction text to coerce structured JSON from the conversation.
  • Post prompt URL — webhook to receive the structured payload + transcript + metadata.
  • Recording — toggle to enable background recording of every call.

Example post prompt:

Analyze the call. Return ONLY valid JSON, no prose:
{
  "caller_intent": "string",
  "appointment_booked": boolean,
  "callback_required": boolean,
  "address": "string or null",
  "summary": "2 sentence summary"
}

Assigning the agent to a phone number

Two ways:

As the direct call handler

  1. Phone Numbers in the Dashboard.
  2. Select the DID → edit Call Handler.
  3. Set handler to AI Agent → pick your agent from the dropdown.
  4. Save. Inbound calls now go straight to the AI receptionist.

Inside a Call Flow Builder flow

  1. Open a Call Flow in CFB.
  2. Drop an AI Agent node onto the canvas.
  3. In the node settings, pick the agent from the dropdown.
  4. Wire it after Handle Call (and optionally Answer Call, Start Recording).
  5. Deploy the flow.
  6. Assign the flow to the DID (Call Handler → Call Flow).

Use the CFB path when you need branching logic before or after the AI section — for example, an after-hours check that routes to voicemail outside business hours and to the AI during open hours.

Variables available inside prompts

| Variable | Notes | |---|---| | ${call.from} | Caller's number | | ${call.to} | Number dialed | | ${global_data.key} | Session-wide data (set via SWAIG update_global_data) |

Reference them inside the prompt or tool response templates:

You are speaking with the caller from ${call.from}.

Billing model

AI Agents are billed per minute of conversation, on top of standard call-leg charges. Premium TTS voices add per-character charges. Check the SignalWire pricing page for current rates. Funding the project before assigning the agent to a number is mandatory — calls won't connect if the balance can't cover the per-minute charge.

Comparison to the Python SDK

| Capability | Portal AI Agent | Python SDK | |---|---|---| | Persona/prompt config | UI form | set_prompt_text / prompt_add_section | | Tools | UI form (DataMap or webhook) | @tool decorator | | Multi-step contexts | Limited | Full ContextBuilder | | Skills / prefabs | Not available | add_skill, prefabs | | MCP federation | Not available | MCP Gateway | | Git-versioned prompts | Manual export | Native | | Multi-instance deploys | One per number | AgentServer mounts many on one process |

For complex agents, build in Python and assign the resulting endpoint as a SWML script (see Python Agents SDK).

Anti-patterns

  • Writing prompts as one long paragraph — split into sections.
  • Defining 15+ tools in the UI — at that complexity, switch to the Python SDK.
  • Skipping the post-call settings — you lose the structured-data layer that makes calls useful as data.
  • Forgetting to fund the project — agent fails to answer with no clear error.
  • Using a premium TTS voice for a 24/7 receptionist — premium voice costs add up fast. Save them for outbound campaigns where the brand justifies the spend.

See also