Use casesRecipes

Event Venue Inquiry Agent

Qualify event leads, answer capacity and pricing questions, and book viewing appointments — over inbound voice calls and web chat.

DifficultyIntermediate
TrackBuilder Track or Developer Track
ChannelsVoice (Inbound)Web Chat
IntegrationsGoogle Calendar (viewing bookings)Venue details/pricing (knowledge base)CRM (optional)

What you'll build

An agent that handles inbound venue inquiries end to end: answers availability, capacity, and pricing questions from a knowledge base, qualifies leads by collecting event type and headcount, and books site viewings directly into Google Calendar. An optional CRM integration captures qualified leads for your sales team.

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)
  • Inbound voice phone number and 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: "venue" });
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="venue")
workflow = page.data[0]
print(workflow.id, workflow.name)

2. Create the agent

const agent = await bimpe.agents.create(
  {
    name: "Venue inquiry agent",
    system_prompt:
      "You handle inbound inquiries for an event venue. " +
      "Answer questions about capacity, pricing, catering, AV equipment, and parking from the knowledge base. " +
      "Qualify each lead by collecting: event type, expected headcount, preferred date, and contact name. " +
      "Once you have that information, offer to book a site viewing via the Google Calendar integration. " +
      "Do not invent prices or availability — use only what the knowledge base and calendar confirm.",
    agent_workflow_id: workflow.id,
  },
  { idempotencyKey: "create-venue-inquiry-agent-v1" },
);

console.log(agent.id);
agent = client.agents.create(
    name="Venue inquiry agent",
    system_prompt=(
        "You handle inbound inquiries for an event venue. "
        "Answer questions about capacity, pricing, catering, AV equipment, and parking from the knowledge base. "
        "Qualify each lead by collecting: event type, expected headcount, preferred date, and contact name. "
        "Once you have that information, offer to book a site viewing via the Google Calendar integration. "
        "Do not invent prices or availability — use only what the knowledge base and calendar confirm."
    ),
    agent_workflow_id=workflow.id,
    idempotency_key="create-venue-inquiry-agent-v1",
)

print(agent.id)

3. Add knowledge bases

Two knowledge bases cover the venue's spaces and the pricing structure. The agent draws on both when answering detailed inquiries.

// Venue spaces and facilities
await bimpe.agents.knowledgeBases.create(agent.id, {
  type: "text",
  name: "Venue spaces",
  content:
    "Grand Hall — capacity 400 seated / 600 standing — full AV rig, stage, dance floor, in-house bar\n" +
    "Garden Room — capacity 120 seated / 200 standing — floor-to-ceiling windows, terrace access\n" +
    "Boardroom — capacity 20 seated — projector, video conferencing, natural daylight\n" +
    "Outdoor Terrace — capacity 150 standing — covered, heated, suitable April–October\n\n" +
    "Facilities: 4 dressing rooms, dedicated loading bay, 200-space car park (free), full catering kitchen.\n" +
    "AV: in-house technician available for Grand Hall bookings. External AV for other spaces at client's cost.\n" +
    "Accessibility: step-free access to all spaces, hearing loop in Grand Hall and Boardroom.",
});

// Pricing and packages
await bimpe.agents.knowledgeBases.create(agent.id, {
  type: "text",
  name: "Pricing",
  content:
    "Grand Hall — full day (08:00–00:00): £3,500 — half day (am or pm): £2,000\n" +
    "Garden Room — full day: £1,200 — half day: £700\n" +
    "Boardroom — full day: £450 — half day: £280 — per hour (min 2h): £80\n" +
    "Outdoor Terrace — per session (4h): £600\n\n" +
    "Catering: in-house only. Canapes from £18/head, three-course dinner from £55/head.\n" +
    "Minimum spend applies for Saturday evening Grand Hall bookings: £8,000 total.\n" +
    "A 30% non-refundable deposit is required to hold the date. Balance due 30 days before the event.\n" +
    "Site viewings: free, weekdays 09:00–17:00, weekends by arrangement.",
});
# Venue spaces and facilities
client.agents.knowledge_bases.create(agent.id, {
    "type": "text",
    "name": "Venue spaces",
    "content": (
        "Grand Hall — capacity 400 seated / 600 standing — full AV rig, stage, dance floor, in-house bar\n"
        "Garden Room — capacity 120 seated / 200 standing — floor-to-ceiling windows, terrace access\n"
        "Boardroom — capacity 20 seated — projector, video conferencing, natural daylight\n"
        "Outdoor Terrace — capacity 150 standing — covered, heated, suitable April–October\n\n"
        "Facilities: 4 dressing rooms, dedicated loading bay, 200-space car park (free), full catering kitchen.\n"
        "AV: in-house technician available for Grand Hall bookings. External AV for other spaces at client's cost.\n"
        "Accessibility: step-free access to all spaces, hearing loop in Grand Hall and Boardroom."
    ),
})

# Pricing and packages
client.agents.knowledge_bases.create(agent.id, {
    "type": "text",
    "name": "Pricing",
    "content": (
        "Grand Hall — full day (08:00–00:00): £3,500 — half day (am or pm): £2,000\n"
        "Garden Room — full day: £1,200 — half day: £700\n"
        "Boardroom — full day: £450 — half day: £280 — per hour (min 2h): £80\n"
        "Outdoor Terrace — per session (4h): £600\n\n"
        "Catering: in-house only. Canapes from £18/head, three-course dinner from £55/head.\n"
        "Minimum spend applies for Saturday evening Grand Hall bookings: £8,000 total.\n"
        "A 30% non-refundable deposit is required to hold the date. Balance due 30 days before the event.\n"
        "Site viewings: free, weekdays 09:00–17:00, weekends by arrangement."
    ),
})

4. Connect channels and integrations (dashboard)

Inbound voice, web chat, Google Calendar, and CRM are configured in the dashboard

The API cannot create channel connections or integrations. Inbound voice, web chat, Google Calendar, and any CRM connector are all connected in the Console dashboard. There is no voice value in the SDK channel filter — voice conversations are handled through the inbound phone number you configure in the dashboard.

  1. Open Console dashboardAgents → select your agent.
  2. Under Channels, enable the web chat widget and paste the embed snippet into your venue website.
  3. Under Channels, connect an inbound voice phone number. The dashboard handles carrier connection and call routing.
  4. Under Integrations, connect Google Calendar so the agent can check viewing slot availability and book appointments.
  5. Under Integrations, connect your CRM (if applicable) so qualified leads are captured automatically.

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: "venue" });
const workflow = page.data[0];

// 2. Create agent
const agent = await bimpe.agents.create(
  {
    name: "Venue inquiry agent",
    system_prompt:
      "You handle inbound venue inquiries. Answer capacity, pricing, and catering questions. " +
      "Qualify leads by collecting event type, headcount, date, and contact name. " +
      "Offer a site viewing once the lead is qualified.",
    agent_workflow_id: workflow.id,
  },
  { idempotencyKey: "create-venue-inquiry-agent-v1" },
);

// 3. Add knowledge bases
await bimpe.agents.knowledgeBases.create(agent.id, {
  type: "text",
  name: "Venue spaces",
  content:
    "Grand Hall — 400 seated / 600 standing — AV, stage, bar\n" +
    "Garden Room — 120 seated / 200 standing — terrace access\n" +
    "Boardroom — 20 seated — projector, video conferencing",
});

await bimpe.agents.knowledgeBases.create(agent.id, {
  type: "text",
  name: "Pricing",
  content:
    "Grand Hall full day: £3,500 / half day: £2,000\n" +
    "Garden Room full day: £1,200 / half day: £700\n" +
    "Boardroom full day: £450 / per hour: £80\n" +
    "Deposit: 30% non-refundable to hold the date.",
});

// 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 web chat inquiries
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="venue")
workflow = page.data[0]

# 2. Create agent
agent = client.agents.create(
    name="Venue inquiry agent",
    system_prompt=(
        "You handle inbound venue inquiries. Answer capacity, pricing, and catering questions. "
        "Qualify leads by collecting event type, headcount, date, and contact name. "
        "Offer a site viewing once the lead is qualified."
    ),
    agent_workflow_id=workflow.id,
    idempotency_key="create-venue-inquiry-agent-v1",
)

# 3. Add knowledge bases
client.agents.knowledge_bases.create(agent.id, {
    "type": "text",
    "name": "Venue spaces",
    "content": (
        "Grand Hall — 400 seated / 600 standing — AV, stage, bar\n"
        "Garden Room — 120 seated / 200 standing — terrace access\n"
        "Boardroom — 20 seated — projector, video conferencing"
    ),
})

client.agents.knowledge_bases.create(agent.id, {
    "type": "text",
    "name": "Pricing",
    "content": (
        "Grand Hall full day: £3,500 / half day: £2,000\n"
        "Garden Room full day: £1,200 / half day: £700\n"
        "Boardroom full day: £450 / per hour: £80\n"
        "Deposit: 30% non-refundable to hold the date."
    ),
})

# 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 web chat inquiries
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 going live — without it the agent cannot book viewings. Update pricing knowledge base entries at the start of each calendar year using knowledgeBases.update. Use a stable idempotencyKey to prevent duplicate agents on redeploy.

Variations

  • Add a seasonal availability blackout section to the pricing knowledge base (e.g. Christmas party season minimum spend) so the agent quotes correctly for peak dates.
  • Send a viewing confirmation message using conversations.messages.send once the calendar slot is booked.
  • Create separate agents for corporate and private event inquiries, each with a system prompt and pricing knowledge base tuned for that audience.

On this page