Views: 0
Cold mornings. A calendar that will not behave. Two clients late on payments. A vendor who swears they never got the email. This is where a personal software butler earns its tuxedo. In this guide you will Build A Concierge Agent: Appointments, Invoices, And Reminders. The goal is simple. One agent books time on your calendar, issues clean invoices, and nudges people at the right moment without sounding robotic.
The SEO key phrase for this article is “Build A Concierge Agent: Appointments, Invoices, And Reminders.” You will see it used throughout for clarity and ranking.
You do not need a full engineering team. You need a sound blueprint. You also need reliable blocks for calendars, email or SMS, and payments. I will show practical decisions that keep you moving. I will also cite current docs for each moving part so you can plug in the exact version you need when you ship. (Google for Developers)
What your concierge agent must do
A good concierge has three traits. It books appointments on the calendar you already use. It creates and sends invoices that reconcile later without human fuss. It issues reminders across channels that customers actually read. Those three traits guide the design choices below.
The high level architecture
Think of the system in five layers.
- Interaction layer. Web form, chat widget, or email triage.
- Agent brain. The place that interprets the request, calls tools, and writes back.
- Scheduling tool. Calendar API that creates precise events and updates them.
- Billing tool. Invoicing API that issues invoices and records payment events.
- Reminder layer. Email and SMS that deliver timely nudges.
We will Build A Concierge Agent: Appointments, Invoices, And Reminders with these parts, then tie them with prompts and small policies that keep data clean.
The agent brain: where logic lives
OpenAI’s current stack gives you two useful pieces. The Responses API runs a single tool-using step with strong control. The Agents SDK coordinates multi step flows with memory and tools. AgentKit sits on top and gives you a playbook for common agent tasks and evaluations. You use the agent to parse a booking request, fetch context, call tools, and confirm the action. This helps you build consistent flows that do not drift as your prompts evolve. (The Verge)
Prompt: You are a concierge agent. Task: turn natural language into a structured instruction. Extract intent {book, reschedule, cancel, invoice, pay, remind}. Extract parties, date window, timezone, duration, location, and constraints. If data is missing, ask one crisp question. Output JSON only with keys: intent, fields, missing.
Make this your first guardrail. The agent returns a clean object or asks a single clarifying question. You maintain flow with short hops, not a wall of chatter.
Appointments: calendars with precision
Appointments anchor the entire flow. Use the Google Calendar API if your work sits inside Google Workspace. The method to create events is events.insert. You must provide start and end fields as dateTime values for timed events. That is the bare minimum. You can also set attendees, reminders, and conferencing links. The quickstarts show a full flow with OAuth that is safe for production once you trade the testing auth for the proper client credentials. (Google for Developers)
For wider compatibility, support iCalendar files. iCalendar is defined by RFC 5545 and travels well across email and calendar tools. It models VEVENT for the appointment and VALARM for reminders that ride inside the same file. This gives your agent a universal “save the date” that works even if the user never authenticates with your app. (IETF Datatracker)
Two small but important details make your booking feel professional.
- Write a one line Summary. Keep it short. Many clients cut or truncate long summaries. Microsoft’s guidance notes that apps often cap summary fields around 255 characters during import or export. Keep the point up front. (iCalendar)
- Include a VALARM when you ship an .ics. If you skip alarms, some apps fall back to user defaults while others do not. You can avoid guesswork by including an explicit VALARM with ACTION:DISPLAY and a TRIGGER such as -PT24H. (iCalendar)
Prompt: Generate a Google Calendar event payload for events.insert that books a 45 minute discovery call for {name} on {date} at {time} in {timezone}. Include attendees, a Meet link placeholder, and a description with agenda bullets. Output JSON only.
Prompt: Create an iCalendar .ics for the same booking. Include a SUMMARY under 100 characters, a DESCRIPTION, a UID, DTSTART and DTEND in UTC, and a VALARM with TRIGGER set to -PT24H and -PT1H. Return the ICS text only.
With those prompts, your concierge agent can book directly through API calls, or attach a standards compliant .ics for clients who prefer email.
Invoices: send, collect, reconcile
Stripe Invoicing gives you a solid path when you want fast setup and flexible automation. You can create an invoice using Stripe’s API, send it, and let the hosted pages handle the payment. The docs include code for many languages and explain how credits and minimum-charge rules behave at invoice time. Use the Invoicing quickstart if you like an end to end example that you can run first, then adapt. (Stripe Docs)
If your accounting sits in QuickBooks Online, you can create invoices through the QBO REST API. You authenticate with OAuth 2.0 and then post invoice objects to the Accounting API. Intuit is also deprecating older minor versions, so check version notes before you ship. That saves you from surprise breaks later. (Intuit Developer)
A clean agent flow looks like this:
- Agent confirms who the customer is and what they purchased.
- Agent creates a draft invoice with line items and tax rules.
- Agent finalizes and sends the invoice.
- Agent records the invoice ID and payment status for later reminders.
Prompt: Generate a Stripe invoice creation plan. Inputs: customer_id, line_items [{price_id or amount, currency, quantity}], payment_terms {net30 or due_on_receipt}. Steps: create invoice, add lines, finalize, send. Output: ordered steps with example API calls and expected responses.
Prompt: For QuickBooks Online, generate a minimal JSON body for an invoice with two lines and sales tax. Include CustomerRef, Line array with SalesItemLineDetail, and TxnDate. Output JSON only.
You can hand those prompt outputs into server code that calls the Stripe API or the QuickBooks Online API. The point is to let the agent define a reliable plan before it calls tools. That makes debugging sane. It also gives you a log that explains what happened if support asks later. (Stripe Docs)
Affiliate Link
See our Affiliate Disclosure page for more details on what affiliate links do for our website.

Reminders: email, SMS, and WhatsApp
Reminders win or lose based on channel fit. Email is useful for summaries and attachments like .ics files. SMS reaches busy phones with short messages. WhatsApp can carry approved templates that feel native in many regions. Your concierge agent should support all three, then choose one by customer preference.
Email. The Gmail API can send email using users.messages.send. You build a MIME message, base64url encode it, and post it to the endpoint. The official “Sending Email” guide covers both direct send and send from draft. These docs also reinforce OAuth and scopes for production use. (Google for Developers)
SMS. Twilio’s Programmable Messaging gives you quick sends with a single REST call or an SDK wrapper. The quickstart shows send and receive flows for many languages. It is enough to wire a polite reminder without spinning a telecom class stack. (Twilio)
WhatsApp. For WhatsApp templates you can use Meta’s Cloud API or route through Twilio’s WhatsApp API. Templates must be created and approved before use, and there are policy changes you should scan. Twilio’s guide shows how to create and send templates. Meta’s docs detail the template lifecycle and recent pauses for certain message types in the United States. (Facebook for Developers)
You can also embed reminders inside calendar files. The VALARM component defines the action and trigger. A display alarm is most common and works across many apps. You can add more than one alarm if your client base spans time zones. RFC 9074 adds extensions that improve how alarms behave across clients. This matters when your customers bounce between desktop and mobile calendars. (iCalendar)
Prompt: Compose three reminder variants for the same appointment. Channels: email, SMS, WhatsApp template. Each message includes date, time, timezone, location, and a reschedule link. Keep under 140 characters for SMS. Provide a JSON object with keys: channel, content, variables.
Data model the agent can reason about
A simple schema helps the agent avoid confusion.
- Contact: id, name, email, phone, channel_preference, timezone
- Appointment: id, contact_id, start_utc, end_utc, location, calendar_event_id, status
- Invoice: id, contact_id, amount, currency, due_date, status, provider_id
- Reminder: id, target_type, target_id, channel, send_at_utc, template_id, status
The agent reads and writes this schema through tools. It keeps a short memory of user preferences. Your logs tie each decision to a plan that you can review later.
End to end flow: Build A Concierge Agent, Appointments, Invoices, And Reminders
I like to stage the flow as a sequence with checkpoints.
- Parse the request. Use the extraction prompt to spot intent.
- Check availability. If data is complete, call Calendar to find a free slot or to confirm a slot. If incomplete, ask one question. (Google for Developers)
- Create the event. Insert the event with attendees. Save the event.id. Generate an .ics copy with VALARM for fallback. (Google for Developers)
- Issue the invoice. Create a draft invoice. Send after the appointment confirms. Save the invoice identifier and payment link. (Stripe Docs)
- Schedule reminders. Choose channel by preference. Use Gmail for rich summaries, SMS for short alerts, and WhatsApp templates where approved. Record send_at and status. (Google for Developers)
- Reconcile. When payment clears, update invoice status and stop dunning messages. Stripe and QuickBooks both provide events or endpoints to check status. (Stripe Docs)
Guardrails that make your agent feel professional
Timezone safety. Always convert to UTC for storage. Present time in the contact’s timezone.
Short summaries. Keep your SUMMARY field short in .ics to avoid truncation. Put details in the DESCRIPTION. (iCalendar)
Explicit alarms. Include a VALARM when you ship calendar files. Do not rely on defaults. (iCalendar)
OAuth done right. The Google Calendar and Gmail quickstarts show testing modes. Move to proper OAuth credentials and scopes for production. Avoid shipping with test shortcuts. (Google for Developers)
Template approval for WhatsApp. Submit your templates and confirm status before sending. Policies can pause certain categories. Plan fallbacks. (Facebook for Developers)
Version awareness for accounting. QuickBooks Online is retiring old minor versions. Check your version before launch. (Intuit Developer)
Affiliate Link
See our Affiliate Disclosure page for more details on what affiliate links do for our website.
Implementation notebooks you can build this week
You can wire a proof in three small notebooks or repos. Keep each one narrow.
Notebook A: Calendar bookings
- The agent parses a request.
- It calls Google Calendar events.insert.
- It returns a confirmation email with an attached .ics that includes VALARM.
- It logs event id, start, and end. (Google for Developers)
Prompt: Draft a events.insert request body for a 30 minute Zoom consult for {name} on {date} at {time} {timezone}. Add attendees, a conferenceData placeholder, and reminders as overrides at 24 hours and 1 hour. Output JSON only.
Notebook B: Stripe invoice send
- The agent collects line items and customer id.
- It creates, finalizes, and emails the invoice.
- It records status and a hosted payment link. (Stripe Docs)
Prompt: Given customer_id and three line items with price and quantity, produce a step list that calls Stripe to create an invoice, attach lines, finalize, and send by email. Include sample cURL for each step.
Notebook C: Reminders across channels
- The agent schedules an email via Gmail API.
- It schedules an SMS via Twilio.
- It prepares a WhatsApp template call when available.
- It cancels future reminders when payment clears. (Google for Developers)
Prompt: Create a reminder plan object for appointment_id {id}. Include a summary email 24 hours prior, an SMS 2 hours prior, and a WhatsApp template 30 minutes prior if approved. Include cancel rules if invoice.status equals paid. Output JSON only.
Testing the hard parts
Calendar acceptance. Create three .ics files with different VALARM triggers and import them into several clients. Confirm each applies the correct reminder. Some clients ignore defaults without VALARM. Ship with alarms set. (Microsoft Learn)
Invoice edge cases. Test credits and minimum charge behavior. Stripe explains how credits apply before charging and how tiny amounts post. This protects you from odd balances. (Stripe Docs)
SMS deliverability. Use Twilio’s quickstart to test deliverability with a local number. Keep messages short and human. Track opt out codes and reply logic. (Twilio)
WhatsApp template lifecycle. Submit and wait for the status to read Active. Meta notes that some marketing templates to US numbers can be paused. Keep a fallback to SMS or email. (Facebook for Developers)
Email auth. Use the Gmail API send flow, not only SMTP. The guide shows how to send from draft or directly, and how to set scopes. This keeps your reminders out of the spam pile. (Google for Developers)
Affiliate Link
See our Affiliate Disclosure page for more details on what affiliate links do for our website.
How the agent speaks like a human
Tone matters. These short prompt blocks keep your messages warm and clear.
Prompt: Write a confirmation email for a booked appointment. Keep it under 120 words. Include date, time, timezone, link, and a one line agenda. Offer reschedule and include the invoice link if it exists.
Prompt: Write a first reminder SMS that feels helpful, not pushy. Keep it under 120 characters. Variables: {first_name}, {date}, {time}, {short_link}.
Prompt: Write a friendly past due reminder email. Keep it under 100 words. Acknowledge delays. Offer a new date if needed. Include the Stripe hosted invoice link.
Use the same voice for the whole journey. Customers do not enjoy tone whiplash.
Upgrade path when you are ready
You can start with one agent and three tools. Over time you can add more precision.
- Multi agent flows. Use the Agents SDK to split booking, billing, and reminders into separate roles that report back. Then stitch them with a small orchestrator. (The Verge)
- Evaluation loops. Use AgentKit patterns to check that a calendar event was created or that an invoice exists before you message the customer. This closes the loop before your agent celebrates too early. (OpenAI)
- Structured exports. Include an internal log that captures the agent’s plan, tool calls, and results. It makes audits easy and turns bugs into short fixes rather than long mysteries.
Security and privacy notes you should not skip
- Use OAuth 2.0 for Google APIs and store tokens securely. The quickstarts spell out the right scopes for Calendar and Gmail. Rotate credentials on a schedule. (Google for Developers)
- Keep private data in your database, not inside long prompt histories. Pass only the fields you need into each step.
- For billing, avoid handling raw card data. Let Stripe’s hosted page deal with payment collection. Your agent only creates invoices and reads payment status. (Stripe)
- Respect channel rules. WhatsApp templates need approval. Maintain opt out for SMS and email. (Twilio)
Affiliate Link
See our Affiliate Disclosure page for more details on what affiliate links do for our website.
A day in the life of your concierge
A prospect pings your site at 8:02. The agent extracts intent and sees a request for a 45 minute consult. It checks your calendar and books a slot. It sends a confirmation email with a clean .ics that includes a 24 hour and 1 hour reminder. It creates an invoice that will go out after the call. It schedules a friendly SMS two hours before the meeting. The client gets three consistent messages and shows up on time. You finish, the invoice goes out, and a payment link arrives in the client’s inbox. If payment stalls, the agent checks status and nudges once, then hands off to you.
That is a small luxury in a busy week. It is also good business.
Your build checklist
Use this short list to Build A Concierge Agent: Appointments, Invoices, And Reminders without stalling.
- Wire the intent extractor prompt and tool plan in your agent. (The Verge)
- Implement Google Calendar events.insert for core bookings. Add .ics generation with VALARM for universal support. (Google for Developers)
- Choose Stripe Invoicing or QuickBooks Online and finish one integration first. Record invoice ids and status. (Stripe Docs)
- Add Gmail API for email summaries. Add Twilio for SMS. Add WhatsApp templates if your region uses it. (Google for Developers)
- Schedule reminders off UTC timestamps. Cancel reminders when payment posts.
- Log every tool call and result so you can trace actions later.
Ship the smallest working version in a week. Book two real appointments with it. Then polish messages and add the billing rules you actually use.
Closing thought
Software agents should not feel like a carnival trick. They should feel like a quiet colleague who makes sure the calendar is accurate, the invoice looks right, and the nudge arrives on time. When you Build A Concierge Agent: Appointments, Invoices, And Reminders using standards like RFC 5545, tested APIs like Google Calendar, and payment tools that carry their own weight, you win back hours without losing your voice. Your work gets calmer. Your customers notice. And your tuxedoed butler never runs out of coffee.

](https://altpenguin.com/wp-content/uploads/2025/08/veed-ad.webp)

