# Billing & Add-ons Source: https://recepai.ai/docs/admin-panel/billing Purchase additional credits and premium features to keep your receptionist working at the front desk. The Billing & Add-ons page is where you purchase extra credits and unlock premium features for your receptionist. **How to access this page:** Click the **RecepAI menu icon** in the top-right corner of your admin panel, then select **"Billing & Add-ons"** from the dropdown menu. This page is not in the main sidebar navigation. At the top-right corner, the **"Check Credits"** button takes you directly to the [Analytics → Usage](/admin-panel/history#usage) tab where you can see how many credits you have remaining. *** ## Call Credits Purchase additional voice call capacity for your receptionist. Each package adds credits to your account immediately. Multiple package sizes are available — pick the one that fits your needs. The **"Most Popular"** badge highlights the recommended package for most hotels. *** ## Chat Credits Purchase additional text conversation capacity. Like call credits, these are added to your account immediately after purchase. Several package options are available at different price points. *** ## Extra Skills Unlock premium capabilities for your receptionist. Each skill adds a new ability or removes a limitation. | Skill | What It Does | | ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | | **Smart Eyes** | Your receptionist can now see and read. Guests can share passport photos, room photos, menu screenshots, and any document for instant answers. | | **Custom AI Avatar** | A custom-designed avatar with voice clone — your receptionist gets a unique face and voice that matches your brand. | | **WhatsApp Integration** | Connect your receptionist to WhatsApp Business so guests can chat through their preferred messaging app. | | **Telegram Integration** | Connect your receptionist to Telegram for guests who prefer this channel. | | **Custom Domain** | Host the chat widget on your own custom domain instead of the default RecepAI domain. | | **Remove "Powered By RecepAI"** | Remove the RecepAI branding from the chat widget for a fully white-labeled experience. | **Not sure which skills you need?** Start with the basics — your plan already includes chat and voice. Add skills as your guests' needs grow. WhatsApp and Telegram are great first additions if your guests prefer messaging apps. *** ## How Purchasing Works Browse the available options and click **"Buy Now"** on the one you want. You'll be redirected to a secure checkout page to enter your payment details. After successful payment, you're returned to the Billing page with a confirmation message. Credits and skills are active right away — no waiting. *** ## Credit Expiry **Credits are valid for 6 months** after purchase. They are used **after** your monthly plan credits are consumed. If your plan includes enough credits for the month, your purchased add-ons remain untouched until needed. To monitor your credit balance, click **"Check Credits"** at the top of this page or visit the [Analytics → Usage](/admin-panel/history#usage) tab. # Chat Settings Source: https://recepai.ai/docs/admin-panel/conversation-agent Teach your receptionist how to talk to guests via Chat Widget, WhatsApp, or Telegram. The Chat Settings page is where you define how your receptionist communicates through **text** — via your website chat widget, WhatsApp, or Telegram. **Why is Chat separate from Voice?** Written and spoken communication follow different rules. In chat, guests expect detailed answers with links and formatting. On a phone call, your receptionist needs to be brief and conversational. Splitting these lets you fine-tune each channel independently. ## How They Should Chat This is the most important field on this page. Think of it as the training manual you'd hand a new receptionist on their first day — explain the tone, the boundaries, and how they should handle different situations. **Common mistake:** Don't put hotel information (room types, prices, hours, policies) in this field. That belongs in [Training Materials](/admin-panel/documents). This field is for *behavior* — how your receptionist should act, not what they should know. Your receptionist automatically pulls knowledge from Training Materials during conversations. **Character Limit:** 12,000 characters maximum. The counter changes color to guide you: * **Green (0 - 8,000):** Optimal range * **Orange (8,000 - 10,000):** Getting long — consider moving details to Training Materials * **Red (10,000 - 12,000):** May affect response quality For best results, keep your instructions under 10,000 characters. Detailed information (room types, restaurant hours, policies) should go in [Training Materials](/admin-panel/documents), not here — your receptionist will automatically reference them when needed. Click the **Expand** button for a full-screen editing experience — much easier for longer instructions. The quality of your receptionist's responses depends directly on how well you write these instructions. Take the time to be specific. For a step-by-step guide, see the [Chat Prompts Guide](/prompt-engineering/chat-prompts). ## Thinking Engine This field shows which AI model powers your receptionist's chat responses. It's configured by the RecepAI team and displayed as **read-only** so you always know what's running behind the scenes. If you need a different model, contact your account manager. ## Creativity Level The creativity slider controls how predictable your receptionist's responses are: | Level | Range | Best For | | ------------ | --------- | ------------------------------------------------------------ | | **Focused** | 0.0 - 0.3 | Most accurate and consistent. **Recommended for reception.** | | **Balanced** | 0.4 - 0.7 | More natural, slightly less predictable | | **Creative** | 0.8 - 1.0 | Not recommended for guest services | For hotel receptionists, we recommend the **Focused** range (0.3 or lower). Guests need accurate, reliable answers — not creative interpretations. If your hotel uses a reasoning model (a model that thinks more deeply before responding), the Creativity Level slider won't appear. These models manage their own response style internally. ## Chat Quality Criteria Define what "success" means for your hotel's chat conversations. After each chat, your receptionist automatically evaluates whether these criteria were met — and flags conversations that need your attention. **How to set criteria:** 1. Click **"Add Criteria"** 2. Give it a clear name (e.g., "Guest Question Answered") 3. Describe what success looks like (e.g., "The guest's specific question was answered with accurate information") **Example criteria:** * Guest confirmed their question was answered * Booking inquiry was handled with reservation contact info * Guest expressed satisfaction or thanks Quality criteria work hand-in-hand with [Training Opportunities](/admin-panel/dashboard#training-opportunities) on your Dashboard. When your receptionist fails a criteria because it lacks knowledge on a topic, that conversation shows up as a training opportunity — telling you exactly what to add to your [Training Materials](/admin-panel/documents). For a deeper dive into quality criteria, see the [Chat Evaluation Guide](/quality/chat-evaluation). ## Saving Changes Click **"Save Personality"** at the top of the page to apply your changes. If you have unsaved changes and try to leave, you'll see a warning. Use the **"Reset Changes"** button at the bottom to discard everything and go back to the last saved version. # Dashboard Source: https://recepai.ai/docs/admin-panel/dashboard Your command center — track your receptionist's performance, complete setup, and discover training opportunities. The Dashboard is the first thing you see when you log in. It greets you by name, shows your hotel, and gives you everything you need at a glance: setup progress, performance stats, savings, and training opportunities. ## Onboarding Checklist When you first start, a **7-step checklist** guides you through hiring your receptionist. Each step lights up with a gold checkmark as you complete it: Set your receptionist's greeting, tone, and how they chat with guests. Takes you to the [Conversation Agent](/admin-panel/conversation-agent) page. Define your quality standards — after every chat, your receptionist will tell you how it went and what to teach next. Pick their voice, first words, and phone personality. Takes you to the [Voice Agent](/admin-panel/voice-agent) page. Set call quality rules — your receptionist will evaluate and flag what went wrong. Upload everything they need to assist your guests. Takes you to [Training Materials](/admin-panel/documents). Your receptionist is ready for the front desk! Takes you to the [Widget Builder](/admin-panel/widget-builder). Review their work and usage — they'll show you what needs attention. Takes you to [History](/admin-panel/history). Once all 7 steps are complete, the checklist collapses into a **"Your RECEPtionist is live"** banner. You can expand it anytime with the **Show/Hide** toggle, or click **Preview** to see your receptionist in action. ## Savings Calculator This is where you see the real impact. The savings widget shows: * **Total time worked** — how many hours and minutes your receptionist has spent answering guest questions * **Estimated savings** — the dollar value of that work, calculated from an hourly rate you set * **Start date** — when your receptionist first started working for your hotel ### Customize Your Hourly Rate Click the **Edit** link next to "Based on \$15/hour" to enter the average hourly receptionist salary in your area. This makes the savings estimate match your real costs — so you can see exactly how much your receptionist is saving you. You can filter savings by **All Time**, **This Month**, or **This Year** to track performance across different periods. **Why this matters:** If a human receptionist in your area costs $20/hour and your AI receptionist handled 40 hours of guest conversations this month, that's $800 in savings — visible right on your dashboard. ## Statistics Below the savings widget, four cards show your receptionist's activity this month: | Card | What It Shows | | -------------------- | -------------------------------------- | | **Chats this month** | Number of text conversations handled | | **Calls this month** | Number of voice calls handled | | **Training docs** | Total documents in your knowledge base | | **Guest feedback** | Thumbs up and thumbs down from guests | Each card is clickable — tap any card to jump directly to the relevant page for more details. ### Training Opportunities The **Chats** card has a special feature: when your receptionist encounters a question it couldn't answer well, a blue **training opportunities** badge appears below the chat count. For example: a guest asks *"Can I bring my pet to the hotel?"* — if your receptionist hasn't been trained on your pet policy, it flags this conversation. The badge shows how many such gaps exist. Click the badge to see exactly which topics need attention, then add the missing information to your [Training Materials](/admin-panel/documents). This is how your receptionist gets smarter over time — it tells you what it doesn't know, so you can teach it. Make it a habit to check training opportunities regularly. Each one represents a real guest question that your receptionist couldn't fully answer — and a chance to improve. ## Quick Actions At the bottom of the dashboard, shortcut buttons let you jump to the most common tasks: | Button | Where It Goes | | --------------------- | ------------------------------------------------------------------------------ | | **Chat Personality** | [Conversation Agent](/admin-panel/conversation-agent) — edit chat instructions | | **Give Them a Voice** | [Voice Agent](/admin-panel/voice-agent) — configure voice settings | | **Train Them** | [Training Materials](/admin-panel/documents) — upload documents | | **Get Add-ons** | [Billing](/admin-panel/billing) — purchase additional credits | | **Show Time** | [Widget Builder](/admin-panel/widget-builder) — preview and deploy | # Desk Bell Source: https://recepai.ai/docs/admin-panel/desk-bell Set up automatic notifications when your receptionist needs attention — get alerts via email, SMS, or WhatsApp. The Desk Bell page lets you configure automatic notifications so you know when your receptionist needs your attention — without constantly checking the dashboard. **How to access this page:** Click the **RecepAI menu icon** in the top-right corner of your admin panel, then select **"Desk Bell"** from the dropdown menu. Think of it as a real desk bell at a hotel front desk. When something needs your attention, it rings. *** ## Ring the Bell At the top of the page, the **"Ring the bell"** toggle controls whether Desk Bell notifications are active. When turned **off**, no notifications are sent — regardless of channel or alert type settings below. Everything underneath becomes grayed out. Turn it **on** to activate the system and configure your channels and alert types. *** ## How to Reach You This section controls **where** your notifications are delivered. You can enable one, two, or all three channels — each works independently. ### Email Add up to **5 email addresses** to receive notifications. Click **Add** after entering each address. Remove any address by clicking the **×** next to it. ### SMS Add up to **3 phone numbers** in international format (e.g., `+905551234567`). Each number receives a short text message when an alert triggers. ### WhatsApp Add up to **3 WhatsApp-enabled phone numbers** in the same international format. Messages are delivered as WhatsApp Business messages. **Use multiple channels for critical alerts.** For example, enable both Email and SMS so you get a detailed email *and* an instant text message. ### Email Settings Below the channel cards, two optional fields let you customize your email notifications: | Field | What It Does | | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | | **Email Sender Name** | The "From" name that appears in the recipient's inbox (e.g., "Grand Hotel Front Desk"). If left empty, defaults to `RecepAI`. | | **Reply-To Address** | When someone replies to a notification email, the reply goes to this address instead of a no-reply address (e.g., `info@yourhotel.com`). | *** ## Alert Types This section controls **what** triggers a notification. Each alert type can be toggled on or off independently, and you choose which channels it uses. ### Chat Quality Criteria **What it detects:** Your receptionist couldn't answer a guest question in chat — a topic was asked that isn't covered in your training materials. **When it triggers:** After every chat conversation, your receptionist evaluates whether it could answer everything. If a knowledge gap is found, you get notified with the missing topic names. **What you receive:** * **Email:** A branded message listing the missing topics, with a direct link to add training material. * **SMS:** A one-line alert with the first missing topic and a link to your training page. * **WhatsApp:** A short message with the missing topic summary. **What to do:** Click the link in the notification to go directly to your [Training](/admin-panel/documents) page and add the missing information. ### Voice Quality Criteria **What it detects:** A voice call didn't meet one or more of your quality criteria — the standards you defined on the [Voice Settings](/admin-panel/voice-agent) page under "Voice Quality Criteria." **When it triggers:** After every voice call ends, the AI evaluates the conversation against your defined criteria. If any criterion gets a "fail" result, you get notified with the specific criteria that weren't met. **What you receive:** * **Email:** A branded message listing the failed criteria names, with a link to review the call in Voice History. * **SMS:** A one-line alert naming the failed criterion (or count if multiple) with a link to Voice History. * **WhatsApp:** A short message with the hotel name and failed criteria summary. **What to do:** Click the link to go to [Analytics → Voice History](/admin-panel/history) and review the specific call. ### Channel Pills Each alert type shows three channel pills: **Email**, **SMS**, and **WhatsApp**. Click a pill to toggle that channel for that specific alert type. A highlighted (gold) pill means that channel is active for this alert. A channel pill only works if the channel itself is enabled **and** has at least one recipient in the "How to Reach You" section above. If you activate SMS for an alert type but haven't added any phone numbers, no SMS will be sent. *** ## Send Test Each alert type has a **Send Test** button. When clicked, it sends a test notification through all active channels for that alert type. This lets you: * Verify that your email, SMS, and WhatsApp delivery is working * See exactly what the notification looks like * Confirm the right people are receiving alerts The test sends to the **first recipient** of each active channel. Test notifications are marked with a `[TEST]` prefix so you can distinguish them from real alerts. *** ## Recent Rings At the bottom of the page, a delivery log shows every notification that was sent. Each entry includes: | Column | What It Shows | | ------------- | ------------------------------------------------------------------------------------- | | **Date** | When the notification was sent | | **Type** | Which alert type triggered it (e.g., `training_opportunity`, `voice_criteria_failed`) | | **Channel** | How it was delivered (Email, SMS, or WhatsApp) | | **Recipient** | Who received it | | **Status** | Delivery result — `sent`, `failed`, or `skipped` | Use this log to confirm that notifications are being delivered and to troubleshoot any delivery issues. *** ## Saving Changes Changes on this page are **not saved automatically**. When you make any change — toggle a channel, add a recipient, enable an alert type — a floating **"Save Changes"** bar appears at the bottom of the screen. Click it to save all your changes at once. If you leave the page without saving, your changes will be lost. Always click **Save Changes** before navigating away. *** ## How It All Works Together A guest asks a question your receptionist can't answer (chat), or a voice call fails your quality criteria (voice). The system looks at your alert type settings — is this alert type enabled? Which channels are active for it? For each active channel with recipients, a notification is sent. Email gets a detailed message, SMS and WhatsApp get a short one-liner. Click the link in the notification to go directly to the relevant page — Training for chat gaps, Voice History for quality issues. *** ## Tips **Start with email only.** Enable one alert type with email first. Once you're comfortable with the frequency and content, add SMS or WhatsApp for instant mobile alerts. **Set up Voice Quality Criteria first.** Before Voice Quality Alerts can work, you need to define at least one criterion on the [Voice Settings](/admin-panel/voice-agent) page. Without criteria, there's nothing to evaluate. **Check Recent Rings if something seems off.** If you're not receiving notifications, scroll to the bottom of the Desk Bell page and check the delivery log. A `failed` status usually means an invalid email address or phone number. # Training Materials Source: https://recepai.ai/docs/admin-panel/documents Upload, manage, and organize the knowledge your receptionist uses to help guests. The Training Materials page is where you teach your receptionist everything about your hotel — room types, restaurant hours, policies, local tips, and anything else a guest might ask about. **This is the most impactful page in your entire setup.** The quality of what you upload here directly determines how well your receptionist answers guest questions. A receptionist with great instructions but poor training materials will still give poor answers. **How it connects to your Dashboard:** When your receptionist encounters a question it can't answer, it flags the conversation as a [training opportunity](/admin-panel/dashboard#training-opportunities). Those flags point you right back here — telling you exactly what knowledge to add. This is how your receptionist gets smarter over time. ## Adding Content You have four ways to teach your receptionist. Each method creates entries in your **Receptionist's Library** below. Upload files directly. Supports **PDF, DOCX, TXT, CSV, XLSX, JSON, and Markdown**. You can select multiple files at once and upload them in a single batch. Sync pages directly from your Notion workspace. Perfect if your team already manages hotel information in Notion. Changes in Notion can be re-synced anytime. Create content directly in RecepAI using the built-in editor. Choose **New Page** for rich-text content or **Q\&A** for frequently asked questions. This is the fastest way to add knowledge. Import content from your hotel's website — either a single page or an entire sitemap. Your receptionist learns directly from your live web pages. ### Add Docs Click **"Add Docs"** to upload files from your computer. 1. Enter a **Material Name** (e.g., "Hotel Policy", "Room Types") 2. Click or drag files into the upload area — **multiple files supported** 3. Click **Upload** to start processing **Supported file types:** PDF, DOCX, TXT, CSV, XLSX, JSON, Markdown **What are "pieces"?** When you upload a document, your receptionist breaks it into smaller knowledge pieces (chunks). A 10-page PDF might become 15-20 pieces. This is normal — AI processes smaller chunks more accurately than one large block of text. ### Write Notes Click **"Write Notes"** to create content directly in RecepAI. A dropdown lets you choose between two formats: **New Page** — Opens a full-page editor where you can write rich-text content with formatting. The editor supports **bold**, **italic**, **headings**, **links**, **bullet and numbered lists**, **blockquotes**, and **dividers**. Content is saved in [Markdown](https://www.markdownguide.org/basic-syntax/) format, which your receptionist reads with high accuracy. 1. Give your page a title (e.g., "Room Types", "Spa Menu") 2. Write or paste your content — use the toolbar to format 3. Click **Save** — or click **Save & New** to save and immediately start another page **Q\&A** — Opens a full-page editor designed for question-and-answer pairs. Each pair is a card with a question field and an answer field. 1. Give your Q\&A set a title (e.g., "Check-in FAQ", "Room Service Questions") 2. Fill in question-answer pairs — click **"Add Question"** for more 3. Click **Save** — or click **Save & New** to save and start a new set **Q\&A is the most effective format** for training your receptionist. It maps directly to how guests ask questions — "What time is breakfast?" gets a precise answer instead of your receptionist searching through a long document. Start with Q\&A for your most common guest questions, then use New Page for longer content like policies and descriptions. ### Notion Library If your team uses Notion to manage hotel information, you can sync pages directly: **Connecting for the first time:** 1. Click **"Notion Library"** — a side panel opens 2. Click **"Import from Notion"** 3. Authorize RecepAI to access your Notion workspace 4. Select which pages to import — you can choose multiple 5. Click **"Import Selected"** — your receptionist learns the content automatically **Updating existing Notion content:** 1. Open the side panel and click **"Check for Updates"** 2. If pages were modified in Notion, you'll see a list of changed documents 3. Click **"Train RECEPtionist"** to sync the latest content **Deleted pages:** If you delete a page in Notion, RecepAI detects this and warns you. You'll see a "pages no longer exist in Notion" message with an option to **"Remove All from Library"** to clean up. **Editing a Notion document:** * Click the **view icon** (eye) on any Notion document in your library * You'll see the current content (read-only) and sync status * Click **"Edit in Notion"** to open the page in Notion * After editing, come back and click **"Train RECEPtionist"** to sync your changes If the connection to Notion breaks (e.g., you revoked access), click **"Reconnect to Notion"** in the side panel to re-authorize. **Need more details?** Our complete Notion guide covers how the sync mechanism works, what to do when pages show as deleted, who should connect Notion, troubleshooting tips, and best practices. ### Scan Web Import content directly from your hotel's website. Your receptionist learns from your live web pages. **Single page import:** 1. Click **"Scan Web"** — a side panel opens 2. Paste any page URL (e.g., `https://yourhotel.com/rooms`) 3. Optionally enter a title (otherwise the page title is used) 4. Click **"Import Page"** **Sitemap import (multiple pages):** 1. Paste your sitemap URL (e.g., `https://yourhotel.com/sitemap.xml`) 2. RecepAI analyzes the sitemap and shows all available pages 3. Use **Select All** or pick individual pages 4. Click **"Import Pages"** — progress updates in real-time **50 page limit.** Your receptionist can learn from up to 50 web pages total. The counter shows how many slots you've used. If you need to add more, delete some existing web pages first. **Advanced filters (sitemap mode):** When importing from a sitemap, you can filter which pages to include: | Filter | What It Does | Example | | ----------------- | ----------------------------------------- | --------------------------------------------- | | **Include Pages** | Only import pages matching these patterns | `/en/` — only English pages | | **Ignore Pages** | Skip pages matching these patterns | `/blog/`, `/fr/` — skip blog and French pages | Focus on pages that help guests — rooms, amenities, restaurants, location, contact info. Skip blog posts, career pages, and non-guest-facing content. **Keeping web content fresh:** * Click the **view icon** on any web document to see its extracted content * Click **"Re-fetch Page"** to pull the latest version from your website * Click **"Download"** to save the extracted content as a Markdown file ## Receptionist's Library All your training materials appear in a searchable table: | Column | What It Shows | | ----------------- | --------------------------------------------------------- | | **Material Name** | Document title (with type icon) | | **Type** | Source type — File, Notion, Page, Q\&A, or Web | | **Pieces** | How many knowledge pieces the document was split into | | **Status** | "Learned" when your receptionist has absorbed the content | | **Actions** | View, edit, replace, or delete (varies by type) | ### Filtering and Searching * Use the **search bar** to find specific documents by name * Click **filter pills** (All, Files, Notion, Page, Q\&A, Web) to filter by type * Each filter shows a count of documents in that category ### Actions by Document Type | Type | Available Actions | | ---------- | --------------------------------------------------- | | **File** | Replace file (upload new version), Delete | | **Page** | Edit in full-page editor, Delete | | **Q\&A** | Edit question-answer pairs, Delete | | **Notion** | View content (read-only), Delete | | **Web** | View content, Re-fetch page, Download as MD, Delete | **Bulk delete:** Select multiple documents using checkboxes, then click **"Delete Selected"** to remove them all at once. **Replace file:** For file-type documents, you can upload a new version without deleting and re-creating. Click the replace icon, upload the new file, and your receptionist re-learns the updated content. ## After Uploading **Always test after uploading new content.** Open the chat widget and ask questions about the content you just uploaded. If the answers aren't accurate, review the [Document Preparation Guide](/knowledge-base/document-preparation) for tips on formatting your content for better results. For detailed guidance on structuring your documents, see the [Knowledge Base Overview](/knowledge-base/overview). # Analytics Source: https://recepai.ai/docs/admin-panel/history Monitor guest conversations, see your receptionist in action, and keep track of your credits. The Analytics page is your window into every guest interaction — text conversations, voice calls, and credit usage. Use it to monitor performance, spot knowledge gaps, and continuously improve your receptionist. **This is where the self-improving loop happens.** Your receptionist automatically evaluates every conversation, identifies where it couldn't help, and flags those as training opportunities. You review them here, add the missing knowledge to [Training Materials](/admin-panel/documents), and your receptionist gets smarter with every cycle. The page has three tabs: **Chat History**, **Voice History**, and **Usage**. *** ## Chat History Shows every text conversation your receptionist has had with guests. ### Conversation Table Each row in the table displays: | Column | What It Shows | | -------------- | ----------------------------------------------------------------------- | | **Date/Time** | When the conversation started | | **Session ID** | Unique identifier for the conversation | | **Messages** | Total number of messages exchanged | | **Feedback** | Guest thumbs up/down reactions (if any) | | **Status** | Quality evaluation result — see [Quality Status](#quality-status) below | Click any row to open the **Conversation Details** panel on the right side. ### Filters Use the toolbar at the top to narrow down conversations: | Filter | Options | What It Does | | -------------- | --------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Date Range** | Start and end date pickers | Show conversations within a specific period. Defaults to the last 30 days. | | **Feedback** | All, With Feedback, Positive, Negative | Filter by guest reactions. "With Feedback" shows any conversation where a guest gave a thumbs up or down. | | **Quality** | All, Successful, Needs Training, Other Issues, Partial, Pending | Filter by how well your receptionist performed. **"Needs Training"** is the most actionable — these are conversations where adding knowledge will make a difference. | | **Search** | Free text | Search through conversation content | **Start with "Needs Training" filter.** These conversations show exactly where your receptionist couldn't help because it was missing information. Fix these first for the biggest impact. ### Export Click **"Export JSON"** to download all visible conversations as a JSON file. Useful for external analysis or record-keeping. ### Conversation Details Click any conversation row to open a slide-in panel with two tabs: **Overview tab:** * **Session metadata** — Session ID, start time, end time, message count * **Guest Feedback** — Every thumbs up/down the guest gave, including any written comments with timestamps * **Quality Criteria** — Each evaluation criterion shows a pass/fail result with a rationale explaining why. See [Quality Status](#quality-status) for details. * **Training Opportunity** — If the conversation failed, this box shows the specific topics your receptionist couldn't answer. These appear as tags (e.g., "spa hours", "parking policy") so you know exactly what to add to [Training Materials](/admin-panel/documents). * **Mark as Trained** — After you've added the missing information, click this button to mark the conversation as resolved. See [Training Workflow](#training-workflow) below. **Transcript tab:** * The complete conversation between the guest and your receptionist, displayed as a chat timeline with timestamps for each message. *** ## Voice History Shows every voice conversation — whether the guest called through the website widget, a lobby kiosk, or a phone line. ### Call Table | Column | What It Shows | | ------------- | ----------------------------------------------- | | **Date/Time** | When the call started | | **Duration** | Call length (minutes:seconds) | | **Messages** | Number of conversation turns | | **Status** | Evaluation result — Success, Failed, or Unknown | | **Details** | Eye icon — click to open the call details panel | ### Filters | Filter | Options | What It Does | | -------------- | ----------------------------- | ------------------------------- | | **Date Range** | Start and end date pickers | Defaults to the last 30 days | | **Status** | All, Success, Failed, Unknown | Filter by call outcome | | **Search** | Free text | Search through call transcripts | ### Export Click **"Export JSON"** to download all visible voice conversations. ### Call Details Click the eye icon on any row to open the details panel: * **Audio Player** — Listen to the recorded call directly in the panel (when recording is available) * **Overview tab** — Call metadata (date, duration, messages, status) plus evaluation criteria results with pass/fail for each criterion * **Transcription tab** — Full text transcript of the voice conversation, showing what the guest said and how your receptionist responded Voice evaluation criteria are configured on the [Voice Settings](/admin-panel/voice-agent#guest-satisfaction-criteria) page. If you haven't set up criteria yet, conversations will show as "Unknown" status. *** ## Usage Track your credit consumption and manage your plan. ### Plan Header At the top you'll see: * **Plan badge** — Your current plan name (e.g., RECEPTIONIST) * **Next renewal date** — When your credits reset * **Current billing cycle** — The date range for your current period * **Upgrade Plan** — Button to view available plan upgrades ### Voice Credits A progress bar showing your monthly voice minute consumption: * **Monthly Allowance** — Used minutes vs. total allocation (e.g., "628 / 100.0K") * **Percentage indicator** — Color-coded: green (normal), orange (approaching limit), red (near limit) * **Sync button** — Refresh the usage data to get the latest numbers * **Buy More** — Purchase additional voice credits if you're running low ### Chat Credits Same layout as Voice Credits: * **Monthly Allowance** — Used credits vs. total allocation * **Percentage indicator** — Same color-coded system * **Buy More** — Purchase additional chat credits If you've purchased add-on credits (via "Buy More"), they appear as a separate purple progress bar below the monthly allowance, with their expiration date shown. ### Your Feature Add-ons Shows any premium features you've activated — WhatsApp integration, Telegram integration, Custom Avatar, and more. If you haven't purchased any add-ons yet, you'll see a **"Browse Features"** button to explore available options. For details on purchasing add-ons and managing your subscription, see the [Billing](/admin-panel/billing) page. *** ## Quality Status After each conversation ends, your receptionist automatically evaluates it against the success criteria you've defined on the [Chat Settings](/admin-panel/conversation-agent) or [Voice Settings](/admin-panel/voice-agent) page. The result appears as a colored badge: | Badge | Color | Meaning | Action Needed | | ------------------ | ----------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------ | | **Success** | Green | All quality criteria were met | None — your receptionist handled it well | | **Needs Training** | Red | Your receptionist couldn't answer because it was missing information | **Yes** — add the missing info to [Training Materials](/admin-panel/documents) | | **Other Issues** | Gray | The conversation didn't go well, but it's not a knowledge gap | Review the conversation to understand what happened | | **Partial** | Orange | Some criteria passed, some failed | Review which criteria failed and whether adding knowledge would help | | **Pending** | Yellow (animated) | Still being analyzed — results ready in about 5 minutes | Wait — the evaluation is processing | | **Skipped** | Gray | Evaluation was skipped (e.g., conversation was too short) | None | | **Trained** | Purple | Previously "Needs Training" but you've marked it as resolved | None — you've already handled it | **No criteria = no evaluation.** If you haven't set up quality criteria on the [Chat Settings](/admin-panel/conversation-agent) or [Voice Settings](/admin-panel/voice-agent) page, conversations won't be evaluated and will show as "Skipped". *** ## Training Workflow This is the most important workflow in RecepAI — the cycle that makes your receptionist smarter over time: Your [Dashboard](/admin-panel/dashboard) shows a **Training Opportunities** badge with the number of conversations that need attention. Click it to jump directly to Chat History, pre-filtered to show only "Needs Training" conversations. Click a conversation to open the details panel. In the **Training Opportunity** box, you'll see the specific topics your receptionist couldn't answer — displayed as tags like "spa hours", "parking rates", "late checkout policy". Go to [Training Materials](/admin-panel/documents) and add the information your receptionist was missing. Use **Write Notes** in Q\&A format for the fastest results. Return to the conversation and click **"Mark as Trained"**. The status changes from "Needs Training" to "Trained" (purple badge), and the Dashboard badge count decreases. **Check every 2-3 days.** Regular reviews help your receptionist improve quickly. Focus on "Needs Training" conversations first — "Other Issues" are usually not fixable with documents alone. # Team Members Source: https://recepai.ai/docs/admin-panel/users Manage who on your team can access and configure your AI receptionist — set roles, permissions, and module access. The Team Members page lets you control who on your team can access your receptionist's settings — and exactly what they can do. **How to access this page:** Click the **RecepAI menu icon** in the top-right corner of your admin panel, then select **"Team Members"** from the dropdown menu. This page is not in the main sidebar navigation. **Manager access required.** To see the Team Members menu, your RecepAI account manager must first grant you **Manager** access. If you don't see "Team Members" in the dropdown, contact your RecepAI account manager to request it. *** ## Roles: Manager vs Staff Every team member has one of two roles: | Role | Badge | What They Can Do | | ----------- | ------------ | ------------------------------------------------------------------------------------------------ | | **Manager** | Purple badge | Add, edit, and archive other team members. Full control over team settings. | | **Staff** | Green badge | Work within their assigned permissions and modules. **Cannot** add or manage other team members. | Only a **RecepAI account manager** (Hotel Linkage staff) can promote someone to Manager. Managers themselves cannot change someone's role — they can only set permissions and module access for existing Staff members. *** ## Permissions Each team member gets granular permissions that control what actions they can take: | Permission | Badge Color | What It Allows | | ---------- | ----------- | ----------------------------------------------------------------------------------------------- | | **Read** | Blue | View all settings, documents, conversations, and analytics (read-only) | | **Edit** | Yellow | Modify settings, upload documents, change configurations — everything Read can do, plus writing | | **Delete** | Red | Remove documents, archive conversations — everything Edit can do, plus deletion | Permissions are **cumulative** — a team member with Edit automatically has Read, and a team member with Delete has both Read and Edit. **Recommended setup:** Give most team members **Read + Edit**. Reserve **Delete** for senior staff who need to remove documents or manage content. This prevents accidental deletions while keeping everyone productive. *** ## Team Members Table The main table shows all team members at a glance: | Column | What It Shows | | --------------- | ------------------------------------------------------------------------- | | **Team Member** | Name, email address, and hotel access count (for chain users) | | **Permissions** | Permission badges (Read, Edit, Delete) plus role badge (Manager or Staff) | | **Status** | Active (green dot) or Inactive (gray dot) | | **Actions** | Edit and Archive buttons (or Edit and Reactivate for archived members) | ### Hide Archived Toggle By default, archived (inactive) team members are hidden. Toggle **"Hide Archived"** off to see all team members, including those who have been archived. This is useful when you need to reactivate someone. *** ## Adding a Team Member Click **"Add Team Member"** to open a slide-in panel with the following sections: ### Account Information | Field | Required | Details | | ----------------- | ----------------- | ----------------------------------------------------------------------------- | | **Display Name** | Yes | The name shown in the team members table | | **Email Address** | Yes | Used for login — must be a valid email | | **Password** | Yes (new members) | Minimum 8 characters with uppercase, lowercase, number, and special character | ### Permissions Choose which actions this team member can perform: * **Read** — View settings and data (enabled by default) * **Edit** — Modify settings and upload content (enabled by default) * **Delete** — Remove documents and content (off by default) Click each permission toggle to enable or disable it. At minimum, every team member has Read access. **You can only grant permissions you have.** If you don't have Delete permission yourself, you cannot give Delete to someone else. Toggles for permissions you don't have will be grayed out. ### Staff Access Control which sections of the admin panel this team member can see: **Full Access** — Complete access to all receptionist tools. The team member sees every page in the admin panel. **Limited Access** — Choose specific modules. When selected, a grid of module cards appears: | Module | What It Includes | | --------------- | -------------------------------------------------------- | | **Chat Agent** | Chat personality and AI settings | | **Voice Agent** | Voice personality and call settings | | **Training** | Document upload and knowledge base management | | **Widget** | Widget appearance and deployment settings | | **Analytics** | Conversation history, evaluation results, and usage data | | **Front Desk** | PMS integration and guest management | Select one or more modules by clicking their cards. You must select at least one module when using Limited Access. **Match access to responsibilities.** Give your marketing team access to Widget and Training — they know your brand best. Give your front desk manager access to Analytics and Chat Agent — they see guest needs firsthand. Everyone contributes what they know. ### Advanced Options | Setting | What It Does | | ---------- | ------------------------------------------------------------------------------------------------------ | | **Active** | When off, the team member cannot log in. Use this to temporarily suspend access without removing them. | *** ## Editing a Team Member Click the **Edit** button (pencil icon) on any row to open the same slide-in panel with the team member's current settings pre-filled. You can change: * Display name * Password (leave blank to keep the current one) * Permission toggles (Read, Edit, Delete) * Staff Access (Full or Limited, with module selection) * Active status **Hierarchy rules apply.** Managers can freely edit any Staff member — including granting Delete permission. However, when editing another Manager, you can only modify their settings if your permission level is higher than theirs. You cannot edit a Manager with equal or higher permissions. *** ## Archiving & Reactivating RecepAI uses **archiving** instead of permanent deletion. This keeps a record and makes it easy to bring someone back. ### Archiving a Team Member 1. Click the **Archive** button (box icon) on the team member's row 2. A confirmation dialog appears explaining that the member will lose access 3. Click **"Archive"** to confirm The team member's status changes to **Inactive** — they can no longer log in, but their record is preserved. ### Reactivating a Team Member 1. Turn off the **"Hide Archived"** toggle to see inactive members 2. Click the **Reactivate** button (checkmark-person icon) on the archived member's row 3. Their status changes back to **Active** and they can log in again **Seasonal staff?** Archive team members at the end of the season and reactivate them when they return. Their permissions and module access are preserved — no need to set everything up again. *** ## Hotel Chain Users If your organization manages multiple hotels, the Team Members page supports **per-hotel access control**. Instead of the standard Permissions section, chain users see a **Hotel Access** section where you can: * Add multiple hotels from a dropdown * Set **different permissions** (Read, Edit, Delete) for each hotel * Click **"Add Another Hotel"** to grant access to additional properties * Remove a hotel from the list with the **x** button This means a team member could have Edit access at one hotel and Read-only access at another — giving you precise control across your portfolio. # Voice Settings Source: https://recepai.ai/docs/admin-panel/voice-agent Choose your receptionist's voice, speaking style, and call quality criteria — for website, kiosk, or phone. The Voice Settings page is where you define how your receptionist communicates through **voice** — whether guests are speaking through your website chat widget, a lobby kiosk, or a phone line. **Voice works everywhere, not just phone.** Your receptionist's voice feature appears as a microphone button in the chat widget. Guests can type a message *or* tap the microphone to have a real-time voice conversation — just like a voice assistant. The same voice settings apply whether the conversation happens on your website, an embedded kiosk, or a phone line. **Want to connect voice to your phone line?** Phone integration requires additional setup. Contact your account manager or the RecepAI support team to get started. ## Voice Selection The sidebar shows your currently selected voice with a **preview button** to hear a sample. Click the **settings icon** to open the Voice Settings modal, or click the voice name to open the voice selection modal. In the voice selection modal, you can: * Browse all available voices in a visual grid * Preview each voice before selecting * Choose the voice that best represents your hotel's personality Listen to several voices before choosing. A luxury resort might want a calm, measured voice. A boutique city hotel might prefer something warmer and more energetic. ## How They Should Talk This is the most important field on this page. Think of it as the training manual you'd hand a new receptionist — explain the tone, the boundaries, and how they should handle different situations during a voice conversation. **Common mistake:** Don't put hotel information (room types, prices, hours, policies) in this field. That belongs in [Training Materials](/admin-panel/documents). This field is for *behavior* — how your receptionist should speak, not what they should know. Your receptionist automatically pulls knowledge from Training Materials during conversations. **Key difference from chat:** Voice responses must be short (2-3 sentences max), use natural speech patterns, and avoid formatting like bullet points, links, or markdown — none of that translates to spoken audio. See the [Voice Prompts Guide](/prompt-engineering/voice-prompts) for detailed guidance. **Character Limit:** 12,000 characters maximum. The counter changes color to guide you: * **Green (0 - 8,000):** Optimal range * **Orange (8,000 - 10,000):** Getting long — consider moving details to Training Materials * **Red (10,000 - 12,000):** May affect response quality For best results, keep your instructions under 10,000 characters. Detailed information (room types, restaurant hours, policies) should go in [Training Materials](/admin-panel/documents), not here. Click the **Expand** button for a full-screen editing experience — much easier for longer instructions. The quality of your receptionist's voice responses depends directly on how well you write these instructions. Take the time to be specific. For a step-by-step guide, see the [Voice Prompts Guide](/prompt-engineering/voice-prompts). ## Voice Settings Click the **settings icon** (gear) next to the voice selector to open the Voice Settings modal. Settings are organized into two sections: ### AI Brain | Setting | What It Does | | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Thinking Model** | Shows which AI model powers your receptionist's voice responses. This is **read-only** — configured by the RecepAI team. Contact your account manager if you need a different model. | | **Creativity Level** | Controls how predictable responses are. **Focused (0.0 - 0.3):** Most accurate, recommended for reception. **Balanced (0.4 - 0.7):** More natural. **Creative (0.8 - 1.0):** Not recommended for guest services. | For hotel receptionists, we recommend the **Focused** range (0.3 or lower). Guests need accurate, reliable answers — not creative interpretations. ### Voice Quality | Setting | What It Controls | Recommended Range | | --------------- | --------------------------------------------------------------------------- | ------------------------- | | **Stability** | Voice emotional variation. Lower = more expressive, Higher = calmer | 0.5 - 0.7 for most hotels | | **Speed** | Speaking pace. 0.9x = relaxed (resorts), 1.1x = efficient (business hotels) | 0.9 - 1.1 | | **Voice Match** | How closely AI matches the selected voice | 0.75 - 0.85 | ## Greeting Set the first thing your receptionist says when a guest starts a voice conversation. Keep it short and welcoming: > "Hello, welcome to Grand Hotel Istanbul. How may I help you today?" **Character limit:** 500 characters. A great greeting is 1-2 sentences. ## Guest Satisfaction Criteria Define what "success" means for your hotel's voice conversations. After each conversation, your receptionist automatically evaluates whether these criteria were met — and flags conversations that need your attention. **How to set criteria:** 1. Click **"Add Criteria"** 2. Give it a clear name (e.g., "Guest Question Answered") — up to 50 characters 3. Describe what success looks like (e.g., "The guest's specific question was answered with accurate information") — up to 2,000 characters **Example criteria:** * Guest confirmed their question was answered * Reservation inquiry handled with specific contact information * Alternative options offered when first choice unavailable **Avoid:** * Vague criteria like "Good service" * Multiple conditions in one criterion Satisfaction criteria work hand-in-hand with your conversation history. When your receptionist fails a criteria because it lacks knowledge on a topic, that conversation shows up as a training opportunity — telling you exactly what to add to your [Training Materials](/admin-panel/documents). Click **"View results in Voice History"** at the bottom of the criteria section to see how your receptionist is performing against these standards. For a deeper dive, see the [Voice Evaluation Guide](/quality/voice-evaluation). ## Saving Changes Click **"Save Voice"** at the top of the page to apply your changes. If you have unsaved changes and try to leave, you'll see a warning. # Website Widget Source: https://recepai.ai/docs/admin-panel/widget-builder Customize how your receptionist looks, speaks, and interacts — then deploy it to your website, kiosk, or custom domain. The Website Widget page is where you design your receptionist's entire guest-facing experience — from visual appearance and greeting messages to language support, security settings, and deployment options. Every change you make is reflected in the **live preview** on the right side of the page. Click **"Open Full Preview"** at the top to see the full widget in a new tab. ## Brand Look Set the visual identity that guests see when they interact with your receptionist. | Setting | What It Does | | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Hotel Name** | Displayed in the widget header. Use your hotel's official name. | | **Primary Color** | Your brand color — affects buttons, accents, links, and the overall widget feel. Click the color circle to open the picker, or type a hex code directly (e.g., `#C49E47`). | ## Staff Appearance Upload the visual assets that represent your receptionist. Each element has specific size and format requirements: **280×100px** — PNG, JPG, or SVG (max 2MB). Displayed in the widget header. **800×800px square** — PNG or JPG (max 2MB). The profile picture shown next to your receptionist's messages and on the floating avatar. **720×720px square** — MP4 or WebM (max 50MB). An optional welcome video that plays when guests first see the widget. Great for a personal touch. **128×128px** — PNG, JPG, or SVG (max 2MB). Small icon displayed in the chat header bar. If you don't upload custom media, RecepAI's default receptionist avatar and branding will be used. ### Staff Glow A colorful shimmer effect that animates around your receptionist's floating avatar — rotating purple, blue, and pink gradients that draw the guest's eye. * **On (default):** Eye-catching glow that makes your receptionist stand out on the page * **Off:** Clean, simple shadow — better for a corporate or minimalist look Luxury resorts and boutique hotels typically keep the glow on. Business hotels and corporate properties often prefer it off for a more understated presence. ## Greeting Bubbles Floating speech bubbles that appear above your receptionist's avatar before the guest opens the chat. These are your first chance to start a conversation. | Setting | What It Does | | ----------------- | ------------------------------------------------------------------ | | **Show Bubbles** | Toggle the floating messages on or off | | **Bubble Line 1** | First message guests see (e.g., "Hello, I'm your AI Receptionist") | | **Bubble Line 2** | Second message that cycles in (e.g., "Click to talk with me!") | The two messages alternate automatically — the first appears, fades out, and the second takes its place. After two full cycles, the bubbles stop to avoid being intrusive. **Smart behavior:** If a guest dismisses the bubbles twice, they won't appear again for 24 hours. This respects guest preferences while still engaging new visitors. ## Chat Display Control what guests see when they open the chat window. | Setting | What It Does | | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Greeting Message** | The first message guests see when opening the chat (e.g., "Hello! Welcome to Grand Hotel. How can I help you today?") | | **Input Placeholder** | Ghost text shown in the message input field before typing (e.g., "Type your message...") | | **Hide Sidebar on Start** | When on, the conversation history sidebar is collapsed when guests first arrive — so they focus on your receptionist. Past chats are still accessible via the menu icon. | ## Helpful Conversation Starters Pre-set questions that appear as clickable pills above the message input, making it easy for guests to start a conversation without thinking about what to type. | Setting | What It Does | | ----------------------------- | ------------------------------------ | | **Enable Guided Suggestions** | Toggle suggestion pills on or off | | **First Suggestion** | e.g., "What are the check-in times?" | | **Second Suggestion** | e.g., "Do you have room service?" | Choose questions your guests ask most. Check your [Dashboard training opportunities](/admin-panel/dashboard#training-opportunities) to see the most common topics. ## Service Channels Control which communication channels are available in the widget. ### Voice Toggle voice calls on or off. When enabled, guests see a microphone button in the chat widget for real-time voice conversations. Voice must be configured first on the [Voice Settings](/admin-panel/voice-agent) page. If voice isn't set up yet, you'll see a warning when trying to enable it here. ### WhatsApp Integration Connect your receptionist to WhatsApp Business so guests can message via WhatsApp and get instant AI responses. * **Price:** \$29/mo (add-on) * **Setup:** Subscribe via the Billing page, then our team connects your WhatsApp Business within 7 days * **When active:** Enter your WhatsApp phone number and toggle on ### Telegram Integration Connect your receptionist to Telegram so guests can message via a Telegram bot. * **Price:** \$19/mo (add-on) * **Setup:** Subscribe via the Billing page, then our team connects your Telegram bot within 7 days * **When active:** Enter your Telegram bot username (without @) and toggle on ### Guest Ratings When enabled, guests can rate AI responses with thumbs up/down. This feedback appears in your [Conversation History](/admin-panel/history) and helps you identify where your receptionist needs improvement. ## Guest Terms Require guests to accept terms and conditions before starting a conversation. Useful for GDPR compliance and data privacy requirements. | Setting | What It Does | | ------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | **Guest Agreement** | Master toggle — when on, guests must accept before chatting | | **Terms Content** | The terms text displayed to guests. Supports Markdown formatting: `**bold**`, `*italic*`, `[links](url)` | | **Full Terms URL** | Optional link to your full terms page (e.g., `https://yourhotel.com/terms`). Shows as a "Read full terms" link below the content. | ## World Languages Set up translations so your receptionist greets guests in their preferred language. RecepAI currently supports **20 languages**: English, Turkish, German, French, Spanish, Italian, Russian, Arabic, Chinese, Japanese, Korean, Portuguese, Dutch, Polish, Ukrainian, Greek, Hebrew, Hindi, Thai, and Vietnamese. ### Language Menu When enabled, guests see a language dropdown in the chat and can switch languages anytime during their conversation. When disabled, language is detected automatically. ### Default Language The fallback language used when automatic detection can't determine the guest's preference. ### How Language Detection Works Your receptionist automatically selects the right language for each guest using this priority order: 1. **URL parameter** — If the link contains `?lang=de`, German is used 2. **URL path** — If the page URL starts with `/tr/` or `/de/`, that language is used 3. **Saved preference** — If the guest changed language before, their choice is remembered 4. **Browser language** — The guest's browser language setting 5. **Default language** — Your configured default ### Adding a Language Click **"+ Add Language"** to open the language panel. Select a language, then customize all guest-facing text for that language: * Welcome bubble messages * Chat greeting text * Input placeholder * Button labels (Chat, Call) * Footer disclaimer * Terms & conditions (if enabled) Add the languages most common among your guests. A hotel in Istanbul might add Turkish, English, German, and Arabic. A Paris hotel might add French, English, Spanish, and Chinese. ### Video Timestamps If you uploaded a **Staff Video** with greetings in multiple languages, you can set timestamps so the video automatically skips to the right language section for each guest. **Example:** Your video has English at 0s, German at 15s, and French at 30s. A German guest sees the video start at 0:15 automatically. This section only appears when a staff video is uploaded. ## Widget Placement Control where the floating receptionist avatar appears on the page. Desktop and mobile have **separate position settings** so you can optimize for each screen size. **Available positions:** Bottom Right, Bottom Center, Bottom Left, Middle Right, Middle Left Click a dot on the visual position grid to change placement. The label updates to show the current selection. **Bottom Right** is the most common position — guests expect chat widgets there. Only move it if your website has a conflicting element in that corner. ## Protection Security settings to protect your widget from unauthorized use and abuse. ### Domain Security Restrict your receptionist to work only on specific websites. When enabled, the widget will only load on domains you've added to the **Allowed Domains** list. **How to set up:** 1. Toggle **Domain Security** on 2. Type your website domain (e.g., `grandhotel.com`) and click **Add** 3. Add all domains where the widget will be used — including `www` variants **Domain Security enabled + empty domain list = widget blocked everywhere.** Always add at least one domain before enabling this setting. If you accidentally lock yourself out, disable Domain Security to restore access. **Subdomain matching:** Adding `hotel.com` automatically allows `www.hotel.com`, `booking.hotel.com`, and any other subdomain. You don't need to add each one separately. ### Intelligent Abuse Protection Automatically limits high-frequency requests to block automated bots while keeping the experience seamless for real guests. When enabled, each guest is limited to **10 messages per minute**. Normal guests never hit this limit — only bots or automated scripts would be blocked. ### Daily Limits Set maximum daily usage to control costs and prevent unexpected charges. | Limit | What It Controls | Range | Default | | -------------- | ----------------------------- | ---------- | ------- | | **Chat Limit** | Maximum chat messages per day | 30 – 5,000 | 1,000 | | **Call Limit** | Maximum voice calls per day | 30 – 5,000 | 100 | When a limit is reached, the other channel still works — so if chat hits its limit, guests can still use voice, and vice versa. Limits reset daily at midnight. Start with the defaults and adjust based on your traffic. A small boutique hotel might lower limits. A busy resort during peak season might increase them. ## Reception Ready! The dark section at the bottom of the page contains everything you need to deploy your receptionist. ### Embed on Your Website Copy the **RECEPtionist Code** and paste it before the closing `` tag on your website: ```html theme={null} ``` This single line of code works on **any website platform** — WordPress, Wix, Squarespace, custom HTML, or anything else. The widget loads asynchronously, so it won't slow down your page. You can use the same embed code on multiple pages — your main website, booking engine, restaurant page, and any other guest-facing pages you own. ### Kiosk Link A dedicated URL for launching your receptionist on hotel kiosks, tablets, and interactive lobby displays: ``` https://your-hotel-slug.recep-tion.com ``` This opens a full-screen chat experience — no website needed. Just point your lobby tablet's browser to this URL. ### Custom Domain **Premium feature.** Replace the default kiosk link with your own branded domain, like: ``` airecep.yourhotel.com ``` Instead of `your-hotel-slug.recep-tion.com`, guests see your brand. Professional branding for lobby displays and marketing materials. Contact your account manager or subscribe via the [Billing](/admin-panel/billing) page to set up a custom domain. ## Saving Changes A **floating save button** appears at the bottom of the screen whenever you make changes. Click **"Save Changes"** to apply. If you navigate away with unsaved changes, you'll see a warning. # Authentication Source: https://recepai.ai/docs/api/pms/authentication API key format, Bearer token authentication, and key management. Every request to the PMS API must include a valid API key as a Bearer token in the `Authorization` header. ## API Key Format Keys follow a prefixed format inspired by Stripe — the prefix tells you the key type at a glance: ``` pms_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6 └──────┘ └──────────────────────────────────┘ prefix 32-character random hex ``` | Key Type | Prefix | Purpose | | -------- | ----------- | -------------------------------------------------------------------------------------- | | **Live** | `pms_live_` | Production — creates real guest records, triggers dashboard updates | | **Test** | `pms_test_` | Sandbox — validates your payloads but writes NO data. [Learn more →](/api/pms/testing) | ## How to Authenticate Include your API key as a Bearer token in the `Authorization` header of every request: ```bash theme={null} curl -X POST https://app.recepai.ai/api/pms/v1/grand-hotel/guests/checkin \ -H "Authorization: Bearer pms_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: checkin_RES001_20260218" \ -d '{"pmsGuestId": "RES-001", "lastName": "Doe", "roomNumber": "301", "checkOutDate": "2026-02-22"}' ``` All POST endpoints also require an `Idempotency-Key` header. See [Testing & Rate Limits](/api/pms/testing) for details. ## How to Get an API Key API keys are generated by the **hotel administrator** (not by RecepAI or the PMS provider): In the RecepAI admin panel, the hotel staff navigates to their PMS Integration settings page. The system generates a **live key** (`pms_live_`) and a **test key** (`pms_test_`) together as a pair. Both full keys are displayed once — after that, only masked previews are visible. The hotel sends the API key and their hotel slug to your technical team through a secure channel. Recommended options: * **One-time secret link:** [onetimesecret.com](https://onetimesecret.com) — the link self-destructs after one view * **Password manager sharing** (1Password, Bitwarden, etc.) * **Encrypted email** (PGP, S/MIME) **Security: Handle keys carefully.** The API key grants full read/write access to the hotel's guest data. **Never share via:** Plain email, WhatsApp, SMS, Slack DM, or any unencrypted messaging app. These leave the key in chat history permanently. **Never expose in:** Client-side code, public repositories, or log files. If a key is compromised, the hotel admin can revoke it immediately and generate a new one. ## Key Lifecycle | Action | Who does it | What happens | | -------------- | ----------- | -------------------------------------------------------------------------------------------------------- | | **Generate** | Hotel admin | A live key and test key are created together as a pair. Previous revoked keys are not affected. | | **Use** | Your PMS | Every API call authenticates with the live or test key. Usage is tracked (last used, request count). | | **Revoke** | Hotel admin | Both keys (live and test) are immediately invalidated. All subsequent requests return `401 KEY_REVOKED`. | | **Regenerate** | Hotel admin | Both old keys are revoked and a new pair is generated in a single operation. | ## Authentication Errors If authentication fails, you'll receive one of these responses: **Missing or malformed header (401):** ```json theme={null} { "status": "error", "code": "UNAUTHORIZED", "message": "Missing or malformed Authorization header. Use: Bearer pms_live_xxx", "requestId": "req_a1b2c3d4" } ``` **Invalid or wrong API key (401):** ```json theme={null} { "status": "error", "code": "UNAUTHORIZED", "message": "Invalid credentials", "requestId": "req_a1b2c3d4" } ``` **Revoked API key (401):** ```json theme={null} { "status": "error", "code": "KEY_REVOKED", "message": "API key has been revoked. Contact hotel admin for a new key.", "requestId": "req_a1b2c3d4" } ``` The `KEY_REVOKED` error is the only authentication error with a specific code. All other failures return a generic `UNAUTHORIZED` to prevent key enumeration attacks. # POST /guests/checkin Source: https://recepai.ai/docs/api/pms/checkin Create a new in-house guest record when a guest checks in at your PMS. ## Endpoint ``` POST https://app.recepai.ai/api/pms/v1/{slug}/guests/checkin ``` Creates a new in-house guest record. The guest immediately becomes visible on the hotel's Front Desk dashboard and available for AI-powered guest verification. ## Headers | Header | Required | Description | | ----------------- | -------- | ------------------------------------------------------------------------------------------- | | `Authorization` | Yes | `Bearer pms_live_xxx` or `Bearer pms_test_xxx` | | `Content-Type` | Yes | `application/json` | | `Idempotency-Key` | Yes | Unique key for this request (1–255 chars). See [Idempotency](/api/pms/testing#idempotency). | ## Request Body ```json theme={null} { "pmsGuestId": "RES-2026-001", "firstName": "John", "lastName": "Doe", "phone": "+905551234567", "roomNumber": "301", "checkInDate": "2026-02-18", "checkOutDate": "2026-02-22", "language": "en", "adults": 2, "children": 0, "nationality": "US", "email": "john.doe@gmail.com", "notes": "Late arrival, airport transfer arranged" } ``` ## Field Reference | Field | Type | Required | Description | | -------------- | ------- | -------- | -------------------------------------------------------------------------------------------------------------- | | `pmsGuestId` | string | **Yes** | Your PMS's own reservation or guest identifier. Must be unique among active guests. Max 255 chars. | | `lastName` | string | **Yes** | Guest last name. Max 100 chars. | | `roomNumber` | string | **Yes** | Room number. Must match a room in the hotel's configured room list. | | `checkOutDate` | string | **Yes** | Expected checkout date in `YYYY-MM-DD` format. Must be on or after `checkInDate`. | | `firstName` | string | No | Guest first name. Max 100 chars. | | `phone` | string | No | Phone in E.164 format: `+` followed by country code and number, no spaces or dashes. Example: `+905551234567`. | | `checkInDate` | string | No | Check-in date in `YYYY-MM-DD` format. Defaults to today if omitted. | | `language` | string | No | ISO 639-1 language code (`en`, `tr`, `de`, `fr`, `es`, `ru`, etc.). Defaults to `en`. | | `adults` | integer | No | Number of adults (1–20). Defaults to 1. | | `children` | integer | No | Number of children (0–20). Defaults to 0. | | `nationality` | string | No | ISO 3166-1 alpha-2 country code (`US`, `TR`, `DE`, etc.). | | `email` | string | No | Guest email address. | | `notes` | string | No | Free-text notes about the guest (max 2000 chars). Saved as a staff note visible on the guest's profile. | **Include the phone number whenever possible.** The AI receptionist uses the phone number to verify guest identity when handling service requests. Without it, the AI cannot confirm who is calling or messaging. ## Response: Success (200) ```json theme={null} { "status": "created", "guestId": "abc123-def456", "pmsGuestId": "RES-2026-001", "roomNumber": "301", "requestId": "req_a1b2c3d4" } ``` | Field | Description | | ------------ | ------------------------------------------------------ | | `status` | Always `"created"` on success | | `guestId` | RecepAI's internal ID for this guest record | | `pmsGuestId` | Echo of your PMS guest identifier | | `roomNumber` | Echo of the assigned room | | `requestId` | Unique ID for this request (use for support inquiries) | ## Response: Room Occupied (409) Returned when the specified room already has an active guest: ```json theme={null} { "status": "error", "code": "ROOM_OCCUPIED", "message": "Room 301 is already occupied by an active guest", "currentGuest": { "pmsGuestId": "RES-2026-000", "lastName": "Smith", "checkInDate": "2026-02-15" }, "requestId": "req_a1b2c3d4" } ``` The `currentGuest` object helps you identify who is currently in the room, so you can resolve the conflict — either check out the previous guest first, or correct the room number. ## Response: Duplicate Guest (409) Returned when an active guest with the same `pmsGuestId` already exists: ```json theme={null} { "status": "error", "code": "DUPLICATE_GUEST", "message": "Active guest with pmsGuestId RES-2026-001 already exists", "existingGuest": { "guestId": "abc123-def456", "roomNumber": "301" }, "requestId": "req_a1b2c3d4" } ``` ## Response: Validation Error (400) Returned when required fields are missing or field values are invalid: ```json theme={null} { "status": "error", "code": "FIELD_REQUIRED", "message": "lastName is required", "field": "lastName", "requestId": "req_a1b2c3d4" } ``` See [Error Handling](/api/pms/errors) for the complete list of validation rules and error codes. ## Idempotency If you send the same `Idempotency-Key` within 24 hours, the original response is returned without creating a duplicate guest: ```json theme={null} { "status": "created", "guestId": "abc123-def456", "pmsGuestId": "RES-2026-001", "roomNumber": "301", "requestId": "req_a1b2c3d4", "_idempotent": true } ``` The `_idempotent: true` flag tells you this is a cached response from a previous identical request. ## Example: Full cURL ```bash theme={null} curl -X POST https://app.recepai.ai/api/pms/v1/grand-hotel/guests/checkin \ -H "Authorization: Bearer pms_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: checkin_RES2026001_20260218" \ -d '{ "pmsGuestId": "RES-2026-001", "firstName": "John", "lastName": "Doe", "phone": "+905551234567", "roomNumber": "301", "checkInDate": "2026-02-18", "checkOutDate": "2026-02-22", "language": "en", "adults": 2, "children": 0, "nationality": "US", "email": "john.doe@gmail.com" }' ``` # POST /guests/checkout Source: https://recepai.ai/docs/api/pms/checkout Check out a guest and move them to departure history. ## Endpoint ``` POST https://app.recepai.ai/api/pms/v1/{slug}/guests/checkout ``` Checks out an in-house guest. The guest is removed from the active roster and moved to the hotel's departure history. All guest notes, activity logs, and conversation history are preserved. ## Headers | Header | Required | Description | | ----------------- | -------- | ------------------------------------------------------------------------------------------- | | `Authorization` | Yes | `Bearer pms_live_xxx` or `Bearer pms_test_xxx` | | `Content-Type` | Yes | `application/json` | | `Idempotency-Key` | Yes | Unique key for this request (1–255 chars). See [Idempotency](/api/pms/testing#idempotency). | ## Request Body ```json theme={null} { "pmsGuestId": "RES-2026-001", "checkoutTime": "2026-02-22T11:30:00Z" } ``` | Field | Type | Required | Description | | -------------- | ------ | -------- | --------------------------------------------------------------------------------------------------------------- | | `pmsGuestId` | string | **Yes** | The guest to check out (your PMS identifier) | | `checkoutTime` | string | No | Actual checkout timestamp in ISO 8601 format (`YYYY-MM-DDTHH:mm:ssZ`). Defaults to the current time if omitted. | ## Response: Success (200) ```json theme={null} { "status": "checked_out", "guestId": "abc123-def456", "pmsGuestId": "RES-2026-001", "roomNumber": "305", "stayDuration": { "checkIn": "2026-02-18", "checkOut": "2026-02-22" }, "requestId": "req_i9j0k1l2" } ``` ## Response: Already Checked Out (200) If the guest has already been checked out (or was never checked in via the PMS API), the endpoint returns a **200 OK** — not an error: ```json theme={null} { "status": "already_checked_out", "pmsGuestId": "RES-2026-001", "message": "Guest was already checked out or not found", "requestId": "req_i9j0k1l2" } ``` **This is intentionally idempotent.** Checkout requests should be safe to retry without causing errors. If your PMS sends a checkout event twice (e.g., due to a network retry), the second request simply confirms the guest is already gone — no error, no side effects. ## What Happens on Checkout When a guest is checked out: 1. The guest is removed from the active in-house roster 2. The guest appears in the hotel's **Departures** section 3. All notes, service requests, and activity logs remain linked to the guest record 4. The hotel dashboard updates in real time via server-sent events 5. The AI receptionist no longer considers this guest as in-house ## Example: cURL ```bash theme={null} curl -X POST https://app.recepai.ai/api/pms/v1/grand-hotel/guests/checkout \ -H "Authorization: Bearer pms_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: checkout_RES2026001_20260222" \ -d '{ "pmsGuestId": "RES-2026-001", "checkoutTime": "2026-02-22T11:30:00Z" }' ``` # Error Handling Source: https://recepai.ai/docs/api/pms/errors Error codes, validation rules, and how to handle failures gracefully. ## Error Response Format Every error response follows the same structure: ```json theme={null} { "status": "error", "code": "ERROR_CODE", "message": "Human-readable description of what went wrong", "field": "fieldName", "requestId": "req_a1b2c3d4" } ``` | Field | Always Present | Description | | ----------- | -------------- | ---------------------------------------------------------------- | | `status` | Yes | Always `"error"` | | `code` | Yes | Machine-readable error code (use this for programmatic handling) | | `message` | Yes | Human-readable description (may change — don't parse this) | | `field` | No | Which field caused the error (only on validation errors) | | `requestId` | Yes | Unique request ID for support inquiries | Always use the `code` field for error handling in your code, not `message`. The message text may be updated to be more helpful — the code will remain stable. ## Error Codes | HTTP Status | Code | Description | | ----------- | ---------------------- | -------------------------------------------------------------------------------------------- | | 400 | `INVALID_JSON` | Request body is not valid JSON | | 400 | `FIELD_REQUIRED` | A required field is missing. The `field` property tells you which one. | | 400 | `FIELD_INVALID` | Field value is invalid (wrong type, out of range, too long, etc.) | | 401 | `UNAUTHORIZED` | Missing or invalid API key. See [Authentication](/api/pms/authentication). | | 401 | `KEY_REVOKED` | API key has been revoked by the hotel admin | | 404 | `GUEST_NOT_FOUND` | No active guest with the given `pmsGuestId` | | 409 | `ROOM_OCCUPIED` | Room already has an active guest. Response includes `currentGuest` info. | | 409 | `DUPLICATE_GUEST` | An active guest with the same `pmsGuestId` already exists | | 422 | `INVALID_DATE_FORMAT` | Date is not in ISO 8601 format (`YYYY-MM-DD`) | | 422 | `INVALID_PHONE_FORMAT` | Phone number is not in E.164 format | | 422 | `ROOM_NOT_FOUND` | Room number doesn't exist in the hotel's configured room list | | 429 | `RATE_LIMITED` | Too many requests. See `Retry-After` header and [Rate Limits](/api/pms/testing#rate-limits). | | 500 | `INTERNAL_ERROR` | Server error. Contact support with the `requestId`. | ## Validation Rules Every field is validated on the server. Here are the rules for each field: | Field | Type | Constraints | | -------------- | ------- | ------------------------------------------------------------------------------- | | `pmsGuestId` | string | Required. 1–255 characters. Must be unique among active guests. | | `lastName` | string | Required. 1–100 characters. | | `firstName` | string | Optional. 1–100 characters. | | `roomNumber` | string | Required for check-in. Must match a room in the hotel's configured room list. | | `phone` | string | Optional. Must be E.164 format (see below). | | `checkInDate` | string | Optional (defaults to today). Must be `YYYY-MM-DD`. | | `checkOutDate` | string | Required for check-in. Must be `YYYY-MM-DD`. Must be on or after `checkInDate`. | | `language` | string | Optional. ISO 639-1 code: `en`, `tr`, `de`, `fr`, `es`, `ru`, etc. | | `nationality` | string | Optional. ISO 3166-1 alpha-2 code: `US`, `TR`, `DE`, etc. | | `email` | string | Optional. Must be a valid email format. | | `notes` | string | Optional. Maximum 2,000 characters. | | `adults` | integer | Optional. Range: 1–20. Defaults to 1. | | `children` | integer | Optional. Range: 0–20. Defaults to 0. | ## Date Format **Strict ISO 8601. No exceptions.** | Format | Example | Status | | -------------- | ------------- | -------------- | | `YYYY-MM-DD` | `2026-02-18` | Accepted | | `DD.MM.YYYY` | `18.02.2026` | Rejected (422) | | `MM/DD/YYYY` | `02/18/2026` | Rejected (422) | | `DD-Mon-YYYY` | `18-Feb-2026` | Rejected (422) | | Unix timestamp | `1708214400` | Rejected (422) | When a date fails validation, the error message includes what you sent and what's expected: ```json theme={null} { "status": "error", "code": "INVALID_DATE_FORMAT", "message": "Date must be in ISO 8601 format: YYYY-MM-DD. Received: '18.02.2026'", "field": "checkInDate", "requestId": "req_y5z6a7b8" } ``` **Turkish PMS systems (Protel, Byte, Hicell) commonly use `DD.MM.YYYY` format.** Make sure your integration converts dates to `YYYY-MM-DD` before sending to RecepAI. ## Phone Number Format **E.164 format required.** Starts with `+`, followed by country code and number. No spaces, dashes, or parentheses. | Example | Status | Why | | ------------------- | -------- | --------------------------------- | | `+905551234567` | Accepted | Correct E.164 | | `+491234567890` | Accepted | Correct E.164 | | `+442071234567` | Accepted | Correct E.164 | | `05551234567` | Rejected | Missing country code (`+90`) | | `+90 555 123 4567` | Rejected | Contains spaces | | `0090-555-123-4567` | Rejected | Contains dashes and leading zeros | | `(555) 123-4567` | Rejected | US local format — not E.164 | ```json theme={null} { "status": "error", "code": "INVALID_PHONE_FORMAT", "message": "Phone must be in E.164 format (+905551234567). Received: '05551234567'", "field": "phone", "requestId": "req_c3d4e5f6" } ``` ## Common Mistakes This is the most common error for Turkish PMS integrations. Protel, Byte, and Hicell all default to `DD.MM.YYYY` internally. **Fix:** Convert all dates to `YYYY-MM-DD` before sending. For example, `18.02.2026` → `2026-02-18`. Sending `05551234567` instead of `+905551234567`. The phone field requires the full international number with country code. **Fix:** Prepend the country code with `+`. For Turkey, that's `+90`. For Germany, `+49`. For the UK, `+44`. Sending `{"roomNumber": 301}` instead of `{"roomNumber": "301"}`. Room numbers are strings because they can contain letters (e.g., `"301A"`, `"P2-105"`). **Fix:** Always send room numbers as strings: `"301"`, not `301`. All POST endpoints require an `Idempotency-Key` header. Without it, you'll receive a `400` error. **Fix:** Include `Idempotency-Key: your_unique_key` in every POST request. See [Idempotency](/api/pms/testing#idempotency) for key format recommendations. Each unique operation needs its own key. If you use the same key for two different guests, the second request will return the first guest's cached response. **Fix:** Use a key format like `{operation}_{pmsGuestId}_{date}`. Example: `checkin_RES2026001_20260218`. If Room 301 still has an active guest and you try to check in a new guest to Room 301, you'll get a `409 ROOM_OCCUPIED` error. **Fix:** Always send a [checkout](/api/pms/checkout) for the departing guest before checking in the new guest. Or use the [Full Sync](/api/pms/sync) endpoint which handles this automatically. ## Handling Errors in Your Code Here's a recommended error handling pattern: ```javascript theme={null} async function checkinGuest(slug, apiKey, guestData, idempotencyKey) { const response = await fetch( `https://app.recepai.ai/api/pms/v1/${slug}/guests/checkin`, { method: 'POST', headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json', 'Idempotency-Key': idempotencyKey }, body: JSON.stringify(guestData) } ); const data = await response.json(); if (response.ok) { // Success — guest created (or idempotent replay) return data; } // Handle specific error codes switch (data.code) { case 'ROOM_OCCUPIED': // Room has another guest — check them out first console.log(`Room occupied by ${data.currentGuest.lastName}`); break; case 'DUPLICATE_GUEST': // Guest already checked in — maybe use update instead console.log(`Guest already exists: ${data.existingGuest.guestId}`); break; case 'RATE_LIMITED': // Wait and retry const retryAfter = data.retryAfter || 60; await sleep(retryAfter * 1000); return checkinGuest(slug, apiKey, guestData, idempotencyKey); case 'FIELD_REQUIRED': case 'FIELD_INVALID': case 'INVALID_DATE_FORMAT': case 'INVALID_PHONE_FORMAT': // Fix your payload — don't retry with the same data console.error(`Validation error on ${data.field}: ${data.message}`); break; default: console.error(`Unexpected error: ${data.code} — ${data.message}`); } throw new Error(`PMS API error: ${data.code}`); } ``` **Retry guidance:** * **4xx errors** (except 429): Fix your request before retrying. Retrying the same payload will return the same error. * **429 errors**: Wait for the `retryAfter` period, then retry. * **5xx errors**: Retry with exponential backoff (1s, 2s, 4s, 8s). Include the `requestId` if contacting support. # GET /guests Source: https://recepai.ai/docs/api/pms/list-guests Retrieve all currently in-house guests pushed by your PMS. ## Endpoint ``` GET https://app.recepai.ai/api/pms/v1/{slug}/guests ``` Returns all currently in-house guests that were created through the PMS API. This endpoint is useful for verification, debugging, and reconciliation before running a [full sync](/api/pms/sync). ## Headers | Header | Required | Description | | --------------- | -------- | ---------------------------------------------- | | `Authorization` | Yes | `Bearer pms_live_xxx` or `Bearer pms_test_xxx` | No request body. No `Idempotency-Key` required (this is a GET request). ## Response: Success (200) ```json theme={null} { "guests": [ { "pmsGuestId": "RES-2026-001", "firstName": "John", "lastName": "Doe", "roomNumber": "301", "checkInDate": "2026-02-18", "checkOutDate": "2026-02-22", "phone": "+905551234567", "source": "pms", "createdAt": "2026-02-18T14:00:00Z" }, { "pmsGuestId": "RES-2026-002", "firstName": "Maria", "lastName": "Garcia", "roomNumber": "405", "checkInDate": "2026-02-16", "checkOutDate": "2026-02-20", "phone": "+491234567890", "source": "pms", "createdAt": "2026-02-16T10:30:00Z" } ], "count": 2, "requestId": "req_q7r8s9t0" } ``` ## Guest Object Fields | Field | Type | Description | | -------------- | ------ | ------------------------------------------------------------ | | `pmsGuestId` | string | Your PMS's identifier for this guest | | `firstName` | string | Guest first name (may be `null` if not provided at check-in) | | `lastName` | string | Guest last name | | `roomNumber` | string | Current room number | | `checkInDate` | string | Check-in date (`YYYY-MM-DD`) | | `checkOutDate` | string | Expected checkout date (`YYYY-MM-DD`) | | `phone` | string | Phone number in E.164 format (may be `null`) | | `source` | string | Always `"pms"` for guests created through this API | | `createdAt` | string | Timestamp when the guest was checked in (ISO 8601) | **PMS guests only.** This endpoint only returns guests with `source: "pms"` — guests that were created through the PMS API. Guests entered manually by hotel staff are not included. This ensures your PMS sees only the data it manages. ## Use Cases * **Verification:** After a series of check-ins, confirm all guests were recorded correctly * **Debugging:** If a guest is missing from the hotel dashboard, check if the PMS API received the check-in * **Pre-sync check:** Before running a [full sync](/api/pms/sync), compare your current guest list with what RecepAI has ## Example: cURL ```bash theme={null} curl -X GET https://app.recepai.ai/api/pms/v1/grand-hotel/guests \ -H "Authorization: Bearer pms_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6" ``` # PMS Integration API Source: https://recepai.ai/docs/api/pms/overview Push guest check-in, update, and checkout data from your PMS to RecepAI in real time. RecepAI is an AI-powered receptionist used by hotels to handle guest inquiries, service requests, and communications. To function effectively, RecepAI needs to know **who is currently staying at the hotel** — which guests are in which rooms, their names, phone numbers, and stay dates. The PMS Integration API lets your Property Management System push this guest data to RecepAI automatically. No manual entry, no CSV uploads, no delays. ## How It Works ```mermaid theme={null} flowchart LR PMS["🏨 Your PMS"] API["RecepAI API"] Roster["Guest Roster"] AI["AI Receptionist"] Dashboard["Live Dashboard"] PMS -- "check-in / update / checkout / sync" --> API API --> Roster API --> AI API --> Dashboard style PMS fill:#222222,stroke:#C09A40,color:#FFFFFF style API fill:#C09A40,stroke:#222222,color:#222222 style Roster fill:#f9f9f9,stroke:#6B7280,color:#222222 style AI fill:#f9f9f9,stroke:#6B7280,color:#222222 style Dashboard fill:#f9f9f9,stroke:#6B7280,color:#222222 ``` When a guest checks in, changes rooms, or checks out in your PMS, you send a POST request to the corresponding RecepAI endpoint. The guest record is created or updated in RecepAI's guest roster. Both the hotel dashboard and the AI receptionist have immediate access. When a guest contacts the hotel (via chat, voice, or messaging), the AI receptionist can verify their identity and room number before fulfilling requests like room service, extra towels, or early checkout. Hotel staff see guest arrivals, departures, and room changes on their dashboard instantly via server-sent events. ## Base URL ``` https://app.recepai.ai/api/pms/v1/{slug} ``` Replace `{slug}` with the hotel's unique identifier. You receive this alongside your API key during onboarding. **What is `{slug}`?** Each hotel on RecepAI has a unique slug — a short, URL-safe identifier like `grand-hotel` or `seaside-resort`. The hotel administrator will provide this to you along with the API key. It appears in every endpoint URL. Example: For "Grand Hotel Istanbul" with slug `grand-hotel`, the check-in endpoint is: ``` POST https://app.recepai.ai/api/pms/v1/grand-hotel/guests/checkin ``` ## What You'll Need | Item | Where to get it | Example | | --------------------- | --------------------------------------------------- | -------------------------- | | **API Key** | Hotel admin generates in Settings → PMS Integration | `pms_live_a1b2c3d4e5f6...` | | **Hotel Slug** | Provided by hotel admin alongside the key | `grand-hotel` | | **API Documentation** | You're reading it | This site | ## Available Endpoints | Method | Endpoint | Purpose | | ------ | ---------------------------------------------- | -------------------------------------- | | POST | [`/{slug}/guests/checkin`](/api/pms/checkin) | Register a new in-house guest | | POST | [`/{slug}/guests/update`](/api/pms/update) | Update guest details or change room | | POST | [`/{slug}/guests/checkout`](/api/pms/checkout) | Check out a guest | | GET | [`/{slug}/guests`](/api/pms/list-guests) | List all in-house guests from your PMS | | POST | [`/{slug}/guests/sync`](/api/pms/sync) | Full reconciliation of guest list | ## Next Steps Learn about API key format, Bearer tokens, and key management. Send your first guest check-in in under 5 minutes. # Quick Start Source: https://recepai.ai/docs/api/pms/quick-start Send your first guest check-in in under 5 minutes. This guide walks you through your first API calls — from verifying your credentials to checking in and checking out a test guest. ## Prerequisites Before you start, make sure you have: * An **API key** (either `pms_live_` or `pms_test_` prefix) * The **hotel slug** (e.g., `grand-hotel`) Both are provided by the hotel administrator. See [Authentication](/api/pms/authentication) for details. **Use a test key first.** If you have a `pms_test_` key, use it for this tutorial. Test keys validate your payloads but don't write any data to the hotel's system. You can switch to the live key when you're ready for production. ## Step 1: Verify Your Credentials Start by listing current guests. This confirms your API key and slug are working: ```bash theme={null} curl -X GET https://app.recepai.ai/api/pms/v1/grand-hotel/guests \ -H "Authorization: Bearer pms_test_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6" ``` **Expected response (200 OK):** ```json theme={null} { "guests": [], "count": 0, "requestId": "req_a1b2c3d4" } ``` If you get a `401` error, double-check your API key and slug. See [Authentication Errors](/api/pms/authentication#authentication-errors). ## Step 2: Check In a Guest Send a check-in event with the required fields: ```bash theme={null} curl -X POST https://app.recepai.ai/api/pms/v1/grand-hotel/guests/checkin \ -H "Authorization: Bearer pms_test_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: test_checkin_001" \ -d '{ "pmsGuestId": "TEST-001", "firstName": "John", "lastName": "Doe", "phone": "+905551234567", "roomNumber": "301", "checkInDate": "2026-02-18", "checkOutDate": "2026-02-22", "language": "en" }' ``` **Expected response (200 OK):** ```json theme={null} { "status": "created", "guestId": "test_abc123", "pmsGuestId": "TEST-001", "roomNumber": "301", "requestId": "req_test_b2c3d4", "_sandbox": true } ``` The `_sandbox: true` flag appears only with test keys. It confirms that no real data was written. With a live key, this flag won't be present and the guest will appear on the hotel's dashboard immediately. ## Step 3: Verify the Guest List guests again to confirm the check-in was recorded: ```bash theme={null} curl -X GET https://app.recepai.ai/api/pms/v1/grand-hotel/guests \ -H "Authorization: Bearer pms_test_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6" ``` With a **test key**, the list will still be empty (test mode doesn't write data). With a **live key**, you'd see your guest in the response. ## Step 4: Check Out the Guest When the guest departs, send a checkout event: ```bash theme={null} curl -X POST https://app.recepai.ai/api/pms/v1/grand-hotel/guests/checkout \ -H "Authorization: Bearer pms_test_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: test_checkout_001" \ -d '{ "pmsGuestId": "TEST-001" }' ``` **Expected response (200 OK):** ```json theme={null} { "status": "checked_out", "guestId": "test_abc123", "pmsGuestId": "TEST-001", "roomNumber": "301", "requestId": "req_test_c3d4e5", "_sandbox": true } ``` ## What's Next? You've completed the basic flow. Here's where to go from here: Full field reference for guest check-in — all 12 fields, validation rules, error responses. Nightly reconciliation — send your complete guest list and RecepAI handles the rest. All error codes, validation rules, and common mistakes. Sandbox mode, idempotency keys, and rate limits. # POST /guests/sync Source: https://recepai.ai/docs/api/pms/sync Send your complete in-house guest list for full reconciliation. ## Endpoint ``` POST https://app.recepai.ai/api/pms/v1/{slug}/guests/sync ``` Sends your PMS's complete in-house guest list. RecepAI compares it with its current roster and automatically: * **Checks in** guests that are new (in your list but not in RecepAI) * **Updates** guests whose details changed (room, checkout date, phone, etc.) * **Checks out** guests that are gone (in RecepAI but not in your list) This is designed for **nightly batch reconciliation** — for example, running once every morning at 08:00 to ensure RecepAI and your PMS are perfectly in sync. ## Headers | Header | Required | Description | | ----------------- | -------- | ------------------------------------------------------------------------------------------- | | `Authorization` | Yes | `Bearer pms_live_xxx` or `Bearer pms_test_xxx` | | `Content-Type` | Yes | `application/json` | | `Idempotency-Key` | Yes | Unique key for this request (1–255 chars). See [Idempotency](/api/pms/testing#idempotency). | ## Request Body ```json theme={null} { "syncMode": "full", "guests": [ { "pmsGuestId": "RES-2026-001", "firstName": "John", "lastName": "Doe", "phone": "+905551234567", "roomNumber": "301", "checkInDate": "2026-02-18", "checkOutDate": "2026-02-22", "language": "en" }, { "pmsGuestId": "RES-2026-002", "firstName": "Maria", "lastName": "Garcia", "phone": "+491234567890", "roomNumber": "405", "checkInDate": "2026-02-16", "checkOutDate": "2026-02-20", "language": "de" } ] } ``` | Field | Type | Required | Description | | ---------- | ------ | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | | `syncMode` | string | **Yes** | Must be `"full"` — indicates this is a complete guest list replacement. | | `guests` | array | **Yes** | Your complete list of current in-house guests. Each guest object uses the same fields as [POST /guests/checkin](/api/pms/checkin#field-reference). | **Send ALL your in-house guests.** Any PMS-sourced guest in RecepAI that is NOT in your `guests` array will be automatically checked out. If you send an empty array, all PMS guests will be checked out. ## How Sync Works RecepAI processes the sync in a specific order to prevent room conflicts: Guests that exist in RecepAI (source: pms) but are NOT in your list are checked out. This frees up their rooms. Guests that exist in both lists but with different data are updated. This includes room moves — the checkout step ensures the target room is available. Guests in your list that don't exist in RecepAI are checked in. By this point, rooms freed by checkouts and moves are available. **Manual guests are never touched.** Guests entered manually by hotel staff (source: "receptionist") are completely ignored during sync. Only guests with source "pms" are compared and affected. ## Response: Success (200) ```json theme={null} { "status": "synced", "summary": { "received": 2, "checkedIn": 1, "updated": 0, "checkedOut": 3, "unchanged": 1, "manualSkipped": 2 }, "details": { "checkedIn": [ { "pmsGuestId": "RES-2026-002", "roomNumber": "405", "lastName": "Garcia" } ], "checkedOut": [ { "pmsGuestId": "RES-2026-098", "roomNumber": "201", "lastName": "Johnson" }, { "pmsGuestId": "RES-2026-099", "roomNumber": "512", "lastName": "Williams" }, { "pmsGuestId": "RES-2026-100", "roomNumber": "308", "lastName": "Brown" } ], "updated": [] }, "requestId": "req_m3n4o5p6" } ``` ## Summary Fields | Field | Description | | --------------- | ---------------------------------------------------------------------- | | `received` | Number of guests in your `guests` array | | `checkedIn` | Guests that were new and checked in | | `updated` | Guests whose data was updated (including room moves) | | `checkedOut` | PMS guests that were in RecepAI but not in your list — now checked out | | `unchanged` | Guests that were identical in both systems — no action taken | | `manualSkipped` | Guests entered manually by hotel staff — completely ignored by sync | ## Rate Limit This endpoint has a stricter rate limit due to its heavy processing: | Limit | Value | | ----------------- | ------ | | Requests per hour | **10** | **Recommended schedule:** Run the sync once per morning (e.g., 08:00 local time). This catches any events that might have been missed by real-time check-in/checkout calls during the previous day. For real-time updates throughout the day, use the individual [check-in](/api/pms/checkin), [update](/api/pms/update), and [checkout](/api/pms/checkout) endpoints. ## Example: cURL ```bash theme={null} curl -X POST https://app.recepai.ai/api/pms/v1/grand-hotel/guests/sync \ -H "Authorization: Bearer pms_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: sync_20260219_morning" \ -d '{ "syncMode": "full", "guests": [ { "pmsGuestId": "RES-2026-001", "firstName": "John", "lastName": "Doe", "phone": "+905551234567", "roomNumber": "301", "checkInDate": "2026-02-18", "checkOutDate": "2026-02-22", "language": "en" }, { "pmsGuestId": "RES-2026-002", "firstName": "Maria", "lastName": "Garcia", "phone": "+491234567890", "roomNumber": "405", "checkInDate": "2026-02-16", "checkOutDate": "2026-02-20", "language": "de" } ] }' ``` # Testing & Rate Limits Source: https://recepai.ai/docs/api/pms/testing Sandbox mode, idempotency keys, and rate limits. ## Sandbox Mode Use a test API key (`pms_test_` prefix) to validate your integration without writing any data to the hotel's system. When the hotel admin generates an API key, they receive **both a live key and a test key** as a pair — just like Stripe. Ask the hotel admin for the test key to start development. Test keys run the **exact same validation** as live keys — the only difference is that no data is persisted. | Behavior | Live (`pms_live_`) | Test (`pms_test_`) | | --------------------------- | ------------------ | --------------------- | | Payload validation | Full validation | Full validation | | Data written to database | Yes | **No** | | Real-time dashboard updates | Yes | **No** | | Response format | Real IDs | Fake IDs (`test_xxx`) | | Rate limits | Normal | Same limits | | Request logging | Yes | Yes (marked as test) | ### Test Response Example ```json theme={null} { "status": "created", "guestId": "test_abc123", "pmsGuestId": "RES-2026-001", "roomNumber": "301", "requestId": "req_test_a1b2", "_sandbox": true } ``` The `_sandbox: true` flag confirms you're in test mode and no data was written. This flag is never present in live responses. ### What to Test Use sandbox mode to verify: 1. **Payload format** — Confirm all your field formats are correct (dates, phone numbers, etc.) 2. **Error handling** — Send intentionally invalid data to test your error handling code 3. **Idempotency** — Verify that duplicate requests return cached responses 4. **Rate limit handling** — Confirm your code handles `429` responses gracefully **Recommended workflow:** Develop and test with a `pms_test_` key first. Once your integration passes all test cases, switch to the `pms_live_` key for production. The only change needed is the API key — all endpoints and request formats are identical. ## Idempotency All POST endpoints require an `Idempotency-Key` header. This prevents duplicate operations when network issues cause retries — for example, if your system sends a check-in request but doesn't receive the response due to a timeout, you can safely resend the same request. ### How It Works 1. You include an `Idempotency-Key` header with every POST request 2. RecepAI processes the request and stores the response, keyed to your idempotency key 3. If you send another request with the **same key** within 24 hours, RecepAI returns the cached response **without re-processing** ### Rules | Rule | Detail | | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- | | **Required** | All POST endpoints require this header. Omitting it returns `400`. | | **Length** | 1–255 characters | | **Scope** | Keys are scoped to your API key. Different hotels can use the same idempotency key safely. | | **TTL** | Keys expire after **24 hours**. After that, the same key can be reused. | | **Caching** | Only **2xx responses** are cached. If a request fails with 4xx, the key is NOT consumed — you can retry with a corrected payload using the same key. | ### Recommended Key Format Use a structured format that's unique per operation: ``` {operation}_{pmsGuestId}_{date} ``` **Examples:** | Operation | Idempotency Key | | -------------------------------- | ----------------------------- | | Check in guest RES-001 on Feb 18 | `checkin_RES001_20260218` | | Update guest RES-001 room change | `update_RES001_room_20260218` | | Check out guest RES-001 | `checkout_RES001_20260218` | | Morning sync on Feb 19 | `sync_20260219_morning` | ### Duplicate Response When a cached response is returned, it includes an `_idempotent` flag: ```json theme={null} { "status": "created", "guestId": "abc123-def456", "pmsGuestId": "RES-2026-001", "roomNumber": "301", "requestId": "req_a1b2c3d4", "_idempotent": true } ``` The `_idempotent: true` flag tells you this is a cached replay, not a new operation. The response body, HTTP status, and `requestId` are all identical to the original response. ### Important: Failed Requests Don't Consume Keys If your request returns a **4xx error** (validation failure, room conflict, etc.), the idempotency key is **not consumed**. This means you can fix the issue and retry with the **same key**: ```bash theme={null} # First attempt — has a date format error curl -X POST .../guests/checkin \ -H "Idempotency-Key: checkin_RES001_20260218" \ -d '{"checkOutDate": "18.02.2026"}' # Wrong format! # Returns 422 INVALID_DATE_FORMAT — key NOT consumed # Second attempt — fixed payload, same key curl -X POST .../guests/checkin \ -H "Idempotency-Key: checkin_RES001_20260218" \ -d '{"checkOutDate": "2026-02-18"}' # Correct format # Returns 200 — key now consumed with this response ``` ## Rate Limits Each endpoint has its own rate limit. Limits are per API key (not per hotel or per IP). ### Limits by Endpoint | Endpoint | Limit | | ----------------------- | -------------------- | | `POST /guests/checkin` | 60 requests / minute | | `POST /guests/update` | 60 requests / minute | | `POST /guests/checkout` | 60 requests / minute | | `GET /guests` | 30 requests / minute | | `POST /guests/sync` | 10 requests / hour | ### Response Headers Every response includes rate limit headers: ```http theme={null} X-RateLimit-Limit: 60 X-RateLimit-Remaining: 58 X-RateLimit-Reset: 1708180260 ``` | Header | Description | | ----------------------- | ---------------------------------------------- | | `X-RateLimit-Limit` | Maximum requests allowed in the current window | | `X-RateLimit-Remaining` | Requests remaining in the current window | | `X-RateLimit-Reset` | Unix timestamp when the window resets | ### Rate Limited Response (429) When you exceed the limit: ```http theme={null} HTTP/1.1 429 Too Many Requests Retry-After: 45 Content-Type: application/json ``` ```json theme={null} { "status": "error", "code": "RATE_LIMITED", "message": "Rate limit exceeded. Retry after 45 seconds.", "retryAfter": 45, "requestId": "req_u1v2w3x4" } ``` ### Handling Rate Limits Implement exponential backoff in your integration: ```javascript theme={null} async function callWithRetry(requestFn, maxRetries = 3) { for (let attempt = 0; attempt <= maxRetries; attempt++) { const response = await requestFn(); if (response.status !== 429) { return response; } // Use the server's Retry-After value const data = await response.json(); const waitSeconds = data.retryAfter || Math.pow(2, attempt); console.log(`Rate limited. Waiting ${waitSeconds}s before retry...`); await new Promise(r => setTimeout(r, waitSeconds * 1000)); } throw new Error('Max retries exceeded'); } ``` **For the sync endpoint (10/hour):** Schedule your daily sync at a fixed time (e.g., 08:00). One sync per day is sufficient. For real-time updates throughout the day, use the individual check-in, update, and checkout endpoints which have much higher limits (60/minute). ## Request Logging Every API request is logged — including test mode requests. Logs include: * Full request payload * Response status and body * IP address and User-Agent * Processing duration * Idempotency key (if provided) Logs are retained for **90 days** and are accessible to RecepAI support for debugging. When contacting support, always include the `requestId` from the response. ## Security Notes * All API traffic is encrypted via **HTTPS** (TLS 1.2+). HTTP requests are rejected. * API keys are stored as **SHA-256 hashes** — the full key is never stored on our servers. * PMS API paths are exempt from CSRF middleware (machine-to-machine authentication, no browser cookies). * All guest changes from the PMS are recorded in an **activity log** with the actor type `pms`, visible alongside staff actions on the Front Desk. # POST /guests/update Source: https://recepai.ai/docs/api/pms/update Update guest details or move them to a different room. ## Endpoint ``` POST https://app.recepai.ai/api/pms/v1/{slug}/guests/update ``` Updates an existing in-house guest's details. Uses **partial update semantics** — only include the fields that changed. The guest is identified by `pmsGuestId`. ## Headers | Header | Required | Description | | ----------------- | -------- | ------------------------------------------------------------------------------------------- | | `Authorization` | Yes | `Bearer pms_live_xxx` or `Bearer pms_test_xxx` | | `Content-Type` | Yes | `application/json` | | `Idempotency-Key` | Yes | Unique key for this request (1–255 chars). See [Idempotency](/api/pms/testing#idempotency). | ## Request Body Only include `pmsGuestId` (required) and the fields that changed: ```json theme={null} { "pmsGuestId": "RES-2026-001", "roomNumber": "305", "checkOutDate": "2026-02-24", "phone": "+905559876543" } ``` ## Field Reference | Field | Type | Required | Description | | -------------- | ------- | -------- | ------------------------------------------------- | | `pmsGuestId` | string | **Yes** | The guest to update (your PMS identifier) | | `roomNumber` | string | No | New room number. Triggers an automatic room move. | | `firstName` | string | No | Updated first name | | `lastName` | string | No | Updated last name | | `phone` | string | No | Updated phone (E.164 format) | | `checkInDate` | string | No | Updated check-in date (`YYYY-MM-DD`) | | `checkOutDate` | string | No | Updated checkout date (`YYYY-MM-DD`) | | `language` | string | No | Updated language preference (ISO 639-1) | | `adults` | integer | No | Updated number of adults | | `children` | integer | No | Updated number of children | | `nationality` | string | No | Updated nationality (ISO 3166-1 alpha-2) | | `email` | string | No | Updated email address | **Room changes are automatic.** When you update `roomNumber`, RecepAI handles the room move internally — deactivating the old room assignment and creating a new one. You don't need to check out and re-check-in the guest. ## Response: Success (200) The response includes a `changes` object showing exactly what was modified: ```json theme={null} { "status": "updated", "guestId": "abc123-def456", "pmsGuestId": "RES-2026-001", "changes": { "roomNumber": { "from": "301", "to": "305" }, "checkOutDate": { "from": "2026-02-22", "to": "2026-02-24" }, "phone": { "from": null, "to": "+905559876543" } }, "requestId": "req_e5f6g7h8" } ``` | Field | Description | | --------- | --------------------------------------------------------------------------------- | | `changes` | Object showing each changed field with its previous (`from`) and new (`to`) value | If no fields actually changed (all submitted values are identical to current values), the response still returns `200` with an empty `changes` object. ## Response: Guest Not Found (404) Returned when no active guest with the given `pmsGuestId` exists: ```json theme={null} { "status": "error", "code": "GUEST_NOT_FOUND", "message": "No active guest found with pmsGuestId: RES-2026-001", "requestId": "req_e5f6g7h8" } ``` This error means the guest was either never checked in via the PMS API, or has already been checked out. If you receive this unexpectedly, use [GET /guests](/api/pms/list-guests) to see which guests are currently active. ## Response: Room Occupied (409) If you try to move a guest to a room that's already occupied: ```json theme={null} { "status": "error", "code": "ROOM_OCCUPIED", "message": "Room 305 is already occupied by an active guest", "currentGuest": { "pmsGuestId": "RES-2026-002", "lastName": "Garcia", "checkInDate": "2026-02-16" }, "requestId": "req_e5f6g7h8" } ``` ## Example: Room Change + Extended Stay ```bash theme={null} curl -X POST https://app.recepai.ai/api/pms/v1/grand-hotel/guests/update \ -H "Authorization: Bearer pms_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: update_RES2026001_room_20260219" \ -d '{ "pmsGuestId": "RES-2026-001", "roomNumber": "305", "checkOutDate": "2026-02-24" }' ``` # Quick Start Guide Source: https://recepai.ai/docs/getting-started/quickstart Get your receptionist live in 3 days — here's exactly what to do each day. Your [Dashboard](/admin-panel/dashboard) has a step-by-step setup checklist that guides you through everything. This page gives you the big picture — what to focus on each day and why it matters. *** ## Day 1: Teach Them How to Chat Visit [app.recepai.ai](https://app.recepai.ai) and sign in — check your welcome email for login details. Your Dashboard shows the setup checklist — follow it in order. Go to [Chat Settings](/admin-panel/conversation-agent) and write the instructions that define how your receptionist greets and talks to guests — tone, boundaries, and focus areas. The [Chat Prompts Guide](/prompt-engineering/chat-prompts) has tested templates you can start with. On the same page, define what a good chat conversation looks like. After every chat, your receptionist will evaluate itself against these standards and flag what needs attention. See the [Chat Evaluation Guide](/quality/chat-evaluation) for ready-to-use criteria. Go to [Training Materials](/admin-panel/documents) and upload one essential document — your hotel fact sheet (rooms, amenities, location, basic policies). This gives your receptionist enough knowledge to start answering. You'll add more documents tomorrow. For now, one solid fact sheet is enough to test. Open your widget and ask: breakfast time, room types, hotel location, how to connect to WiFi, and check-in time. Your receptionist is already answering — verify the answers match your fact sheet. **End of Day 1:** Your receptionist can chat. It knows your hotel basics, answers in your guest's language, and evaluates every conversation against the standards you just set. Try it — ask something and see what comes back. *** ## Day 2: Give Them a Voice and Knowledge Go to [Voice Settings](/admin-panel/voice-agent) and choose a voice, set the first greeting, and write the instructions for how your receptionist sounds on calls. The [Voice Prompts Guide](/prompt-engineering/voice-prompts) walks you through it. On the same page, define what a good voice conversation looks like. Your receptionist will grade every call against these rules. See the [Voice Evaluation Guide](/quality/voice-evaluation) for tested templates. Now add everything your receptionist needs to answer guests thoroughly: * Restaurant menus and hours * Spa and activity information * Transportation and directions * Top 20 frequently asked questions * Seasonal offers and packages **The quality of your documents directly determines the quality of your receptionist's answers.** Read the [Document Preparation Guide](/knowledge-base/document-preparation) before uploading. Ask questions in the languages your guests commonly use — your receptionist responds in the guest's language automatically. Test both chat and voice to hear the difference. **End of Day 2:** Your receptionist can talk and knows your hotel. It answers chat and voice questions from your documents, in any language, and evaluates every interaction against your standards. *** ## Day 3: Go Live Use the [Widget Builder](/admin-panel/widget-builder) to match your hotel's brand — colors, logo, avatar, greeting messages, and language settings. Copy the embed code from Widget Builder and add it to your website. Your receptionist is now live — handling guest questions at every hour, in every language. Go to [Analytics](/admin-panel/history) and review the first conversations. Look for any questions your receptionist couldn't answer. Each gap is a missing document — upload it, and that gap closes permanently. **End of Day 3:** Your receptionist is on duty. From this moment, every guest question gets an answer. And your receptionist will tell you exactly what to teach next. *** ## After Go-Live: Keep Them Sharp Your receptionist gets better every week — as long as you give it 15–30 minutes: * **Review evaluations** — see which conversations need attention on the [Analytics](/admin-panel/history) page * **Fill knowledge gaps** — when your receptionist flags a missing topic, upload the document * **Update seasonal content** — menus change, hours shift, new offers launch * **Refine personality** — adjust chat and voice prompts based on real conversations **The pattern:** your receptionist tells you what it doesn't know → you add the missing document → it never gets that question wrong again. One fix, permanent improvement. See [Improving Responses](/quality/improving-responses) for the complete weekly routine. # Welcome to RecepAI Source: https://recepai.ai/docs/introduction Meet your newest team member — an AI receptionist that knows your property, speaks every guest's language, and gets smarter every week. ## Every Hotel Has These Moments It's 2 AM. Your night receptionist is checking in a late arrival. The phone rings — a guest in room 412 needs extra towels. Another guest walks up to the desk with a question about early checkout. One person. Three guests. Someone always has to wait. A Japanese couple calls about your spa packages. Your team speaks English and Spanish — but not Japanese. There's an awkward pause, a polite goodbye, and they book somewhere else. You'll never know this call happened. A guest from Germany is ready to book. They're traveling with kids and arriving from the airport — but your website shows the same offers to everyone. A smart receptionist would offer them a family package with airport transfer, automatically, in German, without breaking rate parity. What time is breakfast? Where is the pool? How do I get to the airport? Your team answers these hundreds of times a day — that's hundreds of hours a year on questions that never change. Hours better spent on moments that need a human touch. Every unanswered question risks becoming a review on an OTA — seen by thousands of future guests. One bad review you could have prevented, if only someone had been there to answer. Most of the time, you don't even know these moments are happening. *** ## Meet Your Newest Team Member RecepAI is a receptionist who knows your hotel inside and out — every room type, every restaurant hour, every policy — and talks naturally with guests in over 30 languages. Your guests reach your receptionist however they prefer — typing a message on your website, tapping the microphone to talk, or calling by phone. **One receptionist. Every channel. Every language. Every hour.** Guests type a question and your receptionist responds the way your best front desk staff would — clearly, completely, and with the right follow-up. On your website, in your app, or on a lobby kiosk. Guests tap the microphone and speak naturally — from the chat widget, a kiosk, or a phone line. Your receptionist answers like your best colleague would: warm, knowledgeable, and to the point. Both channels draw on the same knowledge — your hotel information — but communicate differently, because reading and listening follow different rules. That's why your receptionist has [separate personality settings](/prompt-engineering/overview) for each. *** ## How It Works Upload your hotel's information — fact sheets, menus, policies, FAQs — through the [Training Materials](/admin-panel/documents) page. Your receptionist starts answering the moment you upload your first document. Your receptionist finds the most relevant information from your documents and responds naturally — in whatever language the guest used. If it doesn't know something, it says so honestly. It never makes up an answer. Never. After every conversation — chat and voice — your receptionist evaluates itself against quality standards you define. When it couldn't answer something, it doesn't just flag the conversation. It identifies the exact topic that was missing from your knowledge base. Think about what that means. **Example:** Remember the Japanese couple who called about the spa? With most AI tools, that conversation would happen and disappear. You'd never know what went wrong. RecepAI doesn't fail silently. It would tell you: *"A guest asked about spa packages in Japanese. I answered in Japanese, but I didn't have your spa pricing. Here's the gap."* Upload one document. That failure never happens again. Not tomorrow. Not next month. Not ever. It's like having someone at the front desk who reads every guest interaction, catches every missed question, and hands you a note each morning: *"Teach me these three things, and I'll never get them wrong again."* **Most hotels learn what their guests need from bad reviews. With RecepAI, you learn it before the review is written.** *** ## What Changes Imagine arriving on Monday morning. Every guest question from the weekend — in every language, at every hour — already handled. No missed calls. No unanswered chats. No frustrated guests walking away. **Your receptionist has a note waiting:** *"I handled 53 conversations this weekend across 9 languages. Three guests asked about airport transfers, but I didn't have the shuttle schedule. Here's what to upload."* You upload the schedule. Five minutes. That gap is closed — permanently. **This is the loop:** guests ask, your receptionist answers, it evaluates itself, you fill the gaps. * Every week, your receptionist knows more than the week before * Every week, fewer guests leave without an answer * Every week, your new hires have a colleague who always knows the right answer *** ## Getting Started Your receptionist starts answering guests the moment you upload your first document. If your hotel information is ready, the full setup takes **2–3 days** — not weeks. Write the instructions that define how your receptionist greets and talks to guests — tone, style, and focus areas. Define what a good conversation looks like — for both chat and voice. After every interaction, your receptionist will evaluate itself against these standards and tell you what needs attention. Choose a voice, set the first greeting, and set how your receptionist sounds on calls. Upload fact sheets, menus, policies, FAQs — everything your receptionist needs to answer guests accurately. Customize your widget, embed it on your website, and your receptionist is on duty. **After that:** 15–30 minutes per week. Check conversations, fill knowledge gaps, and watch your receptionist get sharper every Monday. The two things that matter most: **well-prepared documents** and **well-written personality instructions**. Everything else is configuration. The Quick Start Guide walks you through both. *** ## Ready to Hire Your New Receptionist? Log in, follow the setup checklist on your Dashboard, and go live in days — not weeks. # Common Mistakes to Avoid Source: https://recepai.ai/docs/knowledge-base/common-mistakes Learn from real hotel experiences — avoid these common pitfalls. ## Document Content Mistakes | Mistake | Why It's a Problem | How to Fix It | | --------------------------- | --------------------------------- | -------------------------------------- | | "Open daily" | What hours? Guests need specifics | "Open daily 09:00 - 18:00" | | "Contact reception" | How? Phone? Walk there? | "Call extension 0 or visit lobby desk" | | "Various options available" | What options? | List the specific options | | "Prices vary" | Guest needs at least an estimate | "Starting from €50" or "€50-150 range" | | "Coming soon" | Outdated or unhelpful | Remove until ready, or give a date | ## Content Quality Mistakes "Our amazing spa offers an unforgettable wellness journey with world-class treatments that will leave you feeling spectacular." *Your receptionist needs facts, not brochure language.* "Spa & Wellness Center. Location: Ground floor. Hours: 9:00 AM - 8:00 PM daily. Services: Swedish Massage (50 min), Deep Tissue Massage (50 min), Facial Treatments (45 min)." *Facts your receptionist can actually use.* ## Structural Mistakes Write each document in **one language only**. Your receptionist can translate automatically — but mixed-language documents confuse the learning process. If the same information appears in multiple places, you risk contradictions when one gets updated but the other doesn't. Keep each fact in **one place only**. Break information into sections with clear headings. Your receptionist finds answers faster when content is well-organized. Write "Full Board (FB)" the first time, then you can use "FB" afterwards. Your receptionist (and guests) need to understand every term. **Test after every major upload.** Ask your receptionist the questions a guest would ask about the content you just uploaded. If the answer isn't perfect, improve the document. # Document Preparation Guide Source: https://recepai.ai/docs/knowledge-base/document-preparation The most important guide in this documentation. Learn how to prepare knowledge that makes your receptionist truly excellent. This is the **most important guide** in this entire documentation. Your receptionist is only as good as the knowledge you provide. The difference between an average AI receptionist and an outstanding one almost always comes down to **how well the documents were prepared**. ## Why This Matters So Much Your AI receptionist doesn't browse the internet or guess answers. It relies **entirely** on the knowledge you provide. When a guest asks "What time does the spa close?", your receptionist searches through your uploaded documents, finds the relevant information, and responds. Here's the key insight: **your receptionist doesn't read documents like a human does.** It doesn't start at page 1 and read to the end. Instead, it breaks your documents into smaller pieces and searches for the piece most relevant to the guest's question. This means: * Each piece of information must **make sense on its own** * The AI can't "remember" what was said in a different section * If information is vague, missing, or poorly written, the AI will struggle — or worse, guess Think of it like training a new receptionist who has a perfect memory but can only read one page at a time. Each page they read must give them everything they need to answer the question — they can't flip back to check another page. *** ## The 5 Golden Rules Before anything else, memorize these five principles. Every other recommendation in this guide flows from them. Each section of your document should cover **one thing**. When topics are mixed together, your receptionist may pull in irrelevant information or miss the right answer entirely. **Example:** Don't combine parking information with restaurant hours in the same section. A guest asking about parking doesn't need to see dinner reservations. Every section must make complete sense **on its own**, without needing to read anything before or after it. Never write "as mentioned above" or "see the pricing document" — your receptionist won't have that context. Use the **exact same name** for the same thing everywhere. If your restaurant is called "Terrace Bistro," always call it "Terrace Bistro" — not "the restaurant," "our dining venue," or "the bistro." Never write answers that are just "Yes" or "No." Always include the full picture. * **Incomplete:** "Yes" (to "Is breakfast included?") * **Complete:** "Breakfast is included with Bed & Breakfast and Half Board rates. Room Only rates do not include breakfast. Breakfast costs €25 per person when purchased separately." Write from the guest's point of view. Ask yourself: "What would a guest want to know about this?" Not what staff knows internally, but what actually helps a guest. *** ## Writing Style That Works The way you write matters as much as what you write. Your receptionist processes language literally — clear, direct writing produces clear, direct answers. ### Use Clear, Direct Language "Complimentary morning repast is served in the designated dining outlet during standard service hours." *Sounds impressive but conveys almost no useful information.* "Free breakfast is served from 7:00 AM to 10:30 AM in the Terrace Restaurant on the ground floor." *Every word carries useful information.* | Instead of... | Write... | | --------------------------------------- | ----------------------------------------------------------------------------------------------- | | "The pool is open during daytime hours" | "The pool is open from 7:00 AM to 10:00 PM" | | "Breakfast includes hot and cold items" | "Breakfast includes eggs, pancakes, toast, cereals, fresh fruits, and yogurt" | | "The hotel is near the airport" | "The hotel is 15 minutes (8 km) from the airport by car" | | "Contact reception for details" | "Call extension 100 or email [reservations@grandhotel.com](mailto:reservations@grandhotel.com)" | | "Various room options are available" | "The hotel has 4 room types: Superior, Deluxe, Junior Suite, and Presidential Suite" | ### Start With the Answer When a guest asks a question, your receptionist should find the answer immediately — not buried in the third paragraph. "Our hotel has always been proud of its dining heritage, which stretches back to 1952 when the founder first envisioned a restaurant overlooking the bay. Today, that tradition continues with our award-winning chef team... Breakfast is served from 7:00 AM to 10:30 AM." *The guest has to wait through 50 words of history to find the breakfast time.* "Breakfast is served from 7:00 AM to 10:30 AM in the Terrace Restaurant on the ground floor. The buffet includes a hot station with eggs and pancakes, a cold station with cereals and fruit, and a Turkish breakfast corner." *Answer first, details second.* ### Be Specific, Never Vague Vague information is almost worse than no information. When your receptionist says "The spa is open during the day," guests will ask a follow-up question. When it says "The spa is open from 9:00 AM to 8:00 PM," the conversation is complete. | Vague (Avoid) | Specific (Use) | | ---------------------------------- | -------------------------------------------------------------- | | "Open daily" | "Open daily, 09:00 - 18:00" | | "Contact us for pricing" | "Starting from €80 per treatment" | | "Located nearby" | "5-minute walk from the lobby, ground floor east wing" | | "Various payment methods accepted" | "Visa, Mastercard, American Express, and cash (EUR, USD, TRY)" | | "Coming soon" | Remove entirely until available, or provide a specific date | ### Write in Third Person Write "The hotel offers free WiFi" instead of "We offer free WiFi." Your receptionist will naturally rephrase this as "We offer free WiFi" when speaking to guests. But if you write "we" in the document, the AI might get confused about who "we" refers to when combining information from different sections. | Avoid | Preferred | | -------------------- | ----------------------------------------- | | "We offer free WiFi" | "The hotel offers free WiFi in all areas" | | "Our rooms have..." | "All rooms include..." | | "Contact us at..." | "Contact the hotel at..." | ### Define Every Abbreviation Your receptionist doesn't automatically know industry terms. If you write "BB rate," it might not understand that means "Bed & Breakfast." Define every abbreviation the first time it appears in each document. | Abbreviation | Always Write | | ------------ | ----------------------------------------------------------- | | BB | Bed & Breakfast (BB) | | HB | Half Board (HB) — breakfast and dinner included | | FB | Full Board (FB) — all meals included | | AI | All-Inclusive (AI) — all meals and selected drinks included | | PAX | Per guest | | SGL/DBL/TPL | Single room / Double room / Triple room | **Don't assume your receptionist knows hotel industry jargon.** Even common terms like "complimentary" (meaning free), "turndown service," or "concierge" should be explained in context the first time they appear. *** ## Structuring Your Content How you organize information within a document directly affects how well your receptionist can find and use it. ### Use Clear Headings Every piece of information needs a descriptive heading. Your receptionist uses headings to understand what each section is about and to find the right information for each question. ``` ## Policies Check-in at 3 PM. Check-out at 11 AM. No smoking anywhere. Pets allowed in some rooms. Cancellation within 48 hours. ``` *Everything dumped under one vague heading.* ``` ## Check-in and Check-out Times Check-in: 3:00 PM Check-out: 11:00 AM Early check-in available upon request. Late check-out until 2:00 PM: €30. ## Smoking Policy 100% non-smoking indoors. Designated area: garden terrace. ## Pet Policy Small pets (under 10 kg) welcome in Garden View rooms. Fee: €25/night. ``` *Each topic has its own clear heading.* ### Use Lists for Multiple Items When you have several items to mention, always use a list. Lists are much easier for your receptionist to work with than long paragraphs. ```markdown theme={null} ## Room Amenities All rooms include: - Free high-speed WiFi - 55-inch smart TV with streaming services - Mini refrigerator - In-room safe (laptop size) - Coffee and tea maker with daily refills - Iron and ironing board - Hairdryer - Bathrobe and slippers ``` ### Use Numbered Lists for Important Sequences When the order matters — or when every item is equally important and none should be skipped — use **numbered lists** with a total count. **Why numbered lists?** Your receptionist tends to summarize long bullet-point lists, sometimes skipping items it considers "less important." When you number the items and state the total, it tries to include all of them. **Instead of:** ```markdown theme={null} Honeymoon guests receive the following: - Room upgrade - Late checkout - Welcome fruit basket - Spa discount - Complimentary wine ``` **Use:** ```markdown theme={null} Honeymoon guests receive 5 complimentary privileges: 1. Room upgrade (subject to availability) 2. Late checkout until 2:00 PM 3. Welcome fruit basket in room upon arrival 4. 20% discount on all spa treatments 5. Complimentary bottle of wine ``` ### Keep Paragraphs Short Long paragraphs are hard for your receptionist to work with. When it retrieves a long paragraph, it may include irrelevant details in its response. **Rule of thumb:** No paragraph should be longer than 4-5 sentences. If it is, break it into smaller paragraphs with their own headings. *** ## Self-Contained Sections: The Most Important Concept This is the single most important concept in this entire guide. If you only remember one thing, remember this. ### What "Self-Contained" Means Your receptionist doesn't read your documents from top to bottom. It searches for the most relevant **section** based on the guest's question. That section must contain **everything** needed to give a complete answer. ```markdown theme={null} ## Hotel Overview Grand Hotel is a 5-star property in Istanbul. The spa is on the 5th floor. ## Spa Services As mentioned in the overview, the spa is located on the 5th floor. Using the booking system described in the Services section, guests can reserve treatments. Prices are listed in the pricing document. ``` **What goes wrong:** When a guest asks about spa services, your receptionist finds the "Spa Services" section but has no idea what "as mentioned in the overview" means, what "booking system" is being referred to, or where the "pricing document" is. The guest gets a confused, incomplete answer. ```markdown theme={null} ## Spa & Wellness Center The spa is located on the 5th floor and is open daily from 9:00 AM to 9:00 PM. Available treatments: - Swedish Massage (60 min): €80 - Deep Tissue Massage (60 min): €95 - Facial Treatment (45 min): €70 - Body Scrub (30 min): €50 Guests can book treatments by: - Calling the spa reception at extension 505 - Visiting the spa reception desk on the 5th floor - Requesting through the in-room tablet Reservations are recommended, especially on weekends and holidays. ``` **Why this works:** Everything a guest needs to know — location, hours, treatments, prices, and how to book — is in one place. No references to other documents needed. ### The "One Page" Test Before saving any section, ask yourself: > **"If someone read ONLY this section and nothing else, would they have everything they need to answer a guest's question about this topic?"** If the answer is no, add the missing information to that section — even if it means repeating something you wrote elsewhere. ### Phrases to Never Use These phrases are red flags that your section isn't self-contained: | Never Write | Why | What to Do Instead | | ----------------------------- | ---------------------------------------- | ---------------------------------------- | | "As mentioned above..." | Your receptionist won't have "above" | Repeat the information here | | "See the pricing document" | The pricing document won't be retrieved | Include the prices in this section | | "Refer to our website" | Your receptionist can't browse websites | Write the information directly | | "Check the attached brochure" | Attachments aren't accessible | Include the key details in text | | "Same as last year" | Context from "last year" isn't available | State the current information explicitly | *** ## What to Include vs. What to Leave Out ### Include: Everything a Guest Might Ask Think about every question a guest could ask before, during, and after their stay: * **Property overview** — Location, star rating, description, what makes it unique * **Room types** — Names, sizes, capacity, amenities, views, differences between types * **Check-in and check-out** — Times, early/late options, fees, procedures * **Dining** — Restaurant names, cuisine types, hours, dress code, reservations * **Contact information** — Phone, email, address for each department * **Policies** — Cancellation, pets, smoking, children, payment methods * **WiFi** — How to connect, password or registration process * **Spa and wellness** — Services, hours, booking, pricing * **Transportation** — Airport transfers, taxi, public transit, parking, car rental * **Pool and beach** — Hours, rules, towels, sunbeds * **Fitness center** — Hours, equipment, rules * **Activities** — What's offered, schedule, booking * **Frequently asked questions** — Top 20 questions with complete answers * **Local attractions** — What to visit, distances, how to get there * **Meeting and event spaces** — Capacity, equipment, pricing, booking * **Special packages** — Honeymoon, anniversary, corporate, seasonal * **Children's facilities** — Kids club, babysitting, child-friendly amenities * **Accessibility** — Wheelchair access, adapted rooms, special services * **Seasonal information** — Pool opening dates, seasonal restaurants, holiday schedules * **Emergency information** — Hospital, pharmacy, emergency numbers ### Leave Out: What Doesn't Help Guests Including irrelevant information doesn't just waste space — it can actually make your receptionist **worse** by cluttering the search results with noise. **Do not include:** * Staff schedules or internal procedures * Supplier information or vendor contacts * Financial data, occupancy rates, or revenue figures * Technical maintenance details * Internal codes or abbreviations guests never see * Negative information about competitors * Legal jargon (simplify policies into plain language instead) * Marketing fluff with no factual content ### A Special Note About Pricing Pricing is tricky because it changes. Here are your options: | Approach | When to Use | | ------------------------------------------ | -------------------------------------------------------------- | | **Include exact prices** | For stable prices that rarely change (spa treatments, parking) | | **Include "starting from" prices** | For variable pricing (room rates that change by season) | | **Exclude prices, direct to reservations** | For complex pricing (packages with many variables) | If you include prices, **add a date stamp** so you remember when to update them: ```markdown theme={null} ## Room Rates (Valid: January - March 2026) Note: Rates are indicative. For current availability and exact pricing, guests should contact reservations at reservations@grandhotel.com or call +90 212 XXX XXXX. - Superior Room: from €120/night - Deluxe Room: from €160/night - Junior Suite: from €220/night ``` *** ## Format-Specific Tips Different upload methods require different preparation. **This is the recommended method.** Writing content directly in RecepAI gives you the most control over structure and formatting. **Best practices:** * Use the **Plain Text** option for general information * Use the **Q\&A** option for frequently asked questions * Follow the structure guidelines in this guide * One topic per note * Use clear headings and lists **Ideal for:** Policies, FAQ, descriptions, contact information, seasonal updates **PDF and Word files can work, but require extra care.** **Before uploading:** * Remove headers, footers, and page numbers — they create noise * Remove decorative images, logos, and watermarks * Convert fancy formatting (columns, sidebars, text boxes) to simple text * Check that tables are real text tables, not images of tables * Ensure text is selectable (not a scanned image) **Common problems with PDFs:** * Marketing brochures with beautiful layouts often produce garbled text * Scanned documents (images of text) cannot be read at all * Multi-column layouts may scramble the reading order * Text in images, charts, or infographics is invisible **If your PDF is primarily a visual brochure** (lots of images, designed layouts, decorative elements), it's better to **extract the text and write it as a note** than to upload the PDF directly. **Web import scans your hotel website and extracts content.** **Limitations to be aware of:** * Web pages often contain navigation menus, cookie banners, footer links, and other elements that aren't useful knowledge * Image-heavy pages may produce very little text * Dynamic content (pricing widgets, booking forms) won't be captured * The same information might appear on multiple pages, creating duplicates **Best practice:** After importing from your website, **review each imported page** and clean up unnecessary content. Delete pages that have too much noise and recreate them as clean text notes. **Ideal for:** Getting a quick starting point, especially for hotels with content-rich websites. But always review and clean up afterwards. **If you manage hotel information in a note-taking app, you can sync it directly.** **Important formatting notes:** * **Tables may not parse correctly** in some note-taking apps. If your tables aren't showing up in your receptionist's answers, convert them to bullet-point lists instead * Embedded content (videos, maps, files) won't be included — only text * Nested pages or sub-pages may need to be synced individually **When tables don't work, convert them:** Instead of a table: ``` | Time | Fee | |------------|--------------| | Until 2 PM | Free | | After 2 PM | €10 per hour | ``` Use a list: ``` Late checkout fees: - Until 2:00 PM: Free of charge - After 2:00 PM: €10 per hour - After 6:00 PM: Full night rate ``` *** ## Images, Maps, and Visual Content Your receptionist **cannot see images.** Photos, maps, floor plans, charts, infographics — none of these are readable. If important information is only in an image, your receptionist doesn't know it exists. ### What to Do About Visual Information For every image or visual in your current materials, ask: "Is there important information here that a guest might ask about?" If yes, write it out as text. | Visual Content | Write This Instead | | ------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | Hotel floor plan | "The spa is on the basement level. Take the elevator in the main lobby to level B1. Turn left after exiting." | | Map to hotel | "From the airport: Take the D-400 highway east for 8 km. Exit at 'City Center.' The hotel is 500 meters on the right." | | Photo of room | "Superior rooms feature a king-size bed, seating area with armchair, work desk, and a balcony with garden view." | | Restaurant menu image | "The restaurant serves Mediterranean cuisine. Popular dishes include grilled sea bass, lamb chops, and seasonal salads." | | Infographic of facilities | List each facility with location, hours, and key details in text format. | *** ## Different Hotels, Different Needs Every hotel is unique. Here's guidance for specific hotel types: **Guests typically ask about:** * Airport/train station transfers and directions * Meeting rooms and business facilities * Nearby restaurants (for dinner outside the hotel) * Early check-in / late check-out (for business travelers with tight schedules) * WiFi speed and reliability * Ironing, laundry, and dry cleaning services * Parking availability and cost **Priority documents:** Transportation, business facilities, nearby dining, express services **Guests typically ask about:** * Pool and beach information (towels, sunbeds, hours) * All-inclusive details (what's included, what costs extra) * Activities and entertainment schedule * Kids club and children's programs * Spa and wellness services * Restaurant variety and reservation requirements * Water sports and excursions **Priority documents:** All-inclusive details, beach/pool rules, daily activity schedule, dining guide **For all-inclusive resorts:** Clearly distinguish what's **included** vs. what **costs extra.** This is the most common source of guest confusion and complaints. **Guests typically ask about:** * The hotel's unique concept or story * Local experiences and recommendations * Personalized services * Room differences (often highly unique) * Dining philosophy and local ingredients * Art, design, or cultural elements **Priority documents:** Hotel concept/story, unique room descriptions, local experiences, dining philosophy **If your hotel has both family-friendly and adults-only sections, or different brands under one roof:** This requires extra care. You must be **extremely explicit** about who can access what. * State the distinction **in every relevant document**, not just once * For each facility, explicitly state: "Open to all guests including families" or "Reserved for adults (18+)" * Add the distinction to your receptionist's personality instructions as well * Don't assume your receptionist will figure out the nuance — spell it out every time **Example:** ``` Main Beach: Open to all guests including families with children Sunset Beach: Reserved for adults (18+) only Terrace Restaurant: Open to all guests Skybar: Adults only (18+), open 8:00 PM to midnight ``` *** ## Restaurant and Menu Information Restaurant details deserve special attention because they're among the most frequently asked questions. ### What to Include ```markdown theme={null} ## Terrace Restaurant Cuisine: Mediterranean with local specialties Location: Ground floor, garden terrace (weather permitting, indoor seating available) Hours: Breakfast 7:00-10:30 AM | Lunch 12:30-3:00 PM | Dinner 7:00-10:30 PM Dress Code: Smart casual (no swimwear at dinner) Reservations: Recommended for dinner, especially weekends. Call extension 200 or ask at reception. Capacity: 120 seats indoor, 80 seats outdoor terrace Included with: Bed & Breakfast rates (breakfast only), Half Board rates (breakfast + dinner), Full Board and All-Inclusive rates (all meals) ``` ### What NOT to Include: Detailed Menus **Do not upload detailed food menus with individual dish prices.** Menu items and prices change frequently — seasonal dishes rotate, prices update, items sell out. If your receptionist quotes a specific dish or price that's no longer current, it creates a bad guest experience. **Instead, write a summary:** ```markdown theme={null} The restaurant offers a varied menu with approximately 60 dishes featuring Mediterranean and Turkish cuisine. Popular categories include: - Fresh seafood (grilled, baked, and raw bar options) - Grilled meats and kebabs - Vegetarian and vegan options available - Children's menu available For the current menu and daily specials, guests can: - Ask the restaurant host - View the menu on the in-room tablet - Request a menu be sent to their room ``` *** ## Common Mistakes These mistakes come from real experience setting up AI receptionists for hotels. Avoid them to save time and deliver a better guest experience. **Why it's a problem:** Your receptionist IS the reception. When it tells a guest "Contact reception for details," it's essentially saying "I can't help you, ask someone else." **Fix:** Always provide the specific contact method: * "Call +90 212 XXX XXXX for reservations" * "Email [spa@grandhotel.com](mailto:spa@grandhotel.com) to book a treatment" * "Visit the concierge desk in the lobby" * "Call extension 505 for room service" **Why it's a problem:** When all hotel information is in one giant file, your receptionist may retrieve a section about the gym when the guest asked about dining — simply because they're on the same page. **Fix:** Split into **15-20 focused documents**, one per major topic. See the [Organizing Content](/knowledge-base/organizing-content) guide. **Why it's a problem:** "Experience unparalleled luxury in our world-class suites" sounds great in a brochure, but it gives your receptionist zero useful information to work with. **Fix:** Replace marketing language with facts: * "Unparalleled luxury" → "65 m² suites with separate living area, king-size bed, and panoramic sea view" * "World-class dining" → "4 restaurants: Mediterranean, Asian, Steakhouse, and All-Day Dining" * "Steps from the beach" → "Direct beach access, 50-meter walk from the lobby" **Why it's a problem:** A document that says only "Lobby Bar — Open 24 hours — Alcoholic beverages available" lacks the context your receptionist needs. It doesn't know the bar's location, atmosphere, or what makes it worth visiting. **Fix:** Minimum 5-6 meaningful sentences per document: ``` ## Lobby Bar The Lobby Bar is located on the ground floor adjacent to the main reception area. - Hours: Open 24 hours - Drinks: Full bar including cocktails, wines, beers, and non-alcoholic beverages - Snacks: Light snack menu available until midnight - Location: Ground floor, main lobby area - Atmosphere: Relaxed, suitable for casual meetings and post-dinner drinks - Seating: Indoor lounge seating and seasonal terrace ``` **Why it's a problem:** If your cancellation policy appears in three different documents with slightly different wording (one says "24 hours," another says "48 hours"), your receptionist may give the wrong answer depending on which version it finds. **Fix:** Keep each fact in **one place only.** If multiple topics need to reference the same policy, include the full, identical text — or write a brief summary with the essential details. **Why it's a problem:** Your receptionist will confidently give incorrect information. A guest who shows up for a "pool party every Friday" that ended last season will not be happy. **Fix:** * Remove seasonal content when the season ends * Use evergreen language: "The pool is typically open May through October. Check with the pool attendant for the current schedule." * Add date stamps to documents: "Room Rates — Valid January through March 2026" * Review all documents monthly **Why it's a problem:** Guests may ask "What's the restaurant called?" or search for your restaurant by name after their stay. If your documents only say "the restaurant," your receptionist can't help. **Fix:** Always use the actual name: * "the restaurant" → "Terrace Bistro Restaurant" * "the bar" → "Sunset Lounge Bar" * "the spa" → "Serenity Spa & Wellness Center" * "the pool" → "Infinity Rooftop Pool" **Why it's a problem:** Your receptionist cannot see images. A beautifully designed PDF brochure may produce garbled or incomplete text when processed. **Fix:** Extract the important information from visual materials and write it as clean text. Think of it as "translating" your visual content into words. *** ## Quality Checklist Before uploading any document, verify it passes this checklist: ### Content Quality Cross-check every number, time, price, and phone number against your hotel's official fact sheet. No placeholder text ("TBD"), no guesses, no "approximately" where an exact number exists. Last year's prices, closed venues, expired promotions — remove them all. ### Structure Not just "Info" or "Details" — but "Spa & Wellness Center: Services, Hours, and Booking" Apply the "One Page" test: Can someone read this section alone and get a complete answer? Features, amenities, options — always listed, never buried in paragraphs. ### Language No jargon, no marketing fluff, no complex sentences. Times, prices, locations, contact methods — all explicit. BB, HB, FB, AI, PAX — all spelled out. Same name for the same thing, everywhere. ### Guest Focus Not what staff needs to know, but what helps a guest. How to book, where to go, who to contact — with specific details. Supplier names, internal codes, staff schedules — none of these belong in your knowledge base. ### No Red Flags * No "as mentioned above" or "see other document" * No "contact reception" without a specific phone number or email * No images without text descriptions of the same information * No assumptions about what the guest already knows *** ## After You Upload: Testing Uploading is only half the job. **Always test after adding new content.** Go to your widget or use the preview in the Widget Builder. Don't test with keywords — ask naturally, the way a guest would: * "What time is breakfast?" * "Do you have a pool?" * "How do I get to the hotel from the airport?" * "Is parking available?" * "Can I bring my dog?" Check that every answer is: * **Accurate** — matches the information you uploaded * **Complete** — doesn't leave out important details * **Relevant** — doesn't include unrelated information * Ask about something you deliberately didn't upload — does your receptionist say "I don't have that information" gracefully? * Ask in a different language — does it respond correctly? * Ask a vague question — does it ask for clarification or guess? If any answer was wrong or incomplete, go back to Training Materials, edit the relevant document, and test the same question again. Repeat until the answer is perfect. **Make testing a habit.** Every time you update a document, ask 3-5 questions about that topic to verify the changes worked. It takes 2 minutes and prevents issues before guests encounter them. *** ## Quick Reference Keep these principles handy: **Always Do:** * One topic per section * Self-contained information (no cross-references) * Specific details (times, prices, phone numbers) * Answer first, then elaborate * Numbered lists for important items (state the count) * Actual names for facilities ("Terrace Bistro," not "the restaurant") * Test after every upload **Never Do:** * "As mentioned above..." or "See other document..." * "Contact reception for details" without a phone number * Marketing language without facts * Leave outdated information in documents * Upload image-heavy PDFs without extracting the text * Assume your receptionist knows industry abbreviations * Skip testing after changes # Notion Integration Guide Source: https://recepai.ai/docs/knowledge-base/notion-guide Everything you need to know about connecting Notion to RecepAI — how it works, what to expect, and how to keep your content in sync. Notion is one of the most powerful ways to keep your receptionist's knowledge up to date. If your team already manages hotel information in Notion — room descriptions, restaurant hours, local tips, policies — you can sync that content directly into RecepAI instead of uploading files manually. This guide explains how the integration works, what to expect, and how to handle common situations. ## How It Works When you connect Notion to RecepAI, here's what happens behind the scenes: RecepAI asks Notion for permission to read pages in your workspace. You choose which pages to share during this step. From the shared pages, you pick which ones your receptionist should learn. You can import as many as you need. RecepAI reads each page's content — headings, paragraphs, lists, tables, and more — converts it into knowledge pieces, and teaches your receptionist. When you edit pages in Notion, come back to RecepAI and click **"Check for Updates"** to see what changed. Then click **"Train RECEPtionist"** to sync the latest content. **Your receptionist doesn't automatically sync with Notion.** You control when updates happen. This is by design — it lets you review what changed before your receptionist learns it. ## Setting Up the Connection 1. Go to **Training → Training Materials** 2. Click **"Notion Library"** — a side panel opens on the right 3. Click **"Import from Notion"** 4. A Notion authorization window opens — sign in and select the pages you want to share with RecepAI 5. Back in RecepAI, you'll see a list of available pages 6. Select the pages to import and click **"Import Selected"** 7. Your receptionist learns the content automatically 1. Open the Notion Library side panel 2. Click **"Import from Notion"** again 3. Select additional pages — already imported pages are marked 4. Click **"Import Selected"** You don't need to disconnect and reconnect to add more pages. Just click Import again. ## Checking for Updates After you edit pages in Notion, RecepAI doesn't detect changes automatically — you need to tell it to check. 1. Open the **Notion Library** side panel 2. Click **"Check for Updates"** 3. RecepAI compares each imported page against the current version in Notion You'll see one of these results: | Result | What It Means | What to Do | | ---------------------------- | ---------------------------------------------- | -------------------------------------------------- | | **All up to date** | No changes detected in any page | Nothing — your receptionist's knowledge is current | | **X pages have new content** | Pages were edited in Notion since last sync | Click **"Train RECEPtionist"** to sync the changes | | **X pages no longer exist** | Pages were deleted or moved to trash in Notion | Click **"Remove from Library"** to clean up | **After editing in Notion, wait about 1 minute** before checking for updates. Notion needs a moment to register the change internally. If you check immediately after editing, the change might not be detected yet. ## Understanding Status Messages ### "Pages have new content to learn" This means one or more pages were modified in Notion since the last time you synced. Click **"Train RECEPtionist"** to update your receptionist with the latest content. ### "Pages no longer exist in Notion" This appears when: * You **deleted** a page in Notion * You **moved a page to trash** in Notion * The page was **removed from a shared workspace** that RecepAI had access to In all cases, the content is still in your receptionist's knowledge — it doesn't disappear automatically. You can: * **Remove it** by clicking the remove button (if the content is no longer relevant) * **Keep it** if the information is still accurate (even though the Notion source is gone) ### "Connection broken — Reconnect to Notion" This means RecepAI can no longer access your Notion workspace. Common causes: * The person who connected Notion **revoked access** from Notion's settings * The authorization **expired** (rare, but possible) * **Workspace permissions changed** (the connecting user lost access to certain pages) **To fix:** Click **"Reconnect to Notion"** and authorize again. ## Who Connects Matters **This is the most important thing to understand about the Notion integration.** When someone connects Notion to RecepAI, the connection is tied to **that specific person's access**. RecepAI can only see pages that this person has access to in Notion. **Example scenario:** * **Manager A** connects Notion and imports 10 pages * Manager A has access to the "Hotel Operations" teamspace where these pages live * Later, **Manager A leaves the team** or loses access to that teamspace * RecepAI can no longer read those 10 pages → they show as "deleted" or the connection breaks **Best practice:** Have a **dedicated team account** or the **primary hotel administrator** connect Notion — someone whose access won't change unexpectedly. If you see pages suddenly showing as "deleted" even though they still exist in Notion, it usually means the person who connected has lost access to those pages. Reconnecting with a user who has access will fix this. ## Editing Content You have two options for editing Notion-imported content: ### Edit in Notion (recommended) 1. Click the **view icon** (eye) on a Notion document in your library 2. Click **"Edit in Notion"** — the page opens in Notion 3. Make your changes in Notion 4. Come back to RecepAI and click **"Check for Updates"** 5. Click **"Train RECEPtionist"** to sync ### Edit in RecepAI 1. Click the **view icon** on a Notion document 2. Click the **edit icon** to open the built-in editor 3. Make your changes and save If you edit content in RecepAI directly, those changes are **only in RecepAI** — they won't appear in Notion. If you later sync from Notion, the Notion version will overwrite your local edits. For this reason, we recommend editing in Notion when possible. ## What Content Gets Imported RecepAI extracts and learns from these Notion block types: | Content Type | How It's Imported | | ------------------------- | --------------------------------------------- | | Paragraphs | Full text preserved | | Headings (H1, H2, H3) | Preserved with hierarchy | | Bulleted & numbered lists | Preserved with formatting | | To-do items | Preserved with check status | | Quotes & callouts | Preserved with emphasis | | Code blocks | Preserved with language info | | Tables | Imported as structured data | | Toggle blocks | Content inside toggles is included | | Images | Noted as "\[Image]" with caption if available | | Bookmarks & links | URLs are preserved | | Dividers | Used as section breaks | **Sub-pages** (pages nested inside other pages) are listed but their content is not automatically imported. You need to import sub-pages separately if you want your receptionist to learn from them. ## Troubleshooting * **Wait 1 minute** after editing in Notion, then check again. Notion needs a moment to register changes. * **Refresh the page** in your browser (Ctrl+R or Cmd+R), then try again. * If it still doesn't detect, try clicking on the specific document to open the view modal, then check from there. This usually means **access has changed**. The person who connected Notion no longer has access to those pages. This happens when: * They were removed from a teamspace * Page sharing permissions changed * They left the organization **Fix:** Click **"Reconnect to Notion"** and authorize with a user who has access to the pages. If you need to reconnect frequently: * Make sure the connecting user has **stable, long-term access** to the workspace * Check that the Notion integration hasn't been **removed** from your workspace settings (Notion → Settings → Connections) * Use an admin account rather than a temporary team member's account Notion only shows pages that have been **explicitly shared** with the RecepAI integration. During authorization, make sure to: * Select the specific pages or databases you want to share * Or select entire sections/teamspaces You can update which pages are shared in **Notion → Settings → Connections → RecepAI**. RecepAI converts Notion content into a text format optimized for AI understanding. Some visual elements (colors, background highlights, column layouts) won't appear in the imported content, but all the **actual text information** is preserved. ## Best Practices Have your primary administrator or a dedicated account connect Notion. This prevents access issues when team members change. Create a dedicated section in Notion for hotel information that your receptionist should know. This makes it easy to select the right pages. Make it a habit to check for updates after your team edits Notion content — perhaps as part of your weekly routine. After syncing new content, open the chat widget and ask questions about what you just updated. This confirms your receptionist learned it correctly. # Organizing Your Content Source: https://recepai.ai/docs/knowledge-base/organizing-content How to structure and organize your hotel knowledge for best results. ## Recommended Structure Organize your knowledge base into clear categories. Here's a proven structure that works well for most hotels: ``` Hotel Knowledge Base │ ├── 1. OVERVIEW │ ├── About the Hotel (location, concept, awards) │ ├── Hotel Fact Sheet (quick reference) │ └── Contact Information │ ├── 2. ACCOMMODATION │ ├── Room Types and Capacities │ ├── Room Amenities │ └── Check-in/Check-out Policies │ ├── 3. DINING │ ├── Restaurant Overview │ ├── Each Restaurant (name, cuisine, hours, dress code) │ └── Bars and Lounges │ ├── 4. FACILITIES │ ├── Spa & Wellness │ ├── Pools and Beach │ ├── Fitness Center │ └── Kids Facilities │ ├── 5. ACTIVITIES │ ├── Daily Activities Schedule │ ├── Sports and Recreation │ └── Entertainment Program │ ├── 6. SERVICES │ ├── Concierge Services │ └── Transportation │ └── 7. PRACTICAL INFO ├── FAQ (Top 20 Questions) ├── Directions and Transportation └── Hotel Policies ``` You don't need to create all of these at once. Start with categories 1-3 (Overview, Accommodation, Dining) and add the rest over time. ## Formatting Tips | Element | How to Write | Example | | ------------- | ----------------------- | ------------------------------------------- | | **Times** | Use consistent format | "09:00 - 22:00" or "9 AM - 10 PM" | | **Prices** | Always include currency | "€50 per person" not just "50" | | **Locations** | Be specific | "Ground floor, next to lobby" | | **Contact** | Full details | "Extension 100" or "+90 232 XXX XXXX" | | **Capacity** | Clear numbers | "Maximum 2 adults + 1 child (up to age 12)" | ## One Topic Per Document Don't combine unrelated topics in a single document. Your receptionist searches for relevant information by topic — mixing topics makes it harder to find the right answer. **Good:** Separate documents for "Spa Services", "Restaurant Hours", "Room Types" **Avoid:** One giant document covering "Everything About Our Hotel" # How to Start Training Your Receptionist Source: https://recepai.ai/docs/knowledge-base/overview Your receptionist is only as good as the information you give it. Here's where to start. ## The Golden Rule **If a human receptionist would need to know it, your AI receptionist needs it too.** Your knowledge base is everything your receptionist knows about your hotel. The quality of information you provide **directly determines** the quality of responses guests receive. Think of it this way: even the smartest receptionist in the world can't answer questions about things they were never taught. ## What to Include | Priority | Category | Examples | | ---------------- | ----------------- | ----------------------------------------------- | | **Must Have** | Essential info | Room types, check-in/out times, contact info | | **Should Have** | Important details | Restaurant hours, spa services, amenities | | **Nice to Have** | Helpful extras | Local attractions, transportation tips | | **As Needed** | Specialized info | Event spaces, wedding packages, corporate rates | ## Two Kinds of Knowledge Your receptionist uses two sources of information: **Documents you upload** — fact sheets, menus, policies, FAQs. These provide the specific facts and details your receptionist references when answering questions. [How to prepare documents →](/knowledge-base/document-preparation) **Prompts you write** — chat and voice instructions. These define how your receptionist behaves, what tone to use, and what rules to follow. They should NOT contain reference data. [How to write prompts →](/prompt-engineering/overview) **Common mistake:** Putting detailed hotel information (room types, restaurant hours, etc.) in the personality instructions instead of uploading them as documents. Your instructions should define **behavior**, not store **facts**. Keep facts in your Training Materials. ## Next Steps Learn the exact format and structure that gets the best results. How to organize your documents for maximum clarity. # Advanced Prompting Tips Source: https://recepai.ai/docs/prompt-engineering/advanced-tips Field-tested techniques that make a real difference in your receptionist's performance. These tips come from real hotel deployments. They're the patterns that consistently produce the best results. *** ## The Power of NEVER Rules The single most effective prompting technique is the **NEVER rule**. AI models are specifically trained to be attentive to explicit prohibitions — the word "NEVER" in capital letters creates a strong signal in the AI's processing that this instruction is non-negotiable. This is why explicit prohibitions are followed far more consistently than soft suggestions. | Instruction Type | Example | How Often Followed | | -------------------------------------- | --------------------------------------------------------------------------- | ------------------ | | **Positive (weakest)** | "Be accurate with information" | \~70% | | **Negative (strong)** | "NEVER make up information" | \~95% | | **Negative + alternative (strongest)** | "NEVER make up information. If unsure, provide our contact number instead." | \~99% | ### Writing Effective NEVER Rules Every NEVER rule should follow this pattern: ``` NEVER [prohibited action] → Instead, [alternative action] ``` "NEVER say 'contact reception.'" *Your receptionist knows what NOT to do, but not what to do instead. It may awkwardly avoid the topic entirely.* "NEVER say 'contact reception.' Instead, always provide the specific phone number: +90 212 XXX XXXX or email: [info@hotel.com](mailto:info@hotel.com)." *Now your receptionist has a clear alternative.* ### Essential NEVER Rules for Every Hotel ``` NEVER make up information or guess when unsure → Instead, say "I don't have that specific information" and provide contact details NEVER say "contact reception" or "ask the front desk" → Instead, provide the specific phone number or email NEVER quote specific room prices (unless explicitly allowed) → Instead, say "prices vary by season" and offer contact info NEVER compare with competitor hotels → Instead, focus on your own features NEVER use emojis in responses → Instead, use professional formatting (bold, bullet points) ``` *** ## Clarification Rules: Ask, Don't Guess One of the most powerful techniques is teaching your receptionist **when to ask for clarification** instead of guessing. This prevents wrong answers, which are far worse than an extra question. ### The Principle ``` One clarifying question is always better than one wrong answer. ``` ### When Your Receptionist Should Ask | Scenario | Without Clarification Rule | With Clarification Rule | | ------------------------ | ------------------------------ | ----------------------------------------------------------------------------------------- | | "Can I bring my child?" | Guesses one area, may be wrong | "Which area are you asking about? Most areas are family-friendly, though our spa is 16+." | | "How much does it cost?" | Picks a random service | "Which service are you interested in? Spa treatments, water sports, or dining?" | | "What are your hours?" | Answers for one restaurant | "Which area? I can check our restaurant, spa, or pool hours for you." | ### Template for Chat ("How they should chat") ``` ## Clarification Rules One clarifying question is always better than one wrong answer. - If a guest's question is ambiguous, DO NOT guess. Ask a clarifying question with 2-3 specific options. - Maximum 2-3 options to keep it simple. - Keep clarifying questions warm and helpful, not interrogative. - If not confident in your answer, say: "I want to give you accurate information. Could you clarify..." and offer options. - NEVER fabricate details to fill gaps in understanding. ``` ### Template for Voice ("How they should talk") ``` # Clarification Rules One clarifying question is always better than one wrong answer. - If a caller's question is ambiguous, DO NOT guess. Ask a brief clarifying question with 2-3 options. - Keep clarifying questions warm and conversational — you are speaking, not writing. - If not confident, say: "I want to give you the right information — could you tell me a bit more?" - NEVER fabricate details to fill gaps in understanding. ``` **Voice vs. Chat difference:** In voice, clarification questions should be shorter and more conversational. In chat, you can offer slightly more structured options with formatting. *** ## Handling Mixed-Concept Hotels Some hotels serve different audiences — families AND couples-only areas, all-inclusive AND a-la-carte restaurants, different age restrictions for different facilities. These hotels need extra care in their prompts. Don't leave anything implied. If your hotel has both family-friendly and adults-only areas, say it directly. ``` Guest Policy: - Our resort welcomes guests of all ages - Main pool and beach: family-friendly - Spa: guests aged 16 and above - Fine Dining Restaurant: 18+ after 7 PM - All other areas: open to all guests ``` Don't assume your receptionist will cross-reference. If the pool document says "open to all guests," the beach document should say the same thing. Each document your receptionist finds must give the complete picture on its own. For the most important distinctions: ``` NEVER describe the hotel as "adults-only" — we are a family-friendly resort with some adults-only areas NEVER assume the guest is asking about the 18+ section unless they specifically mention it ``` *** ## Numbered Lists in Training Materials A field-tested technique that significantly improves accuracy: when your Training Materials contain important lists (like honeymoon package privileges, all-inclusive inclusions, or activity schedules), use **numbered lists with a count**. Your receptionist is less likely to skip items in a numbered list, and stating the total count helps it verify completeness. **Instead of:** ``` Honeymoon privileges: - Welcome fruit basket - Room upgrade - Late checkout - Spa discount ``` **Use:** ``` Honeymoon privileges (7 total): 1. Welcome fruit basket in room upon arrival 2. Room upgrade (subject to availability) 3. Late checkout until 14:00 4. 20% discount on all spa treatments 5. Complimentary bottle of wine 6. Romantic turndown service 7. Priority restaurant reservation ``` Adding "(7 total)" to the heading helps your receptionist verify it's sharing all items, not stopping at 4 or 5. *** ## Temperature Settings (Creativity Level) The "Creativity Level" slider on your [Conversation Agent](/admin-panel/conversation-agent) and [Voice Agent](/admin-panel/voice-agent) pages controls how predictable your receptionist's responses are. **What it actually does:** When your receptionist forms a response, it chooses each word based on probability. At low creativity (0.2), it always picks the most likely, most accurate word. At high creativity (0.9), it sometimes picks less likely words — which makes responses sound more varied, but also increases the risk of generating information that isn't in your Training Materials. For a hotel receptionist, this means higher creativity = higher risk of giving incorrect answers. | Setting | Range | Behavior | Best For | | ------------ | --------- | ------------------------------------ | ---------------------------------------- | | **Focused** | 0.0 - 0.3 | Consistent, predictable, factual | Reservation info, policies, factual Q\&A | | **Balanced** | 0.4 - 0.7 | Natural variation, slightly creative | General conversation | | **Creative** | 0.8 - 1.0 | Unpredictable, varied | Not recommended for guest services | For hotel receptionists, **lower is better.** Guests need accurate, consistent answers — not creative interpretations. We recommend starting at **0.3** and only increasing if responses feel too robotic. **Practical examples at different temperatures:** | Question: "What time is breakfast?" | | | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **0.2 (Focused)** | "Breakfast is served from 07:00 to 10:30 in the Main Restaurant." | | **0.5 (Balanced)** | "Good morning! Breakfast is available from 7 AM to 10:30 AM in our Main Restaurant on the ground floor. Enjoy!" | | **0.9 (Creative)** | "Rise and shine! Head down to our lovely Main Restaurant anytime between 7 and 10:30 in the morning for a delightful spread. The chef's freshly baked pastries are not to be missed!" | For a hotel receptionist, the 0.2 response is the most professional and reliable. The 0.9 response, while friendly, adds fabricated details ("chef's freshly baked pastries") that might not be accurate. *** ## Prompt Length: Less Is More Both chat and voice prompts have a sweet spot for length. Too short and your receptionist lacks guidance. Too long and it starts ignoring rules. **Why shorter prompts give better answers:** Your receptionist has a limited "attention window" — think of it as a desk that can only hold so many papers at once. The prompt, the conversation history, and the search results from your Training Materials all compete for space on this desk. A 15,000-character prompt takes up so much space that your Training Materials results get squeezed out — meaning your receptionist has less actual hotel information to work with. Shorter prompt = more room for accurate answers from your documents. | Prompt Type | Recommended Length | Warning Zone | Danger Zone | | ----------- | ---------------------- | --------------------- | ------------- | | **Chat** | 3,000-8,000 characters | 8,000-10,000 (orange) | 10,000+ (red) | | **Voice** | 1,500-4,000 characters | 4,000-5,000 | 5,000+ | **If your prompt is too long, the fix is almost always the same:** You're including hotel facts (hours, prices, room types) that belong in Training Materials instead. ### What Belongs in the Prompt vs. Training Materials | In the Prompt | In Training Materials | | ------------------------------------ | --------------------------------------------------------------- | | "Be warm, professional, and concise" | "Breakfast hours: 07:00-10:30" | | "NEVER quote specific room prices" | "Standard Room: €150/night, Suite: €350/night" | | "Use bold for key details" | "Spa Treatment Menu: Swedish Massage 60min - €80" | | "Respond in the guest's language" | "Restaurant dress codes: Beach Bar: casual, Fine Dining: smart" | | "Ask for clarification when unsure" | "Pool hours: Main Pool 08:00-20:00, Indoor 07:00-22:00" | *** ## Response Format Instructions ### For Chat ("How they should chat") Detailed formatting instructions help your receptionist produce consistently readable responses. ``` Response formatting: - Use **bold** for important details (times, locations, names) - Use numbered lists (1, 2, 3) for step-by-step instructions - Use bullet points (•) for listing options or amenities - Keep paragraphs short (2-3 sentences max) - Add line breaks between different topics - For comparisons, use a brief description — not a table ``` ### For Voice ("How they should talk") Formatting doesn't apply in voice, but delivery style does: ``` Speaking style: - Keep every response to 2-3 sentences maximum - Pause briefly between thoughts for natural rhythm - For lists, summarize and offer the most popular option - When sharing contact info, speak slowly and clearly - Use natural language, not written-text-style speech ``` *** ## Testing Checklist After writing your prompts, use this comprehensive test to verify everything works. ### The 14-Question Test | # | Question | What You're Testing | | -- | ----------------------------------------- | --------------------------------- | | 1 | "What time is breakfast?" | Basic knowledge base usage | | 2 | "Do you have a spa?" | Information retrieval | | 3 | "How do I get from the airport?" | Detailed instructions | | 4 | "What's your cheapest room?" | Price boundary (NEVER rule) | | 5 | "How are you better than \[competitor]?" | Comparison boundary | | 6 | "Can you book a table for me?" | Action boundary | | 7 | "What's the weather tomorrow?" | Unknown topic handling | | 8 | "I want to speak to the manager" | Escalation path | | 9 | "Can I bring my child?" | Clarification (ambiguous) | | 10 | "Are there any discounts?" | Clarification (broad) | | 11 | "How do I make a reservation?" | Contact info (no "ask reception") | | 12 | "Is \[restaurant] suitable for children?" | Age restriction awareness | | 13 | "Which restaurants are included?" | Included vs. paid services | | 14 | "Do you have a honeymoon package?" | Special program knowledge | ### Testing Rules * Test in a **single conversation thread** — real guests ask multiple questions in one session * Use **natural language** — "hey what time can I get breakfast?" not "breakfast hours" * Test in **all supported languages** — at least 3 questions per language * Check **response format** — is bold used correctly? Are lists formatted? * Verify **response length** — responses should match your prompt's length guidelines **Pro tip:** After testing, check the [History](/admin-panel/history) page to review the full conversation. Look for any responses that feel off, and adjust your prompt accordingly. The best prompts are iteratively refined, not written perfectly on the first try. # Chat Personality Source: https://recepai.ai/docs/prompt-engineering/chat-prompts A comprehensive guide to writing personality instructions that make your receptionist helpful, accurate, and on-brand in text conversations. The chat prompt — the **"How they should chat"** field on your [Conversation Agent](/admin-panel/conversation-agent) page — defines your receptionist's personality for **text conversations**. It controls how your receptionist writes, what tone it uses, and how it handles every situation — from a simple breakfast question to a complex complaint. This guide will help you write a prompt that makes your receptionist truly excellent. ## The Most Important Concept: Behavior vs. Facts Before you write a single word, you need to understand the fundamental principle that separates great prompts from poor ones: The prompt tells your receptionist **how to behave**. * Personality and tone * What to do when uncertain * How to format responses * What topics to avoid * How to handle complaints * Language preferences Your Training Materials provide the **facts** to reference. * Restaurant names and hours * Room types and amenities * Spa treatments and prices * Check-in/out times * Hotel policies * Activity schedules **The #1 mistake in chat prompting:** Putting hotel facts inside the prompt. When you list restaurant hours, room types, or spa prices in the prompt, three things go wrong: 1. **The information is hard to update** when it changes seasonally 2. **The prompt competes with your Training Materials** for your receptionist's attention — a longer prompt means less room for the actual answers from your documents, which leads to worse responses 3. **Conflicts cause confusion** — if the prompt says "breakfast until 10:00" but your Training Materials say "breakfast until 10:30" (because you updated the document), your receptionist may give contradictory answers Keep facts in Training Materials, rules in the prompt. **A practical test:** Ask yourself — "Will this information change when the season changes?" If yes, it belongs in Training Materials, not the prompt. Restaurant hours change seasonally. Check-in policy doesn't. Room prices change constantly. "Always respond in the guest's language" never changes. *** ## The Chat Prompt Structure A well-organized chat prompt follows a clear structure. The order matters — the most critical sections go first, because your receptionist gives more weight to instructions that appear early. Establish who your receptionist is and what its purpose is. This is the foundation that shapes everything else. ``` You are the AI receptionist for The Grand Hotel, a 5-star luxury hotel in the heart of Istanbul. You answer guest questions about the hotel, facilities, and services using your knowledge base. You are professional, welcoming, and genuinely helpful. ``` **Key elements to include:** * Hotel name and type * Location (gives context for local questions) * Primary role (answering questions, not making bookings) * Core personality in one sentence Your most important rules go second — right after identity. These are hard boundaries your receptionist must never cross. ``` CRITICAL POLICIES: - NEVER make up information — if you don't find the answer in your knowledge base, say so honestly - NEVER make reservations — direct guests to call +90 212 XXX XXXX or email reservations@grandhotel.com - NEVER quote specific room prices — say "prices vary by season" and offer to connect with the reservations team - NEVER compare with other hotels - NEVER discuss topics unrelated to the hotel or hospitality ``` **Why placement matters:** Your receptionist's AI engine uses an "attention" mechanism that focuses most intensely on instructions at the beginning and end of the prompt, with the middle receiving less focus. This isn't a metaphor — it's a fundamental property of how the technology works. Critical policies placed at the bottom are significantly more likely to be overlooked. Always lead with what matters most. If your hotel has specific guest policies that affect how questions should be answered, state them clearly and early. ``` Guest policy: - Our hotel welcomes guests of all ages - The main pool and beach are family-friendly - The spa is available for guests aged 16 and above - Two restaurants are 18+ after 7 PM ``` This section is especially important for hotels that have mixed-concept areas (e.g., family-friendly AND adults-only sections). Give your receptionist a few key selling points to mention naturally when relevant. These are not facts to recite — they're conversation enhancers. ``` Hotel highlights (mention when relevant): - Rooftop restaurant with panoramic Bosphorus views - Award-winning spa with traditional Turkish treatments - Walking distance to major historical attractions - Private beach with complimentary cabanas ``` This section teaches your receptionist when to ask instead of guess. Without it, AI has a strong built-in tendency to produce a confident answer rather than admit uncertainty — which means your receptionist will guess rather than ask. Explicit clarification rules counteract this tendency. ``` Clarification rules: One clarifying question is always better than one wrong answer. - If a guest's question is ambiguous or could refer to multiple things, DO NOT guess. Ask a clarifying question with specific options. - Maximum 2-3 options to keep it simple. - Keep clarifying questions warm and helpful, not interrogative. - NEVER fabricate details to fill gaps in understanding. Examples: - Guest: "Can I bring my child?" → "I'd be happy to help! Which area are you asking about? Most of the hotel is family-friendly, though our spa is for guests 16 and above." - Guest: "How much does it cost?" → "Could you tell me which service you're interested in? For example, our spa treatments, water sports, or dining options?" ``` Define a clear strategy for when your receptionist doesn't find the answer. This prevents both the "I don't know" dead-end and the dangerous temptation to make up information. ``` When you're not certain: - If the knowledge base has the answer → use it confidently - If the knowledge base has a partial answer → share what you have and acknowledge the gap - If the knowledge base has NO answer → say "I don't have that specific information, but I can connect you with our team" and provide contact details NEVER guess or make up an answer. Honesty builds trust. ``` Note: In prompt templates, we use the term "knowledge base" because that's the term your receptionist's AI engine understands. It refers to the same [Training Materials](/admin-panel/documents) you upload on the Documents page. Ensure your receptionist always provides actionable contact details. ``` Contact information — ALWAYS provide these when relevant: - Reservations: +90 212 XXX XXXX - Email: reservations@grandhotel.com - WhatsApp: +90 5XX XXX XXXX NEVER say "contact reception" or "ask the front desk" without providing a specific way to do so. ``` Define what your receptionist should not do. Pair every restriction with an alternative action. ``` Boundaries: - Do not make reservations → Direct to reservations team with contact info - Do not quote exact prices → Say "prices vary by season, our reservations team can provide current rates" - Do not compare with other hotels → Focus on your own features - Do not discuss non-hotel topics → Politely redirect: "I specialize in hotel-related questions. How can I help with your stay?" ``` Define multilingual behavior clearly. ``` Language: - Always respond in the same language the guest uses - If the guest switches language mid-conversation, switch with them - Use natural, fluent language — not translated-sounding text ``` Control how responses look and feel. This section goes last because it's about presentation, not content. ``` Response format: - Use **bold** for important details (times, locations, names) - Use bullet points for lists of 3+ items - Use numbered lists for step-by-step instructions - Keep responses concise: 2-4 sentences for simple questions, more detail only when the guest asks - End with a helpful follow-up question when appropriate: "Is there anything else I can help with?" - NEVER use emojis ``` *** ## Personality Design Your receptionist's personality should match your hotel brand. A luxury hotel receptionist sounds different from a boutique B\&B host. Here's how to design the right personality. ### Personality Dimensions | Dimension | How to Think About It | Example Instructions | | --------------- | ----------------------------- | ---------------------------------------------------------- | | **Warmth** | How friendly vs. formal | "Warm and welcoming" vs. "Professional and courteous" | | **Expertise** | How knowledgeable they sound | "Confident in sharing details" vs. "Helpful guide" | | **Enthusiasm** | Energy level | "Genuinely excited to help" vs. "Calm and measured" | | **Formality** | Address style | "Dear guest" vs. "Hi there!" | | **Proactivity** | Do they volunteer extra info? | "Mention related amenities" vs. "Answer only what's asked" | ### Personality Templates by Hotel Type ``` Personality: - Professional, efficient, and courteous - Respect the guest's time — give direct answers - Knowledgeable about business facilities and local transport - Tone: like a polished executive assistant - Address guests respectfully ``` ``` Personality: - Warm, relaxed, and genuinely enthusiastic - Help guests make the most of their vacation - Knowledgeable about activities, dining, and relaxation - Tone: like a friendly concierge who loves the resort - Welcoming and casual while maintaining professionalism ``` ``` Personality: - Personal, charming, and knowledgeable - Share interesting details about the hotel's character - Feel like a local friend with insider knowledge - Tone: conversational, authentic, and engaging - Showcase what makes this hotel unique ``` ``` Personality: - Gracious, refined, and attentive - Anticipate needs and offer personalized suggestions - Knowledgeable about premium services and experiences - Tone: like a personal butler — discreet, composed, impeccable - Use elevated but not stuffy language ``` *** ## Response Formatting Unlike voice, chat can use rich formatting. Well-formatted responses are significantly easier for guests to read and act on. ### Formatting Rules | Element | When to Use | Example | | -------------- | ----------------------------------------- | ---------------------------------------- | | **Bold** | Key information (times, names, locations) | "Breakfast is served **07:00 to 10:30**" | | Bullet points | Lists of options or amenities | "• Pool • Spa • Gym" | | Numbered lists | Step-by-step instructions | "1. Go to lobby 2. Take elevator..." | | Line breaks | Separate different topics | One topic per paragraph | ### Good vs. Poor Formatting "Breakfast is served from 7am to 10:30am in the main restaurant on the ground floor and you can also order room service breakfast between 6am and 11am by calling extension 100 and the dress code is smart casual." "**Breakfast options:** • **Main Restaurant** — 07:00 to 10:30, ground floor • **Room Service** — 06:00 to 11:00, call extension 100 *Dress code: Smart casual*" **Add this to your prompt:** ``` Response formatting: - Use **bold** for important details (times, locations, names) - Use numbered lists (1, 2, 3) for step-by-step instructions - Use bullet points for listing options or amenities - Keep paragraphs short (2-3 sentences max) - Add line breaks between different topics ``` *** ## Writing Effective Boundaries Boundaries define what your receptionist should not do. The secret to good boundaries is **positive framing** — instead of just saying "don't do X," explain what to do instead. ### The Pattern: NEVER + Instead Every boundary follows this pattern: ``` Do not [action] → Instead, [alternative action] ``` ### Common Boundaries for Hotels **Don't say:** "Don't make reservations." **Say instead:** ``` Do not make or confirm reservations. Instead, provide the reservations team contact: +90 212 XXX XXXX or reservations@hotel.com. Say: "I'd love to help you reserve! Our reservations team can assist you directly at..." ``` **Don't say:** "Don't share prices." **Say instead:** ``` Do not quote specific room prices as they change by season and availability. Instead, say: "Our rates vary depending on the season and room type. For the most accurate pricing, our reservations team can help: [contact]." Exception: If the knowledge base contains current spa treatment prices or restaurant menu prices, you may share those as they are set rates. ``` **Don't say:** "Don't talk about other hotels." **Say instead:** ``` If asked about competitor hotels, do not compare or comment. Instead, redirect to your own features: "I can tell you all about what makes our hotel special! For example, our [unique feature]..." ``` **Don't say:** "Don't answer non-hotel questions." **Say instead:** ``` If asked about topics unrelated to the hotel or hospitality, politely redirect: "I specialize in questions about the hotel and your stay. Is there anything about your visit I can help with?" ``` **Don't say:** "Don't give medical advice." **Say instead:** ``` For health or safety concerns, do not provide medical advice. Instead: "For any health concerns, please contact our front desk at [number] — they can arrange medical assistance immediately." ``` *** ## The Complete Chat Prompt Template Here's a field-tested template you can adapt for your hotel. Replace everything in `[brackets]` with your hotel's information. ``` You are the AI receptionist for [HOTEL NAME], a [HOTEL TYPE] located in [LOCATION]. Your role: Answer guest questions about the hotel, facilities, and services using your knowledge base. Be [PERSONALITY TRAIT], professional, and genuinely helpful. ## Critical Policies - NEVER make up information — if you don't find the answer in your knowledge base, say so honestly - NEVER make reservations — direct guests to [PHONE/EMAIL] - NEVER quote specific room prices — prices vary by season - NEVER compare with other hotels - NEVER use emojis in responses ## Guest Policy [STATE IMPORTANT GUEST POLICIES — e.g., family-friendly, age restrictions for specific areas, dress codes] ## Hotel Highlights Mention these naturally when relevant: - [KEY FEATURE 1] - [KEY FEATURE 2] - [KEY FEATURE 3] ## Clarification Rules One clarifying question is always better than one wrong answer. - If a guest's question is ambiguous or could refer to multiple things, ask a clarifying question with 2-3 specific options - Keep clarifying questions warm and helpful - NEVER fabricate details to fill gaps ## When You're Not Certain - If the knowledge base has no answer → "I don't have that specific information, but our team can help you directly at [CONTACT]" - Never guess. Honesty builds trust. ## Contact Information Always provide these when relevant — NEVER say "contact reception" without specifics: - Reservations: [PHONE] - Email: [EMAIL] - [OTHER CHANNELS] ## Boundaries - Do not make reservations → Direct to reservations team - Do not quote exact room prices → "Prices vary by season" - Do not discuss non-hotel topics → Politely redirect - Do not compare with other hotels → Focus on own features ## Language - Always respond in the same language the guest uses - If the guest switches language, follow them ## Response Format - Use **bold** for key details (times, locations, names) - Use bullet points for lists of 3+ items - Keep responses concise (2-4 sentences for simple questions) - Add a helpful follow-up question when appropriate - Never use emojis ``` *** ## Advanced Techniques ### Follow-Up Questions Teaching your receptionist to end responses with a relevant follow-up question creates more engaging conversations and helps guests discover services they might not have asked about. ``` After answering, add a relevant follow-up question when natural: - After spa info: "Would you like to know about our special treatment packages?" - After restaurant info: "Would you like to know about our other dining options?" - After room info: "Is there anything specific about your room type you'd like to know?" Do NOT add a follow-up to every single response — use judgment. ``` ### Handling Complaints Guests sometimes express frustration in chat. Your receptionist should acknowledge and redirect — never argue or dismiss. ``` When a guest expresses frustration or complaint: 1. Acknowledge their feeling: "I'm sorry to hear that" 2. Show empathy: "I completely understand your concern" 3. Offer a solution: "Let me connect you with someone who can help resolve this" 4. Provide direct contact: [PHONE/EMAIL] NEVER argue, dismiss, or blame the guest. ``` ### Seasonal Awareness If your hotel operates differently across seasons, add awareness to the prompt: ``` Seasonal notes: - When asked about dates or availability, remind guests that seasonal schedules may apply - Don't assume current-season hours apply year-round - If unsure about off-season details, say: "Schedules may vary by season — I recommend checking with our reservations team for your specific dates." ``` *** ## Common Mistakes (and How to Fix Them) **The problem:** Your receptionist starts ignoring some rules because the prompt is overloaded. **Why it happens:** Your receptionist has a limited "attention window" — the prompt, the conversation history, and the answers from your Training Materials all compete for space in this window. A 15,000-character prompt leaves significantly less room for your Training Materials results, which means your receptionist finds less relevant information to work with. Shorter prompt = more room for accurate answers. **The fix:** Move all hotel facts (restaurant hours, room types, prices) to Training Materials. The prompt should only contain behavior rules, personality, and boundaries. Aim for under 10,000 characters. **The problem:** The prompt says "be brief" but also says "explain in detail." Your receptionist gets confused and behaves inconsistently. **The fix:** Read your prompt aloud and look for contradictions. A common one: "Keep responses concise" paired with "Always include detailed descriptions." Pick one approach and commit. **The problem:** Phrases like "respond appropriately" or "be smart about it" don't give your receptionist any useful guidance. **The fix:** Replace vague instructions with specific ones: * "Respond appropriately" → "Keep responses to 2-4 sentences for simple questions" * "Be helpful" → "Answer guest questions using your knowledge base" * "Use good judgment" → "If unsure, ask a clarifying question with 2-3 options" **The problem:** Restaurant hours, room rates, spa menu prices, and activity schedules are all in the prompt. The prompt is 15,000 characters and the receptionist performs poorly. **The fix:** Remove all factual data from the prompt. Upload it as Training Materials instead. The prompt should define **behavior** (personality, rules, format), not store **data** (hours, prices, menus). **The problem:** The prompt says "format responses nicely" but doesn't show what that looks like. The receptionist interprets the instruction differently each time. **Why this matters:** AI models learn far more effectively from a concrete example than from abstract rules. This is called "few-shot learning" — showing one good example is often more powerful than writing 10 lines of instructions. A single well-formatted example response teaches your receptionist the exact style, length, and tone you want. **The fix:** Include 1-2 concrete examples in your prompt: ``` Example response format: "**Breakfast** is served from **07:00 to 10:30** in the Main Restaurant (ground floor). We also offer room service from 06:00 to 11:00. Would you like to know about our dining options?" ``` **The problem:** Your receptionist can't effectively follow 50 different instructions. It starts ignoring some or following them inconsistently. **The fix:** Prioritize. Focus on the 10-15 most important rules. Move nice-to-have guidelines to a lower priority section or remove them entirely. Better to follow 10 rules consistently than 50 rules erratically. **The problem:** When the receptionist can't help, it just says "I don't know" and the conversation dies. **The fix:** Always pair "I don't know" with a next step: ``` "I don't have that specific information, but our team would love to help! You can reach them at +90 212 XXX XXXX or reservations@hotel.com." ``` **The problem:** The prompt doesn't mention emojis, so the receptionist sometimes adds them — which looks unprofessional for most hotel brands. **The fix:** Add "NEVER use emojis in responses" to your prompt. This is a simple rule that prevents an easy-to-miss problem. *** ## Testing Your Chat Prompt After writing your prompt, test it thoroughly before going live. Here are the essential test questions, organized by what they're testing. ### The 14-Question Test * "What time is breakfast?" * "Do you have a spa?" * "How do I get to the hotel from the airport?" **What you're testing:** Does the receptionist find and use knowledge base information correctly? * "What's your cheapest room?" (should not quote exact prices) * "How are you better than \[competitor]?" (should not compare) * "Can you book a table for me?" (should redirect, not comply) **What you're testing:** Does the receptionist follow NEVER rules? * "What's the weather tomorrow?" (not in knowledge base) * "I want to speak to the manager" (should offer to connect) **What you're testing:** Does the receptionist handle uncertainty gracefully? * "Can I bring my child?" (should ask: which area?) * "Are there any discounts?" (should ask: which type?) **What you're testing:** Does the receptionist ask for clarification instead of guessing? * "How do I make a reservation?" **What you're testing:** Does the receptionist provide specific phone/email, or just say "contact reception"? * Test age-restricted areas: "Is \[Restaurant] suitable for children?" * Test included vs. paid services: "Which restaurants are extra charge?" * Test special programs: "Do you have a honeymoon package?" **What you're testing:** Does the receptionist handle your hotel's specific nuances correctly? ### Testing Tips * **Test in a single thread** — Don't start a new conversation for each question. A real guest asks multiple questions in one session. * **Use natural language** — Don't type keywords. Write like a real guest would: "hey, what time can I get breakfast?" not "breakfast hours." * **Test all languages** — If your receptionist supports Turkish, German, and English, test at least 3 questions in each. * **Test edge cases** — Ask about things that are partially covered in your documents, or things at the boundaries of your rules. **The character counter** on the [Conversation Agent](/admin-panel/conversation-agent) page turns **orange at 8,000 characters** and **red at 10,000**. If you're going over, you're almost certainly including information that belongs in Training Materials instead of the prompt. *** ## Quick Reference Card | Rule | Details | | ------------------------------ | ------------------------------------------------------ | | **Prompt = behavior** | Personality, rules, and format — not facts | | **Training Materials = facts** | Hours, prices, menus, policies, room types | | **Max prompt length** | Under 10,000 characters (orange warning at 8K) | | **NEVER rules** | Always pair with an alternative action | | **Critical rules placement** | Put most important rules near the top | | **Formatting** | Bold for key details, bullets for lists | | **Response length** | 2-4 sentences for simple questions | | **Language** | "Respond in the same language the guest uses" | | **Uncertainty** | Acknowledge + provide contact information | | **Clarification** | Ask, don't guess — 2-3 options maximum | | **Follow-up questions** | Add when natural, don't force on every response | | **Testing** | Minimum 14 questions across all critical areas | | **Emojis** | NEVER use unless your brand specifically requires them | **Remember the golden rule:** If information might change next season, it belongs in Training Materials. If it defines how your receptionist behaves, it belongs in the prompt. Getting this separation right is the single biggest factor in your receptionist's performance. # How Personality Works Source: https://recepai.ai/docs/prompt-engineering/overview Your receptionist has two personalities — one for chat, one for voice. Here's why, and the rules that make both great. ## What Are Prompts? Think of prompts as the **training manual** you give to a new receptionist on their first day. They define everything about how your receptionist behaves — from personality and tone to boundaries and language rules. A prompt tells your receptionist: * **Who they are** — their role, personality, and character * **What they should do** — their purpose and goals * **What they shouldn't do** — hard boundaries and restrictions * **How they should communicate** — tone, format, and style **Prompts do NOT contain facts.** Restaurant hours, room types, spa prices, and hotel policies belong in your [Training Materials](/knowledge-base/overview). The prompt only defines **behavior** — how your receptionist communicates, not what it knows. This is the most important concept in prompt engineering. *** ## Two Separate Prompts, Two Different Worlds Your receptionist has **two different personalities** — one for text chat and one for voice calls. This isn't a limitation; it's intentional. Written and spoken communication follow fundamentally different rules, and the best experience requires different approaches for each. The **"How they should chat"** field on your [Conversation Agent](/admin-panel/conversation-agent) page. Controls how your receptionist **writes** in text conversations. * Can use formatting (bold, lists, links) * Can share detailed, multi-paragraph answers * Guest reads at their own speed * Responses can be 2-4 sentences The **"How they should talk"** field on your [Voice Agent](/admin-panel/voice-agent) page. Controls how your receptionist **speaks** during phone calls. * No formatting — only spoken words * Must be concise (2-3 sentences max) * Guest processes in real time * Must fill silence with natural phrases ### Why They Must Be Different | Aspect | Chat (Text) | Voice (Call) | | ------------------- | -------------------------------------------------------------- | --------------------------------------------------------------- | | **Response length** | 2-4 sentences, can be longer when asked | 2-3 sentences maximum, always | | **Formatting** | Bold, bullet points, numbered lists | Plain speech only | | **Lists** | Can list all 5 restaurants with hours | Must summarize: "We have 5 restaurants, the most popular is..." | | **Contact info** | Write: [reservations@hotel.com](mailto:reservations@hotel.com) | Say: "reservations at hotel dot com" | | **Silence** | Guest can wait while typing | 3 seconds of silence feels broken | | **Re-reading** | Guest scrolls back to check details | Guest can't "replay" what was said | **Example showing the difference:** When asked "What restaurants do you have?" **Chat response:** "We have four restaurants: **Terrace Bistro** (Mediterranean, 07:00-23:00), **Blue Lagoon** (seafood, 18:00-22:00), **Sakura** (Japanese, 19:00-22:00), and the **Beach Bar** (casual, 10:00-sunset). Would you like to know more about any of them?" **Voice response:** "We have four restaurants — Mediterranean, seafood, Japanese, and a casual beach bar. Our most popular is the Mediterranean terrace restaurant. Would you like to hear more about any of them?" Same information, completely different delivery. *** ## The 5 Golden Rules of Prompting These principles apply to both chat and voice prompts. Master these before diving into the specific guides. This is the most important rule. Your prompt should define **how** your receptionist communicates. Your Training Materials provide the **facts** it references. * **Prompt:** "Be professional, warm, and concise. Use bold for key details." * **Training Materials:** "Breakfast is served 07:00-10:30 in the Main Restaurant." If information might change next season, it doesn't belong in the prompt. Vague instructions like "be helpful" or "respond appropriately" don't mean anything to your receptionist. Always give concrete, actionable instructions. * **Vague:** "Respond appropriately" → **Specific:** "Keep responses to 2-4 sentences for simple questions" * **Vague:** "Be smart about it" → **Specific:** "If unsure, ask a clarifying question with 2-3 options" For your most important rules, use the word "NEVER" explicitly. Research shows that NEVER rules are followed significantly more consistently than softer phrasing. * **Weak:** "Try not to make up information" (\~70% followed) * **Strong:** "NEVER make up information" (\~95% followed) * **Strongest:** "NEVER make up information. If unsure, provide our contact number instead." (\~99% followed) When you tell your receptionist what NOT to do, always tell it what to do INSTEAD. Otherwise, it's left guessing. * **Incomplete:** "Don't say 'contact reception'" * **Complete:** "Don't say 'contact reception.' Always provide the specific number: +90 212 XXX XXXX" Your receptionist's AI engine focuses most intensely on instructions that appear at the beginning of the prompt. This isn't a design choice — it's a fundamental property of how the technology processes text. Place your most important policies (guest safety, NEVER rules, core personality) at the beginning for maximum impact. *** ## Where to Go Next Complete guide to writing your chat personality — structure, personality, formatting, boundaries, and a full template. Complete guide to writing your voice personality — speaking style, character normalization, Training Materials usage, and a full template. Field-tested techniques: clarification rules, NEVER rules, temperature settings, handling mixed-concept hotels, and more. Before writing prompts, make sure your Training Materials are ready. The quality of your documents is just as important as the quality of your prompts. **The most common mistake:** Writing a very long prompt that includes both personality instructions AND detailed hotel information. Keep facts in [Training Materials](/knowledge-base/overview) — let the prompt focus purely on personality, rules, and communication style. # Voice Personality Source: https://recepai.ai/docs/prompt-engineering/voice-prompts A comprehensive guide to writing personality instructions that make your receptionist sound natural, helpful, and professional on phone calls. The voice prompt — the **"How they should talk"** field on your [Voice Agent](/admin-panel/voice-agent) page — is the personality script for your receptionist's **phone conversations**. Writing for voice is fundamentally different from writing for text — this guide will show you exactly how to do it right. ## Why Voice Is a Different World When a guest calls your hotel and speaks with your AI receptionist, the conversation follows completely different rules than a text chat. Understanding these differences is the key to writing a great voice prompt. | | Text Chat | Voice Call | | ----------------------- | ---------------------------------- | ----------------------------------- | | **Speed** | Guest reads at their own pace | Guest must process in real time | | **Re-reading** | Can scroll back to re-read | Can't "replay" what was said | | **Formatting** | Bold, lists, links all work | Only spoken words — no formatting | | **Silence** | 5 seconds of typing is fine | 3 seconds of silence feels broken | | **Information density** | Can share URLs, emails, long lists | Must simplify, summarize, spell out | | **Length** | 4-5 sentences is fine | 2-3 sentences maximum | | **Mistakes** | Guest can re-read and correct | Guest may mishear and get confused | **The #1 mistake:** Writing a voice prompt as if it were a chat prompt. If your voice receptionist reads lists, shares URLs, or gives responses longer than 3 sentences, the guest experience will be poor. Voice is a completely different medium. *** ## The Voice Prompt Structure A well-structured voice prompt has distinct sections, each serving a specific purpose. Here's the recommended order — the most critical sections go first, because your receptionist gives more weight to what appears early in the prompt. **Why does order matter?** Your receptionist processes instructions using an "attention" mechanism — it focuses most intensely on what comes first and what comes last, with the middle receiving less focus. This is why your most critical policies should always be placed near the top. It's not a design choice — it's how the technology fundamentally works. Define who your receptionist is, their character, and their warmth level. ``` You are the voice receptionist for The Seaside Resort, a luxury beachfront hotel in Antalya. You are warm, genuine, and calm — like a friendly concierge who truly loves helping guests. ``` **Why this matters:** Personality shapes every word your receptionist speaks. A luxury hotel receptionist sounds different from a budget hotel one. State what your receptionist is trying to accomplish on every call. ``` Your goal is to help callers with questions about the hotel, facilities, and services. Provide accurate, helpful information using your knowledge base. Make every caller feel welcomed and valued. ``` Place your most important rules here — near the top where they get the most attention. ``` CRITICAL POLICIES: - NEVER describe the hotel as "adults-only" — we welcome families - NEVER make up information — if unsure, say so honestly - NEVER quote specific room prices — say "prices vary by season" - NEVER compare with other hotels ``` **Why "NEVER" works better than "don't":** AI models are specifically trained to pay extra attention to explicit prohibitions. The word "NEVER" in capital letters creates a strong signal that this rule is non-negotiable. In practice, NEVER rules are followed approximately 95% of the time, while softer instructions like "try to avoid" are followed only about 70%. For your most important rules, always use "NEVER." Define how your receptionist should sound in conversation. ``` Speaking style: - Speak naturally, as if talking to a friend - Keep every response to 2-3 sentences maximum - Use a warm but professional tone - Pause briefly before answering to sound thoughtful - Never sound rushed or robotic ``` Set the exact opening line for every call. ``` Greeting: "Hello, welcome to The Seaside Resort. How may I help you today?" ``` **Tips for a good greeting:** * Keep it under 15 words * Include the hotel name (callers want confirmation they reached the right place) * End with an open question * Sound warm, not scripted Words and phrases your receptionist uses to show they're listening and processing. ``` Affirmation phrases (use naturally throughout the conversation): - "Of course" - "I understand" - "Great question" - "Let me look that up for you" - "Absolutely" ``` **Why this matters:** In a phone call, the caller needs verbal confirmation that they've been heard. Without affirmations, the conversation feels cold and robotic. This is the most important technical section. Without it, your receptionist may say "I don't know" even when the answer is available. ``` Using your knowledge base: - When you search the knowledge base and receive results, ALWAYS use that information in your response - If search returns room types, prices, or policies, share those specific details with the caller - Only say "I'm not certain" when your search returns NO relevant results - NEVER ignore search results that contain useful information ``` **This section prevents the #1 voice agent problem:** Your receptionist searches its knowledge base automatically when guests ask questions. Without explicit instructions to USE those results, it may incorrectly say "I don't know" even when the information was found. Always include this section. Teach your receptionist when to ask instead of guess. ``` Clarification rules: - If a caller's question is ambiguous, DO NOT guess. Ask a brief clarifying question with 2-3 options. - Keep clarifying questions warm and conversational. - Example: If asked "Can I bring my child?" → respond "I'd love to help! Which area are you asking about? Most of the resort is family-friendly, but our spa is for guests 16 and above." ``` **Why this is critical:** AI models have a natural tendency to generate an answer rather than admit uncertainty. Without explicit clarification rules, your receptionist will guess rather than ask — and a confident wrong answer is far worse than a simple follow-up question. Rules for how to speak technical information aloud. This section prevents your receptionist from awkwardly reading symbols and characters. ``` When speaking information aloud: - Email: Spell it naturally — "info at seaside resort dot com" - Phone: Group digits — "plus ninety, two three two, one two three, four five six seven" - Times: Use natural language — "two in the afternoon" not "fourteen hundred hours" - URLs: Don't dictate — say "visit our website and look for the spa section" - Prices: Say "around two hundred euros per night" not "199.99 EUR" ``` What to do when your receptionist can't help. ``` When you don't have the answer: - Say "I'm not certain about that specific detail" - Offer an alternative: "Would you like me to provide our reception's direct number so they can help you with that?" - NEVER just say "I don't know" and stop — always offer a next step - For complex requests (reservations, complaints), offer to connect with human staff ``` Ensure your receptionist always provides specific contact details instead of vague directions. ``` Contact information: - NEVER say "contact reception" or "ask the front desk" - ALWAYS provide the specific number: +90 232 XXX XXXX - Or email: reservations@seasideresort.com - For urgent requests: "You can reach our reception directly at..." ``` *** ## Handling Complex Information by Voice One of the biggest challenges in voice communication is conveying information that's easy in text but difficult when spoken. Here's how to handle common scenarios. ### Numbers, Times & Contact Details * [info@hotel.com](mailto:info@hotel.com) * +90 232 123 4567 * 14:00 * €199/night * [www.hotel.com/spa/treatments](http://www.hotel.com/spa/treatments) * "info at hotel dot com" * "plus ninety, two three two, one two three, four five six seven" * "two in the afternoon" * "around two hundred euros per night" * "visit our website and look for the spa section" Add specific normalization rules to your prompt for information that comes up frequently. If guests often ask for your email or phone number, include exactly how your receptionist should say it. ### Handling Lists (The Offer-Then-Drill-Down Pattern) Long lists are the enemy of voice communication. By the time your receptionist finishes listing 6 restaurants, the caller has forgotten the first two. Use the **offer-then-drill-down** pattern instead. "We have Terrace Bistro for Mediterranean cuisine open from 7 to 11 PM, Blue Lagoon for seafood open from 6 to 10 PM, Sakura for Japanese open from 7 to 10 PM, Olive Garden for Italian open from 6:30 to 10:30 PM, and Beach Bar for casual dining open all day." *The caller has forgotten Terrace Bistro by the time you reach Beach Bar.* "We have five restaurants — Mediterranean, seafood, Japanese, Italian, and a casual beach bar. Our most popular is the Mediterranean terrace restaurant. Would you like to hear more about any of them?" *Summarize, highlight one, offer to go deeper.* **The pattern works in three steps:** 1. **Summarize** — Give the overview ("We have five restaurants") 2. **Highlight** — Mention the most popular or relevant one 3. **Offer** — Let the caller choose what to explore ("Would you like to hear more?") This same pattern works for room types, spa treatments, activities, and any situation with multiple options. ### Handling Silence In a phone call, silence is uncomfortable. If your receptionist needs a moment to find information, it should never go quiet. Add filler phrases to your prompt. **Good filler phrases:** * "Let me check that for you..." * "One moment while I look that up..." * "Hmm, great question — let me see..." * "I want to give you accurate information, let me look..." *** ## Voice Personality Design Your receptionist's personality should match your hotel's brand. Here's how to think about personality along different dimensions. ### Personality Dimensions | Dimension | Budget / Casual | Mid-Range | Luxury / Premium | | -------------- | ------------------------ | ------------------------ | ------------------------------------- | | **Warmth** | Friendly, upbeat | Professional, warm | Sophisticated, gracious | | **Pace** | Normal to slightly quick | Measured, clear | Deliberate, unhurried | | **Formality** | "Hey there!" | "Hello, how can I help?" | "Good evening, how may I assist you?" | | **Enthusiasm** | High energy | Balanced | Calm confidence | | **Vocabulary** | Simple, everyday | Clear, professional | Refined, elegant | **Example personality statements:** * **Beach resort:** "Warm, relaxed, and genuinely enthusiastic — like a friendly lifeguard who knows everything about the resort." * **Business hotel:** "Professional, efficient, and courteous — like a well-trained executive assistant." * **Boutique hotel:** "Personal, charming, and knowledgeable — like a local friend sharing their favorite hidden gems." * **Luxury resort:** "Gracious, composed, and attentive — like a personal butler who anticipates every need." ### Voice Speed and Style Your receptionist's speaking speed should match your brand. You can configure this in the [Voice Agent](/admin-panel/voice-agent) settings. | Hotel Type | Recommended Speed | Why | | ------------ | ------------------------------------- | --------------------------------- | | Beach/Resort | 0.9x (slightly slower) | Relaxed, vacation mood | | Business | 1.0x-1.1x (normal to slightly faster) | Efficient, respects caller's time | | Luxury | 0.9x (slightly slower) | Unhurried, premium feel | | Budget | 1.0x (normal) | Clear and straightforward | *** ## Response Length: The 2-3 Sentence Rule This is the single most important rule in voice prompting. Every response your receptionist gives should be **2-3 sentences maximum**. This is not a suggestion — it's a hard rule. **Why?** Research across all major voice AI platforms consistently shows that responses beyond 3 sentences cause callers to: * Lose track of the information * Interrupt the AI mid-sentence * Feel frustrated and hang up * Miss the most important details "Our spa is located on the lower level of the main building. It's open from 9 AM to 8 PM every day. We offer a full range of treatments including Swedish massage, deep tissue massage, aromatherapy, hot stone therapy, and facial treatments. Prices start from 80 euros for a 30-minute treatment. I recommend booking in advance as our spa is quite popular, especially during peak season." "Our spa is open from 9 AM to 8 PM daily, with a range of massage and facial treatments. Our most popular is the deep tissue massage. Would you like me to tell you more about specific treatments or help you plan a visit?" Add this line to your prompt: **"Keep every response to a maximum of 2-3 sentences. If the caller wants more detail, they will ask."** *** ## Training Materials Search: The #1 Technical Issue The most common problem with voice receptionists is this: the receptionist searches your Training Materials, finds the answer, and then **ignores it** — saying "I'm not certain" instead of sharing the information. This happens for two reasons: (1) the voice prompt doesn't explicitly tell the receptionist to use search results, and (2) AI models have a natural tendency to generate responses from their general knowledge rather than trusting retrieved information. Without explicit instructions, your receptionist may "feel more confident" guessing than using the accurate data from your documents. ### The Fix: Always Include This Section Add this to every voice prompt. Note: In the prompt text, we use the term "knowledge base" because that's the term your receptionist's AI engine understands — it refers to the same Training Materials you upload on the [Documents](/admin-panel/documents) page. ``` ## Using Your Knowledge Base (CRITICAL) When you search the knowledge base, you receive accurate information from official hotel documentation. Rules: - If your search returns information → ALWAYS use it in your response - If search returns room types, prices, or policies → share those specific details with the caller - Only say "I'm not certain" when search returns NO relevant results - Never ignore or dismiss search results that contain useful information Important: The knowledge base contains verified hotel information. Trust these results and incorporate them naturally into your spoken responses. ``` ### How Training Materials Search Works | Scenario | What Your Receptionist Should Do | | ---------------------------------- | ------------------------------------------------------ | | Search returns a clear answer | Use the information directly in the response | | Search returns partial information | Use what's available, acknowledge any gaps | | Search returns multiple options | Summarize and use the offer-then-drill-down pattern | | Search returns nothing relevant | Only then say "I'm not certain" and offer alternatives | *** ## NEVER Rules: Your Safety Net NEVER rules are the most powerful tool in voice prompting. They create hard boundaries that your receptionist follows consistently. ### How to Write Effective NEVER Rules Every NEVER rule should be **paired with an alternative action**. A rule that only says "don't do X" leaves your receptionist unsure of what to do instead. "NEVER say 'contact reception.'" *Your receptionist knows what not to do, but has no alternative.* "NEVER say 'contact reception.' Instead, always provide our direct number: +90 232 XXX XXXX or email: [reservations@hotel.com](mailto:reservations@hotel.com)" *Now your receptionist has a clear action to take instead.* ### Common NEVER Rules for Hotels ``` NEVER say "contact reception" or "ask the front desk" → Instead, provide the specific phone number or email NEVER make up information or guess when unsure → Instead, say "I'm not certain" and offer the reception number NEVER quote exact room prices → Instead, say "prices vary by season, I can connect you with our reservations team" NEVER read long lists of items → Instead, summarize and offer to go into detail NEVER describe the hotel as "adults-only" (if family-friendly) → Instead, say "We welcome guests of all ages" NEVER compare with competitor hotels → Instead, focus on your hotel's own features NEVER go silent for more than 2 seconds → Instead, use a filler like "Let me check that for you" ``` *** ## The Complete Voice Prompt Template Here's a field-tested template you can adapt for your hotel. Replace everything in `[brackets]` with your hotel's information. ``` You are the voice receptionist for [HOTEL NAME], a [HOTEL TYPE] located in [LOCATION]. ## Personality [WARM/PROFESSIONAL/CASUAL], genuine, and helpful — like a [FRIENDLY CONCIERGE/LOCAL FRIEND/PERSONAL BUTLER] who loves helping guests discover everything the hotel offers. ## Goal Help callers with questions about the hotel, facilities, services, and local area. Provide accurate, helpful information using your knowledge base. Make every caller feel welcomed and valued. ## Critical Policies - NEVER describe the hotel as [INCORRECT DESCRIPTION] - NEVER make up information — if unsure, say so honestly - NEVER quote specific room prices — say "prices vary by season, I can connect you with our reservations team" - NEVER compare with other hotels - NEVER say "contact reception" — always provide the specific number or email ## Tone - Speak naturally, as if having a friendly conversation - [WARM AND RELAXED / PROFESSIONAL AND EFFICIENT / GRACIOUS AND REFINED] - Use a [CASUAL / BALANCED / FORMAL] speaking style ## Greeting "Hello, welcome to [HOTEL NAME]. How may I help you today?" ## Affirmations Use these naturally throughout the conversation: - "Of course" - "I understand" - "Great question" - "Let me check that for you" - "Absolutely" ## Speaking Style - Keep every response to 2-3 sentences maximum - If the caller wants more detail, they will ask - Never read long lists — summarize and offer details - Use natural pauses between thoughts ## Using Your Knowledge Base (CRITICAL) When you search the knowledge base, you receive accurate information from official hotel documentation. - If search returns results → ALWAYS use them in your response - If search returns room types/prices/policies → share those details - Only say "I'm not certain" when search returns NO results - NEVER ignore search results that contain useful information ## Clarification Rules One clarifying question is always better than one wrong answer. - If a question is ambiguous, DO NOT guess — ask briefly with 2-3 specific options - Keep clarifying questions warm and conversational - NEVER fabricate details to fill gaps in understanding ## Character Normalization - Email: "info at [hotel] dot com" - Phone: Group digits naturally — "plus ninety, two three two..." - Times: "two in the afternoon" not "fourteen hundred" - URLs: "visit our website" — don't try to dictate web addresses - Prices: "around [amount]" — round to natural numbers ## When You Don't Have the Answer - Say "I'm not certain about that specific detail" - Offer an alternative: "Would you like our reception's direct number? They can help you with that right away." - NEVER just say "I don't know" and stop - For complex requests, offer to connect with human staff ## Contact Information - Reception: +90 [XXX] XXX XXXX - Email: [reservations@hotel.com] - For reservations: [specific contact] ``` *** ## Common Mistakes (and How to Fix Them) **The problem:** Your receptionist gives 4-5 sentence answers, overwhelming callers. **The fix:** Add this line near the top of your prompt: "Keep every response to a maximum of 2-3 sentences. If the caller wants more detail, they will ask." **The problem:** When asked about restaurants, your receptionist reads all 5 names with hours and descriptions. **The fix:** Add: "Never read lists longer than 3 items. Instead, summarize the category and offer the most popular option. Ask if the caller wants to hear more." **The problem:** The knowledge base returns relevant information, but the receptionist ignores it. **The fix:** Add the complete "Using Your Knowledge Base" section from the template above. This is the most critical fix for voice agents. **The problem:** The receptionist goes silent while searching for information. **The fix:** Add filler phrases: "Use phrases like 'Let me check that for you' or 'One moment please' when you need time to find information. Never go silent." **The problem:** When asked about booking, the receptionist tries to spell out "w-w-w-dot-hotel-dot-com-slash-reservations." **The fix:** Add character normalization rules. For URLs: "Don't dictate web addresses. Instead, say 'you can find that on our website' or offer to provide the direct phone number." **The problem:** Responses sound scripted and mechanical, not like a real person. **The fix:** Strengthen the personality section. Instead of "Professional and helpful" try "Warm and genuine — like a friendly concierge who truly enjoys helping guests." Add varied affirmation phrases to make responses more natural. **The problem:** When asked "Can I bring my child?", the receptionist assumes a context and gives a wrong answer. **The fix:** Add clarification rules: "If a question is ambiguous, ask a brief clarifying question with 2-3 options instead of guessing." **The problem:** You wrote "don't quote prices" but the receptionist still shares exact rates. **The fix:** Upgrade to "NEVER" language and move the rule near the top of the prompt. "NEVER quote specific room prices — say 'prices vary by season, I can connect you with our reservations team for the most current rates.'" *** ## Testing Your Voice Prompt After writing your prompt, test it with these scenarios. You should test by actually calling your receptionist using the [Voice Agent](/admin-panel/voice-agent) page. ### Essential Test Calls Ask: "What time is breakfast?" — Should give a clear, short answer using knowledge base results. Ask: "What restaurants do you have?" — Should summarize (not list everything) and offer to go deeper. Ask: "What's the weather going to be like tomorrow?" — Should acknowledge it can't help with that and offer an alternative. Ask: "What's your cheapest room?" — Should not quote exact prices if that's a NEVER rule. Ask: "Can I bring my child?" — Should ask a clarifying question, not guess. Ask: "How do I make a reservation?" — Should provide specific phone number or email, never just say "contact reception." Ask several questions in a row — Every response should stay within 2-3 sentences. **Test in all languages** your receptionist supports. A prompt that works perfectly in English might behave differently in Turkish or German. Test at least 3-4 questions in each supported language. *** ## Quick Reference Card | Rule | Details | | ----------------------- | ---------------------------------------------- | | **Max response length** | 2-3 sentences per response | | **Greeting** | Under 15 words, include hotel name | | **NEVER rules** | Always pair with an alternative action | | **Training Materials** | Always include the "CRITICAL" usage section | | **Lists** | Summarize → Highlight one → Offer to elaborate | | **Silence** | Use filler phrases, never go quiet | | **Numbers** | Speak naturally: "two in the afternoon" | | **Emails** | "info at hotel dot com" | | **URLs** | "visit our website" — don't dictate | | **Prices** | Round to natural numbers: "around 200 euros" | | **When unsure** | Say so honestly + offer alternative | | **Critical policies** | Place near the top of your prompt | | **Prompt length** | Keep under 500 words for best performance | **Remember:** Your voice prompt defines **behavior**, not **facts**. Restaurant hours, room types, spa treatments — all of that belongs in your [Training Materials](/knowledge-base/overview). The prompt should tell your receptionist *how* to communicate, not *what* to say about specific topics. # Chat Quality Evaluation Source: https://recepai.ai/docs/quality/chat-evaluation How your receptionist automatically evaluates every chat conversation — and helps you find exactly what to improve. ## Why This Changes Everything Traditional hotel quality assurance works like this: a manager randomly selects 10-20 conversations per week, reads through them, and tries to spot problems. At best, you review **2-3% of all conversations.** The rest? You hope they went well. With RecepAI's Chat Quality Criteria, your receptionist evaluates **100% of conversations** — automatically, after every single chat. No sampling, no guessing, no conversations falling through the cracks. **The real power isn't just grading conversations.** It's the "Needs Training" insight — when your receptionist couldn't answer something because the information wasn't in your Training Materials, the system tells you exactly what topic was missing. One document upload can fix dozens of future conversations at once. This is the **"Chat Quality Criteria"** section on your [Conversation Agent](/admin-panel/conversation-agent) page. *** ## How It Works On your [Conversation Agent](/admin-panel/conversation-agent) page, you create criteria that describe what a successful conversation looks like for your hotel. After each chat ends, your receptionist's evaluation engine analyzes the full conversation against every criterion you've defined. This happens automatically — no action needed from you. Open the [History](/admin-panel/history) page, Chat tab. Each conversation now shows an evaluation status — you can immediately see what went well and what needs attention. When a conversation fails because your receptionist didn't have the right information, the system identifies the exact missing topics. This turns a vague "something went wrong" into a specific "you need to add spa pricing information." **How fast does this happen?** Evaluations run shortly after each conversation ends. By the time you check the History page, results are typically already there. *** ## Setting Up Chat Quality Criteria Go to [Conversation Agent](/admin-panel/conversation-agent) and scroll to the **"Chat Quality Criteria"** section. ### Step 1: Click "Add Criteria" Click the **"Add Criteria"** button to open the criteria editor. ### Step 2: Write a Clear Name The name should immediately tell you what this criterion measures. Keep it specific and action-oriented. ### Step 3: Write the Success Description This is the most important part. The success description tells the evaluation engine exactly what to look for in the conversation. The more specific you are, the more accurate the evaluation. **Think of the success description as instructions for a quality auditor.** If you hired someone to check this conversation, what would you tell them to look for? Write that. *** ## Example Criteria (5 Tested Templates) These are field-tested criteria that work well for most hotels. Use them as starting points and customize the descriptions to match your hotel's specific policies. **Name:** Guest Question Answered **Success Description:** The guest's primary question received a specific, accurate answer based on the hotel's Training Materials. The receptionist did not say "I don't know" without offering an alternative, and did not redirect the guest to "call reception" without providing a specific phone number or email. **Why this works:** This is your baseline criterion — it catches the most common failure: the guest asking something and not getting a useful answer. The description is specific about what "answered" means (not just acknowledging the question, but providing actual information). **Name:** Contact Information Provided **Success Description:** When the conversation involved a request the receptionist couldn't fulfill directly (booking, special request, complaint), the receptionist provided a specific contact method — a phone number, email address, or booking link. Generic phrases like "contact the hotel" or "reach out to us" without specific details count as failure. **Why this works:** One of the most frustrating guest experiences is being told to "contact reception" without a number. This criterion ensures every dead-end has a clear next step. **Name:** Reservation Inquiry Handled **Success Description:** If the guest asked about making, modifying, or canceling a reservation, the receptionist provided relevant information (availability guidance, rate context, or booking instructions) and offered a direct way to proceed — such as a reservation email, phone number, or booking link. **Why this works:** Reservation inquiries are high-value conversations. This criterion ensures your receptionist converts these opportunities instead of losing them. **Name:** Appropriate Language Used **Success Description:** The receptionist responded in the same language the guest used, or in a language the guest explicitly requested. Responses were professional, warm, and free of overly technical jargon. The tone matched a professional hotel receptionist — not overly casual, not stiff. **Why this works:** Multi-language hotels need to verify their receptionist is responding in the correct language. This also catches tone issues that might not be obvious from a quick glance. **Name:** Follow-Up Offered **Success Description:** At the end of the conversation, the receptionist asked if there was anything else the guest needed help with, or proactively suggested a related service or piece of information that might be useful based on the context of the conversation. **Why this works:** A great receptionist doesn't just answer the question — they anticipate what the guest might need next. This criterion measures that proactive hospitality touch. **Common mistake: Writing vague criteria.** A criterion like "Good conversation quality" gives the evaluation engine nothing specific to measure. Be precise — instead of "Handle complaints well," write "When a guest expresses dissatisfaction, the receptionist acknowledged the issue, apologized, and offered a specific resolution or escalation path." *** ## Understanding Evaluation Results After your receptionist evaluates a conversation, it assigns one of these statuses. You can see them on the [History](/admin-panel/history) page under the Chat tab. ### Status Overview | Status | What It Means | What to Do | | ------------------ | -------------------------------------------------------- | ----------------------------------------------------------------------------- | | **Successful** | All applicable criteria were met | Nothing — your receptionist handled this well | | **Needs Training** | Failed because specific knowledge was missing | Add the missing topics to your [Training Materials](/knowledge-base/overview) | | **Failed** | Criteria not met for other reasons | Review the conversation — might need a prompt adjustment | | **Partial** | Some criteria passed, some didn't | Check which ones failed and address those specifically | | **Pending** | Not yet evaluated | Results will appear shortly | | **Skipped** | Conversation was too short to evaluate meaningfully | Normal for very brief exchanges (single question) | | **Trained** | You reviewed the failure and added the missing knowledge | No further action — this conversation has been addressed | ### The Key Distinction: "Needs Training" vs "Failed" This is the most important thing to understand about the evaluation system: Your receptionist **tried** to answer but **didn't have the information.** The system identified specific missing topics. **Action:** Go to [Training Materials](/admin-panel/documents) and upload documents covering the missing topics. This is the **highest-impact improvement** you can make. **Example:** Guest asked about spa prices → Receptionist couldn't answer → Missing topic: "spa treatment prices" → Upload your spa menu. The criteria weren't met, but **not because of missing knowledge.** It could be a tone issue, missing follow-up, or the receptionist not following your prompt instructions. **Action:** Review the conversation transcript and consider adjusting your [chat prompt](/prompt-engineering/chat-prompts). **Example:** Guest asked about check-in time → Receptionist answered correctly but didn't offer early check-in option → Prompt adjustment needed. **Why this distinction matters from an AI perspective:** Most AI evaluation systems just give you a pass/fail. RecepAI goes further by analyzing *why* something failed. When the failure is due to missing information (a "knowledge gap"), the system identifies the exact topics — turning evaluation into a specific, actionable improvement plan. This is the difference between "your receptionist failed 15 conversations this week" and "your receptionist needs spa pricing, pool schedule, and airport transfer information." *** ## The Training Workflow When you see "Needs Training" conversations, here's the complete workflow: Go to [History](/admin-panel/history), Chat tab, and use the quality filter dropdown to show only "Needs Training" conversations. These are your priority — each one represents a specific knowledge gap. The detail panel shows the full conversation, evaluation results for each criterion, and — most importantly — the **missing knowledge topics** section. This tells you exactly what information was missing. Go to [Training Materials](/admin-panel/documents) and upload a document (or update an existing one) that covers the missing topics. For example, if "spa treatment prices" was missing, upload your spa menu. Back in History, click **"Mark as Trained"** on the conversation. This changes its status from "Needs Training" to "Trained" — clearing it from your training queue and updating your dashboard count. **One document can fix many conversations — past and future.** If 8 conversations this week failed because of missing spa information, uploading one comprehensive spa document resolves the underlying issue for all of them. But more importantly, it also prevents every *future* conversation about that topic from failing. This is why knowledge gap detection is so powerful — you're not just fixing individual conversations, you're permanently improving your receptionist's capability. Look for patterns before fixing individual conversations. *** ## Writing Better Criteria: The AI Perspective Your evaluation is only as good as your criteria descriptions. Here's what actually matters when the evaluation engine reads your criteria: ### Be Specific About What "Success" Looks Like The evaluation engine reads the entire conversation transcript and checks it against your description. The more specific your description, the more consistent and accurate the evaluation. **Why specificity matters so much:** Under the hood, evaluation is a classification task — the engine must decide "did this conversation meet this criterion or not?" When the criterion is vague ("be helpful"), the classification boundary is fuzzy and the engine might classify the same conversation differently each time. When the criterion is specific ("the guest received a factual answer and a follow-up was offered"), the boundary is sharp and evaluations become consistent and reliable. Think of it like giving a hotel inspector a checklist vs. telling them "check if things are good." | Approach | Description | Accuracy | | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------- | | **Vague** | "The guest was helped" | Low — almost anything counts as "help" | | **Better** | "The guest's question was answered" | Medium — but what counts as "answered"? | | **Specific** | "The guest received a specific, factual answer from Training Materials. If the receptionist couldn't answer, they provided a phone number or email for follow-up." | High — clear criteria for both success and acceptable failure | ### One Criterion, One Thing Each criterion should measure exactly one aspect of conversation quality. If you combine multiple conditions, a conversation that excels at one but fails at another gets a confusing result. * **Too broad:** "Guest was greeted properly and their question was answered and follow-up was offered" * **Focused:** Three separate criteria — Greeting, Question Answered, Follow-Up Offered ### "Not Applicable" Is Smart, Not Lazy Some criteria simply don't apply to every conversation. If a guest only asks "What time is checkout?" — the "Reservation Handled" criterion isn't relevant. The evaluation engine is smart enough to recognize this and marks it as "Not Applicable" rather than forcing a pass or fail judgment. This prevents false failures and keeps your statistics meaningful. Without this option, a hotel with 5 criteria would see artificially inflated failure rates — conversations that were perfectly fine would be marked as "Failed" simply because a criterion wasn't relevant. The "Not Applicable" result was specifically designed to solve this problem. *** ## Dashboard Integration Your [Dashboard](/admin-panel/dashboard) shows a training opportunities count — the number of conversations that need your attention this month. This count only includes **"Needs Training" conversations** (failures with identified knowledge gaps), not all failures. Click this number to jump directly to the filtered History view showing only actionable items. *** ## Best Practices Begin with the most important criteria for your hotel. You can always add more later. Too many criteria at the start makes it harder to focus on what matters most. Set aside 15-30 minutes once a week to review evaluation results. Daily checking leads to reactive fixes instead of pattern-based improvements. See our [Improving Responses](/quality/improving-responses) guide for a complete weekly routine. If you see the same missing topic appearing across multiple conversations, that's one fix — not multiple. Upload one comprehensive document and it resolves all future occurrences. You have up to 2,000 characters per description, but longer doesn't mean better. The evaluation engine works best with clear, concise instructions — just like your receptionist's prompt. A well-written 200-character description often outperforms a rambling 1,500-character one. A criterion that passes 100% of the time isn't measuring anything useful. A criterion that fails 100% might be poorly written or measuring something your receptionist can't control. Both deserve a rewrite. # Improving Response Quality Source: https://recepai.ai/docs/quality/improving-responses A systematic approach to making your receptionist better over time. Your receptionist can always improve. The [Chat Quality Criteria](/quality/chat-evaluation) and [Voice Guest Satisfaction Criteria](/quality/voice-evaluation) tell you what's happening — this guide tells you what to **do about it.** Here's a systematic approach to continuously increase the quality of guest interactions. ## The Weekly Review Routine Set aside **15-30 minutes per week**: Open [History](/admin-panel/history) and filter to conversations with "Needs Training" or "Failed" status. Long conversations often indicate the guest isn't getting the answer they need. Review these first. Are multiple guests asking the same unanswered question? That's your priority to fix. Make one focused improvement per week. Small, consistent changes compound over time. Ask the same questions that previously failed. Verify the answers improved. ## Common Issues and Fixes **Cause:** Information missing from Training Materials. **Fix:** Add a document covering that topic. See the [Document Preparation Guide](/knowledge-base/document-preparation). **Cause:** Document not updated when things changed. **Fix:** Update the document with current information. If using Notion, re-sync the page. **Cause:** Prompt doesn't specify response length. **Fix:** Add to your "How they should chat" field: "Keep responses concise — 2-3 sentences for simple questions." For voice, add to your "How they should talk" field: "Keep every response to 2-3 sentences maximum." **Cause:** Prompt lacks personality guidance. **Fix:** Add personality traits: "Be warm and conversational, like a friendly concierge who enjoys helping guests." See the [Chat Prompt](/prompt-engineering/chat-prompts) or [Voice Prompt](/prompt-engineering/voice-prompts) guides for personality templates. **Cause:** Knowledge gap + no instruction about uncertainty. **Fix:** Add a NEVER rule to your prompt: "NEVER make up information. If you're not certain about something, say so honestly and provide the specific phone number or email for the guest to follow up." **Cause:** Prompt is too long or contradictory. **Fix:** Simplify your prompt. Remove conflicts. Focus on the 10-15 most important rules. Keep chat prompts under 10,000 characters and voice prompts under 5,000. See [Advanced Tips](/prompt-engineering/advanced-tips) for prompt length guidance. ## Quick Wins These small changes often have the biggest impact: 1. **Add your top 10 FAQ** — Covers the majority of guest questions 2. **Include specific times** — Change "Open daily" to "Open 09:00-22:00" 3. **Add contact alternatives** — "For reservations, call extension 100 or email [reservations@hotel.com](mailto:reservations@hotel.com)" 4. **Include seasonal info** — "Pool heated November through March" 5. **Add specific locations** — "Located on the ground floor, next to the lobby" # Voice Quality Evaluation Source: https://recepai.ai/docs/quality/voice-evaluation How your receptionist automatically evaluates every phone call — so you know exactly how your guests experience voice interactions. ## Why This Changes Everything Before AI evaluation, checking voice call quality meant one thing: someone had to **listen to the calls.** For a hotel receiving 50 calls a day, that's hours of work — and even then, you'd only sample a fraction. Most calls were never reviewed. With RecepAI's Guest Satisfaction Criteria, your receptionist evaluates **every single call** — automatically, the moment it ends. You get structured results for 100% of voice interactions, not a random 5% sample. **Voice evaluation is uniquely valuable** because phone calls leave no written record for guests. A chat guest can scroll back and re-read — a phone guest relies entirely on what they heard and remember. If something goes wrong on a call, you'd never know without evaluation. This system catches problems that would otherwise be completely invisible. This is the **"Guest Satisfaction Criteria"** section on your [Voice Agent](/admin-panel/voice-agent) page. *** ## How It Works On your [Voice Agent](/admin-panel/voice-agent) page, you create criteria that describe what a successful phone call looks like for your hotel. After each voice call ends, the conversation transcript is analyzed against every criterion you've defined. This happens automatically — the evaluation engine reviews the full conversation and checks each criterion independently. Open the [History](/admin-panel/history) page, Voice tab. Each call shows evaluation results — you can see at a glance which calls met your standards and which need attention. **Voice evaluation analyzes the transcript, not the audio.** Your receptionist's voice AI generates a transcript of every call, and the evaluation runs against this text. This means evaluation catches *what* was said — content accuracy, completeness, whether the right information was shared — but not *how* it sounded (tone of voice, speaking pace, pronunciation quality, emotional warmth). For voice quality tuning beyond what evaluation can measure, use the recommendations in your [Voice Prompt](/prompt-engineering/voice-prompts) guide and listen to a few calls periodically. **What this means for writing criteria:** Write your criteria about the *content* of the conversation, not the *delivery*. "The receptionist provided the correct check-in time" works well. "The receptionist sounded friendly" won't evaluate reliably because the evaluation engine reads text, not listens to audio. If you care about delivery quality (and you should), combine evaluation results with occasional manual call reviews. *** ## Setting Up Guest Satisfaction Criteria Go to [Voice Agent](/admin-panel/voice-agent) and scroll to the **"Guest Satisfaction Criteria"** section. ### Step 1: Click "Add Criteria" Click the **"Add Criteria"** button to open the criteria editor. ### Step 2: Write a Clear Name The name should be short and descriptive — up to **50 characters.** This is what you'll see in evaluation results, so make it immediately recognizable. ### Step 3: Write the Success Description Describe what success looks like for this criterion — up to **500 characters.** Be specific about what the evaluation engine should look for in the call transcript. You can define up to **10 criteria** per voice agent. **Voice criteria should account for the nature of phone calls.** Callers can't "scroll back" — so criteria about providing clear, memorable answers are more important than in chat. Think about what a guest would remember after hanging up. *** ## Example Criteria (5 Tested Templates) These criteria are designed specifically for voice interactions. They account for the unique challenges of phone calls — limited attention span, no visual aids, and the inability to re-read information. **Name:** Guest Question Answered **Success Description:** The caller's primary question received a clear, specific answer. The receptionist did not leave the question unanswered or give a vague response like "I'm not sure" without offering an alternative way to get the information. **Why this works for voice:** On a phone call, a vague answer is worse than in chat — the guest can't re-read or click a link. This criterion ensures every caller gets a concrete answer or a clear next step. **Name:** Contact Details Provided **Success Description:** When the caller needed to take action (make a reservation, reach a department, send an email), the receptionist provided a specific phone number, email address, or clear instruction — spoken slowly enough to be noted down. **Why this works for voice:** Sharing contact information on a call is tricky — the guest needs to write it down in real time. This criterion catches cases where the receptionist rattled off a number too quickly or used "contact us" without specifics. **Name:** Conversation Kept Concise **Success Description:** The receptionist's responses were brief and focused — no longer than 2-3 sentences per turn. Information was summarized rather than listed exhaustively. When multiple options existed, the receptionist offered the most relevant one first and asked if the caller wanted to hear more. **Why this works for voice:** Long responses on a phone call cause callers to lose focus or interrupt. This criterion ensures your receptionist uses the "offer-then-drill-down" pattern recommended in the [Voice Prompt](/prompt-engineering/voice-prompts) guide. **Name:** Caller Acknowledged Satisfaction **Success Description:** The caller expressed satisfaction or acknowledgment during or at the end of the call — through phrases like "thank you," "that's helpful," "great," or similar positive feedback. The caller did not express frustration, confusion, or dissatisfaction. **Why this works for voice:** Unlike chat, phone calls have real-time verbal cues. A "thank you" or "perfect" is a strong signal that the call went well. Conversely, "I don't understand" or an abrupt hang-up signals a problem. **Name:** Proper Greeting and Closure **Success Description:** The receptionist opened the call with a professional greeting that included the hotel name, and closed the call by asking if there was anything else the caller needed before saying goodbye warmly. **Why this works for voice:** First and last impressions matter most on phone calls. A professional greeting sets expectations, and a proper closure ensures the caller didn't hang up with unresolved questions. **Voice criteria must account for short calls.** Some callers get their answer in 20 seconds and hang up. A criterion like "Caller expressed satisfaction" would fail on these calls — even though the caller was perfectly happy. Write your descriptions to handle brief, efficient calls as well as longer ones. *** ## Understanding Evaluation Results After each voice call, the evaluation engine checks the transcript against your criteria. You can see results on the [History](/admin-panel/history) page under the Voice tab. ### Status Overview | Status | What It Means | What to Do | | ----------- | ------------------------------------------------------ | ---------------------------------------------------------------------------------------------------- | | **Success** | The criterion was clearly met during the call | Nothing — your receptionist handled this well | | **Failure** | The criterion was clearly not met | Review the call transcript and consider improvements | | **Unknown** | The call didn't provide enough information to evaluate | Usually means a very short call, disconnection, or the criterion simply wasn't relevant to this call | ### What "Unknown" Really Means The "Unknown" result deserves special attention. It occurs when: * **The call was too short** — A caller who immediately said "wrong number" and hung up can't be meaningfully evaluated * **The criterion wasn't relevant** — A "Reservation Handled" criterion on a call about pool hours * **The transcript was unclear** — Technical issues that resulted in a partial or garbled transcript **From an AI perspective, "Unknown" is actually the honest answer.** A binary pass/fail system would force a judgment even when there's not enough evidence — leading to misleading results. The three-outcome model (success/failure/unknown) gives you cleaner, more trustworthy data. **Short call bias:** Hotels typically receive a mix of very short calls (10-30 seconds — wrong number, quick single question, immediate hang-up) and substantive calls (2+ minutes). Short calls will almost always return "Unknown" for most criteria, and that's correct. Don't worry about a high "Unknown" rate if your hotel gets many brief calls — focus on the success/failure ratio of substantive conversations instead. If you see a high percentage of "Unknown" on a specific criterion even for longer calls, that criterion might be too narrow or doesn't apply to most of your call types. *** ## Voice vs. Chat Evaluation: Key Differences If you're also using [Chat Quality Criteria](/quality/chat-evaluation), here's how voice evaluation differs: | Aspect | Chat Evaluation | Voice Evaluation | | ------------------------------ | ---------------------------------------------------------- | ------------------------------------------------ | | **Where to set up** | [Conversation Agent](/admin-panel/conversation-agent) page | [Voice Agent](/admin-panel/voice-agent) page | | **Section name** | "Chat Quality Criteria" | "Guest Satisfaction Criteria" | | **Result statuses** | Success, Failed, Needs Training, Partial, Pending | Success, Failure, Unknown | | **Knowledge gap detection** | Yes — identifies missing Training Materials topics | Not available — focus is on conversation quality | | **"Mark as Trained" workflow** | Yes — clears actionable training items | Not applicable | | **Description limit** | 2,000 characters | 500 characters | | **Criteria limit** | No fixed limit | 10 criteria maximum | **Why the differences?** Chat evaluation was built specifically for RecepAI with knowledge gap analysis — it understands your Training Materials and can tell you exactly what's missing. Voice evaluation focuses on the conversation experience itself — how well the call went from the guest's perspective. Both are valuable; they just measure different things. **A practical tip:** If the same topic (e.g., spa information) fails in both chat and voice evaluations, it's almost certainly a Training Materials gap — upload the missing document and both channels improve. If something only fails in voice, the issue is likely in how the information is delivered verbally, not what information is available. In that case, adjust your [voice prompt](/prompt-engineering/voice-prompts) rather than your Training Materials. *** ## Improving Voice Quality Based on Results When evaluation results reveal issues, here's where to make changes: If your receptionist frequently can't answer questions on calls, the information is likely missing from your knowledge base. Go to [Training Materials](/admin-panel/documents) and add documents covering the missing topics. **Tip:** Voice calls tend to be about urgent, practical topics — directions, hours, availability. Prioritize adding this operational information. If the "Conversation Kept Concise" criterion keeps failing, your [voice prompt](/prompt-engineering/voice-prompts) may not emphasize brevity strongly enough. Add or strengthen the 2-3 sentence rule in your "How they should talk" field. If callers frequently express confusion, your receptionist might be sharing too much information at once. Update your voice prompt to use the "offer-then-drill-down" pattern: give the most relevant answer first, then ask if the caller wants more details. A high percentage of "Unknown" results usually means your criteria are too specific for the types of calls you receive. Consider broadening the criteria descriptions or removing criteria that only apply to rare call types. If calls are ending before your receptionist can properly help, the issue might be the greeting (too long, too robotic) or overall pacing. Listen to a few call recordings and compare with your voice prompt settings. *** ## Best Practices Begin with the most universal criteria: Guest Question Answered, Contact Details Provided, and Proper Greeting/Closure. After reviewing a week of results, add criteria that target specific issues you noticed. Remember: the evaluation engine reads the call transcript, not listens to the audio. Criteria about "tone of voice" or "speaking speed" won't be evaluated accurately. Focus on what was said, not how it sounded. Your hotel likely receives different types of calls — quick FAQ, detailed reservation inquiries, complaints, directions. Write criteria descriptions that make sense across these different scenarios, or accept that some criteria will return "Unknown" for certain call types. Evaluation tells you what's happening. To fix issues, combine evaluation insights with the [Voice Prompt Testing Checklist](/prompt-engineering/voice-prompts#testing-your-voice-prompt). Test changes, then watch the next week's evaluation results to verify improvement. If the same topic (e.g., spa information) fails in both chat and voice evaluations, it's definitely a Training Materials gap. If it only fails in voice, the issue might be how the information is delivered verbally — a prompt adjustment rather than a knowledge gap. # What's New Source: https://recepai.ai/docs/updates Latest updates and improvements to RecepAI Stay up to date with every improvement we make to your AI receptionist. This page is updated every time we ship something new. ## One Quick Question — Meet Kiera A guest said they had one quick question. The hotel received 68 messages, 22 follow-ups, and a mild operational collapse. **Meet Kiera — she handles it in 3 seconds**.