Short-Stay Self Check-in Agent
Give Airbnb and short-let guests instant access to key codes, house rules, Wi-Fi details, and checkout reminders — no external APIs required.
What you'll build
An agent that guides short-stay guests through self check-in: key safe codes, door entry instructions, house rules, Wi-Fi credentials, appliance guides, and a checkout reminder. Everything is served from a knowledge base — no external APIs are required, making this the fastest recipe to deploy.
Customer journey
A guest receives a WhatsApp message before check-in with door code instructions. They reply with questions about Wi-Fi, parking, or early access; the agent answers from the property FAQ and escalates maintenance issues to the host.
See Deploying and testing channels for connect and test steps per channel.
Prerequisites
- BimpeAI account with an API key (
sk_…) - Read Anatomy of a workflow agent first — this recipe skips steps covered there
- WhatsApp Business number connected in the Console dashboard (see Step 4)
Steps
1. Find or create 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: "check-in" });
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="check-in")
workflow = page.data[0]
print(workflow.id, workflow.name)Or build a new workflow from scratch with workflows.create instead of finding one. name and system_prompt are required; it returns the new Workflow whose id you bind the agent to. See Anatomy of a workflow agent for the full set of optional fields like rules and flows.
const workflow = await bimpe.workflows.create({
name: "Self check-in assistant",
system_prompt: "You guide short-stay guests through self check-in, key codes, house rules, Wi-Fi details, and checkout reminders.",
});
console.log(workflow.id);workflow = client.workflows.create(
name="Self check-in assistant",
system_prompt="You guide short-stay guests through self check-in, key codes, house rules, Wi-Fi details, and checkout reminders.",
)
print(workflow.id)2. Create the agent
const agent = await bimpe.agents.create(
{
name: "Self check-in assistant",
description: "Guides short-stay guests through self check-in, house rules, and checkout.",
workflow_id: workflow.id,
},
{ idempotencyKey: "create-self-checkin-agent-v1" },
);
console.log(agent.id);agent = client.agents.create(
name="Self check-in assistant",
description="Guides short-stay guests through self check-in, house rules, and checkout.",
workflow_id=workflow.id,
idempotency_key="create-self-checkin-agent-v1",
)
print(agent.id)3. Add the property knowledge base (optional)
Knowledge bases are optional; an agent whose workflow and integrations already cover everything it needs to say can skip this step. This recipe uses one to ground the agent in the details it must quote accurately.
One knowledge base covers everything the guest needs for their stay. Update it whenever you change codes or rules — no agent reconfiguration required.
// All property details in a single knowledge base
await bimpe.agents.knowledgeBases.create(agent.id, {
type: "text",
name: "Property details",
content:
"ADDRESS: 14 Maple Street, Flat 3, London E1 6RF\n\n" +
"ARRIVAL:\n" +
" Key safe is on the right of the front door, code: 4821.\n" +
" Flat 3 is on the second floor, turn left at the top of the stairs.\n" +
" Park in the bay marked '14' on Maple Street — free after 18:30 weekdays, all day weekends.\n\n" +
"WI-FI:\n" +
" Network: MapleFlat3\n" +
" Password: sunny2026!\n\n" +
"APPLIANCES:\n" +
" Boiler: press the red button on the right side to boost hot water (30-min boost).\n" +
" Washing machine: powder in the drawer on the left, programme 2 for a standard wash.\n" +
" Hob: turn the dial to the flame icon, then press and hold for 3 seconds to ignite.\n\n" +
"HOUSE RULES:\n" +
" No smoking anywhere in the property.\n" +
" No parties or gatherings over 4 people.\n" +
" Quiet hours: 22:00–08:00.\n" +
" Bins: recycling (blue) and general waste (black) collected on Wednesday morning.\n\n" +
"CHECKOUT:\n" +
" Checkout by 11:00. Strip the beds and leave towels in the bathroom.\n" +
" Return the key to the key safe and set the code back to 0000.\n" +
" Leave the heating on the frost setting (turn the dial to the snowflake icon).",
});# All property details in a single knowledge base
client.agents.knowledge_bases.create(agent.id, {
"type": "text",
"name": "Property details",
"content": (
"ADDRESS: 14 Maple Street, Flat 3, London E1 6RF\n\n"
"ARRIVAL:\n"
" Key safe is on the right of the front door, code: 4821.\n"
" Flat 3 is on the second floor, turn left at the top of the stairs.\n"
" Park in the bay marked '14' on Maple Street — free after 18:30 weekdays, all day weekends.\n\n"
"WI-FI:\n"
" Network: MapleFlat3\n"
" Password: sunny2026!\n\n"
"APPLIANCES:\n"
" Boiler: press the red button on the right side to boost hot water (30-min boost).\n"
" Washing machine: powder in the drawer on the left, programme 2 for a standard wash.\n"
" Hob: turn the dial to the flame icon, then press and hold for 3 seconds to ignite.\n\n"
"HOUSE RULES:\n"
" No smoking anywhere in the property.\n"
" No parties or gatherings over 4 people.\n"
" Quiet hours: 22:00–08:00.\n"
" Bins: recycling (blue) and general waste (black) collected on Wednesday morning.\n\n"
"CHECKOUT:\n"
" Checkout by 11:00. Strip the beds and leave towels in the bathroom.\n"
" Return the key to the key safe and set the code back to 0000.\n"
" Leave the heating on the frost setting (turn the dial to the snowflake icon)."
),
})4. Connect the WhatsApp channel (dashboard)
WhatsApp is connected in the dashboard
The API cannot create channel connections. Connect your messaging channels on the Deploy screen of the Console dashboard. The SDK lists what is active but cannot modify channel connections.
- In the Console dashboard, pick your agent from the switcher at the top, then open Deploy.
- Under Messaging & Chat, click Connect on the WhatsApp card and follow the prompts to link your WhatsApp Business number.
- Share the WhatsApp link with guests in your booking confirmation email so they can message the agent on arrival.
Connect WhatsApp
Customers message your WhatsApp Business number for support and transactions.
- Open the Deploy screen in the Console dashboard and select your agent.
- Under Messaging & Chat, click Connect on the WhatsApp card.
- Follow the prompts to link your WhatsApp Business number.
- Once connected, customers can message your business number and the agent replies within WhatsApp's 24-hour session window.
Full reference: Deploying and testing channels.
Also on Instagram and Messenger: the same Deploy → Connect flow applies. Testers use the Deploy panel links or getTestCode deep links for each network. Instagram · Messenger
5. Test your agent
Before going live, exercise the agent on a test channel. Fetch the test code (created on first request), then test on WhatsApp — share the deep link or start message with a human tester, or inject a message from your server.
Test WhatsApp
Human tester: fetch the test code with agents.getTestCode (or use the Deploy panel). Share the deep link or start <code> message with a tester.
SDK injection: call conversations.send with is_test_channel: true and the matching channel_type.
Full reference: Deploying and testing channels.
const { channels } = await bimpe.agents.getTestCode(agent.id);
// A tester opens channels.whatsapp.url, or sends channels.whatsapp.start_message
// to channels.whatsapp.phone_number, to open a 24-hour test window.
console.log(channels.whatsapp.start_message, channels.whatsapp.url);
// Or inject a test message yourself:
await bimpe.conversations.send(agent.id, {
message: "Hi, I've just arrived — what's the key safe code?",
channel_type: "whatsapp",
channel_user_id: "<tester-whatsapp-number>",
is_test_channel: true,
});test_code = client.agents.get_test_code(agent.id)
# A tester opens .url, or sends .start_message to .phone_number, to open a 24-hour window.
print(test_code.channels.whatsapp.start_message, test_code.channels.whatsapp.url)
# Or inject a test message yourself:
client.conversations.send(
agent.id,
message="Hi, I've just arrived — what's the key safe code?",
channel_type="whatsapp",
channel_user_id="<tester-whatsapp-number>",
is_test_channel=True,
)See Test your agent for the other test channels and the pause-AI rule.
6. Go live
Verify the channel is connected before your first guest arrives:
const channels = await bimpe.agents.channels.list(agent.id);
console.log("Channels:", channels.map((c) => c.type));channels = client.agents.channels.list(agent.id)
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: "check-in" });
const workflow = page.data[0];
// 2. Create agent
const agent = await bimpe.agents.create(
{
name: "Self check-in assistant",
description: "Guides short-stay guests through self check-in, house rules, and checkout.",
workflow_id: workflow.id,
},
{ idempotencyKey: "create-self-checkin-agent-v1" },
);
// 3. Add property knowledge base
await bimpe.agents.knowledgeBases.create(agent.id, {
type: "text",
name: "Property details",
content:
"Key safe code: 4821 (reset to 0000 on departure).\n" +
"Wi-Fi: MapleFlat3 / sunny2026!\n" +
"Checkout: 11:00. Strip beds, leave towels in bathroom.",
});
// 4. Verify channel (configured via dashboard)
const channels = await bimpe.agents.channels.list(agent.id);
console.log("Agent ID:", agent.id);
console.log("Channels:", channels.map((c) => c.type));
// 5. Stream messages in a guest conversation
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="check-in")
workflow = page.data[0]
# 2. Create agent
agent = client.agents.create(
name="Self check-in assistant",
description="Guides short-stay guests through self check-in, house rules, and checkout.",
workflow_id=workflow.id,
idempotency_key="create-self-checkin-agent-v1",
)
# 3. Add property knowledge base
client.agents.knowledge_bases.create(agent.id, {
"type": "text",
"name": "Property details",
"content": (
"Key safe code: 4821 (reset to 0000 on departure).\n"
"Wi-Fi: MapleFlat3 / sunny2026!\n"
"Checkout: 11:00. Strip beds, leave towels in bathroom."
),
})
# 4. Verify channel (configured via dashboard)
channels = client.agents.channels.list(agent.id)
print("Agent ID:", agent.id)
print("Channels:", [c.type for c in channels])
# 5. Stream messages in a guest conversation
for event in client.conversations.messages.stream(agent.id, "<conversation_id>"):
print(event.role, event.message)Deploy and go live
Go-live checklist
- Store your API key in
BIMPEAI_API_KEY(server-side only). - Confirm Property management system appears in
integrations.listor is connected in the dashboard. - Confirm Smart lock API appears in
integrations.listor is connected in the dashboard. - Verify WhatsApp is connected on the Deploy screen (
agents.channels.listshows it enabled). - Set Escalation Email under Settings → Agent if humans must take over.
- Switch the agent to
livewithupdateLiveStatus/update_live_status. - Monitor the Conversations screen (or stream via SDK) after launch.
After go-live
Send pre-arrival messages with conversations.send from a scheduled script. Update property FAQ when amenities change.
Variations
- Manage multiple properties by creating one agent per property, each with its own knowledge base containing that property's specific codes and rules.
- Add a local area section to the knowledge base with supermarket locations, takeaway recommendations, and the nearest bus stop.
- Send a checkout reminder the morning of departure using
conversations.send(create-or-send by channel) from a scheduled script, triggered by the booking end date.
Salon & Spa Booking Agent
Let clients browse services, match with a stylist, and book appointments across WhatsApp and web chat — with Google Calendar handling availability.
Subscription Management Agent
Handle plan upgrades, downgrades, cancellations, billing queries, and payment method updates via web chat or inbound voice — backed by Stripe.