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

# Playbooks

> Ready-made calls for your AI assistant: book with a business, get through a phone menu, wait on hold, leave a voicemail, get the answer you need, keep it short, and screen your calls.

export const PromptCopy = ({prompt, label = 'Copy the prompt'}) => {
  const [state, setState] = useState('idle');
  const [open, setOpen] = useState(false);
  const id = `prompt-${String(label).toLowerCase().replace(/[^a-z0-9]+/g, '-')}`;
  const selectText = () => {
    const node = typeof document === 'undefined' ? null : document.getElementById(`${id}-text`);
    if (!node || typeof window === 'undefined') return;
    const range = document.createRange();
    range.selectNodeContents(node);
    const selection = window.getSelection();
    selection.removeAllRanges();
    selection.addRange(range);
  };
  const copy = async () => {
    try {
      await navigator.clipboard.writeText(prompt);
      setState('copied');
      setTimeout(() => setState('idle'), 2000);
    } catch (error) {
      setOpen(true);
      setState('blocked');
      setTimeout(selectText, 0);
    }
  };
  const status = state === 'copied' ? 'Copied. Now paste it into your assistant.' : state === 'blocked' ? 'Press and hold the text to copy it.' : '';
  return <div style={{
    margin: '12px 0 20px'
  }}>
      <button type="button" onClick={copy} aria-describedby={`${id}-status`} style={{
    width: '100%',
    minHeight: 48,
    border: 0,
    borderRadius: 8,
    background: '#8C7AE6',
    color: '#111',
    fontFamily: 'inherit',
    fontSize: 16,
    fontWeight: 600,
    lineHeight: 1.2,
    cursor: 'pointer'
  }}>
        {state === 'copied' ? 'Copied' : label}
      </button>
      <div id={`${id}-text`} style={{
    marginTop: 10,
    padding: '14px 16px',
    border: '1px solid rgba(127,127,127,.35)',
    borderRadius: 8,
    fontSize: 15,
    lineHeight: 1.6,
    whiteSpace: 'pre-wrap',
    maxHeight: open ? 'none' : '6.4em',
    overflow: 'hidden',
    WebkitMaskImage: open ? 'none' : 'linear-gradient(#000 55%, transparent)',
    maskImage: open ? 'none' : 'linear-gradient(#000 55%, transparent)'
  }}>
        {prompt}
      </div>
      <button type="button" onClick={() => setOpen(!open)} aria-expanded={open} style={{
    background: 'none',
    border: 0,
    padding: '8px 0',
    minHeight: 44,
    color: '#8C7AE6',
    fontFamily: 'inherit',
    fontSize: 14,
    cursor: 'pointer'
  }}>
        {open ? 'Show less' : 'Show the whole prompt'}
      </button>
      <p id={`${id}-status`} role="status" aria-live="polite" style={{
    margin: 0,
    fontSize: 14
  }}>
        {status}
      </p>
    </div>;
};

Ready-made moves for the things people most often ask their assistant to do on the phone.

This page has two readers:

* **You:** copy the prompt and paste it into your assistant.
* **Your assistant:** send the `agent_overrides` shown with each playbook on `POST /v1/call`. It
  replaces the call's whole script, so it must carry everything the call needs. Every call sends
  `instruction`, `greeting`, `voicemail_behavior` and `summary_instruction`. How to send a call:
  [Setup steps](/personal-assistants/connect#6-make-the-first-call).

<CardGroup cols={2}>
  <Card title="Call a business for you" icon="store" href="#call-a-business-for-you">
    Book, ask or check something without giving your name away.
  </Card>

  <Card title="Get through a phone menu" icon="grid-3x3" href="#get-through-a-phone-menu">
    It listens to "press 1 for..." and presses the right key itself.
  </Card>

  <Card title="Wait on hold for you" icon="clock" href="#wait-on-hold-for-you">
    It sits in the queue, then talks to whoever picks up.
  </Card>

  <Card title="Leave a message if they don't pick up" icon="voicemail" href="#leave-a-message-if-they-dont-pick-up">
    A voicemail in your words, and no repeat calls.
  </Card>

  <Card title="Get the answer you need back" icon="clipboard-check" href="#get-the-answer-you-need-back">
    Decide what the call summary tells you.
  </Card>

  <Card title="Keep it short" icon="timer" href="#keep-it-short">
    Cap how long a call can run.
  </Card>

  <Card title="Screen calls to your number" icon="phone-incoming" href="#screen-calls-to-your-number">
    People who call your number leave a message.
  </Card>
</CardGroup>

## Call a business for you

Use it for bookings, quotes and quick questions at a clinic, restaurant, shop or office. Your
assistant opens with what the call is about, and gives your name only when it's needed.

<PromptCopy label="Copy the business call prompt" prompt={`Book me a teeth cleaning at Bright Smile Dental (+1 415 555 0170), any weekday morning in the next two weeks. I'm an existing patient.`} />

What your assistant sends:

```json agent_overrides theme={null}
{
  "instruction": "# Personality\nA personal assistant calling on behalf of a client. Warm, brief and polite.\n\n# Goal\nBook a teeth cleaning at Bright Smile Dental for Sam Patel, any weekday morning in the next two weeks.\n\n# Facts\n- Name for the booking: Sam Patel. Sam is an existing patient.\n- If they ask for a contact number, give the number you are calling from: +1 415 555 0199.\n\n# Guardrails\n- Do not give Sam's name until they ask who the appointment is for.\n- Never agree to costs or anything beyond the booking. Say you will check with Sam.\n- Keep it under three minutes.",
  "greeting": "Hi, I'm calling to book a teeth cleaning appointment.",
  "voicemail_behavior": "LEAVE_MESSAGE",
  "voicemail_message": "Hi, I'm calling to book a teeth cleaning for an existing patient, any weekday morning in the next two weeks. Please call back on +1 415 555 0199. Thank you.",
  "summary_instruction": "Say whether an appointment was booked. If yes, give the date, time and any instructions. If not, list the options they offered, in their words."
}
```

Good to know:

* If they ask for a number to reach you, your assistant gives your Brilo number, never your own phone.
* When they call back, your assistant answers. It doesn't know about the earlier call, so it takes a
  message for you.
* Your assistant never agrees to costs or fees for you. It says it will check with you.

More on business calls: [Calling a business](/personal-assistants/connect#calling-a-business).

## Get through a phone menu

Use it for any business with a "press 1 for..." line. Your assistant notices it has reached a menu,
stays quiet, and presses the matching key as soon as it hears the right option.

<PromptCopy label="Copy the phone menu prompt" prompt={`Call my pharmacy at +1 650 555 0119 and ask if my prescription refill is ready.`} />

What your assistant sends:

```json agent_overrides theme={null}
{
  "instruction": "# Goal\nFind out if Sam's prescription refill is ready to pick up.\n\n# Phone menu\nChoose the options for prescriptions and refill status. If you know the path, it is 2, then 1.",
  "greeting": "Hi, I'm calling to check on a prescription refill.",
  "voicemail_behavior": "HANG_UP",
  "summary_instruction": "Say if the refill is ready and when it can be picked up."
}
```

Good to know:

* You don't have to know the menu. The goal is enough; a known path just makes it faster.
* Language menus ("For English, press 2") are answered in your agent's language automatically.
* It only presses keys the menu offers, and asks for an operator only after the menu times out.
* Rules for every menu, like "never enter my account PIN", go in the description of the **Press Phone
  Keys** action on your agent, when you sign in to Brilo.

## Wait on hold for you

Use it for airlines, insurers, banks, anyone with a queue. Your assistant recognises hold music and
"please hold", stays quiet, and greets whoever picks up.

<PromptCopy label="Copy the hold prompt" prompt={`Call United at +1 800 555 0142 and get my seat changed to an aisle on booking K7QX2P. Wait on hold if you have to.`} />

What your assistant sends:

```json agent_overrides theme={null}
{
  "instruction": "# Goal\nChange Sam's seat to an aisle on United booking K7QX2P.\n\n# Facts\n- Booking reference: K7QX2P. Passenger: Sam Patel.\n\n# Guardrails\n- Do not pay for a seat change. If there is a fee, say you will check with Sam.\n- Wait on hold as long as it takes.",
  "greeting": "Hi, I'm calling about a seat on an existing booking.",
  "max_duration_minutes": 60,
  "voicemail_behavior": "HANG_UP",
  "summary_instruction": "Say whether the seat changed, the new seat number, and any fee they quoted."
}
```

Good to know:

* A call runs for at most 60 minutes, hold time included. A very long queue may need a second try
  later.
* Your assistant finishes the call itself and tells you how it went.

## Leave a message if they don't pick up

Use it when the message matters even if nobody answers. A voicemail counts as an answer, so your
assistant doesn't keep calling back.

<PromptCopy label="Copy the voicemail prompt" prompt={`Call Maya at +1 415 555 0123 to say I'm running 10 minutes late. If she doesn't pick up, leave that as a voicemail.`} />

What your assistant sends:

```json agent_overrides theme={null}
{
  "instruction": "# Goal\nTell Maya that Sam is running 10 minutes late.",
  "greeting": "Hi Maya, this is Sam's assistant with a quick message.",
  "voicemail_behavior": "LEAVE_MESSAGE",
  "voicemail_message": "Hi Maya, this is Sam's assistant. Sam is running about 10 minutes late. No need to call back.",
  "summary_instruction": "Say whether Maya picked up or the message went to voicemail."
}
```

Good to know:

* Always send `voicemail_behavior`. Left out, a call that reaches voicemail hangs up without a
  message.
* The message is read word for word. For a business, say what it's about and leave your Brilo
  number, with no personal details like a date of birth or account number.
* Message left: you're done, don't call again for this task. No message left: try once more, at least
  2 hours later and in business hours. Never more than 2 calls to one number for one task.
* A voicemail reached after a phone menu is handled the same way.

More: [If it went to voicemail](/personal-assistants/connect#if-it-went-to-voicemail).

## Get the answer you need back

Use it on every call. `summary_instruction` decides what the summary your assistant reads afterwards
contains. Add it to any call:

```json agent_overrides theme={null}
{
  "summary_instruction": "Say whether they picked up. Give the price they quoted and the earliest date, in their words. Note anything they asked Sam to do."
}
```

Good to know:

* Your assistant checks `GET /v1/call/{id}`, waiting `retry_after` seconds between checks, until the
  call is `completed`, then reads `summary`.
* Without it, the summary is generic.

## Keep it short

Use it for quick confirmations, so a chatty call doesn't use up your minutes. Add it to any call:

```json agent_overrides theme={null}
{
  "max_duration_minutes": 3
}
```

Any whole number from 1 to 60.

## Screen calls to your number

Already on. When someone calls your Brilo number, your assistant picks up with "Hi, this is Sam's AI
assistant. Who am I speaking with?", finds out what they need, and takes a message.

<PromptCopy label="Copy the screening prompt" prompt={`Who called my Brilo number today, and what did they want?`} />

Good to know:

* Your assistant reads these calls with `GET /v1/call`.
* It never gives out your real number, address or codes, however urgent the caller sounds. It flags
  urgent calls and points emergencies to emergency services.
* A caller who says "hold on" and steps away isn't hung up on.

## Limits

Calls per hour, per day and per number, call minutes and where you can call are listed in
[fair use limits](/supported/limits#assistant-phone-plan-fair-use). Your assistant can check what's
left with `GET /v1/usage`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.