***

title: Concierge
description: Provide venue information, answer questions about amenities and services, help with bookings, and give directions using the Concierge prefab agent.
slug: /guides/concierge
max-toc-depth: 3
---------------------

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

ConciergeAgent provides venue information, answers questions about amenities and services, helps with bookings, and gives directions.

### Basic Usage

<Tabs>
  <Tab title="Python">
    ```python
    from signalwire.prefabs import ConciergeAgent

    agent = ConciergeAgent(
        venue_name="Grand Hotel",
        services=["room service", "spa bookings", "restaurant reservations", "tours"],
        amenities={
            "pool": {"hours": "7 AM - 10 PM", "location": "2nd Floor"},
            "gym": {"hours": "24 hours", "location": "3rd Floor"},
            "spa": {"hours": "9 AM - 8 PM", "location": "4th Floor"}
        }
    )

    if __name__ == "__main__":
        agent.run()
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript
    import { ConciergeAgent } from 'signalwire-agents';

    const agent = new ConciergeAgent({
      venueName: 'Grand Hotel',
      services: ['room service', 'spa bookings', 'restaurant reservations', 'tours'],
      amenities: {
        pool: { hours: '7 AM - 10 PM', location: '2nd Floor' },
        gym: { hours: '24 hours', location: '3rd Floor' },
        spa: { hours: '9 AM - 8 PM', location: '4th Floor' },
      },
    });

    agent.run();
    ```
  </Tab>
</Tabs>

### Amenity Format

```python
amenities = {
    "amenity_name": {
        "hours": "Operating hours",
        "location": "Where to find it",
        "description": "Optional description",
        # ... any other key-value pairs
    }
}
```

### Importing ConciergeAgent

| Language   | Import                                               |
| ---------- | ---------------------------------------------------- |
| Python     | `from signalwire.prefabs import ConciergeAgent`      |
| TypeScript | `import { ConciergeAgent } from 'signalwire-agents'` |

### Constructor Parameters

```python
ConciergeAgent(
    venue_name="...",                  # Name of venue (required)
    services=[...],                    # List of services offered (required)
    amenities={...},                   # Dict of amenities with details (required)
    hours_of_operation=None,           # Dict of operating hours
    special_instructions=None,         # List of special instructions
    welcome_message=None,              # Custom welcome message
    name="concierge",                  # Agent name
    route="/concierge",                # HTTP route
    **kwargs                           # Additional AgentBase arguments
)
```

### Built-in Functions

ConciergeAgent provides these SWAIG functions automatically:

| Function             | Description                              |
| -------------------- | ---------------------------------------- |
| `check_availability` | Check service availability for date/time |
| `get_directions`     | Get directions to an amenity or location |

### Concierge Flow

<Frame caption="Concierge agent conversation flow.">
  <img class="diagram" src="https://files.buildwithfern.com/signalwire.docs.buildwithfern.com/docs/21c01b9ebd09ecf6e2a49b04b8d6c4fa443c3664030c384e13ed0abcc5586548/assets/images/sdks/diagrams/09_05_concierge_diagram1.webp" alt="Diagram showing the concierge flow from greeting through information lookup, service requests, and booking assistance." />
</Frame>

### Complete Example

```python
#!/usr/bin/env python3
## resort_concierge.py - Hotel concierge agent
from signalwire.prefabs import ConciergeAgent

agent = ConciergeAgent(
    venue_name="The Riverside Resort",
    services=[
        "room service",
        "spa treatments",
        "restaurant reservations",
        "golf tee times",
        "airport shuttle",
        "event planning"
    ],
    amenities={
        "swimming pool": {
            "hours": "6 AM - 10 PM",
            "location": "Ground Floor, East Wing",
            "description": "Heated indoor/outdoor pool with poolside bar"
        },
        "fitness center": {
            "hours": "24 hours",
            "location": "Level 2, West Wing",
            "description": "Full gym with personal trainers available"
        },
        "spa": {
            "hours": "9 AM - 9 PM",
            "location": "Level 3, East Wing",
            "description": "Full service spa with massage and facials"
        },
        "restaurant": {
            "hours": "Breakfast 7-10 AM, Lunch 12-3 PM, Dinner 6-10 PM",
            "location": "Lobby Level",
            "description": "Fine dining with panoramic river views"
        }
    },
    hours_of_operation={
        "front desk": "24 hours",
        "concierge": "7 AM - 11 PM",
        "valet": "6 AM - 12 AM"
    },
    special_instructions=[
        "Always offer to make reservations when guests ask about restaurants or spa.",
        "Mention the daily happy hour at the pool bar (4-6 PM)."
    ],
    welcome_message="Welcome to The Riverside Resort! How may I assist you today?"
)

if __name__ == "__main__":
    agent.add_language("English", "en-US", "rime.spore")
    agent.run()
```

### Best Practices

#### Amenities

* Include hours for all amenities
* Provide clear location descriptions
* Add any special requirements or dress codes
* Keep information up to date

#### Services

* List all bookable services
* Connect to real booking system for availability
* Include service descriptions and pricing if possible

#### Special Instructions

* Use for promotions and special offers
* Include upselling opportunities
* Add seasonal information