Hotel Reservation & Concierge
Let guests check room availability, make reservations, ask about amenities, and get local recommendations — across WhatsApp and web chat.
What you'll build
An agent that handles the full pre-arrival journey: room availability questions checked against Google Calendar, reservation requests, amenity Q&A answered from a knowledge base, and curated local recommendations. Stripe can optionally collect a holding deposit at confirmation.
Prerequisites
- BimpeAI account with an API key (
sk_…) - Read Anatomy of a workflow agent first — this recipe skips steps covered there
- Google Calendar connected in the Console dashboard (see Step 4)
- WhatsApp Business number and/or web chat widget connected in the Console dashboard (see Step 4)
Steps
1. Find the workflow
import { BimpeAI } from "@bimpeai/sdk";
const bimpe = new BimpeAI({ apiKey: process.env.BIMPEAI_API_KEY! });
const page = await bimpe.workflows.list({ scope: "public", search: "hotel" });
const workflow = page.data[0];
console.log(workflow.id, workflow.name);import os
from bimpeai import BimpeAI
client = BimpeAI(api_key=os.environ["BIMPEAI_API_KEY"])
page = client.workflows.list(scope="public", search="hotel")
workflow = page.data[0]
print(workflow.id, workflow.name)2. Create the agent
const agent = await bimpe.agents.create(
{
name: "Hotel concierge",
system_prompt:
"You are a hotel concierge. Help guests check room availability, make reservations, " +
"and answer questions about hotel amenities, dining, and facilities. " +
"Use the room inventory knowledge base for pricing and room details. " +
"Check availability via the Google Calendar integration before confirming a booking. " +
"Provide local restaurant, attraction, and transport recommendations when asked.",
agent_workflow_id: workflow.id,
},
{ idempotencyKey: "create-hotel-concierge-v1" },
);
console.log(agent.id);agent = client.agents.create(
name="Hotel concierge",
system_prompt=(
"You are a hotel concierge. Help guests check room availability, make reservations, "
"and answer questions about hotel amenities, dining, and facilities. "
"Use the room inventory knowledge base for pricing and room details. "
"Check availability via the Google Calendar integration before confirming a booking. "
"Provide local restaurant, attraction, and transport recommendations when asked."
),
agent_workflow_id=workflow.id,
idempotency_key="create-hotel-concierge-v1",
)
print(agent.id)3. Add knowledge bases
Two knowledge bases cover the room catalogue and the local area guide. A third holds booking policy so the agent quotes cancellation terms accurately.
// Room inventory with rates
await bimpe.agents.knowledgeBases.create(agent.id, {
type: "text",
name: "Room inventory",
content:
"Standard Double — £95/night — sleeps 2, city view, free Wi-Fi, tea/coffee\n" +
"Deluxe King — £135/night — sleeps 2, garden view, mini-bar, free Wi-Fi\n" +
"Family Suite — £185/night — sleeps 4, living area, two bathrooms, free Wi-Fi\n" +
"Executive Suite — £260/night — sleeps 2, king bed, lounge, espresso machine, late checkout",
});
// Amenities and local guide
await bimpe.agents.knowledgeBases.create(agent.id, {
type: "text",
name: "Amenities and local guide",
content:
"Hotel amenities: rooftop pool (07:00–22:00), gym (24h), spa (09:00–20:00), " +
"restaurant (breakfast 07:00–10:30, dinner 18:00–22:00), bar (12:00–00:00).\n" +
"Local recommendations:\n" +
" Dining: The Old Mill (5 min walk, British cuisine), Spice Garden (10 min, Indian)\n" +
" Attractions: City Museum (15 min walk), Botanical Gardens (20 min walk)\n" +
" Transport: nearest tube station 3 min walk, airport express from Central Station",
});
// Booking and cancellation policy
await bimpe.agents.knowledgeBases.create(agent.id, {
type: "text",
name: "Booking policy",
content:
"Check-in: 15:00. Check-out: 11:00. Early check-in subject to availability (£20 fee).\n" +
"Cancellation: free up to 48 hours before arrival. Within 48 hours: one night charged.\n" +
"Pets: not permitted. Breakfast: £14 per person, bookable at check-in or via this agent.",
});# Room inventory with rates
client.agents.knowledge_bases.create(agent.id, {
"type": "text",
"name": "Room inventory",
"content": (
"Standard Double — £95/night — sleeps 2, city view, free Wi-Fi, tea/coffee\n"
"Deluxe King — £135/night — sleeps 2, garden view, mini-bar, free Wi-Fi\n"
"Family Suite — £185/night — sleeps 4, living area, two bathrooms, free Wi-Fi\n"
"Executive Suite — £260/night — sleeps 2, king bed, lounge, espresso machine, late checkout"
),
})
# Amenities and local guide
client.agents.knowledge_bases.create(agent.id, {
"type": "text",
"name": "Amenities and local guide",
"content": (
"Hotel amenities: rooftop pool (07:00–22:00), gym (24h), spa (09:00–20:00), "
"restaurant (breakfast 07:00–10:30, dinner 18:00–22:00), bar (12:00–00:00).\n"
"Local recommendations:\n"
" Dining: The Old Mill (5 min walk, British cuisine), Spice Garden (10 min, Indian)\n"
" Attractions: City Museum (15 min walk), Botanical Gardens (20 min walk)\n"
" Transport: nearest tube station 3 min walk, airport express from Central Station"
),
})
# Booking and cancellation policy
client.agents.knowledge_bases.create(agent.id, {
"type": "text",
"name": "Booking policy",
"content": (
"Check-in: 15:00. Check-out: 11:00. Early check-in subject to availability (£20 fee).\n"
"Cancellation: free up to 48 hours before arrival. Within 48 hours: one night charged.\n"
"Pets: not permitted. Breakfast: £14 per person, bookable at check-in or via this agent."
),
})4. Connect channels and integrations (dashboard)
Google Calendar, Stripe, and channels are configured in the dashboard
The API cannot create integrations or channel connections. Connect Google Calendar, Stripe (if collecting deposits), and your messaging channels in the Console dashboard. The SDK lets you list what is active but cannot modify the connections.
- Open Console dashboard → Agents → select your agent.
- Under Channels, connect your WhatsApp Business number.
- Under Channels, enable the web chat widget and paste the embed snippet into your hotel website.
- Under Integrations, connect Google Calendar. The agent uses it to check room availability against confirmed bookings.
- Under Integrations, connect Stripe if you want the agent to collect a holding deposit at confirmation.
5. Verify and go live
const integrations = await bimpe.agents.integrations.list(agent.id);
const channels = await bimpe.agents.channels.list(agent.id);
console.log("Integrations:", integrations.map((i) => i.name));
console.log("Channels:", channels.map((c) => c.type));integrations = client.agents.integrations.list(agent.id)
channels = client.agents.channels.list(agent.id)
print("Integrations:", [i.name for i in integrations])
print("Channels:", [c.type for c in channels])Full example
import { BimpeAI } from "@bimpeai/sdk";
const bimpe = new BimpeAI({ apiKey: process.env.BIMPEAI_API_KEY! });
// 1. Find workflow
const page = await bimpe.workflows.list({ scope: "public", search: "hotel" });
const workflow = page.data[0];
// 2. Create agent
const agent = await bimpe.agents.create(
{
name: "Hotel concierge",
system_prompt:
"You are a hotel concierge. Help guests check room availability, make reservations, " +
"answer amenity questions, and recommend local attractions. " +
"Always confirm availability via the calendar integration before quoting a booking.",
agent_workflow_id: workflow.id,
},
{ idempotencyKey: "create-hotel-concierge-v1" },
);
// 3. Add knowledge bases
await bimpe.agents.knowledgeBases.create(agent.id, {
type: "text",
name: "Room inventory",
content:
"Standard Double — £95/night — sleeps 2, city view\n" +
"Deluxe King — £135/night — sleeps 2, garden view, mini-bar\n" +
"Family Suite — £185/night — sleeps 4, two bathrooms\n" +
"Executive Suite — £260/night — sleeps 2, lounge, late checkout",
});
await bimpe.agents.knowledgeBases.create(agent.id, {
type: "text",
name: "Booking policy",
content:
"Check-in: 15:00. Check-out: 11:00.\n" +
"Cancellation: free up to 48 hours before arrival. Within 48 hours: one night charged.",
});
// 4. Verify integrations and channels (configured via dashboard)
const integrations = await bimpe.agents.integrations.list(agent.id);
const channels = await bimpe.agents.channels.list(agent.id);
console.log("Agent ID:", agent.id);
console.log("Integrations:", integrations.map((i) => i.name));
console.log("Channels:", channels.map((c) => c.type));
// 5. Stream incoming guest messages
const controller = new AbortController();
for await (const event of bimpe.conversations.messages.stream(
agent.id,
"<conversation_id>",
{ signal: controller.signal },
)) {
console.log(event.role, event.message);
}import os
from bimpeai import BimpeAI
client = BimpeAI(api_key=os.environ["BIMPEAI_API_KEY"])
# 1. Find workflow
page = client.workflows.list(scope="public", search="hotel")
workflow = page.data[0]
# 2. Create agent
agent = client.agents.create(
name="Hotel concierge",
system_prompt=(
"You are a hotel concierge. Help guests check room availability, make reservations, "
"answer amenity questions, and recommend local attractions. "
"Always confirm availability via the calendar integration before quoting a booking."
),
agent_workflow_id=workflow.id,
idempotency_key="create-hotel-concierge-v1",
)
# 3. Add knowledge bases
client.agents.knowledge_bases.create(agent.id, {
"type": "text",
"name": "Room inventory",
"content": (
"Standard Double — £95/night — sleeps 2, city view\n"
"Deluxe King — £135/night — sleeps 2, garden view, mini-bar\n"
"Family Suite — £185/night — sleeps 4, two bathrooms\n"
"Executive Suite — £260/night — sleeps 2, lounge, late checkout"
),
})
client.agents.knowledge_bases.create(agent.id, {
"type": "text",
"name": "Booking policy",
"content": (
"Check-in: 15:00. Check-out: 11:00.\n"
"Cancellation: free up to 48 hours before arrival. Within 48 hours: one night charged."
),
})
# 4. Verify integrations and channels (configured via dashboard)
integrations = client.agents.integrations.list(agent.id)
channels = client.agents.channels.list(agent.id)
print("Agent ID:", agent.id)
print("Integrations:", [i.name for i in integrations])
print("Channels:", [c.type for c in channels])
# 5. Stream incoming guest messages
for event in client.conversations.messages.stream(agent.id, "<conversation_id>"):
print(event.role, event.message)Deploy
Store your API key in BIMPEAI_API_KEY. Confirm that Google Calendar appears in integrations.list before opening reservations — the agent cannot check availability without it. Update the room inventory knowledge base whenever rates change using knowledgeBases.update. Use a stable idempotencyKey to prevent duplicate agents on redeploy.
Variations
- Add a local events knowledge base entry and update it weekly so the agent can recommend what is on during a guest's stay.
- Narrow the agent to upsell spa packages by adding package details and an upsell instruction to
system_prompt. - Send a pre-arrival message to the guest's WhatsApp the day before check-in using
conversations.messages.sendfrom a scheduled script.
General E-commerce Store Agent
Help shoppers browse products, check stock, place orders, and get post-purchase support — all through WhatsApp, web chat, or Facebook Messenger.
Lost or Stolen Card Support
Answer inbound calls from customers who have lost their card or had it stolen, capture the details, initiate a block, log the incident, and confirm a replacement is on the way.