> Fetch clean Markdown by appending `.md` to any page URL under https://signalwire.com/docs or requesting it with the HTTP header `Accept: text/markdown`. The root index at https://signalwire.com/docs/llms.txt lists the available documentation indexes.

# Concierge

> Provide venue information, answer questions about amenities and services, help with bookings, and give directions using the Concierge prefab agent.

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

### Basic Usage

#### 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()
```

#### TypeScript

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

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();
```

### 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/sdk'` |

### 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

The concierge uses a different tool according to the guest's request:

```mermaid
flowchart LR
    amenity["Amenity question"] --> lookup["Look up the amenity"] --> info["Return hours and location"]
    booking["Booking request"] --> availability["Call check_availability()"] --> offer["Report availability and offer to book"]
    directions["Directions request"] --> route["Call get_directions()"] --> instructions["Return directions"]
```

### 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