***

title: ConciergeAgent
slug: /reference/typescript/agents/prefabs/concierge-agent
description: A concierge agent that provides multi-department routing with a knowledge base of department info, hours of operation, and call transfer capabilities.
---------------------

For a complete index of all SignalWire documentation pages, fetch https://signalwire.com/docs/llms.txt

[agentbase]: /docs/server-sdks/reference/typescript/agents/agent-base

[functionresult]: /docs/server-sdks/reference/typescript/agents/function-result

A concierge that provides multi-department routing with a knowledge base of department
info, hours of operation, and call transfer capabilities.

```typescript {3}
import { ConciergeAgent } from '@signalwire/sdk';

const agent = new ConciergeAgent({ /* ConciergeConfig */ });
```

## ConciergeConfig

<ParamField path="departments" type="Department[]" required={true} toc={true}>
  List of departments available for routing. Each `Department` object has:

  * `name` (string, required) -- Department name (e.g., `"Sales"`).
  * `description` (string, required) -- What this department handles.
  * `transferNumber` (string) -- Phone number or SIP address for transfers.
  * `keywords` (string\[]) -- Keywords that help route callers to this department.
  * `hoursOfOperation` (string) -- Human-readable hours (e.g., `"Mon-Fri 9am-5pm EST"`).
</ParamField>

<ParamField path="companyName" type="string" default="our company" toc={true}>
  Company name used in greetings and prompts.
</ParamField>

<ParamField path="generalInfo" type="string" toc={true}>
  General company information the agent can share with callers.
</ParamField>

<ParamField path="afterHoursMessage" type="string" default="This department is currently closed. Please try again during business hours." toc={true}>
  Message spoken when a department is closed or has no transfer number.
</ParamField>

<ParamField path="name" type="string" default="Concierge" toc={true}>
  Agent display name.
</ParamField>

<ParamField path="agentOptions" type="Partial<AgentOptions>" toc={true}>
  Additional [`AgentBase`][agentbase] options forwarded to the constructor.
</ParamField>

## Built-in Tools

| Tool                     | Description                                                 | Parameters                 |
| ------------------------ | ----------------------------------------------------------- | -------------------------- |
| `list_departments`       | List all departments with descriptions and hours            | (none)                     |
| `get_department_info`    | Get detailed info about a specific department               | `department_name` (string) |
| `transfer_to_department` | Transfer the caller to a department via its transfer number | `department_name` (string) |

<Note>
  The `transfer_to_department` tool uses `FunctionResult.connect()` to transfer the call.
  If the department has no `transferNumber`, the agent returns the `afterHoursMessage` instead.
</Note>

## Example

```typescript {3}
import { ConciergeAgent } from '@signalwire/sdk';

const agent = new ConciergeAgent({
  companyName: 'Riverside Resort',
  generalInfo: 'A luxury resort on the riverfront with 200 rooms.',
  departments: [
    {
      name: 'Front Desk',
      description: 'Check-in, check-out, and room inquiries',
      transferNumber: '+15551001001',
      hoursOfOperation: '24 hours',
      keywords: ['room', 'reservation', 'check-in'],
    },
    {
      name: 'Spa',
      description: 'Spa treatments and wellness appointments',
      transferNumber: '+15551001002',
      hoursOfOperation: '9 AM - 9 PM',
      keywords: ['massage', 'facial', 'wellness'],
    },
    {
      name: 'Restaurant',
      description: 'Dining reservations and room service',
      transferNumber: '+15551001003',
      hoursOfOperation: '7 AM - 10 PM',
    },
  ],
  afterHoursMessage: 'This department is currently closed. Please call back during business hours.',
});

agent.serve();
```

### createConciergeAgent

```typescript {3}
import { createConciergeAgent } from '@signalwire/sdk';

const agent = createConciergeAgent({
  companyName: 'Riverside Resort',
  departments: [
    { name: 'Front Desk', description: 'Room inquiries', transferNumber: '+15551001001' },
  ],
});
```