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

# Prompt Examples

> Field-tested PulsyAI prompts for booking, warm transfer, and SMS function calls — copy, paste, and customize for your client's vertical.

This page is a catalog of PulsyAI's field-tested function-calling prompts — the ones we use in production for booking appointments, warm-transferring to human closers, and triggering SMS during live calls. Copy them as starting points, customize the vocabulary for your client's vertical, and ship.

<Tip>
  These are the prompts the PulsyAI team uses in production — they're battle-tested across thousands of real calls and SMS conversations. They're shared here as ready-to-use templates, not as the only way to do it. If you (or your client) already have prompts that perform well, keep using them — the platform doesn't enforce any specific prompt format. Use these examples as a starting point if you don't have something working yet, or as a reference to compare against.
</Tip>

Every prompt on this page follows the same underlying pattern: **the agent asks the user a yes/no question, the user confirms, then the function fires**. This ask-confirm-fire pattern is critical for function-calling reliability across all LLMs. For the full reasoning behind why function calls require explicit confirmation triggers, see [Build a Script](/platform/build-your-agent/build-a-script).

## Choosing the right LLM for function calling

Not every function call needs the same model class. Match the model to the complexity of the function flow:

| Use case                   | Recommended LLM tier                          | Why                                                                                                         |
| -------------------------- | --------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| **Booking appointments**   | **GPT-4.1 or smarter** — strongly recommended | Multi-step function flows (check availability → list slots → confirm), date/time parsing, conditional logic |
| **Warm transfer**          | 4o-mini works well, smarter models also fine  | Single function call with a simple trigger condition                                                        |
| **Send SMS during a call** | 4o-mini works well, smarter models also fine  | Single function call with a clear yes/no trigger                                                            |

<Warning>
  For booking, do not cheap out on the model. Booking flows involve calendar function calls, date parsing, and conditional logic that smaller models hallucinate on regularly. The cost difference per call is negligible compared to the cost of a missed booking. **Strongly recommend GPT-4.1 or smarter.**
</Warning>

## Booking appointments

Use this prompt on any Call Flow step where the agent should book a meeting. Compatible with any PulsyAI booking integration — including [Cal.com](/platform/integrations/cal-com) today. The prompt is universal: the function names (`isDateAvailable`, `confirm_booking`, etc.) work the same way regardless of which booking backend powers the integration.

### Setup checklist before using this prompt

* The integration is configured at the agent level (see the integration's setup page).
* The Call Flow step where this prompt lives has the **"Should the agent book a meeting in this step?"** checkbox enabled.
* The integration is attached to the step via **+ Connect Action** in the Call Flows tab.
* The agent's LLM is set to **GPT-4.1 or smarter**.

### The prompt

```text theme={null}
For the free quote, our estimator will come see the project on site. Do you have a date in mind, or would you like me to suggest the next available slot?

[PAUSE FOR RESPONSE]

--- TECHNICAL DIRECTIVES — USING FUNCTIONS ---

CRITICAL RULES:
- NEVER invent availability
- ALWAYS use the functions to get real time slots
- This call is for the REPRESENTATIVE to contact the client BY PHONE
- When mentioning times, always say "ten o'clock", "two o'clock", "nine thirty" — never "10am", "10:00", or digits

AVAILABLE FUNCTIONS:
1. isDateAvailable(date) — Checks if a specific date is available
2. getAvailabilityForRange(start_date, end_date) — Gets all available slots in a period
3. fetchEarliestAvailability() — Gets the closest next availability
4. confirm_booking(date, time, details) — Confirms and saves the appointment (MANDATORY)

CONVERSATION FLOW:

IF THE CLIENT SUGGESTS A DATE:
  [ACTION 1] Call isDateAvailable(date)
  IF AVAILABLE:
    [ACTION 2] Call getAvailabilityForRange(date, date) to get time slots
    Agent: Offer the available slots naturally and ask which time works.
    [Pause — wait for client response]
    IF THE CLIENT ACCEPTS A TIME:
      [ACTION 3] Call confirm_booking(date, time, details)
      Agent: "Excellent! I confirm that our representative will contact you on {DAY} at {TIME}."
  IF NOT AVAILABLE:
    [ACTION 2] Call fetchEarliestAvailability()
    Agent: "Unfortunately, I have no availability that day. The next opening is {DATE} at {TIME}. Would that work?"
    [Pause]
    IF YES: Call confirm_booking(date, time, details) → Confirm
    IF NO: Call getAvailabilityForRange(start, end) → Offer other options

IF THE CLIENT WANTS THE EARLIEST DATE:
  [ACTION 1] Immediately call fetchEarliestAvailability()
  Agent: "Perfect! The next availability is {DATE} at {TIME}. Does that work for you?"
  [Pause]
  IF YES: Call confirm_booking(date, time, details) → Confirm
  IF NO: Call getAvailabilityForRange(start, end) → Offer other options

APPOINTMENT CONFIRMATION:
[Once the appointment is confirmed via the function]
Agent: "Excellent! I confirm that our representative will call you on {DAY} at {TIME}."
Agent: "You will receive an email confirmation with all the details."
```

### Customizing this prompt

Keep fixed: the function names, the CRITICAL RULES block, the conversation flow structure, the time-pronunciation rule.

Adapt freely: the opening sentence ("For the free quote..."), the service vocabulary ("estimator", "representative", "specialist"), the confirmation phrases, the language.

## Warm transfer to a human representative

Use this prompt when the agent should hand off the call directly to a human team — typically a closer line standing by during business hours. This is the pattern documented in [Principle 9: The AI prequalifies, the human closes](/platform/build-your-agent/build-a-script#principle-9-the-ai-prequalifies-the-human-closes).

### Setup checklist before using either transfer prompt

* At least one recipient is configured in the agent's **Transfers tab** — name + phone number with country code (for example +14385551234 for Canada/US, +33612345678 for France).
* The trigger directive (one of the two prompts below) is written directly in the **Call Flow prompt** of the step where transfer should be possible.
* No **+ Connect Action** is needed for transfers — the directive in the prompt fires the transfer function call directly.
* The agent's LLM has function-calling enabled (4o-mini and up all work fine).

For the full Transfers tab setup walkthrough — including bulk recipient upload via CSV/XLSX — see the [Transfers](/platform/transfers) page.

PulsyAI supports two main configurations: a single-recipient warm transfer (one destination for every transfer) and department-based routing (multiple recipients, agent picks which one based on the customer's intent). Both patterns are documented below.

#### Single recipient — straightforward warm transfer

Use this directive when there's only one transfer destination configured (a single closing team, a single shared support line). The agent listens for any signal that the customer wants a human, asks for confirmation, then fires the transfer.

```text theme={null}
⚠️ CALL TRANSFER PROTOCOL - IMMEDIATE EXECUTION REQUIRED ⚠️

TRIGGER CONDITIONS (Execute transfer IMMEDIATELY when client says ANY of the following):
"I want to speak to someone"
"Transfer me"
"Can I talk to a person/representative/agent/human"
"Connect me to [name/representative]"
"I need to speak to James"
"Let me talk to..."
"Put me through to..."
"Get me someone"
"I want a real person"
ANY variation expressing desire for human contact

MANDATORY RESPONSE (Use EXACTLY this script - NO deviation):
"Absolutely, I'd be happy to connect you with one of our live representatives right now. They'll be able to assist you immediately with any questions or concerns you have.
Would you like me to go ahead and transfer you?"

[Pause for confirmation]

UPON CLIENT CONFIRMATION (Yes/Sure/Okay/Go ahead):
[EXECUTE THE TRANSFER FUNCTION CALL IMMEDIATELY]
```

#### Multi-recipient — department-based routing

Use this directive when you've configured multiple recipients in the Transfers tab (for example James for technical, Louise for billing, Maria for sales). The agent first identifies which department the customer needs, confirms the transfer to that specific recipient, then fires the function call.

```text theme={null}
⚠️ CALL TRANSFER PROTOCOL - DEPARTMENT ROUTING ⚠️

AVAILABLE DEPARTMENTS AND CONTACTS:
- James — Technical Department (technical issues, troubleshooting, service problems)
- Louise — Billing Department (payments, invoices, refunds, subscription questions)
- Maria — Sales Department (new accounts, upgrades, pricing inquiries)

TRIGGER CONDITIONS (Execute transfer IMMEDIATELY when client expresses ANY of the following):
"I want to speak to someone"
"Transfer me"
"Can I talk to a person/representative/agent/human"
"Connect me to [James/Louise/Maria]"
"I need help with [billing/technical issue/sales]"
"Let me talk to..."
"Put me through to..."
"Get me someone"
ANY variation expressing desire for human contact OR department-specific request

MANDATORY RESPONSE — Determine the right recipient first, then confirm:

If the issue is TECHNICAL: "I'm going to connect you with James in our technical department who can help you right away. Would you like me to go ahead and transfer you?"

If the issue is BILLING: "I'm going to connect you with Louise in our billing department who can help you right away. Would you like me to go ahead and transfer you?"

If the issue is SALES or upgrade-related: "I'm going to connect you with Maria in our sales department who can help you right away. Would you like me to go ahead and transfer you?"

If the customer just wants "a human" without specifying: Ask one clarifying question — "Is this about a technical issue, a billing question, or something sales-related?" — then route accordingly.

[Pause for confirmation]

UPON CLIENT CONFIRMATION (Yes/Sure/Okay/Go ahead):
[EXECUTE THE TRANSFER FUNCTION CALL TO THE MATCHED RECIPIENT IMMEDIATELY]
```

#### Customizing transfer prompts

Keep fixed: the ⚠️ CALL TRANSFER PROTOCOL ⚠️ structure (TRIGGER CONDITIONS → MANDATORY RESPONSE → UPON CONFIRMATION), the ask-then-fire pattern, the requirement that the customer explicitly confirms before the function call fires.

Adapt freely: the recipient names (replace James, Louise, Maria with your actual recipient names from the Transfers tab), the department labels, the customer-facing response wording, the language. For department-routing, add or remove departments based on how many recipients you've configured.

For multi-recipient routing details — including how to map customer keywords to recipients, how to handle ambiguous intent, and best practices for naming recipients — see the [Transfers](/platform/transfers) page.

## Send SMS during a call

Use this prompt pattern when the agent should text the caller during a live call — typically a menu link, an ordering link, a booking confirmation, or any pre-defined piece of content. Compatible with any conditional SMS configured in the agent's [SMS Configuration](/platform/sms-configuration) tab.

### Setup checklist before using this prompt

* The conditional SMS messages are defined in the SMS Configuration tab with the **Send Live** option checked.
* The Send Condition ends with the word **"immediately"** (this is what tells the agent to send live during the call, not after).
* The agent's LLM has function-calling enabled (4o-mini and up all work fine).

### The prompt

```text theme={null}
STEP 1 — CALLER ASKS ABOUT THE MENU

"We've got two of our most popular options right now — our signature Burger Box and our Pizza Deal. Which one were you thinking about?"

[PAUSE — listen and respond naturally]

IF BURGER →
"Great choice! The Burger Box comes with a double smash burger, fries, and a drink — all for one great price. Want me to go ahead and text you the link so you can order right from your phone?"

[PAUSE — listen and respond naturally]

  IF YES →
    [SEND SMS: Burger Box ordering link]
  IF NO →
    "No problem! You can always call us directly or swing by — we'll take care of you!"

---

IF PIZZA →
"Love it! We've got a ton of options — classic pepperoni, BBQ chicken, veggie... honestly hard to go wrong. Want me to text you the link so you can check out the full menu and order right from your phone?"

[PAUSE — listen and respond naturally]

  IF YES →
    [SEND SMS: Pizza menu ordering link]
  IF NO →
    "No worries! You can always give us a call or come in — we're happy to help!"

---

STEP 2 — CALLER WANTS CURRENT SPECIALS

"Right now we've got a Burger + Pizza combo deal running — great for groups or families. Want me to text you the details and the ordering link?"

[PAUSE — listen and respond naturally]

  IF YES →
    [SEND SMS: Combo deal details + ordering link]
    "Sent! Everything's right there — you can customize your order and place it straight from your phone. Anything else I can help with?"
  IF NO →
    "No problem! Just give us a call or check out our website and we'll get you sorted."

---

STEP 3 — ORDER CONFIRMATION (Auto-Send — No Permission Needed)

"Perfect — you're all set! You'll get a confirmation text in just a moment with all your order details."

[PAUSE — listen and respond naturally]

[SEND SMS: Order confirmation → to customer + all internal numbers simultaneously]
```

### Customizing this prompt

Keep fixed: the ask-confirm-send pattern for any SMS the caller might not want, the `[SEND SMS: ...]` syntax that maps to your SMS Configuration entries, the auto-send pattern for order confirmations (no permission needed — the caller already implicitly agreed by completing the order).

Adapt freely: the menu items, the conditional branches (you can have 2, 5, or 20 IF branches), the after-send confirmation lines, the language and tone.

For the full SMS configuration setup, see the [SMS Configuration](/platform/sms-configuration) page.

## General customization principles

Across all three prompt examples, a few principles stay constant:

* **Ask before you fire.** Every function call needs a yes/no question first, the user's confirmation, then the directive that fires the function. Without the confirmation step, function calls misfire or fire on wrong intent.
* **Use explicit trigger words in your directives.** "If the customer agrees... transfer the call immediately." The word "immediately" matters. Same for SMS: "Send this SMS if the caller asked for the link and agreed to receive it immediately."
* **Keep the agent's spoken lines short.** Long explanations break conversational flow and increase hangup risk. Save the detail for the human callback or the SMS content itself.
* **Test on a real call before going live.** Function-calling behaviour can vary slightly between LLMs and between configurations. Use [Test Chatbot](/platform/website-chatbot) for fast iteration and Test AI for final validation.

## Next step

<CardGroup cols={2}>
  <Card title="Build a Script" icon="book-open" href="/platform/build-your-agent/build-a-script">
    The methodology behind why these prompts work — the four-step structure, the nine PulsyAI principles, and the full PulsyAI Plumber example script.
  </Card>

  <Card title="Working with End-Clients" icon="users" href="/platform/growth-playbook/working-with-end-clients">
    The reseller playbook for handling client conversations — pushback patterns, expectation setting, and when to override your defaults.
  </Card>
</CardGroup>
