--- name: crisphive-elevenlabs-setup description: "Walks a Crisphive customer step by step through connecting Crisphive to ElevenLabs. ElevenLabs + Crisphive: build an AI phone receptionist that finds the caller, books and confirms a field visit live. Every click, prompt and test. Use when the user wants to set up, test or troubleshoot Crisphive with ElevenLabs." --- # Book field jobs by phone with ElevenLabs ## How to use this file (instructions for the AI assistant) You are helping a Crisphive customer connect Crisphive to **ElevenLabs**. The person you are talking to may not be technical and has probably not read the guide. Everything you need is in the guide below — follow it, do not improvise. 1. **Start by asking two things:** whether they already have a Crisphive account they can sign in to, and how far they have got (nothing yet, or which step). Skip the steps they have already done. 2. **Give ONE step at a time.** Name the exact page, button and field from the guide, and the exact value to type. Wait for them to say it is done (or to send a screenshot) before the next step. 3. **Ask for a screenshot when they are stuck** or when what they see does not match the guide. Screens change; if a label in the guide is not on their screen, say so plainly, describe what the step is trying to achieve, and help them find the closest equivalent. Never invent a button name. 4. **Secrets never go in this chat.** API keys (`chsk_…`), webhook signing secrets (`whsec_…`) and OAuth client secrets are pasted only into the platform field the guide names. If the user pastes one here, tell them to revoke it in Crisphive and create a new one. 5. **Start in Rehearsal (the sandbox).** Recommend test keys (`chsk_test_…`) and Rehearsal mode until the test at the end of the guide works. Only then explain how to switch to Live. 6. **Finish with the guide’s test.** The setup is done only when the test in the guide succeeds (for example a job appears in the Crisphive dashboard). If it fails, use the Troubleshooting and FAQ sections below. 7. **Stay inside this guide.** For anything it does not cover, point the user to the full page or to support@crisphive.com instead of guessing. Source page: https://docs.crisphive.com/docs/elevenlabs (last updated 2026-10-08). If the user asks, this file is generated from that page and is always in step with it. --- # The guide By the end of this guide you will have an AI phone receptionist on ElevenLabs that finds the caller in your Crisphive customer list, takes the address and the problem, offers real open times, and books and confirms a technician visit — then reads back the booking reference. You do not write any code. You copy two pieces of text, one web address and one key. ElevenLabs runs the voice (it listens, thinks with an AI model and speaks). Crisphive does the scheduling: it knows your customers, your technicians, their skills, working hours and service areas, and it decides who can take the job. Allow about **30 minutes** the first time. ## Three words you will meet | Word | What it means in plain language | | --- | --- | | **Voice agent** | An AI receptionist that talks on the phone. ElevenLabs calls the product that builds one **ElevenAgents**. | | **MCP server** | A web address that hands an AI a list of things it is allowed to do (here: look up a customer, book a job). MCP stands for Model Context Protocol. Crisphive’s address for voice agents is `https://api.crisphive.com/mcp/voice`. | | **API key** | A long password that lets the agent act for your business. Crisphive shows it once; it starts with `chsk_test_` (practice data) or `chsk_live_` (your real business). | ## What the agent can do `/mcp/voice` gives the agent exactly the 10 tools it needs on a phone call, which keeps each turn fast. | Tool | What the agent uses it for | | --- | --- | | `listCustomers` (by phone) | Look up the caller by the phone number they read out and confirmed. Exact match, so the agent can ask a returning customer “Am I speaking with Sam Tremblay?”. | | `bookAndConfirmJobRequest` | The booking: creates the job, sizes it, and confirms it at the time the caller chose — one call. | | `listJobRequestBookingWindows` | Find which days and parts of the day are open, so the agent offers real times. | | `listMatchingSlots` | Exact start times for a job already created (step-by-step flow). | | `listJobTypes` | Map what the caller describes (“my furnace stopped”) to one of your job types. | | `getJobRequest` | Reads one job by its id. Not used by this prompt: questions about an existing booking go to a person (see [Calls that are not bookings](https://docs.crisphive.com/docs/elevenlabs#not-bookings)). | | `createCustomer`, `createJobRequest`, `quoteJobRequest`, `confirmJobRequest` | The same booking in separate steps, for agents that want to offer exact slots before booking. | ## Before you start | You need | Why | | --- | --- | | A Crisphive account where you are the **Owner** of the business | Only the Owner can create API keys, unless the Owner gave your role Developer access. | | At least one **technician**, one **service area** and **working hours** set up in Crisphive | The agent can only offer times your team can actually work. | | A **default duration** on every job type the agent may book | A phone agent cannot know how long a repair takes (**Settings → Job Types** → Default duration). The default type, “General”, already has one (60 minutes plus 15 minutes of travel buffer each side unless you changed it). | | An email address for a new **ElevenLabs** account (free) | ElevenLabs runs the voice. ElevenLabs does not allow MCP servers in **Zero Retention Mode** or **HIPAA** workspaces, so use a normal workspace. | | A computer with Chrome or another modern browser | Everything, including the test, is done in the browser. | > **About cost.** The ElevenLabs **Free** plan gives **10,000 credits a month, about 15 minutes of calls**. One 5-minute test conversation used about **2,900 credits** in our test, so you can do roughly three tests on the free plan. The Free plan also has **no commercial license**; ElevenLabs includes one from the **Starter** plan. Check ElevenLabs’ current prices at [elevenlabs.io/app/subscription](https://elevenlabs.io/app/subscription) before you take real calls. ## Step 1 — Create the Crisphive API key You first make a **test** key (it starts with `chsk_test_`). A test key only touches practice data, so nothing you do while setting up can reach a real customer. 1. **Sign in to Crisphive** — Go to [crisphive.com/login](https://crisphive.com/login), type your email and continue. On **Enter your code**, type the 6-digit code from the email and click **Verify** (or click **Email me a magic link instead**). You land on the **Command Center**. 2. **Switch to Rehearsal** — In the left sidebar of the Crisphive dashboard, click **Rehearsal** in the **Rehearsal | Live** switch, then click **Switch**. Rehearsal is Crisphive’s sandbox: isolated test data, and no real customer or technician is ever texted or emailed. The box reads **Switch environment?**; after **Switch** the page reloads. 3. **Open API Keys** — Go to **Settings → Developer → API Keys** ([crisphive.com/app/settings/developer/api-keys](https://crisphive.com/app/settings/developer/api-keys)): in the left menu click **Settings**, then the **Developer** tab. The page title is **API Keys**, with a **Rehearsal** badge while you are in practice mode. 4. **Start a new key** — Click **Create new API key** (top right). Leave **Key type** on **Secret** — never Publishable. **Name**: `ElevenLabs phone agent` (only you see it). 5. **Make it last a year** — Click **Expires in (days)** (it shows *30 days*) and choose **365 days**. The date the key stops working is shown next to each choice. With the 30-day default, your phone agent would stop working after a month. The Owner and Administrators are emailed 7 days before a key expires. 6. **Restrict it to booking** — Under **Scopes** click the **Restricted** card (*“Pick exactly what this key can do — recommended for AI agents.”*). In the list that opens, tick exactly five: under **BOOKINGS** **View jobs**, **Create jobs**, **Manage jobs**; under **CUSTOMERS** **View customers**, **Manage customers**. 7. **Create and copy** — Click **Create API key**. The box **API key created** says you won’t be able to view the key again. Click **Copy**, keep the key somewhere safe for the next few minutes (a password manager, or a note you delete afterwards), then click **Done**. Screen in Crisphive: **Create new API key** (`crisphive.com/app/settings/developer/api-keys`) 1. Click Create new API key. Keep Key type on Secret and type the name ElevenLabs phone agent. — **Name**: `ElevenLabs phone agent` 2. Change Expires in (days) from 30 days to 365 days, so the phone agent keeps working for a year. — **Expires in (days)**: `365 days` 3. Under Scopes click Restricted, then tick View jobs, Create jobs, Manage jobs, View customers and Manage customers. — **Scopes**: `Restricted` 4. Click Create API key, then Copy. The key starts with chsk_test_ and is never shown again. Click Done. — click **Copy** **Check:** the list now has a row **ElevenLabs phone agent · Secret · Restricted · 5 scopes · Active**, expiring one year from today. If you lose the key before you have pasted it into ElevenLabs, make a new one the same way. ## Step 2 — Create the agent 1. **Sign up** — Go to [elevenlabs.io/app/sign-in](https://elevenlabs.io/app/sign-in) and sign up (email or Google). Confirm your email if ElevenLabs asks. Four short set-up screens follow; four dots at the bottom show where you are. 2. **Choose your platform** — Click **ElevenAgents** (*“Deploy and monitor conversational agents”*), not ElevenCreative — that one is for voice-overs. Click **Continue**. 3. **Help us personalize your experience** — The name and **How did you hear about us?** are optional. Leave the language on **English**, tick the box confirming you are 18 or older, and click **Next**. 4. **Which one describes you the best?** — Click **Skip**. Your answer changes nothing in this guide. 5. **Choose your plan** — To start on the free plan, click **Skip** at the bottom. You can upgrade later. **Check:** you land on **Browse templates**. If a chat panel from ElevenLabs’ own assistant opens on the right, close it with the **×**. 1. **Start from a blank agent** — On **Browse templates**, the first card in the list is **Create Blank Agent**. Click it. Do not pick a template (Customer Support, Front Desk Receptionist, …): a template comes with its own instructions that would fight the booking rules below. The agent is created straight away — there is no box asking for a name — and its page opens on **Agent**. 2. **Rename it** — At the top left the agent is called **My Agent**. Click the name, type `Crisphive Booking` and press **Enter**. Callers never see this name. ## Step 3 — Write the agent’s instructions 1. **Paste the instructions** — Copy the system prompt from the box below. Replace every `[Business name]` (in the prompt and the first message), `[city]` (for example “Ottawa, Canada”) and `[timezone]` — your business’s IANA timezone, for example `America/Toronto`. `[timezone]` appears three times: in the first line and twice in step 5. Use the same area for `[city]` as your Crisphive service areas — if they disagree, the agent tells callers it is not sure you cover their address. Then click inside the **System prompt** box (it contains *“You are a helpful assistant.”*), select everything and paste. 2. **Set the timezone** — Directly under the System prompt box, on the right, a small button with a globe shows a timezone. ElevenLabs fills it with **your computer’s** timezone, which may not be your business’s. Click it, type your city in **Search timezones** (for example `Toronto`) and click the result, for example **America/Toronto**. If this is wrong, “tomorrow at 10” becomes the wrong day or hour. 3. **Write the greeting** — Under **First message**, delete *“Hello! How can I help you today?”* and paste the greeting from the box below the prompt card, with your business name in place of `[Business name]`. Leave the **Interruptible** switch on, so a caller who starts talking is not talked over. 4. **Choose the AI model** — On the right, under **LLM**, click the box showing the current model (a new agent shows **Qwen3.5-397B-A17B**). A panel titled **LLM** slides in; click the box inside it, and in the list (each model with its speed and price per minute) click **Claude Sonnet 5.5**. Close the panel with the **×**. See [Which AI model to choose](https://docs.crisphive.com/docs/elevenlabs#llm-choice) for the alternatives. ### Template: Phone booking agent prompt - **What it is:** The instructions you paste into your voice agent: how it answers a call, finds the caller in Crisphive, offers open times and books and confirms the visit. - **Why use it:** It is the prompt the Retell, Vapi and ElevenLabs guides were tested with, already written around the Crisphive tools and the order a phone booking needs. You fill in your business details and paste it — no prompt to write yourself. - **What is inside:** **Who the agent is** — your business name, city and timezone; it books service visits with the Crisphive tools and speaks English; **How to handle a call** — nine steps: phone number (read back), who is calling, service address, the problem, when, text messages, book, result, close; **Calls that are not a new booking** — business questions, prices, existing bookings, complaints, taking a message, wrong numbers; **Errors** and **Safety** — what to say when a time is refused or Crisphive fails, and the emergency rule (leave the building, call 911); **Things you do not do** and **Style** — no prices, no changes to existing bookings, short sentences, one question at a time - **Is it safe:** Yes. It is plain text — no program code and no API key. Your key goes into the platform’s connection settings, never into the prompt. Replace every `[Business name]` (in the prompt and the first message), `[city]` (for example “Ottawa, Canada”) and `[timezone]` — your business’s IANA timezone, for example `America/Toronto`. `[timezone]` appears three times: in the first line and twice in step 5. Full template — give it to the reader when they ask for it: ``` You are the phone booking assistant for [Business name], a field operations business serving [city]. The business timezone is [timezone]. You book service visits for callers using the Crisphive tools. You speak English. ## How to handle a call 1. Phone number - Ask for the phone number they are calling from. - Read it back digit by digit and get a clear yes before you use it. If they correct you, read the corrected number back again. - Look the caller up with listCustomers using the phone filter, in E.164 format: +1 followed by the 10 digits, e.g. +16135550142. - If the tool returns PHONE_INVALID, tell the caller the number didn't come through, ask them to repeat it, read it back, and try again. Do not end the call over this. 2. Who is calling - If a customer is found, ask "Am I speaking with ?" If yes, use that name. If no, treat them as a new caller. - If no customer is found, ask for their full name, spell it back letter by letter, and get a yes. Then ask for an email address if they have one (optional), and spell it back. 3. Service address (always, even for a known customer) - Ask for the address of THIS visit: street number and name, unit if any, city, and postal code. - Read the whole address back and get a yes. 4. The problem - Ask what needs doing, in one or two sentences. This becomes the job description. Do not diagnose or promise a fix. 5. When - Ask which day and time of day they prefer. Work out real dates from today's date in [timezone]; never offer a time in the past. - Call listJobRequestBookingWindows with x_timezone set to [timezone] to see which days and periods are open. - Offer at most three concrete options (for example "Tuesday at 9 in the morning or Wednesday at 1 in the afternoon"). Never invent availability. 6. Text messages - Ask: "Can we send you text message updates about this visit?" Set sms_opt_in to true only if they clearly say yes. If they say no or are unsure, leave it out. 7. Book - Before booking, sum up in one sentence: name, address, problem, and the chosen time, and get a yes. - Book with bookAndConfirmJobRequest, once. Send: - customer: full_name and phone (plus email if given, plus sms_opt_in only if they agreed) - address: line, line2 if there is a unit, city, postal_code, country "CA" - description: the problem in their words - scheduled_at: the business's local wall clock with no offset, e.g. 2026-10-06T09:00:00 - idempotency_key: a unique text you create for this booking - Never send customer_id. Crisphive matches an existing customer by phone, and this makes sure the visit uses the address the caller just gave. - If the tool timed out or gave no answer, resend the exact same request with the SAME idempotency_key. - If you change anything in the request (for example after fixing the time or the address), use a NEW idempotency_key. 8. Result - If "confirmed" is true: say the visit is booked and read back the day, date, time and address. You may give the booking reference (short_code), read slowly. - If "confirmed" is false: say "I've saved your request. Our team will call you back shortly to confirm the exact time." Do not book again and do not promise a time. 9. Close - Ask if there is anything else about this visit, thank them, and end the call. ## Calls that are not a new booking - Questions about the business (opening hours, areas served, services offered): answer only from information you have been given. If you do not know, say so and offer to take a message. Never guess. - Price questions: say the team will discuss pricing, then offer to book a visit or take a message. - An existing booking (when the technician is coming, changing the time, cancelling): you cannot look up or change existing bookings. If you can transfer calls, offer to transfer the caller to the team; otherwise take a message. - A complaint, or the caller asks for a person: transfer the call if you can; otherwise take a message. - Taking a message: get their name, their phone number (read it back), and what they need in one sentence. Tell them the team will call them back, then end the call politely. - Wrong numbers, sales calls and spam: say politely that this line is for booking service visits and end the call. ## Errors - If the chosen time is refused as invalid or in the past, apologise, offer another time, and book again with a NEW idempotency_key. - For any other error_code, apologise briefly, say the team will call them back, and end politely. Never read error codes or technical details aloud. ## Safety - If the caller mentions a gas smell, smoke, fire, sparking, flooding near electricity, or anyone being hurt, tell them to leave the building and call 911 now. Do not book in that situation. ## Things you do not do - Never quote prices or give estimates. Say the team will discuss pricing. - Never change or cancel an existing booking yourself (see "Calls that are not a new booking"). - Never share information about other customers, technicians, or the schedule beyond the times you offer. - Never mention tools, systems, JSON, or that you are looking things up in a database. Say "one moment" while you check. ## Style - This is a phone call: short sentences, one question at a time. - Say numbers, dates and times the way people speak them ("Tuesday the sixth at nine in the morning"). - Be warm and calm. If you did not understand, ask them to repeat. ``` ``` Thanks for calling [Business name]. I can book a service visit for you. Can I start with the phone number you're calling from? ``` Screen in ElevenLabs: **Agent** (`elevenlabs.io/app/agents`) 1. Rename My Agent to Crisphive Booking, then replace the System prompt text with the Crisphive prompt. — **System prompt**: `You are the phone booking assistant for [Business name], a field operations business serving [city]. …` 2. Under the prompt, click the timezone button, search Toronto and choose America/Toronto (your business timezone). — **Timezone**: `America/Toronto` 3. Replace the First message with the greeting and keep Interruptible on. — **First message**: `Thanks for calling [Business name]. I can book a service visit for you. Can I start with the phone number you're calling from?` 4. Under LLM open the panel and change Qwen3.5-397B-A17B to Claude Sonnet 5.5. — **LLM**: `Claude Sonnet 5.5` **Check:** the timezone button shows your business timezone and the LLM box says **Claude Sonnet 5.5**. Leave **Voices** (a voice called *Eric*) and **Language** (*English*) as they are, or pick another voice you like. ## Step 4 — Connect the agent to Crisphive 1. **Let the agent hang up** — In the agent’s left-hand menu click **Tools**. The page has two tabs, **Tools** and **MCP**. On the right, the **System tools** list is all switched off on a new agent (*“0 active tools”*). Switch on **End conversation** — the header now says **1 active tool**. Without it the agent cannot end the call itself. 2. **Open the form to add Crisphive** — Click the **MCP** tab (*“No MCP servers found”*), then **Add server** (top right) → **New Custom MCP Server**. 3. **Accept the terms (first time only)** — A box **Model Context Protocol Server Terms** opens. Tick the box confirming you have read the terms and click **Accept**. You are taken back to the MCP page: click **Add server** → **New Custom MCP Server** again. The panel **New Custom MCP Server** slides in from the right. 4. **Name and address** — Under **Basic Information**: Name `Crisphive`, Description `Book service visits in Crisphive`. Under **Server Configuration** click **Streamable HTTP** (the default is SSE — change it). Under **Server URL** leave the type on **Value** and enter `https://api.crisphive.com/mcp/voice`. Leave **Authentication** as it is (*“Workspace has no auth connections”*). 5. **Add your key as a header** — Scroll to **HTTP Headers** and click **Add header**. Set **Type** to **Secret** (the Value box becomes a button **Add new secret**) and **Name** to `Authorization`, with a capital A. Click **Add new secret**: in the **Add secret** panel, Name `crisphive_api_key`, Value the word `Bearer`, **one space**, then your key — `Bearer chsk_test_…`. Click **Add secret**. *“Secret created successfully”* appears and the header row shows **Secret: crisphive_api_key**. Once saved, ElevenLabs never shows the value again. 6. **Tool Approval Mode: No Approval** — Scroll to **Tool Approval Mode** and click **No Approval**. On a phone call there is nobody to press “approve”, so any other choice stops the booking halfway. Your Crisphive key already limits what the agent can do. Leave **Request Metadata** and everything under **Tool Settings** as it is. 7. **Test the connection and save** — At the bottom, tick **I trust this server** and click **Test Connection**. A green bar should read **Connected (10 tools available)**. Click **Add Server**. Screen in ElevenLabs: **New Custom MCP Server** (`elevenlabs.io/app/agents`) 1. Under Basic Information, type Crisphive and the description Book service visits in Crisphive. — **Name**: `Crisphive` 2. Under Server Configuration, change Server type from SSE to Streamable HTTP. — **Server type**: `Streamable HTTP` 3. Under Server URL keep Type on Value and enter https://api.crisphive.com/mcp/voice. — **URL**: `https://api.crisphive.com/mcp/voice` 4. Under HTTP Headers click Add header, set Type to Secret and Name to Authorization. — **Type**: `Secret` 5. Click Add new secret. Name it crisphive_api_key; its value is Bearer, one space, then your chsk_test_ key. Click Add secret. — **Value**: paste your own key (never share it in this chat) 6. The header row shows Secret: crisphive_api_key. Set Tool Approval Mode to No Approval. — **Tool Approval Mode**: `No Approval` 7. Tick I trust this server and click Test Connection: Connected (10 tools available). Then click Add Server. — click **Test Connection** The values to copy, in one place: ``` Name: Crisphive Description: Book service visits in Crisphive Server type: Streamable HTTP Server URL (Value): https://api.crisphive.com/mcp/voice Authentication: (leave as it is) HTTP header: Type: Secret Name: Authorization Secret: crisphive_api_key = Bearer chsk_test_… Tool Approval Mode: No Approval [x] I trust this server ``` **Check:** the MCP list now shows **Crisphive — Book service visits in Crisphive**. > The older `/mcp?profile=voice` spelling of the address offers the same voice tools as `/mcp/voice`. An agent set up with it keeps working and needs no change. ## Step 5 — Publish 1. **Publish** — Your changes are a draft until you publish. Click **Publish** (top right). 2. **Review Changes** — The box **Review Changes** lists what changed (name, prompt and greeting, Tools, LLM). Type a note under **Commit message** or keep the suggested one, and click **Publish** at the bottom right of the box. **Check:** the Publish button turns grey, and the left-hand menu shows the agent as **Crisphive Booking**. Publishing only saves and activates this version: nobody can call the agent until you give it a phone number. ## Step 6 — Test it On the agent page, the right-hand side is a test panel. At its bottom there is a box *“Send a message to start a chat”*. Type `Hi, my furnace is not heating. Can I book a visit?`, press Enter, and play the customer. Use a made-up number in the 555 range of a real area code and an address **inside one of your Crisphive service areas**. 613-555-01xx numbers are reserved for fiction, and Crisphive never sends texts or emails to 555 numbers or to `example.com` addresses. This is what our test conversation looked like: | Customer typed | Agent answered | | --- | --- | | Hi, my furnace is not heating. Can I book a visit? | *Yes, I can help with that. First, what’s the phone number you’re calling from?* | | 613 555 0188 | *Let me read that back: six one three, five five five, zero one eight eight. Is that right?* | | Yes | *Thanks. I don’t see that number on file yet. What’s your full name?* | | Sam Tremblay | *Let me spell that back: S, A, M. T, R, E, M, B, L, A, Y. Is that right?* | | Yes that’s right. No email. | *Thanks, Sam. What’s the address for this visit?* | | 300 Bank Street, Ottawa, K2P 1X8. No unit. | Reads the address back. | | The furnace turns on but blows cold air. | Offers up to three real open times, for example *Thursday at nine in the morning, Thursday at one in the afternoon, or Friday at nine in the morning.* | | Friday at nine works. | *Can we send you text message updates about this visit?* | | No thanks. | Sums up the name, address, problem and time, and asks *Shall I book it?* | | Yes, book it. | Confirms the visit and spells out the booking reference. | | No, that’s all. Thanks. | Says goodbye — then **Agent ended the chat**. | **Then try a returning caller:** start a new chat and give the same number, 613 555 0188. The agent should ask “Am I speaking with Sam Tremblay?” — Crisphive matches the customer by phone and never creates a second customer for the same number. ## Check the result 1. **In Crisphive** — Go to **Bookings** ([crisphive.com/app/bookings](https://crisphive.com/app/bookings)), still in **Rehearsal**. The new booking is at the top of **All Bookings**: the reference (`REQ-CA-…`), the day and time, Sam Tremblay with `+16135550188`, the problem, the technician and the status **Confirmed**. 2. **In ElevenLabs** — In the left-hand menu click **Conversations** and open your conversation. The transcript is in the middle; the summary, cost and status are on the right. Each Crisphive step appears as a tool — **Crisphive_listCustomers**, **Crisphive_listJobRequestBookingWindows**, **Crisphive_bookAndConfirmJobRequest** — with its duration. This is the place to look when something goes wrong. ## Which AI model to choose | Model | Good for | Trade-off | | --- | --- | --- | | **Claude Sonnet 5.5** (recommended) | Following the booking rules and chaining several tool calls in a row (look up the caller, find open times, book, check the answer). This is the model we tested this guide with. | The list shows about $0.0165 per minute; our 4½-minute test conversation cost about US$0.26 of AI model time, on top of ElevenLabs’ voice credits. | | **Claude Sonnet 5** | The list shows it answering faster, at the same price per minute. | Not tested with this guide. Run the test in Step 6 before trusting it. | | The default (**Qwen3.5-397B-A17B**) | Getting started. | Not tested with the Crisphive tools. Switch before going live. | > The pause you hear before the agent answers is the AI model plus speech synthesis — not Crisphive. In our test the three Crisphive steps answered in about 0.2, 0.2 and 0.9 seconds. ## Troubleshooting | Symptom | Cause | Fix | | --- | --- | --- | | **Test Connection** shows an error instead of *Connected (10 tools available)* | The address or the key is wrong. | Check the URL is exactly `https://api.crisphive.com/mcp/voice`, the server type is **Streamable HTTP**, the header name is `Authorization`, and the secret is `Bearer` + one space + a `chsk_` key (not a publishable `chpk_` or revoked key). | | Connected, but not 10 tools | The URL is `/mcp` instead of `/mcp/voice`. | Fix the URL. `/mcp` gives the agent every Crisphive tool, which makes calls slower. | | Calls suddenly fail with 401 `API_KEY_EXPIRED` | The key reached its expiry date. | Create a new key, add it as a new secret on the Authorization header, then revoke the old key. | | The agent says it cannot find any open times | No technician covers that address, or no working hours on those days. | In Crisphive check service areas, technicians and working hours. Use an address inside a service area. | | The agent books at the wrong hour or on the wrong day | The timezone under the System prompt is still your computer’s, or `[timezone]` was not replaced in the prompt. | Fix both (Step 3), then **Publish** again. | | The agent never ends the conversation | **End conversation** is off. | Switch it on under **Tools** (Step 4), then Publish. | | The agent stops and nothing happens after “one moment” | **Tool Approval Mode** is not **No Approval**. | Set it to **No Approval** (Step 4), then Publish. | | The agent says it is not sure you serve the caller’s area | The city in the instructions differs from your service area. | Fix `[city]` in the System prompt, then Publish. | | Cannot add the MCP server at all | The ElevenLabs workspace uses Zero Retention Mode or HIPAA mode, where MCP servers are unavailable. | Use a standard ElevenLabs workspace. | | A tool answers 403 `API_KEY_SCOPE_INSUFFICIENT` | The key is restricted and lacks a scope the tool needs (named in `data.required_scope`). | Edit the key’s scopes in Crisphive (**Settings → Developer → API Keys**) to include all five booking scopes. | | The job was created without an address | The agent booked with `customer_id` for a returning customer whose record has no address. | Use the system prompt unchanged: it always sends `customer` + `address`, and Crisphive matches the existing customer by phone. | | The agent told the caller a time, but the job is not confirmed | Crisphive answered `confirmed: false` (the job was saved in your queue) and the prompt did not check it. | Keep step 8 of the prompt. Then confirm the job from the dashboard or call the customer. | | `confirmed: false` with `refusal.error_code` `JOB_REQUEST_NO_TECHNICIAN_AVAILABLE` | Nobody who has the skills, covers that address and works at that hour is free. | Check the technicians’ working hours and service areas cover the address. The job waits in the coordinator queue — do not book it again. | | The customer’s name is spelled wrong | Speech-to-text misheard it. | Keep step 2 of the prompt: the agent spells the name back letter by letter and waits for a yes. | | `400 PHONE_INVALID` | The number was not sent in international format, or a digit was misheard. | The prompt sends E.164 (`+1` then ten digits) and, on `PHONE_INVALID`, asks the caller to repeat the number, reads it back and tries again (step 1). | | The agent booked under a wrong number | Speech-to-text misheard a digit, and the number was used without being confirmed. | The prompt reads the number back before looking it up (step 1); make sure that step is in your prompt. | | `400 JOB_REQUEST_QUOTE_INVALID` with `data.reason` `job_type_has_no_default_duration` | The job type the agent picked has no default duration. Nothing was created. | Set a default duration on that job type (**Settings → Job Types**), or book without a job type (“General” is used). | | The customer got no text message | Crisphive only texts customers who agreed to SMS, and never texts 555 test numbers. | Expected. Real callers who say yes to texts get them; others get email. | ## Go live Do this only when the tests work. 1. **Prepare your live data** — In Crisphive click **Live** at the top of the left-hand menu and confirm **Switch**. Check every job type the agent may book has a default duration, and that technicians have working hours, skills and service areas. 2. **Create a live key** — Go to **Settings → Developer → API Keys** and make a new key exactly as in Step 1 (same name, 365 days, the same five permissions). This one starts with `chsk_live_`. Put a reminder in your calendar a week before it expires. 3. **Swap the header** — In ElevenLabs open the agent → **Tools** → **MCP** tab and click **Crisphive**. The panel shows **Server URL**, **Request Headers** and other settings. Next to **Request Headers** click **Edit**, and for the `Authorization` header choose **Add new secret**: name it `crisphive_api_key_live`, value `Bearer` + one space + your live key. Save. 4. **Test and publish again** — Click **Test Connection**, then **Publish** the agent again. 5. **Make one real test booking** — Book a visit for yourself with your own number and address, check it appears in the live dashboard, then cancel it. > From now on the agent books real jobs: they appear on your live board, technicians are assigned, and Crisphive sends customers the normal booking emails, and texts to those who agreed. To stop the agent immediately, revoke the key in Crisphive (**Settings → Developer → API Keys** → Revoke access) — every call to Crisphive fails from that moment. ## Connect a phone number Until now you talked to the agent in the browser. It answers real calls only once a phone number is attached to it. There are three ways: 1. **A number on ElevenLabs** — ElevenLabs does not sell phone numbers: import a number you have with Twilio. Assign the number to the agent as the agent that answers incoming calls. 2. **Keep your business number and forward calls** — With your phone provider, forward calls from your existing business number to the agent’s number: always, when nobody answers, when the line is busy, or after hours. A good start is after-hours and missed calls only, so your team still answers during the day. 3. **Connect your phone system** — If your business has its own phone system, connect it over SIP. ElevenLabs can import a SIP trunk. Numbers and call minutes are paid to ElevenLabs or your phone provider, not to Crisphive. Then call the number from your own phone and book a test visit. ## Calls that are not bookings Not every caller wants a new visit. The prompt already tells the agent what to do with the other calls: | What the caller asks | What the agent does | | --- | --- | | Opening hours, areas served, services offered | Answers only from information in its prompt. If it does not know, it says so and offers to take a message. Add your opening hours, areas and services to the prompt if you want it to answer these. | | A price or an estimate | Says the team will discuss pricing, then offers to book a visit or take a message. | | An existing booking: when the technician is coming, changing the time, cancelling | Cannot look up or change existing bookings. Transfers the call if it has a transfer tool (below); otherwise takes a message. | | A complaint, or “can I speak to a person?” | Transfers the call if it can; otherwise takes a message. | | A wrong number, a sales call or spam | Says the line is for booking service visits and ends the call politely. | | Gas smell, smoke, fire, sparking, flooding near electricity, an injury | Tells the caller to leave the building and call 911. Does not book. | A message is the caller’s name, phone number (read back) and what they need in one sentence. Two setups make sure these calls reach your team. **Setup 1 — Transfer the call to a person.** 1. **Add the transfer tool** — In ElevenLabs, add the system tool **Transfer to number** to the agent. 2. **Set where calls go** — Set the destination to your office or coordinator phone number. 3. **Leave the prompt as it is** — The prompt already tells the agent when to transfer: a complaint, a caller who asks for a person, and questions about an existing booking. Save and publish the agent again. > Outside office hours nobody answers a transferred call, so the agent should take a message instead. Add your office hours to the prompt, for example under “Calls that are not a new booking”: `Transfer calls only Monday to Friday, 8 am to 5 pm. Outside those hours, take a message.` **Setup 2 — Get every message to your team.** > A message the agent takes is **not** stored in Crisphive today: only bookings reach Crisphive. Set this up so that no call is lost. 1. **Capture the details of every call** — In the agent’s **Analysis** settings (data collection), add four fields to fill in after each call: the caller’s name, their phone number, the reason for the call and the message. 2. **Catch the summary with an automation** — In [Zapier](https://docs.crisphive.com/docs/zapier), [Make](https://docs.crisphive.com/docs/make) or [n8n](https://docs.crisphive.com/docs/n8n), start a new workflow with a webhook trigger that catches incoming data, and copy its web address. 3. **Send it after each call** — In ElevenLabs, paste that address as the post-call webhook, so ElevenLabs sends the call summary there when a call ends. 4. **Forward it to your team** — Add a step that sends the name, phone number, reason and message as an email or a Slack message to whoever calls customers back. 5. **Test it** — Make a practice call where you only leave a message, and check that it reaches your team. ## What it costs - **Crisphive**: jobs booked by the agent count toward your Crisphive plan like any other job. The connection itself needs no add-on. - **ElevenLabs**: calls use credits. The Free plan’s 10,000 credits a month are about 15 minutes of calls and carry no commercial license (ElevenLabs includes one from the Starter plan). The AI model is priced per minute in the LLM list — Claude Sonnet 5.5 shows about $0.0165 per minute. - **Phone line**: your telephony provider charges for the number and minutes. - Every turn of the conversation sends the tool list to the AI model; `/mcp/voice` keeps that list to the 10 tools a phone call needs. ## Related guides and reference - [Voice agents overview](https://docs.crisphive.com/docs/voice-agents) — the voice tool set and booking rules - [Vapi](https://docs.crisphive.com/docs/vapi) — a phone assistant with the Crisphive MCP tool - [Retell](https://docs.crisphive.com/docs/retell) — a phone agent with the Crisphive MCP server - [MCP server reference](https://docs.crisphive.com/mcp) — every tool, the tool profiles and client setup - [Book and confirm a job](https://docs.crisphive.com/technical-reference/book-and-confirm-job-request) — the API call behind every booking step ## FAQ **Can an ElevenLabs agent book jobs in Crisphive?** Yes. On the agent’s **Tools** → **MCP** tab, add a custom MCP server with the URL `https://api.crisphive.com/mcp/voice`, server type Streamable HTTP, and an `Authorization` header holding the secret `Bearer chsk_…`. The agent looks the caller up, books and confirms the visit in one call, and the job appears on your Crisphive board. **Is there a Crisphive app in the ElevenLabs marketplace?** No. Every business builds its own agent and connects it with the Crisphive MCP URL and its own API key, as this guide shows. It takes about 30 minutes. **Can I do this on the ElevenLabs Free plan?** Yes, for testing. The Free plan gives 10,000 credits a month (about 15 minutes of calls); one 5-minute test used about 2,900 credits. It has no commercial license — ElevenLabs includes one from the Starter plan. **Which Crisphive key should I use — secret or publishable?** A **Secret** key (`chsk_test_…` or `chsk_live_…`). A publishable `chpk_` key only works for the booking widget on your website and is refused by the MCP server. **What can the agent do with my key?** Only what the key’s scopes allow. Restrict it to View jobs, Create jobs, Manage jobs, View customers and Manage customers: it can look up and create customers and book jobs, but cannot see your team settings, billing or API keys. **Can I test without touching real customers?** Yes. A `chsk_test_` key created while the dashboard is in Rehearsal only reads and writes isolated practice data. No real customer is ever contacted, and your live schedule does not change. **Why did the agent say “our team will call you back” instead of booking?** Crisphive answered `confirmed: false`: the job was saved, but no technician with the right skills, service area and working hours was free at that time. The job waits in your queue for a coordinator to schedule. **Why does the agent never hang up?** The system tool **End conversation** is off on a new agent. Switch it on under the agent’s **Tools**, then publish again. **Why does my agent stop in the middle of a booking?** Usually Tool Approval Mode is not set to No Approval, so the call waits for a person to approve each Crisphive tool. A short pause before each answer is the AI model and voice, not Crisphive. **How do I turn the agent off or remove its access?** Revoke the API key in Crisphive (Settings → Developer → API Keys → Revoke access). The agent can no longer read or book anything. Keys also expire on the date you chose; Owners and Administrators are emailed 7 days before.