> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bothive.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# Meeting Assistants

> Build agents that schedule meetings, send summaries, and follow up — automatically.

<div className="hero-container">
  <h1 className="hero-title">
    Meeting Assistants
  </h1>

  <p className="hero-subtitle">
    Agents that handle the entire meeting lifecycle — scheduling, summaries, and follow-ups — so you don't have to.
  </p>
</div>

## What you can build

<CardGroup cols={2}>
  <Card title="Scheduling Assistant" icon="calendar-plus" className="glass-effect">
    Checks calendar availability across multiple attendees, suggests times, and creates events with one click.
  </Card>

  <Card title="Meeting Summarizer" icon="file-lines" className="glass-effect">
    Reads meeting transcripts (from Notion, Docs, or uploaded text), extracts decisions, action items, and owners.
  </Card>

  <Card title="Follow-Up Agent" icon="paper-plane" className="glass-effect">
    After a meeting ends, sends personalized follow-up emails to each attendee with their action items.
  </Card>

  <Card title="Prep Brief Generator" icon="clipboard-list" className="glass-effect">
    Before a meeting, reads calendar context, prior notes, and CRM data to generate a pre-meeting brief.
  </Card>
</CardGroup>

## Setup

<Steps>
  <Step title="Connect Google Calendar and Gmail">
    **Integrations** → **Google Calendar** → **Connect with Google** → authorize:

    * `calendar.events` — read and create events
    * `calendar.readonly` — check availability

    Repeat for **Gmail** if you want email follow-ups.
  </Step>

  <Step title="Write your scheduling agent">
    ```hivelang theme={null}
    bot MeetingScheduler {
      description: "Executive calendar and scheduling assistant"

      capabilities {
        google_calendar.checkAvailability
        google_calendar.createEvent
        google_calendar.getEvents
        gmail.sendEmail
        gmail.createDraft
      }

      instructions {
        You are an executive scheduling assistant.

        When asked to schedule a meeting:
        1. Collect: attendees, purpose, preferred duration, date preferences
        2. Check availability for all attendees
        3. Propose 3 time slots that work for everyone
        4. Wait for confirmation before creating the event
        5. Create the event and send invites once confirmed

        Rules:
        - Always confirm before creating calendar events
        - Propose slots at least 24 hours in advance
        - Include a meeting agenda in the invite description
        - Send a confirmation email to all attendees after booking
      }
    }
    ```
  </Step>

  <Step title="Test the scheduling flow">
    In the Playground, simulate: "Schedule a 30-min call with [john@acme.com](mailto:john@acme.com) and [sarah@corp.com](mailto:sarah@corp.com) this week."

    Verify the agent:

    * Asks for any missing details
    * Checks availability before proposing times
    * Does NOT create the event until you confirm
  </Step>

  <Step title="Deploy to your preferred channel">
    Web, Telegram, or Slack — wherever you want to interact with your scheduling assistant. Many users prefer Telegram for personal scheduling bots.
  </Step>
</Steps>

## Full meeting scheduler example

```hivelang theme={null}
bot ExecutiveAssistant {
  description: "Full-featured executive calendar assistant"

  capabilities {
    google_calendar.checkAvailability
    google_calendar.createEvent
    google_calendar.getEvents
    google_calendar.deleteEvent
    gmail.sendEmail
    gmail.createDraft
    notion.createPage
  }

  instructions {
    You are Alex, an executive calendar assistant.

    For scheduling requests:
    1. Ask who to schedule with, purpose, duration, and preferred time
    2. Check availability across all attendees
    3. Propose exactly 3 options — always list day, date, and time clearly
    4. On confirmation: create the event, send invites, add meeting notes template to Notion
    5. Confirm the booking with a summary

    For meeting summaries:
    - Extract: decisions made, action items with owners, next meeting date
    - Format as a clean bullet-point list
    - Create a Notion page titled "[Date] - [Meeting Name] Summary"
    - Email the summary to all attendees

    Always:
    - Address the user by name if you know it
    - Confirm before any action that creates or deletes calendar events
    - Use the user's timezone (ask once, remember permanently)
  }

  on "/schedule *" {
    say "Let me find the best time. Who should be included, and what's the purpose?"
  }

  on "/summary" {
    say "Please share the meeting notes or transcript, and I'll extract the key points and action items."
  }

  on "/today" {
    events = call google_calendar.getEvents with {
      date: today,
      limit: 10
    }
    say "Your schedule for today:\n{events}"
  }
}
```

## Integration capabilities for meetings

| Capability                          | Use case                              |
| ----------------------------------- | ------------------------------------- |
| `google_calendar.checkAvailability` | Find open slots across attendees      |
| `google_calendar.createEvent`       | Book the meeting with invite          |
| `google_calendar.getEvents`         | List today's or this week's schedule  |
| `google_calendar.deleteEvent`       | Cancel a meeting                      |
| `gmail.sendEmail`                   | Send follow-up or confirmation        |
| `gmail.createDraft`                 | Draft for human review before sending |
| `notion.createPage`                 | Create meeting notes page             |

## Best practices

<AccordionGroup>
  <Accordion title="Always confirm before creating events">
    Meeting agents have write access to calendars. Always require explicit user confirmation before calling `createEvent`. One wrong calendar invite to the CEO is one too many.
  </Accordion>

  <Accordion title="Ask for timezone once, remember permanently">
    Timezone confusion is the #1 scheduling error. Ask users for their timezone on first interaction and store it in persistent memory. Never assume UTC.
  </Accordion>

  <Accordion title="Handle decline gracefully">
    If a proposed time doesn't work, the agent should immediately offer alternatives — not start the availability check from scratch.
  </Accordion>

  <Accordion title="Use Notion for meeting notes">
    Create a structured Notion page per meeting: agenda, attendees, decisions, action items. Link this in the calendar invite description for easy reference.
  </Accordion>
</AccordionGroup>

## Next reads

<CardGroup cols={3}>
  <Card title="Gmail Agents" icon="envelope" href="./gmail-agents" className="glass-effect" />

  <Card title="Integration Capabilities" icon="plug" href="./integration-capabilities" className="glass-effect" />

  <Card title="Build Your First Agent" icon="hammer" href="./build-your-first-agent" className="glass-effect" />
</CardGroup>
