Use casesRecipes

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.

DifficultyBeginner
TrackBuilder Track
ChannelsWhatsApp
IntegrationsProperty details (knowledge base)

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.

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

2. Create the agent

const agent = await bimpe.agents.create(
  {
    name: "Self check-in assistant",
    system_prompt:
      "You help short-stay guests check in and out smoothly. " +
      "Provide key safe codes, door entry instructions, Wi-Fi credentials, " +
      "appliance guides, and house rules on request. " +
      "Send a checkout reminder when the guest asks about departure. " +
      "Never share security codes with anyone who has not confirmed their booking reference.",
    agent_workflow_id: workflow.id,
  },
  { idempotencyKey: "create-self-checkin-agent-v1" },
);

console.log(agent.id);
agent = client.agents.create(
    name="Self check-in assistant",
    system_prompt=(
        "You help short-stay guests check in and out smoothly. "
        "Provide key safe codes, door entry instructions, Wi-Fi credentials, "
        "appliance guides, and house rules on request. "
        "Send a checkout reminder when the guest asks about departure. "
        "Never share security codes with anyone who has not confirmed their booking reference."
    ),
    agent_workflow_id=workflow.id,
    idempotency_key="create-self-checkin-agent-v1",
)

print(agent.id)

3. Add the property knowledge base

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 configured in the dashboard

The API cannot create channel connections. Connect your WhatsApp Business number in the Console dashboard. The SDK lets you list active channels but cannot modify the connections.

  1. Open Console dashboardAgents → select your agent.
  2. Under Channels, connect your WhatsApp Business number.
  3. Share the WhatsApp link with guests in your booking confirmation email so they can message the agent on arrival.

5. 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",
    system_prompt:
      "You help short-stay guests check in and out. Provide key codes, Wi-Fi, appliance guides, " +
      "house rules, and checkout instructions. Only share codes after the guest confirms their booking reference.",
    agent_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 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="check-in")
workflow = page.data[0]

# 2. Create agent
agent = client.agents.create(
    name="Self check-in assistant",
    system_prompt=(
        "You help short-stay guests check in and out. Provide key codes, Wi-Fi, appliance guides, "
        "house rules, and checkout instructions. Only share codes after the guest confirms their booking reference."
    ),
    agent_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 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. When you change the key safe code between stays, update the knowledge base using knowledgeBases.update — there is nothing else to redeploy. Use a stable idempotencyKey so reruns do not create duplicate agents.

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.messages.send from a scheduled script, triggered by the booking end date.

On this page