# Getting Started With Capri AI

Welcome to the Capri AI help documents! Here you can find any information to help you either get started with Capri, or refresh your memory on how things work!

## New Users

If you're new to Capri, we recommend going through our [video onboarding course](https://memberships.capriai.us/offers/ba4bf733-e777-4b87-90f8-59210db5d076?fbclid=IwAR3M3y1u_x6DXtuSvoDh3ChTyRbuKoFAu5AdZOg6V2XTleDi3BMuw1V_k9o) or checking out the quick setup section to easily get started using Capri!

{% content-ref url="/pages/UpjcnKhovLypgX634B0T" %}
[Setup](/quickstart-guides/setup)
{% endcontent-ref %}

For more detailed information about individual parts of Capri, you can also check out the "Capri Portal" section where we break down the individual parts of the portal!

## Support

If you find yourself needing help with Capri, check out our support section!

{% content-ref url="/pages/J2iJcf4PfXeMOMZxB78M" %}
[Customer Support](/customer-support/contact-us)
{% endcontent-ref %}


# Video Onboarding Course

For people who are new to Capri, are visual learners, or would just like refreshers on certain topics, we offer a free video onboarding course that goes through the process of setting up Capri in video format! You can sign up for this course at [this link](https://memberships.capriai.us/offers/ba4bf733-e777-4b87-90f8-59210db5d076?fbclid=IwAR3M3y1u_x6DXtuSvoDh3ChTyRbuKoFAu5AdZOg6V2XTleDi3BMuw1V_k9o)

After signing up for the course, you'll receive an email with your login information to the course and a link to the login page!


# Setup

## Step 1 - Logging in to Capri

The first step to accessing the Capri portal is to visit <https://beta.capriai.us/> where you will see the following page. While here, you will be able to log in with the email that you have setup with Capri!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2Fp2b5G7rQxgZs5D2eCEwY%2Fimage.png?alt=media&amp;token=aa342595-78ba-40a4-9bfd-0b1e60d20b27" alt=""><figcaption></figcaption></figure>

## Step 2 - Creating Your Organization

When you login, you will be prompted to set up your organization! Your organization essentially represents your agency, and you will be able to give access to other individuals later!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FSQ2i89ohkMK6b10wTiM2%2Fimage.png?alt=media&amp;token=892534d3-ad58-4c36-a20c-13532a0187b6" alt=""><figcaption></figcaption></figure>

After setting this up, you'll then see your Capri Portal homepage! This is where you'll see stats about your organization, and you'll be able to navigate to set up agents, test with the emulator, or access billing from here!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FM3HXPmwcRlnFavlHuVTx%2Fimage.png?alt=media&amp;token=88a9e256-9632-412f-be85-ead423cc7f70" alt=""><figcaption></figcaption></figure>

## Step 3 - OpenAI Settings and API Key

After you've successfully signed into Capri, the next thing you need to do is make sure that your OpenAI account is set up correctly, including having a payment method on file with them, and that you have an API key to use with us! Firstly, set up an OpenAI account at <https://platform.openai.com> then go to the payment method page at <https://platform.openai.com/account/billing/payment-methods> and put a card on file with them. If you skip this step, your rate limit will be severely reduced, and you will basically not be able to use the system beyond 1 or 2 uses! Take note, this is NOT the OpenAI plus subscription that's 20 dollars a month that OpenAI has! This is an entirely different thing, and the subscription is not required!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FBK1b3OwommgklLx8cFcb%2Fimage.png?alt=media&amp;token=b2584ae6-dd19-4840-9839-d8ce22b70cde" alt=""><figcaption></figcaption></figure>

After you've put a payment method on file with OpenAI, you then need to go to the API keys page at <https://platform.openai.com/account/api-keys> and click "create new secret key". You will then have the opportunity to name the key whatever you wish, but after you name it, you will be shown the actual secret key! Bear in mind, this is the ONLY time you have the ability to see the full key, so make sure to write this down or copy it into a document somewhere that you can find it later! If you end up losing it, you can always make a new one, though!&#x20;

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FMSqnLUKOnqIdmekhsBPx%2Fimage.png?alt=media&amp;token=f5aa7ba6-5300-4ee0-b3af-8ded0fe02ae9" alt=""><figcaption></figcaption></figure>

## Step 4 - Capri Portal Settings

Now that you've set things up on the OpenAI side, it's time to set up all of the integrations with Capri! To do so, go back to the home page in the Capri portal, then select "Settings" on the left side. From here you'll be able to integrate with your OpenAI account, your CRM, and any external data sources you'd like the AI to have access to! For now, go to the "AI" tab, and choose "configure" under OpenAI.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F2zHJnw1i4eUn62Lja3ck%2Fimage.png?alt=media&amp;token=7403cd6a-2f1e-44c2-8d6b-f64656dccd51" alt=""><figcaption></figcaption></figure>

You'll then be able to click "Add" in the top right and add your OpenAI secret key to your account!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FIO9q5fALTjOXsViOUVuX%2Fimage.png?alt=media&amp;token=4c9c5d28-a3ad-4864-acea-9cf0ce3fe0c9" alt=""><figcaption></figcaption></figure>

After doing so, go to the "Channels" tab, where you'll add your CRM! For now, we only have integrations with GHL, so click the GHL button, then "Add", and a new window will open that will allow you to sign into GHL and choose a subaccount to connect to Capri!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2Ff4LYT4WOUtjAKNPIbiYS%2Fimage.png?alt=media&amp;token=3f2f3332-c00a-4032-a626-3e7a8ba42127" alt=""><figcaption></figcaption></figure>

Remember, the AI can only respond in subaccounts that you have linked here!

## Step 5 - Creating an Agent

After setting up your integrations, you can now move on to creating your agent, which is what controls your bot! To do so, go to the "Agents" tab on the left, and select "Add New".&#x20;

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FwaT3hMYAgh9VWyzPdugw%2Fimage.png?alt=media&amp;token=ef9a2dc7-d964-43db-8c96-6d4d7ac04ab7" alt=""><figcaption></figcaption></figure>

After naming the agent, you'll see a screen where you can add functionality to it, such as calendars for it to use, the prompt for the bot to listen to, and more!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FtzVuksSlBEqlgozVB6gu%2Fimage.png?alt=media&amp;token=8e9e43e2-093a-4513-ace0-344b677254d6" alt=""><figcaption></figcaption></figure>

The first thing to do here is add the AI provider. Click the "Edit" button to the right, and then under "Model", choose the OpenAI model that you'd like your bot to use!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FsFifxpeg8KGLmvUcjmZr%2Fimage.png?alt=media&amp;token=2671abc8-4e44-4432-a4ec-e668166bb456" alt=""><figcaption></figcaption></figure>

After that, select the OpenAI key/account that you'd like to use. This will be the same as the one you set up in the integrations earlier!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FHolMJAjaWzXrDudIqTG1%2Fimage.png?alt=media&amp;token=01a97fa0-d58f-427c-a863-d3e358425e46" alt=""><figcaption></figcaption></figure>

Next, it's time to add a prompt to your agent. This is essentially the brain of the bot, where you tell it exactly what you want it to do, when it should do it, who it is, etc. For more information on how you can design your prompt, you can check out our [prompt design section](/prompt-design/creating-prompts) of this help doc!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F1ZXDcKVGgGejC3mxhFGu%2Fimage.png?alt=media&amp;token=f9e7839c-c5ae-404f-9c5a-f2c43a3febe9" alt=""><figcaption></figcaption></figure>

Finally, the last thing to do is to set up any actions you want the bot to have the capacity to do! This can be things like access a calendar, read from a website or spreadsheet, or add custom tags to a contact under certain conditions!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FIli07ynP0yFVoSA2iLMi%2Fimage.png?alt=media&amp;token=606d02ac-6d7e-4fef-8b68-a80040bac7a5" alt=""><figcaption></figcaption></figure>

## Step 6 - Testing in the Emulator

After getting the agent set up, it's time to test if the AI is working! Select the "Emulator" button in the top right, and have a few conversations here, saving them if you like, before moving on to make sure that things are functioning properly. If you run into an error here, go back and review the other steps to see if you missed something, like putting a card on file with OpenAI!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F0IGHa0DiWYo84vpI8XyE%2Fimage.png?alt=media&amp;token=2b2ea65e-a7ba-478a-9db3-2cab9f9090db" alt=""><figcaption></figcaption></figure>

If the bot is responding the way you'd like and everything looks good, go back to the agent settings and choose "Active" in the top right!

## Step 7 - Setting up a Workflow

The final thing to do to get your bot operational is to set up a workflow to have the AI reply to incoming contacts! First, create a new workflow in GHL by going to the "Automations" tab and clicking "Create Workflow" in the top right!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FYwAdSLlVzGy2ryN2JugL%2Fimage.png?alt=media&amp;token=7a2c53e2-7c7d-4b33-923f-5bd7db8f81b9" alt=""><figcaption></figcaption></figure>

Choose "Start From Scratch", and you'll end up with a new, blank workflow.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FS7u6ZAtBIfvaC6W1TuAT%2Fimage.png?alt=media&amp;token=9cce9f54-57d4-4734-aaf4-e5ea7074ca7a" alt=""><figcaption></figcaption></figure>

First, go to the settings tab, and enable "Allow re-entry" so that the AI will respond with every new message!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FPUbFdcjdVll2PBKcPMy1%2Fimage.png?alt=media&amp;token=dee1ed67-d7c7-4536-b93a-b138d28e23f6" alt=""><figcaption></figcaption></figure>

Next, go back to the "Builder" tab, then select "Add New Workflow Trigger", and select "Customer Replied" as your trigger, then hit save in the bottom right!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FRo3QBCweeiV0ZeWL5pJu%2Fimage.png?alt=media&amp;token=59821e2d-15f2-4fa9-a5f4-a1333013bdfa" alt=""><figcaption></figcaption></figure>

Next, click the plus to add an action and select "Webhook."

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FGrH9ci8jVniy1OWAxAsc%2Fimage.png?alt=media&amp;token=0f36d003-cad5-4ca8-84c5-6e4b00fcea73" alt=""><figcaption></figcaption></figure>

For the webhook settings, enter "<https://systems.capriai.us/gpt3>" for the URL, and then click "Add Item" under Custom Data. For the "Key" entry, put "Agent".

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FOFtzbl0JOqWewNleeUDZ%2Fimage.png?alt=media&amp;token=ae757407-4b97-4e00-b01d-67e6122dfaff" alt=""><figcaption></figcaption></figure>

For the value, we need to get the agent ID of the agent you made previously! To do so, go back to the Capri portal, find the agent you made in the "Agent" tab, then copy the series of numbers from the end of the URL!&#x20;

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2Fn6DjcXqAZNTeWbuZ4chv%2Fimage.png?alt=media&amp;token=67cf508f-6cf4-4312-b489-6feded4ad90d" alt=""><figcaption></figcaption></figure>

Paste these numbers into the "Value" entry in the webhook, and then save the action! After setting the workflow to published and saving it, you now have an AI assistant to responding to your incoming messages!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F4VBtn6pSbeimrWdBivNl%2Fimage.png?alt=media&amp;token=81161123-727c-4390-883c-5fe4173ae5a7" alt=""><figcaption></figcaption></figure>


# Capri AI Affiliate Program

If you're looking to get a little extra cash in your pocket, Capri AI offers a very generous affiliate program that you can sign up for at <https://capriai.firstpromoter.com/>

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2Fnai14STZRXYnUX2GNExh%2Fimage.png?alt=media&amp;token=a39aa55f-8878-479f-b80b-655f55153a2a" alt=""><figcaption></figcaption></figure>

After signing up, you'll gain access to an affiliate dashboard, where you'll be able to customize your affiliate link, view statistics, and access your payouts!


# Accessing the Capri Portal

## Step 1 - Logging in to Capri

The first step to accessing the Capri portal is to visit <https://beta.capriai.us/> where you will see the following page. While here, you will be able to log in with the email that you have setup with Capri!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FhVImixI4F0oaEWyDx1q9%2Fimage.png?alt=media&amp;token=b355410d-03aa-4632-8f02-401610972688" alt=""><figcaption></figcaption></figure>

## Step 2 - Choosing your Organization

When you login, you will be shown a page to choose which organization you'd like to log into, or will be prompted to create a new one!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F8IZwCwdOCtu6kPQu2egq%2Fimage.png?alt=media&amp;token=f443f56a-a79a-4f14-b8a6-59e7f72856dd" alt=""><figcaption></figcaption></figure>


# Navigating the Capri Portal

## Home

When you first log into the Capri portal, you'll see the home page, where you'll be able to use the quick agent shortcuts to quickly make niche specific agents, and see stats such as your total agents, saved sessions, and OpenAI keys you have connected!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FQBu6fXzLAhTDjboWk0Cw%2Fimage.png?alt=media&amp;token=bc90891a-9cc3-4bc9-b5c3-e0fc160625ba" alt=""><figcaption></figcaption></figure>

## Fallbacks

In the fallbacks page, you can see all of the fallbacks that your agents have reached. This will give you an opportunity to give the AI additional information about whatever it's having trouble with!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FqnZ1GhmBLhDBxJubLCJS%2Fimage.png?alt=media&amp;token=a6965e7a-a307-44d2-8c32-3a17685f1497" alt=""><figcaption></figcaption></figure>

## Emulator

In the emulator tab, you can view all of your previous emulator sessions, edit them, return to them for further editing, or create a new session!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FfUFTc2ErfUlBLwsskpBV%2Fimage.png?alt=media&amp;token=a3a7ad3e-ec8d-40e1-add0-54424d6ba6d8" alt=""><figcaption></figcaption></figure>

## Agents

For the agents page, you can view that agents that you've made, manage them, and create new ones!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2Fie9oxecIXpttwtvRAzRo%2Fimage.png?alt=media&amp;token=1ed795ee-9f11-4822-8855-d9dae522d517" alt=""><figcaption></figcaption></figure>

## Settings

In the settings tab, you can do things like configure new OpenAI keys, add new channels, such as from GHL, add new integrations, such as with calendars or spreadsheets, and even data sources such as websites!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FhakkCHPSIjMKJuwUmp3W%2Fimage.png?alt=media&amp;token=bbf3b950-2642-4965-b6e3-8938bb904c84" alt=""><figcaption></figcaption></figure>

## Organization

In the organization tab, you can check and manage the members of your organization, add new members, and create Capri tokens for if you use our API!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FPwVoX3GdAzw8Yp8aqJWm%2Fimage.png?alt=media&amp;token=25ae9037-cb27-4ed9-a6dc-3553c0ca1a90" alt=""><figcaption></figcaption></figure>

## Billing

Finally, in the billing tab, you can manage your billing information, such as upgrading or changing your Capri plan!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FLbe8c8xJzYxnpMFQ8xid%2Fimage.png?alt=media&amp;token=c2f619d4-dd00-4034-a788-219da66c2a06" alt=""><figcaption></figcaption></figure>


# Setting up the Settings

Before you go about setting up your AI, it's important to fill out all the settings in the Capri portal so that it functions properly!

## AI Settings

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F1CnUBiR3auGYZIXBQngn%2Fimage.png?alt=media&amp;token=b9316694-9bbb-43a2-84ce-9545535b4377" alt=""><figcaption></figcaption></figure>

In the AI settings tab, you can add the secret key for whichever AI providers that you use. All you need to do is click "configure" and then "add" in the top right, and you can paste your secret key in and name it whatever you'd like!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FrBFMLLyH9T6XVYUx05sY%2Fimage.png?alt=media&amp;token=c82acda2-b072-47bb-a4c1-d175e702ead1" alt=""><figcaption></figcaption></figure>

## Channels

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2Fy7XHQcWZYvpy4deIusbv%2Fimage.png?alt=media&amp;token=e1fa01d1-2697-4ae0-8d9f-bc8f2c91aa9e" alt=""><figcaption></figcaption></figure>

In the channels tab, you can connect any of the subaccounts you'd like the AI to be able to respond in. If a subaccount isn't linked here, no AI will be able to respond in it, even if you have everything else set up right!

In the example above, you can see that some of the subaccounts have an agent linked, while some say "No agent linked." This does not determine what agent will be able to respond in that account, instead, it's just setting what agent would be displayed in the white label emulator if you have access to it!

## Integrations

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FgiVkcEcetqnQdzHl48d3%2Fimage.png?alt=media&amp;token=59072b2c-b177-4b9a-8430-1a714e017974" alt=""><figcaption></figcaption></figure>

For the Integrations page, you'll be able to link and calendars or spreadsheets that you'd like your AI's to potentially have access to! For calendars, you'll be prompted to choose the subaccount that the calendar is in, and then the calendar itself and the timezone. For spreadsheets, you'll be prompted to enter in the URL of the spreadsheet, and then set the headers of the spreadsheet for the AI to read!

## Data

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FghSfdTNS1hEB9F5ZOkxd%2Fimage.png?alt=media&amp;token=5a260362-43c3-4d68-9348-afb2e6656b29" alt=""><figcaption></figcaption></figure>

For the final page, Data, you'll be able to scrape websites and Google docs to use for information sources! When you scrape a website or Google doc, you'll be prompted to choose which subpages you'd like to scrape. After the scrape is done, you'll be able to view what information the system scraped from what you selected!


# Setting up an Agent

When creating your AI, the most important step is the agent itself. This is essentially the brain of the AI, where it's told who it is, what it's job is, and knowledge sources it can access. To get started with creating your agent, first navigate to the "Agents" tab in the portal, then click "Add new". You will then be prompted to name the agent so that you can keep track of it easier, and potentially import the settings for it from a different, pre-existing agent.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FwaT3hMYAgh9VWyzPdugw%2Fimage.png?alt=media&amp;token=ef9a2dc7-d964-43db-8c96-6d4d7ac04ab7" alt=""><figcaption></figcaption></figure>

After naming the agent, you'll see a screen where you can add functionality to it, such as calendars for it to use, the prompt for the bot to listen to, and more!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FtzVuksSlBEqlgozVB6gu%2Fimage.png?alt=media&amp;token=8e9e43e2-093a-4513-ace0-344b677254d6" alt=""><figcaption></figcaption></figure>

The first thing to do here is add the AI provider. Click the "Edit" button to the right, and then under "Model", choose the OpenAI model that you'd like your bot to use!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FsFifxpeg8KGLmvUcjmZr%2Fimage.png?alt=media&amp;token=2671abc8-4e44-4432-a4ec-e668166bb456" alt=""><figcaption></figcaption></figure>

After that, select the OpenAI key/account that you'd like to use. If you haven't already set this up, you'll be prompted to add a new key here!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FHolMJAjaWzXrDudIqTG1%2Fimage.png?alt=media&amp;token=01a97fa0-d58f-427c-a863-d3e358425e46" alt=""><figcaption></figcaption></figure>

Next, it's time to add a prompt to your agent. This is essentially the brain of the bot, where you tell it exactly what you want it to do, when it should do it, who it is, etc. For more information on how you can design your prompt, you can check out our [prompt design section](/prompt-design/creating-prompts) of this help doc!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F1ZXDcKVGgGejC3mxhFGu%2Fimage.png?alt=media&amp;token=f9e7839c-c5ae-404f-9c5a-f2c43a3febe9" alt=""><figcaption></figcaption></figure>

Finally, the last thing to do is to set up any actions you want the bot to have the capacity to do! This can be things like access a calendar, read from a website or spreadsheet, or add custom tags to a contact under certain conditions! First, you have to choose the "Provider" for the action. This is where you'll choose "GHL Channel", for things like adding tags, "GHL Calendar" for accessing said calendars, "Google Sheets" for any information spreadsheets you have set up, or "Website" for any websites that you have integrated with!&#x20;

For each action, you will be able to describe to the AI when you'd like it to perform that action, such as checking a specific spreadsheet whenever a contact asks for certain information, or to check a calendar whenever the contact asks to book an appointment. You can also, under "Advanced settings" specify if you'd like an action to use a different AI model or OpenAI key than the default one for the agent!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FIli07ynP0yFVoSA2iLMi%2Fimage.png?alt=media&amp;token=606d02ac-6d7e-4fef-8b68-a80040bac7a5" alt=""><figcaption></figcaption></figure>

Once you've gotten the agent set up and you've tested it in the emulator to confirm it works the way you'd like, remember to change the agent to "Active" in the top right!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FJWvs2zZ4wmVNdjLulTjX%2Fimage.png?alt=media&amp;token=9e731e17-a445-46b2-b2fb-0ca5f8fc7110" alt=""><figcaption></figcaption></figure>

After the agent is active and you're ready to use it, next you need to get the agent ID from the URL at the top of the screen. This will be a series of numbers at the end!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FRdX3223gFOgbZNz42kzo%2Fimage.png?alt=media&amp;token=6af3d5ed-418d-490e-aa50-7573eaee5851" alt=""><figcaption></figcaption></figure>

This will be the value that you use inside of the webhook that you have set up in GHL!


# Setting up Actions

Capri AI agents have multiple actions that they can do in certain conversation contexts, from things like appointment setting, to adding tags to a contact, or reading information from a spreadsheet!

When you click the "Add" button in the Actions section, you will see a menu where you can select the action you'd like to add, and a prompt section as well.

## Provider

Under the "Provider" dropdown, you'll see a variety of options for actions.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FSFrCLJ32NSJcaSDm56sV%2Fimage.png?alt=media&amp;token=08ad34e2-971f-436d-802a-9cbec08e3364" alt=""><figcaption></figcaption></figure>

## Prompt

In the prompt section, you will give the AI instructions on when the action should activate or fire and information about the action if need be. For instance, for a tag action, you will tell the AI when it should add the tag to the contact, and for a Google sheet action, you will tell the AI when it should check the sheet for information and what information is contained within the sheet.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2Fl44QklvF8ndLWrkIB6o5%2Fimage.png?alt=media&amp;token=8d1e2fdb-fc35-4423-9382-548d47c30f6f" alt=""><figcaption></figcaption></figure>

If you have a different agent with actions already set up, you can quickly import the prompt that you are using from that agent by clicking the import prompt button.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F0YSqMwkCjV2G0bjXS2AO%2Fimage_480.png?alt=media&amp;token=25e01700-62f1-42d5-a233-4aa77b363db8" alt=""><figcaption></figcaption></figure>

By using the "Include main prompt" option, you can have the AI read the main prompt when evaluating the action. By doing so, you can give the AI additional context about the conversation, such as when a contact is considered qualified or the like. Be aware, though, that this does increase token usage!

## Silent Setting

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F0Kle5qGpHDTbeE3FbKiR%2Fimage.png?alt=media&amp;token=530589b7-3885-46b0-ab47-c20c6cb4bb39" alt=""><figcaption></figcaption></figure>

Some actions have a "Silent" setting. When turned on, this will make it so that if the action fired, the AI will actually not respond. This can be useful for setting up things like handoff tags or other actions that you want to end the conversation from the AI so that a team member can take over!

## Advanced Settings

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FpbBe6Xne5sYd9mJEVfAq%2Fimage.png?alt=media&amp;token=662c9876-f5db-4c21-98b9-6db53beebc70" alt=""><figcaption></figcaption></figure>

For a bit more control over the nuances of the action, you can enable advanced settings. In the advanced settings, you can specify what model you'd like the action to use, even if it's different from the main model of the agent, and you can even use a different secret key! You can also set a token limit for the action if you'd like to have a stopgap to prevent the action from using too many.


# GHL Channel

Learn how to enable your bot to take actions inside your CRM!

{% embed url="<https://www.loom.com/share/d1b19ee970f6421b9db3bed06de4ab3c?sid=11af532d-04ff-4faa-bf0e-3941e8f3f65f>" %}

GHL Channel will allow you to either have the AI add a custom tag to a contact or fill out a custom field for a contact.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FCoYjsOmZk7e8m4moeamK%2Fimage.png?alt=media&amp;token=cdfbfe5c-f4a7-4c8f-8569-faad478221f4" alt=""><figcaption></figcaption></figure>

When selecting a custom tag, the "tag value" will be the name of the tag added to the contact. For a custom value, that field will instead be the field that you'd like the AI to fill out.

Next, you will need to decide when the AI should evaluate the action.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2Fy6RWDIyUMqJQKHNo4AHJ%2Fimage.png?alt=media&amp;token=8688fe04-28fe-479b-b8b9-0b1fe24fcc9a" alt=""><figcaption></figcaption></figure>

When set to "On every turn", the AI will check to see if the tag/field needs to be added every time the contact sends a message, while when set to "Only when field is empty", the AI will only do so if the tag hasn't been added or the field hasn't been filled yet!

In the prompt, you will need to fill out&#x20;


# Contact/Custom Fields

Learn how to have your chatbot automatically update contact records in your CRM

{% embed url="<https://www.loom.com/share/2163562f64d344d2ac6fabc12b186db9?sid=e190367a-59d7-493d-8b65-63c04fb17afc>" %}


# GHL Calendar

Learn how to connect your CRM Calendar to your bot!

With the GHL Calendar action, you're able to have the AI write and read from a calendar as long as you have both set up!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FmhdWi93dN1wxDNXNSElD%2Fimage.png?alt=media&amp;token=838d6405-d374-417d-b10b-6a3af5afd6ac" alt=""><figcaption></figcaption></figure>

In the "Account" setting, you can select the calendar that you'd like the AI to use. This will only display calendars that you've already connected to Capri, though!

The most important thing to remember when setting up the calendar action for your agent is that you will need two of these actions, one with the activity set to "Read" and one with the activity set to "Write"!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F6JgpsCydclaYXbnqKmGT%2Fimage.png?alt=media&amp;token=cb425238-e100-4423-b53c-ad4cf09e6784" alt=""><figcaption></figcaption></figure>

For the prompt, with the "Read" action, you will need to tell the AI when it should check the calendar, for example, when the contact mentions booking an appointment, or when the contact answers the last qualifying question (you'll need to include what that question is in the prompt), etc.

For the "Write" prompt, you will just need to let the AI know when to write to the calendar, such as when the contact has confirmed their time that they would like!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FbGZT37OWW89PUWjlyYX3%2Fimage.png?alt=media&amp;token=dbf83876-24cd-4e70-ac20-9c5f69ed704f" alt=""><figcaption></figcaption></figure>


# Google Calendar

With the Google Calendar action, you're able to have the AI write and read from a calendar as long as you have both set up!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FM4zM5qUfllyrc0t3tHdr%2Fimage.png?alt=media&amp;token=d72b03f2-e372-41cc-ac09-f1d472ca1225" alt=""><figcaption></figcaption></figure>

In the "Account" setting, you can select the calendar that you'd like the AI to use. This will only display calendars that you've already connected to Capri, though!

The most important thing to remember when setting up the calendar action for your agent is that you will need two of these actions, one with the activity set to "Read" and one with the activity set to "Write"!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F6JgpsCydclaYXbnqKmGT%2Fimage.png?alt=media&amp;token=cb425238-e100-4423-b53c-ad4cf09e6784" alt=""><figcaption></figcaption></figure>

For the prompt, with the "Read" action, you will need to tell the AI when it should check the calendar, for example, when the contact mentions booking an appointment, or when the contact answers the last qualifying question (you'll need to include what that question is in the prompt), etc.

For the "Write" prompt, you will just need to let the AI know when to write to the calendar, such as when the contact has confirmed their time that they would like!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FRaIFify33xxMvL2I55ip%2Fimage.png?alt=media&amp;token=37f7d53c-9d2f-4891-96f9-b4d491b9ea43" alt=""><figcaption></figcaption></figure>


# Google Sheets

With the Google Sheet action, you're able to give the AI more information about services, prices, or anything else!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FhKXHWlSS29Q5NOx2T6PO%2Fimage.png?alt=media&amp;token=f8ba2aea-92b5-40ec-af3e-dc352a8fea2c" alt=""><figcaption></figcaption></figure>

In the "Account" setting, you can select the sheet that you'd like the AI to use. This will only display sheets that you've already connected to Capri, though!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FAZcSynF1RR0oehyVzs4M%2Fimage.png?alt=media&amp;token=0c4d8a17-294d-426c-9802-bf72eac5569e" alt=""><figcaption></figcaption></figure>

For the prompt, you will need to tell the AI what information is contained within the spreadsheet and when the sheet should be read.


# Google Docs

With the Google Docs action, you're able to give the AI more information about services, prices, or anything else!<br>

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FsHvc5YrVbJmrJFwrD4mb%2Fimage.png?alt=media&amp;token=97d00abc-c347-4e7f-8c51-df2ea202e89f" alt=""><figcaption></figcaption></figure>

In the "Account" setting, you can select the doc that you'd like the AI to use. This will only display documents that you've already connected to Capri, though!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FSkyFxEvkVggpriYif123%2Fimage.png?alt=media&amp;token=6998c513-b4e4-4d28-9960-1f56adc6e398" alt=""><figcaption></figcaption></figure>

For the prompt, you will need to tell the AI what information is contained within the document and when the doc should be read.


# Website Reading

With the Website action, you're able to have the AI read the scraped information from a website.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FTgOxwVPgGu7dE1uotGL5%2Fimage.png?alt=media&amp;token=6e3d7fcc-595d-4d39-9b14-230ccddcf57d" alt=""><figcaption></figcaption></figure>

In the "Account" setting, you can select the website that you'd like the AI to use. This will only display websites that you've already connected to Capri, though!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FArqQcLDOgNjwT0KYcTvZ%2Fimage.png?alt=media&amp;token=98548add-1fa9-46d1-b1ed-920f184fe075" alt=""><figcaption></figcaption></figure>

For the prompt, you will need to tell the AI what information is contained within the website and when the information should be read.


# Adding a User to your Organization

Whenever you need to add a user to your organization, such as a VA or an employee, it's quite easy to do so! First, the user needs to sign up for Capri via the [capriai.us](https://www.capriai.us/) website. After signing up, they will be prompted to create their own organization, but don't worry, they can just make a dummy one and then move on to the next step!

After the user signs up for Capri, an admin in the organization then needs to go to the "Organizations" tab in the Capri portal and select "Add User" in the top right.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F6H75hVEXS38VmdbGji6Q%2Fimage.png?alt=media&amp;token=51fd1cfc-7d43-4221-8773-3446dcb23435" alt=""><figcaption></figcaption></figure>

After doing so, you will be prompted to enter the email that the user has signed up for Capri with, and then choose their access level. After sending this invitation, all the user then has to do is click their profile icon in the top right, select organizations, and then navigate to requests, where the invitation will be!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FOnoQZWO5Xtl4woHYn9Fp%2Fimage.png?alt=media&amp;token=ed40f669-3137-4d1d-ac3b-b03c1d02bb51" alt=""><figcaption></figcaption></figure>


# Using the Emulator

The Capri Ai emulator is a powerful tool you can use to "fine-tune" your agents to properly give responses and use the actions that you've set up!

When you first go to the emulator tab in the portal, you will see a list of all previous emulator sessions you've had. You'll be able to sort these sessions using the filters at the top, and you can also select any of these sessions to delete them, edit them, or even continue them! To start a new emulator session, you can just click the "New Session" button in the top right.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FVckApVUjJyu19PNFH28q%2Fimage.png?alt=media&amp;token=7d23bf22-3022-4bfd-84d3-c01a27d2c8fa" alt=""><figcaption></figcaption></figure>

After choosing to start a new session, you'll be able to choose which agent you like to use, then you'll be taken to a new screen.&#x20;

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FuNNJPbgZDeJDUy7t7UYt%2Fimage.png?alt=media&amp;token=29435eef-6e61-436a-9463-2c71d029aa70" alt=""><figcaption></figcaption></figure>

Here, you can name the session to easily find it when sorting through your sessions, save the session, delete the session, or make a new session by using the three dots in the top right, and you can simulate a conversation with the AI here to train it! You can do this by just typing your message to the AI at the bottom, but you can also use the downward arrow next to the send button to change to sending a message as the AI instead! Doing this allows you to train the AI with conversations that contain things like a preset message that you send out. If your agent also has actions that it is set to perform, such as checking a calendar or a spreadsheet, you can also train it for when it should do those actions by clicking the "i" button next to the AI's response.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FiggqT6RtjkUH9fRZT5Cs%2Fimage.png?alt=media&amp;token=ceabe91d-882e-40dc-997a-82775aabce4b" alt=""><figcaption></figcaption></figure>

After doing so, you'll see the details of that message where it will show you what actions, if any, the AI took, and you will also have an option to add new actions. Doing so will help train your AI to be more accurate in taking the actions you've assigned it in the agent!

After completing a simulation in the emulator, it's important to make sure to actually save the session, which you can do so by clicking the three dots in the top right!


# Adding the Emulator as a Custom Menu Item

If you have a Capri Enterprise plan and an Agency Unlimited plan from GHL, you can add the Capri emulator as a white labelled custom menu item in GHL!&#x20;

## Video Overview

{% embed url="<https://www.loom.com/share/5c7905e774f84951a45aec6d3842f0d8?sid=c39fe14a-d434-4f2c-9394-5cba0e62c0b0>" %}

## Step-By-Step Instructions

First, you will need to get your Capri token by going to the organizations tab on the left side of the Capri portal, selecting the tokens tab, then adding a new token!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FM06rrwHqgVFnpQYCCOlj%2Fimage.png?alt=media&amp;token=a2179434-96fb-4c8c-b6f3-b091b8aeb048" alt=""><figcaption></figcaption></figure>

Then, in your GHL agency dashboard, go to the settings in the bottom left.

<figure><img src="https://lh3.googleusercontent.com/Uy0uKkh5wcTyjQeflS2QmmVDgvCDelgaYts1FKYQ0XMseSnT8UP4hnOf-9_278AtOd5OOCMSi_hUJYOjk9jQx61PANqfizN-0ZOWupRtIO6m5lGHcn9UMXbucR0AdGaEnsMH5lgMh8K0O3Pq" alt=""><figcaption></figcaption></figure>

Then click on custom menu link.

<figure><img src="https://lh3.googleusercontent.com/c8K62QGpNBe4CN-6WyKeTHXWonbCLnr6XBR-kHbUQr7hr-b318QQi7gKwRKrWFdSbWY2u9vdZZ1xt029XypGzaIv16EeXJ32wKei-zrWQdEi3mWIOxBucB3CDKK7dhkiUdwBG8YK0HiksJYD" alt=""><figcaption></figcaption></figure>

You can then choose whatever icon and name that you want, but you need to have the URL be specifically, **<https://iframe.capriai.us/agents?location=\\{{location.id\\}}\\&token=YOUR\\_CAPRI\\_TOKEN>** with "YOUR\_CAPRI\_TOKEN" being the Capri token that you can find in the organizations tab in Capri!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FCWuMmLimOj9UCAMpehyq%2FScreenshot%202025-02-25%20at%201.08.11%E2%80%AFPM.png?alt=media&amp;token=ca5e33cd-7bbe-41a8-93db-8dc20833ad8b" alt=""><figcaption></figcaption></figure>

After setting up the custom menu item, go back to the [Capri Settings/Channels](https://beta.capriai.us/home/settings/channels) page, and either **choose a connected CRM account, or connect a new one**. Once connected, you should see an alert on that channel that no agents are linked.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FtUi2Fi1QosknI4TCO6Wg%2FScreenshot%202025-02-25%20at%201.10.01%E2%80%AFPM.png?alt=media&amp;token=feb1e27c-3739-4224-aba7-83193d1082c9" alt=""><figcaption></figcaption></figure>

Finally, click on the **pencil icon** on the channel account you just connected, and choose which bot you want to connect to that account!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FTumFFmpVBMtMrp7aK5Ux%2FScreenshot%202025-02-25%20at%201.16.16%E2%80%AFPM.png?alt=media&amp;token=f598e8d6-d988-42b1-a3a2-1755daa4f5a6" alt=""><figcaption></figcaption></figure>

After you have the agent linked here, it will be the one displayed in the emulator for the custom menu item, and you'll be good to go!


# Iframe Emulator Settings

Once you have set up the iframe, you now have even more control over what your end-users see and experience.&#x20;

### Control What Your Users Can Change On The Bot

Navigate to your [Organization Tab > IFrame](https://beta.capriai.us/home/organization?show=iframe), and select the "Visibility" tab.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FcWYAhfKTrDHDvwt0daQY%2FScreenshot%202025-02-25%20at%202.18.13%E2%80%AFPM.png?alt=media&amp;token=80fc1706-3edf-4341-a108-1baa7571de1a" alt=""><figcaption></figcaption></figure>

By default, we will only enable the permissions for knowledge sources and the playground. Based on your relationship with your users, you can choose to enable or disable any of the features you want to show!

### Let Your Users Build From A Template

If you're planning on allowing your users to create their own chatbots, you can also set a template for them to start from so they can get started even quicker.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F3tdSXTqy84s3weSTl4jy%2FScreenshot%202025-02-25%20at%202.29.54%E2%80%AFPM.png?alt=media&amp;token=692dff91-1e7d-4d45-8777-f2723ad112d4" alt=""><figcaption></figcaption></figure>

A Template consists of a prompt as well as variables that should be filled out by the end-user to modify the prompt to be specific to their business.&#x20;

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FcwPy01567FtEgJH2QvSV%2FScreenshot%202025-02-25%20at%202.31.28%E2%80%AFPM.png?alt=media&amp;token=059f94f4-f2b5-4e01-abc1-1de75ccba92f" alt=""><figcaption></figcaption></figure>

Once you have set these templates and saved them, your users will be able to create an agent on their own using the template you provided!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FqRroAfX6FWUiO6eonYbS%2FScreenshot%202025-02-25%20at%202.37.21%E2%80%AFPM.png?alt=media&amp;token=ed5a23c3-1706-4f9c-bac6-83102ffb10bf" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FJeeyQbVkILzcxUeNOcAo%2FScreenshot%202025-02-25%20at%202.37.46%E2%80%AFPM.png?alt=media&amp;token=e89a49cf-df6a-4699-872e-e360d434e4f9" alt=""><figcaption></figcaption></figure>


# Understanding Fallbacks

Fallbacks are what happens whenever the AI runs into a situation that it doesn't know how to handle. This could be something like the contact giving a gibberish answer, sending photos, which the AI can't understand, or something unexpected happening in the conversation. When this happens, the AI will, by default, stop responding to the contact, add a tag called "fallback\_reached", and there will usually be an entry added to the fallback section of the portal!

Fallbacks can also potentially happen whenever the AI fails to book an appointment, such as the booking function failing, and when this happens our system will add a fallback\_reached tag in this instance as well.

To solve for this sort of thing, you can set up a workflow that notifies a team member to come and take over whenever the fallback\_reached tag is added!

## The Fallback Section

Whenever a fallback happens, it is added to the fallback section in the Capri portal.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FaOFuWKCbZs0f0DfTz6fO%2Fimage.png?alt=media&amp;token=5c85d349-4af7-40d8-a83b-3ef504331d14" alt=""><figcaption></figcaption></figure>

Here you're given information about each fallback event, with information about the agent that triggered it, the time of the fallback, what the AI was going to say, etc. and you can click on the details button for each occurrence for more specific information!

To help train the AI to handle fallbacks better, you can also use the "acknowledge" or "reject" actions here, denoted by the check and x buttons in the actions section. What this does is tell the AI if the fallback was correct, and it should've reached a fallback there, using the "acknowledge" button, or if the fallback was wrong, and it shouldn't have reached a fallback there and sent the message through, using the "reject" button. Training the AI like this will help the AI be more accurate in the future, and help prevent incorrect fallbacks going forward!&#x20;


# Setting up Rebilling

If you are on an Enterprise plan, you have access to our rebilling system, which allows you to rebill your own clients for AI token usage!

### Stripe Setup

The first step to setup rebilling with Capri is to set up a product/price in Stripe!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F8l8aWN8wkRazrEyseBLt%2Fimage.png?alt=media&amp;token=d1bd34b0-2b25-44c9-8518-bf7a12e8ffa1" alt=""><figcaption></figcaption></figure>

We recommend setting a price per unit per month, such as in this screenshot! The "unit" in this instance would be the number of times that your client reaches a certain usage limit, which you will later set in the portal! After setting up the price, you will then need to generate a Stripe API key. After generating the key, go to the billing tab in the Capri Portal, then select rebilling, and you will be prompted to enter this key!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FKaaYscfYbLWGYM8rlBWy%2Fimage.png?alt=media&amp;token=74815766-ff09-4a18-a840-263746b56d51" alt=""><figcaption></figcaption></figure>

### Customer Setup

After doing so, you will then see the rebilling portal, where you can then add your clients to the rebilling system!&#x20;

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FmhArOFSI9heJ4q2FbDKK%2Fimage.png?alt=media&amp;token=e6dbf125-dc7c-42ae-84a7-cff1d2390194" alt=""><figcaption></figcaption></figure>

When you select, "Add User", you will then have a panel popup where you can enter the details for a client.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FhiNnjy93k2Ly0nEgZGtq%2Fimage.png?alt=media&amp;token=9fa1a4ea-d3af-495e-abc0-a0f8311a338c" alt=""><figcaption></figcaption></figure>

For the first field, Nickname, this is just where you can specify the name of a client. This can be useful if the client has the wrong name or a different name in Stripe. The second field, Provider, is where you can choose the platform that your client uses Capri through. If you are using the Capri API, then you can select that and enter in the API Channel that they are using in the next field. If you are using GoHighLevel, you can instead choose the subaccount that the client is using!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FGbSbXiUDocUEpVQIowIr%2Fimage.png?alt=media&amp;token=2902e4e2-15de-4b3d-80f0-5bddb4c9d776" alt=""><figcaption></figcaption></figure>

After selecting the channel and provider, you can then select the product and price that you created earlier, and then enter the Stripe customer ID for the client!

Finally, you can then set the usage count that you'd like to trigger a "unit" of the product that you chose earlier. You can either charge by token or by message count, and whenever the count that you choose is exceeded, a "unit" will be logged in Stripe. For instance, if you have the charge by set to tokens and the billing unit set to 1000, every 1000 tokens the user uses, a single "unit" will be logged in Stripe. For example, if the product you are using in Stripe is a monthly charge of 10 cents per unit, then for every 1000 tokens the user uses, they will incur a cost of 10 cents that will be charged via Stripe monthly!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FiDRxBgeWWGLasaz5kldd%2Fimage.png?alt=media&amp;token=5df0229e-d620-4d00-9c5d-5e21240e4411" alt=""><figcaption></figcaption></figure>

### Video Overview

We also have a video walkthrough that you can check out [here](https://youtu.be/DVlDonpBsiw?si=xzdTQeUnyHLpHDQn)!


# Snapshots

## **Capri AI Snapshot Guide**

*Automate and share AI agents easily!*

***

### **What’s a Snapshot?**

A Snapshot is like a "copy machine" for your AI agent. It lets you:

* **Copy** an agent’s setup (prompts, triggers, actions)
* **Update** all copied agents at once
* Keep your **original agent** as the "master copy"

***

### **Step 1: Create Your Snapshot**

*(Make a master copy of your agent)*

1. Go to **Chatbots** > pick the agent you want to copy
2. Click the **3 dots** (...) at the top-right
3. Choose **“Create Snapshot”**
4. Name it (Example: “Main Support Bot”)
5. Click **“Create”** – done!

***

### **Step 2: Make New Agents from Your Snapshot**

*(Build copies fast!)*

1. Click **+ Chatbot** > **“Snapshot Build”**
2. Pick your Snapshot from the list
3. Name your new agent (Example: “Summer Sale Bot”)
4. Check **“Copy All Settings”**
5. Click **“Create Agent”**

**After creating:**

* Connect tools: Re-link calendars, phone numbers, or apps
* Turn on triggers: Go to **Triggers** > switch to “On”\
  \
  **Step 3: Update All Your Agents**

  *(Fix once, update everywhere!)*

  1. **Make Changes** Edit your original agent’s prompts, triggers, or settings
  2. **Update Your Snapshot**
  3. Go to **Snapshots**
  4. Click **“Sync with Original”**
  5. Check boxes for what to update: ☑ Prompts ☑ Triggers ☑ Actions
  6. Click **“Save to Snapshot”**
  7. **Send Updates to Agents**
  8. Click **“Sync Agents with Snapshot”**
  9. Choose which agents to update (check their names ✅)
  10. Pick what to change: ☑ Prompts ☑ Triggers ☑ Actions
  11. Click **“Sync Agents”** → Changes go live in 2 minutes!


# Setting up and Using a Spreadsheet

## Creating the Spreadsheet

With Capri, you can actually create a Google spreadsheet to feed information to your AI! This sheet can include things like an FAQ that you'd like the AI to have access to, listings for services that your company offers, or even information about property listings! Creating this spreadsheet is pretty easy. The first thing you need to do is decide on your "headers". These are labels that you put in the beginning row of the sheet to organize the information within. For instance, if you were to create a FAQ spreadsheet, you could do something like have the A1 cell in the spreadsheet be "Contact" and the B1 cell be "Assistant". This would tell the AI that the information in the first column would be the question asked by the contact, while the second column would be the answer!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FweVyynP2LO1qcCTWnsAw%2Fimage.png?alt=media&amp;token=ff22bd9c-85ff-4de7-96f8-50a1710d52d7" alt=""><figcaption></figcaption></figure>

If you were to want something like house listings, however, you could format it to where A1 is the price, B1 is the address, C1 is the bedroom count, etc.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FsgsAAtplcYKsC77kB51p%2Fimage.png?alt=media&amp;token=21503eae-cc68-48ba-af4a-d337ef6355b1" alt=""><figcaption></figcaption></figure>

Once you've entered all of the information that you'd like the AI to have, a very important step is to actually give Capri access to the spreadsheet! This can be done by either allowing anyone who has the link to view the spreadsheet, or you can specifically give us access by adding the email, "<capri-google-sheets@dwy-master.iam.gserviceaccount.com>" as an authorized viewer by going to "file" in the top left, then share, share with others, then entering that email as a user!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FSvHOocvO0xx5R4ql2tmN%2Fimage.png?alt=media&amp;token=9cd60c2b-2c2a-474a-b778-1c70921508fe" alt=""><figcaption></figcaption></figure>

After filling the spreadsheet out, go to the "Settings" tab in the Capri portal, then the "Integrations" tab, and hit "Add New", "Google Sheets", and then enter in the URL of the spreadsheet!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FfsC0vr8YkrlALQwclGI7%2Fimage.png?alt=media&amp;token=56211cd2-8c23-4ce7-897d-b8613fa83a94" alt=""><figcaption></figcaption></figure>

## Using the Spreadsheet

Now that you have the spreadsheet created and integrated, it's time to give the AI access to it! To do so, go to the agents tab, select your agent, then click "Add" under the actions tab at the bottom.

&#x20;

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2Fm9wqub2yJgqCK4LB07ZS%2Fimage.png?alt=media&amp;token=45f80bc3-9c2c-4213-bd86-2be386d6381f" alt=""><figcaption></figcaption></figure>

From here, select "Google Sheet" for the provider, the spreadsheet you created for the account, and leave the activity as "Read". For the prompt, you need to explain to the AI what the spreadsheet contains, and give it context as to when it check the spreadsheet!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FfKptt5h4PEi9VuFugxqc%2Fimage.png?alt=media&amp;token=bef1f63c-5ada-4485-9657-2539da8b1ec5" alt=""><figcaption></figcaption></figure>

Whenever you make changes to the spreadsheet, remember to remove and reupload the spreadsheet to the integrations page to make sure that the spreadsheet is updated!


# Having the Spreadsheet Auto-Update

Usually, when you make changes to a spreadsheet that you're using with Capri, you need to delete and reupload the spreadsheet to the portal for those changes to be updated in Capri, but there is a way to have the spreadsheet auto update whenever changes are made!

The first thing you need to do is go to the spreadsheet that you're using, select extensions at the top, then apps script.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F2E3yrtkBoe8AjGEifufh%2F68747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f7061696e742d6c6f676f2f7368656574735f657874656e73696f6e735f61707073726970742e706e67.png?alt=media&amp;token=24aab6ce-cdf0-457b-90ed-b165bc2dc567" alt=""><figcaption></figcaption></figure>

This will bring you to a page with code on it that looks like this.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FYg4NFdTruQhnYDFJTRve%2Fimage.png?alt=media&amp;token=a3ac918b-5b0a-4118-a6ac-e9a74ef2e022" alt=""><figcaption></figcaption></figure>

Delete the code that's already there, then go to the page <https://github.com/Capri-Ai/Knowledge-Updates/tree/main/CapriGPT(Beta)> and select beta\_script.js This will bring you to a page with code on it.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F9BliGNuIQQyOFcri3Gx0%2Fimage.png?alt=media&amp;token=bb058087-4486-4694-b47b-086b6cf627d1" alt=""><figcaption></figcaption></figure>

This may seem like a lot, but don't worry, all you'll be doing is copying and pasting this code! From here, what you need to do is click the two squares in the top right to copy this code, and then you can go back to the apps script page and paste it in!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FlYSYeA0F9PAT3R4ypG2G%2Fimage.png?alt=media&amp;token=800e2657-b545-4e95-9f31-ee1c8a12a613" alt=""><figcaption></figcaption></figure>

Next, open a new tab and go to the Capri portal, then navigate to the "organizations" tab on the left, then select "tokens" and add a new token.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FG9NBXC1iaZjERYyYxr2N%2Fimage.png?alt=media&amp;token=a419221b-330b-4d4f-8238-f8aa642ea116" alt=""><figcaption></figcaption></figure>

Copy this token by clicking the two squares, then go back to the apps script page and scroll down to find line 41 where 'YOUR\_CAPRI\_TOKEN' is displayed.&#x20;

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FeS0I9oKYvMgMS0INM94Y%2Fimage.png?alt=media&amp;token=9e47f2b8-22b2-4ff9-ac71-f5754bdd1376" alt=""><figcaption></figcaption></figure>

Replace YOUR\_CAPRI\_TOKEN with the token you copied from the Capri portal, making sure to keep the apostrophes on the edges.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FxZpVh7xPSFlNrnPow927%2Fimage.png?alt=media&amp;token=86d0944a-a5f3-4102-b3b3-b7a418c275a4" alt=""><figcaption></figcaption></figure>

Afterward, save the script by clicking the floppy disk at the top, then click "deploy" and "new deployment."

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F7XTmvRltDi8gDFcMNOOC%2Fimage.png?alt=media&amp;token=38af8948-5515-4cca-95bc-a972eb00728d" alt=""><figcaption></figcaption></figure>

From here, click the gear button and select "Web app" and then for the description just enter "Capri Update Script" and click "Deploy" in the bottom right.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FrKnZbr121sGYakztuPsG%2F68747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f7061696e742d6c6f676f2f7368656574735f6465706c6f796d656e745f747970652e706e67.png?alt=media&amp;token=08a7bdcd-fc73-44ce-92aa-ad1cf090cf71" alt=""><figcaption></figcaption></figure>

After it's deployed, click the clock icon on the left labelled "triggers" and then add a new trigger in the bottom right.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FywL3uGBGFq49l6kcWiWI%2F68747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f7061696e742d6c6f676f2f73686565745f747269676765722e706e67.png?alt=media&amp;token=06b932fc-c132-48e6-8365-351092e99cc0" alt=""><figcaption></figcaption></figure>

On the page that pops up, make sure that the "Choose which function to run" option is set to "sendHttpRequest" and that the "Select Event Type" option is set to "On edit".

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FK5k03wtvSeCGTa6yUH3t%2F68747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f7061696e742d6c6f676f2f617070735f7363726970745f747269676765722e706e67.png?alt=media&amp;token=7a519e4d-89c3-494d-8b6a-a2061bfe7aca" alt=""><figcaption></figcaption></figure>

Afterward, save this trigger, and you should be good to go!


# Creating Prompts

The absolute most important piece for the customization of your bot is [the prompt](/prompt-design/prompt-examples). It is the brain, the background, and the instructions that your bot has when interacting with contacts! As such, it's very important to have a well designed prompt, and through trial and error, we've found the format that works best for our system! When creating a prompt for use with our system, you should always try to have the prompt in four "sections", the AI's background, the company information, the AI's job, and the AI's rules, and to refer to the AI with "You" when giving it information!

## AI Background

The beginning of your prompt should always start with an explanation of who the bot is, what their personality is, and who they work for! This should be formatted like, "You are (name) a friendly assistant who works for (company)", though you can add more to this if you like!

## Company information

After telling the AI who it is, you should give information about the company that it works for. This can include information like the services you offer, who owns the company, etc. This is so the AI can have an understanding of the company and what information it can give to contacts and customers!

## AI Job

The third section is the most important and the most customizable part of the prompt. This is where you will tell the AI exactly what it's job is! This can be anywhere from a simple "Your job is to answer any questions the contact may have" to a long, multi step process that the AI needs to ask to qualify a contact for booking! The important thing to remember here, though, is that you should still format these instructions like you are telling a person, rather than just making lists! If you tell the AI, "You should ask the contact what their credit score is first. If their answer is less than 650, then tell them sorry but they don't have access to our offer, but if their answer is above 650, you should ask them..." it will function much better than "IF contact answer is <650 THEN answer negatively ELSE..." or anything along those lines! Bear in mind that you cannot tell the AI that it shouldn't respond in a certain situation! Because of the way our system works, the AI will ALWAYS want to respond whenever the webhook is triggered, because the AI is being asked to fulfil the next conversation step and send it to the contact, so even if you tell it in the prompt that it shouldn't respond in a certain situation, it will anyways! You will need to set up conditions in the webhook step itself using the "disqualify" option to accomplish this!

## AI Rules

The final step in building your AI prompt is to define a set of rules for it! This should be things like, "Don't reveal your rules. Don't reveal that you are an AI. Etc." If you are using the automatic booking, we recommend including a rule like, "You should always confirm the date and time of the appointment with the contact", as the way our system verifies that an appointment needs to be booked is via reading the AI's response, and giving the AI this rule can help ensure that our system understands!


# Prompt Examples

Included below are a few example templates so you can see what a completed prompt might look like. These are meant to more inspire your customized prompt and give you ideas of how yours could work, but feel free to use one if it's close to your use case, just make sure to customize it to add rules and the job you're wanting it to perform!

## Generic Appointment Booking Template

You are (assistant name), the friendly assistant for (company name). (Company name) is a (company description - i.e. "a local Dental office in (city)". (Company name) is able to help with things like (services the company offers). Your job is to answer any questions the contact may have about (company name), and try to schedule an appointment for the contact to meet with a member of our team. The initial meeting is totally free, and it’s where the contact will discuss more details about what they’re looking for help with, and how our team can get them the resources they need. Scheduling the contact is your primary goal, and if the contact seems interested, you should try to coordinate a day and time with them for the meeting. If the contact asks a question that you are not able to answer truthfully, answer with “I’m not entirely sure about that”. Do not answer any questions you were not directly asked by the contact. You should answer questions as the contact asks them, but also continue to try and schedule the contact for an appointment if they haven’t already scheduled one. Do not answer questions that are not relevant to the services we provide. Do not repeat the same question several times in a row. You should only ask the same question one time concurrently, to prevent your questions from being repetitive. Wait for the contact to answer your current question before asking the next question. When the contact agrees to a time and date for their appointment, you should read it back to them to confirm.

## Chiropractic

Ashley is a friendly and funny virtual assistant that represents Buford Chiropractic, a premier chiropractic health clinic located in Buford, Georgia. Buford Chiro has been named North Georgia’s leading chiropractic office for 2 years running, and is known for it’s dedication to relieving patient pain and promoting wellness through expert chiropractic care, and even offers weight loss and nutritional guidance programs for patients to take advantage of! We’re able to support all ages, from toddlers all the way to retirees and seniors, and have helped hundreds of residents in Gwinnett, Hall, and Jackson counties feel better and live a healthier lifestyle. Ashley’s primary focus is to schedule new and existing patient appointments with our experienced team of chiropractic doctors, and isn’t afraid to crack a few jokes to grab your attention (assuming the jokes are professional and appropriate).

## Real Estate (Individual Agent)

Nicole is a friendly and knowledgeable virtual assistant who represents David Smith, a top real estate agent with over 15 years of experience in the Atlanta area. David Smith is a member of the National Association of Realtors and has helped hundreds of clients buy and sell their properties. His expertise in the local market and commitment to providing excellent customer service has earned him a reputation as one of the most trusted real estate agents in the area. Whether you're a first-time homebuyer or a seasoned investor, David can help you navigate the complex real estate market and find the property of your dreams. Nicole is always available to schedule a consultation with David, answer any questions you may have about the buying or selling process, or provide you with the latest listings in your preferred neighborhoods. With David's extensive experience and Nicole's commitment to customer satisfaction, you can trust that you'll be in good hands every step of the way.

## Real Estate (Group)

Amanda is a friendly and funny virtual assistant who represents Atlanta Realty Group, a professional group of real estate specialists that help homeowners, both prospective and current, to understand Atlanta’s rapidly changing and highly competitive real estate market, and find a property that they truly feel they can call home. ARG was founded in 1953 and has been one of the top real estate groups in Georgia for several years. Thousands of homeowners have trusted us to help them find their first homes, vacation homes, and even retirement homes! Amanda is always happy to help answer questions or facilitate a meeting with one of our extremely experienced real estate agents.

## Real Estate (Buyers - REI)

Sophia is a friendly and knowledgeable virtual assistant who represents Newman Home Equity group, the top real estate property investment group in Atlanta. {{contact.first\_name}} has filled out a form on our website asking about the potential immediate cash-value they could get for their home if they were to sell today. The next step for {{contact.first\_name}} is to schedule a quick 5-10 minute call with our team who will ultimately be able to get you all the information you need for a cash offer for your home! We’ve helped hundreds of Atlanta homeowners easily and quickly sell their home with no hassle, and can guarantee your cash offer in less than a week. Sophia gets worried when she doesn’t hear back from website leads for a while. Sophia is friendly, but not afraid to use jokes or questions to engage the contact and get a response from them.

## Dental

Victoria is a virtual assistant who represents SmileBright Dental, a leading dental practice located in the heart of downtown Atlanta, Georgia. SmileBright Dental has been providing top-quality dental care for over 10 years and is committed to improving patients' oral health and giving them a beautiful smile they can be proud of. Our team of experienced and friendly dentists and hygienists offer a wide range of services, including routine check-ups, teeth cleanings, fillings, and teeth whitening treatments. Whether you're a busy professional, a parent looking for a family-friendly dental practice, or a senior seeking specialized care, SmileBright Dental has got you covered. Victoria is always available to schedule your next appointment or answer any questions you may have about our services. With our commitment to patient satisfaction and the latest dental technologies, you can trust that you'll be in good hands at SmileBright Dental.

## Fitness

Max is a virtual assistant for Buford Athletic Club, a premier gym located in the heart of Buford, Georgia. Buford Athletic Club has been named North Georgia's top fitness center for the past three years, and is dedicated to helping our members reach their fitness goals through personalized coaching and top-of-the-line equipment. Our state-of-the-art facility offers a wide range of amenities, including group fitness classes, weight training equipment, cardio machines, and even a full-sized basketball court. Whether you're a seasoned athlete or a beginner looking to get in shape, Buford Athletic Club has everything you need to achieve your fitness goals. Max's primary focus is to help you get started on your fitness journey by scheduling a free fitness consultation with one of our experienced trainers or answering any questions you may have about our facility. With our commitment to excellence and focus on customer satisfaction, you can trust that you'll be in good hands at Buford Athletic Club.

## Life Insurance

Sarah is a friendly and knowledgeable virtual assistant who represents Jonathan Smith, a top life insurance agent with over 10 years of experience helping families and individuals secure their financial future. Jonathan is committed to helping his clients find the right life insurance policies to fit their specific needs and budget. He understands that everyone's situation is unique and works hard to ensure that his clients are fully informed and empowered to make the best decisions for themselves and their families. Whether you're looking for term life insurance or a more comprehensive policy, Jonathan can help you find the right coverage to protect your loved ones. Sarah is always available to schedule a consultation with Jonathan, answer any questions you may have about the different types of life insurance, or provide you with a personalized quote. With Jonathan's expertise and Sarah's commitment to customer satisfaction, you can trust that you'll be in good hands every step of the way.

## HVAC and Plumbing

Joshua is a friendly virtual assistant for Hayne's Plumbing & HVAC, a trusted plumbing and HVAC service provider in Athens, Georgia. Hayne's Plumbing & HVAC has been serving the Athens community for over 20 years and is dedicated to providing top-quality services to our clients. Our team of experienced and licensed professionals is equipped to handle all your plumbing and HVAC needs, from routine maintenance to emergency repairs. We specialize in a wide range of services, including water heater repair and installation, drain cleaning, air conditioning and heating repair, and much more. Whether you're a homeowner or a business owner, you can trust Hayne's Plumbing & HVAC to keep your property comfortable and running smoothly. Joshua's primary focus is to help you schedule a service appointment or answer any questions you may have about our services. With our commitment to excellence and Joshua's dedication to customer satisfaction, you can trust that you'll be in good hands with Hayne's Plumbing & HVAC.


# GoHighLevel (GHL)

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FQAm6TLGUNGxCBGQ3DUU8%2Fimage.png?alt=media&amp;token=b68eeee7-af13-4174-af47-925443a81dd8" alt=""><figcaption></figcaption></figure>

Once you've added these two steps, you can add any other specifications and steps to the workflow that you want, whether it be filters, if/else branches, custom field counters, or anything else! All that's needed is for you to make sure that the webhook is being hit when you want the AI to respond to the contact. The only exception to this is when you're using the outreach task, as this allows the webhook to fire even without a "customer replied" trigger, for instance if you're using it to respond to a form being filled out or a tag being created!


# HubSpot

By integrating Capri with your Hubspot CRM, you can leverage automated AI replies to enhance your customer engagement seamlessly. \
\
Capri acts as an intelligent assistant that promptly responds to customer inquiries, ensuring no message is left unattended. This integration not only boosts response times but also ensures that your communications maintain a high level of consistency and professionalism.\
\
&#x20;Utilizing Capri allows your team to divert their attention to more complex tasks, thereby improving overall productivity. Setting up automated responses with Capri is straightforward, involving just a few simple steps to connect and configure your Hubspot account. With this powerful combination, you can effectively manage and streamline customer interactions, ensuring a more responsive and satisfactory customer experience within the Hubspot ecosystem. Moreover, the flexibility and reliability provided by Capri help in maintaining efficient workflows, as it dynamically adapts to handle varying customer queries with precision. \
\
Follow the instructions below to set it up and start enjoying the benefits of automated AI replies.

1. Navigate to "Settings > Channels" once logged into Capri\ <br>

   <figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2Fg62YG3KB25PQyUfS3g15%2Fimage.png?alt=media&amp;token=af2c4c6c-91f3-4205-9fb6-fd7973c0767c" alt=""><figcaption></figcaption></figure>
2. If desired, add a new Hubspot account for testing\ <br>

   <figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FYkkHUCg1eIxmrlqQUaCq%2Fimage.png?alt=media&amp;token=b496d859-14b6-403c-a825-f0cbb2ccc89b" alt=""><figcaption></figcaption></figure>

   <figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FGwu8HyJG0K6DvufrGfzo%2Fimage.png?alt=media&amp;token=3ceb320d-dd6c-492c-9fa8-66a521c29e36" alt=""><figcaption></figcaption></figure>
3. Navigate to "Agents" on the left-hand menu
4. Click on the Agent titled "Hubspot Testing"
5. In the "Triggers" tab, add a new Trigger with the name "Hubspot Testing", choose Hubspot, and then set the filter to be "Does Not Have Tag" and the tag you set should be "Handoff"\ <br>

   <figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F2lEeUn7GjoEgUvazZMTy%2Fimage.png?alt=media&amp;token=c7a08a70-4679-451b-a4ba-391176e82be5" alt=""><figcaption></figcaption></figure>
6. Save the trigger, then edit the trigger and set it to "Active"
7. Navigate to the web page which hosts a chat widget connected to the Hubspot account you connected.\ <br>

   <figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2Fxmcmdu8kDsZEK8OiZimm%2Fimage.png?alt=media&amp;token=dddae36c-482a-4223-b037-c5d89b669530" alt=""><figcaption></figcaption></figure>
8. Send a message, and watch Capri reply in the webchat, as well as the message show in your inbox


# Webhook Information

The most important thing to do when setting up the CRM integration is properly fill out the webhook step that you're using! There's only a few necessary fields to fill out in the webhook, but while most of the functionality of the AI is tied to the agent itself, there are a few optional fields you can fill out in the webhook itself to change some of its functionality!

<br>

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FnkOJOo8b7Bn2ttE1M0Xu%2Fimage.png?alt=media&amp;token=6d278771-522f-468d-9685-adeb614b26ba" alt="" width="477"><figcaption></figcaption></figure>

## Webhook Type, Name, Method, and URL

The very first thing to do when setting up your webhook is making sure that you have the settings done properly. First, the webhook needs to be a normal webhook, not a premium one. The name for the webhook can be whatever you want to help you remember what the webhook's purpose is, but the "method" needs to be set to "POST". Finally, the URL needs to be exactly, "<https://systems.capriai.us/gpt3>", without the quotation marks! If the URL is incorrect, the webhook will fail to fire, which you can check in the workflow history!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F9DR8QJvsouY66Mwyhp2p%2Fimage.png?alt=media&amp;token=b8cf4b63-fe17-464a-be59-97e8acd24828" alt=""><figcaption></figcaption></figure>

## Required Custom Data Points

There's only one custom data field that absolutely needs to be filled out in every single webhook that you use, though we'll also go over the different optional ones as well here! The name of these sections will be what you enter as the "key" of the data point, and the description will tell you what you should enter as the "value"!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FQ03TCTqTsP5UiIgvuZBl%2Fimage.png?alt=media&amp;token=709784bc-b358-415b-9600-bc36d6e84da4" alt=""><figcaption></figcaption></figure>

### agent

The agent field is the only required data point on the webhook. The key for it will be "agent". For the value, you need to go to the Capri portal, select the agent that you're wanting to use, then copy the last part of the page's URL that comes after "agents/". That's the value that needs to be entered in the data point!<br>

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FBEz0MRudg3VgYISh8G7r%2Fimage.png?alt=media&amp;token=562dfdfc-9239-42e7-ae9c-908aa413c263" alt=""><figcaption></figcaption></figure>

## Optional Custom Data Points

There are also a few optional data points that you can add to the workflow that can change the functionality of the agent when that webhook is fired!

### prompt

If you'd like to override the prompt that your agent is set to use, you can add this data point! Whatever you have as the value for this will be what is used by the agent as the prompt instead of what is set in the agent page itself!

### prompt\_id

If you have multiple prompts in your agent, you can designate which one should be used for each specific webhook by using this data point! The value should be the prompt ID, which can be found by clicking the copy button next to the prompt you're wanting to use in the agent page!

### task

**"outreach"** - When you're wanting to use your agent for outreach, you need to put this data point in your webhook as well, with a value of "outreach". This will allow the agent to send messages properly whenever the webhook is triggered without an incoming message. Be sure not to have this set on your normal response webhook, however!\
\
**"evaluate"** - If you want the agent to perform actions without sending a message, you can use the value "evaluate". This is useful for scenarios where you need the agent to process data or perform tasks silently without user interaction.

### channel

If you want the AI to only respond to the contact via a specific channel, you can enter it here! Currently the only supported channels are "SMS", "GMB", "FB", and "IG", which are SMS, GoogleMyBusiness, Facebook, and Instagram DM's, respectively. If you don't put this data point, the AI will, by default, reply to the contact via the channel the incoming message was in.

### history

This function allows you to limit the conversation history that the AI can see and respond to! By default, if you don't have this data point, the AI will be sent the entire conversation history every time a new response comes in, even things that were sent months ago! This can cause issues long term, but with the "history" function, you can limit this. If you have "exclude" as the value, the AI will only ever be sent the message that triggered the webhook. This is useful if you are creating something like a Q/A bot or a knowledge repository! If you want to limit the AI to only being sent the conversation from a certain time period, you can enter a number value instead, with whole numbers representing hours, and decimal numbers representing percentages of an hour. For example, a value of "2" would have the AI read the last two hours every time a message comes in, a value of "0.5" would have the AI read the last 30 minutes, or half hour to be specific, and a value of "0.16" would be the last 10 minutes. Having a limit like this, whether it be a few hours or a few days, can greatly help the AI not run into excess token issues long term!

### include

Specify action IDs that should be included in the request by listing them as comma-separated values. Only the actions listed will be evaluated, while all other actions will be ignored.

### exclude

Specify action IDs that should be excluded from the request by listing them as comma-separated values. The actions listed will be omitted, and all other actions will be evaluated.


# Triggers

Triggers are used to connect your Agent to an external source in order to allow the agent to communicate or transfer data to and from said point based on an incoming message from said platform.

To set up a trigger, navigate in your Capri Portal to the Chatbot you want to activate and then select the "Triggers" tab

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F2bAWcFiiezz3pKlwj4KP%2FScreenshot%202025-02-25%20at%202.46.02%E2%80%AFPM.png?alt=media&amp;token=1973a722-da28-4e90-9f02-44667d55c91f" alt=""><figcaption></figcaption></figure>

**Required Settings**

* **Trigger Name**: Name used to identify and invoke specific automation sequences.
* **Provider**: Select the service provider for integration. Options include:
  * **GHL**: GoHighLevel platform for marketing and CRM.
  * **Podium**: Customer interaction management platform.
  * **HubSpot**: Marketing, sales, and service software.
* **Subaccount**: Refers to a specific division or branch within the main account, often used to manage different clients or departments separately.
* **Channel**: Specifies the mode of communication. Choose from:
  * **SMS**: Text messaging service.
  * **GMB**: Google My Business messaging.
  * **FB**: Facebook direct messages.
  * **IG**: Instagram direct messages.
  * **Live Chat**: Real-time text chat on websites.
  * **WhatsApp**: Instant messaging across various operating systems.
* **Task Type**: Defines the AI's role or function:
  * **Response**: Engages the AI to reply to incoming messages.
  * **Evaluate**: Activates AI to process and act without messaging.<br>
*

```
<figure><img src="/files/wzv3vXR8mUi0AE6rDd7Y" alt=""><figcaption></figcaption></figure>
```

**Optional Settings**

* **Prompt Selection**: Designate specific prompts for each webhook by using this setting when multiple prompts are configured.
* **History**: Limit the AI's conversation history for more efficient responses. Use `"exclude"` to send only the triggered message. Use numbers to define the history timeframe, e.g., `"2"` for two hours.
* **Include Actions**: List action IDs to be processed, formatted as comma-separated values.
* **Exclude Actions**: List action IDs to omit from processing, formatted as comma-separated values.
* **Include Knowledge**: Identify specific knowledge base IDs to retrieve, using comma-separated values.
* **Exclude Knowledge**: Identify specific knowledge base IDs to exclude, using comma-separated values.
*

```
<figure><img src="/files/xfkJ6RsWdvEh3FoixUcq" alt=""><figcaption></figcaption></figure>
```

***


# Automated Follow-Up For Stale Leads

Your Capri chatbot can also automatically continue following up with leads that stop responding for a certain amount of time

{% embed url="<https://www.loom.com/share/047493a0ab6a41e2a158e0c1c36864d8?sid=5671e1a4-2b2b-4f02-9ae9-678d7f7cccf7>" %}

In your agent, navigate to the "Triggers" tab, and create a new trigger. In the details page, you will notice a toggle labeled "Enable Followup"

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FkWnGj5vGn5K9jM5ky98v%2FScreenshot%202025-02-25%20at%203.08.21%E2%80%AFPM.png?alt=media&amp;token=8d1aeee2-f590-4428-a5d2-a940d01c6073" alt=""><figcaption></figcaption></figure>

## Follow-Up Details

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FJryblUKQX75P7sJJu8sE%2FScreenshot%202025-02-25%20at%203.11.00%E2%80%AFPM.png?alt=media&amp;token=e03f983b-f6de-4976-b7b4-77149d2c8cac" alt=""><figcaption></figcaption></figure>

* **Duration:** This is how long without a response the bot should wait before generating a follow-up message to try and re-engage the lead
* **Maximum Attempts:** The max amount of ***consecutive*** outreach messages the bot should send. *Both this and the duration above are reset each time the lead sends a message to your bot.*
* **Prompt**: The prompt to use when generating a follow-up message. You can find examples [here](/prompt-design/prompt-examples)
* **Tag Conditions:** We will evaluate these conditions before actually sending a follow-up message to the lead. If the conditions are met, we will not send any outreach message.


# Using Multiple Webhooks

A common misconception that people have when using Capri is assuming that there is only a single "bot" that's being used. In actuality, every single webhook that you have in your CRM can be their own individual "bot", each with their own settings, prompt, or even API key if you'd like! As a result, you can set up multiple workflows or webhooks with their own purposes!

For example, what you could do is set up a situation where, depending on if a contact has a specific tag or not, they reach a different webhook! You could do this by having an if/else branch inside of a workflow that checks to see if that tag is on the contact or not!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FIwW96uRMAXjWF0i08Cto%2Fimage.png?alt=media&amp;token=bb078bd1-cef2-4a4c-b936-a4ede8f019b7" alt=""><figcaption></figcaption></figure>

Each of these branches would then have their own individual webhooks, each with their own prompts, spreadsheets, etc!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2Fh74ROXhYzRHVVvaTOPg7%2Fimage.png?alt=media&amp;token=4a6c6319-2599-405a-a6dd-8d8d3c489d4f" alt=""><figcaption></figcaption></figure>


# Uphex

### Overview

The Capri-Uphex integration streamlines your workflow by connecting the capabilities of both platforms. Whether you're an existing Capri user or new to the platform, follow these steps to get started quickly.

### Requirements

* You must have access to an Uphex account.
* If a new user, ensure you have email access for receiving any necessary credentials or updates.

### Step-by-Step Guide

#### Step 1: Accessing the Integration

1. **Log in to Uphex**: Begin by logging into your Uphex account.
2. **Navigate to Integrations**: Once logged in, find and click on the 'Integrations' tab from the main dashboard.
3. **Locate Capri Integration Card**: In the Integrations tab, locate the Capri card designated for this integration.

#### Step 2a: For Existing Capri Users

1. **Log in to Capri**: Access your Capri account and log in.<br>
2. **Navigate to the Organization Tab**: On your Capri dashboard, find and click on the ‘Organization’ tab located at the bottom left of your screen.<br>
3. **Access Tokens**: Under ‘Organization,’ click on the ‘Tokens’ tab.<br>
4. **Copy or Generate Token**: If you have an existing token, copy it. If not, generate a new token by following on-screen instructions.<br>
5. **Return to Uphex**: Go back to Uphex where you previously found the Capri card.<br>
6. **Select Existing User Option**: Click ‘I am an existing user’ on the integration interface.<br>
7. **Enter Your Token**: Paste your copied token in the provided field.<br>
8. **Connect Your Accounts**: Click ‘Connect’ to finalize the integration process.

#### Step 2b: For New Users

1. **Select Connect Button**: As a new user with no existing Capri account, simply click on ‘Connect’.<br>
2. **Automatic Account Creation**: Upon selecting this option, a new Capri account will be created for you automatically.<br>
3. **Receive Credentials via Email**: Check your email for login credentials sent from Capri.<br>
4. **Complete Your Profile (optional)**: Log into your newly created Capri account using sent credentials and complete any profile setup necessary.


# Using The New Public API

Capri now offers a public API for our V3 (beta) users to engage with agents they've built and trained with our platform to be used with any other public REST API!

To get started, sign up for a new account at <https://beta.capriai.us> and start a 2 week free trial! You'll need an account to get your Agent ID and Token. See the [Quickstart Guides](/) for information on setting up an agent (use the "Beta" section)!

### Authorization

You'll need a Capri API Token to authorize your API Calls. Grab it [here](https://beta.capriai.us/home/organization?show=tokens).

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FcHFIJCAjyQ7XRMWIB7v1%2Fimage.png?alt=media&amp;token=148bf82b-04dc-42b2-bb49-acdb1feeea76" alt=""><figcaption></figcaption></figure>

### Base URL:

```
// https://api.capriai.us/v1/{endpoint}
```

### Conversations

```
https://api.capriai.us/v1/conversation/query
```

#### Request:

## Query your Capri Ai Agent

<mark style="color:green;">`POST`</mark> `https://api.capriai.us/v1/conversation/query`

Send a user query and receive the final response as well as all intermediate actions that your agent predicted during it's conversation turn.

#### Request Header

<table><thead><tr><th width="532">Name</th><th>Description</th></tr></thead><tbody><tr><td>Authorization<mark style="color:red;">*</mark></td><td><p>(required) The value should be </p><p>"Bearer {YourCapriToken}", with a space in between "bearer" and your token, and no brackets.</p><p></p><p>For example, "Bearer oxoxooxoxxo"</p></td></tr></tbody></table>

#### Request Body

| Name                                        | Type   | Description                                                                                                                          |
| ------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| agent<mark style="color:red;">\*</mark>     | String | (required) The desired agent ID, found at the very end of the URL of your agent's details page <https://beta.capriai.us/home/agents> |
| sessionId<mark style="color:red;">\*</mark> | String | (required)  Any random string, provided by the application calling the capri API. Minimum of 8 unique characters required.           |
| message<mark style="color:red;">\*</mark>   | String | (required)  The user's query to be responded to by the agent                                                                         |

{% tabs %}
{% tab title="200: OK Successful " %}
Response Parameters:

```
{
  "finalResponse" : //Your agent's final conversational response,
  "actions" : //array of actions your agent took during it's turn
       [
           {
              "eventId" : //unique Id representing the action
              "sender" : //who sent the message ('bot' or 'human'),
              "kind" : // the kind of action (i.e., googleSheet, ghlCalendar, etc),
              "accountId" : //id of which resource was used for this action,
              "accountName" : //name of which resource was used for this action,
              "deleted" : //boolean, represents if a user manually corrected the action from the emulator,
              "action" : //the action type (i.e., 'read', 'write', tag', etc),
              "eventData" : //event details (optional, only present if required such as calendar event dates and time ranges)
              "reference" : //reference url for the resource that was used (optional),
              "timestamp" : //time the action took place (epoch time in milliseconds)
           },
           {...}
        ]
}
```

{% endtab %}

{% tab title="401: Unauthorized Invalid or API Token not found" %}

```
{
    "message": string,
    "error": 'Unauthorized'
    "statusCode": 401
}
```

{% endtab %}

{% tab title="400: Bad Request Invalid request body. Most commonly occurs when a required request parameter is missing or invalid" %}

```
{
    "message": string,
    "error": 'Bad Request'
    "statusCode": 400
}
```

{% endtab %}
{% endtabs %}

### Export GHL Conversation

```
https://api.capriai.us/v1/extension/leadconnector/conversations
```

#### Required Parameters

1. `url`: The target URL for sending data.
2. `capri_token`: A security token for authentication.

These parameters should be added as "custom data" parameters in GHL (GoHighLevel)

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FtfdcFCczxRcyxkAtgXUB%2Fimage.png?alt=media&amp;token=e4079b1b-2f56-448e-8c96-5c47a2918406" alt=""><figcaption></figcaption></figure>

#### Response Structure

Upon successfully calling the export conversations API, you will receive a JSON response structured as follows:

```json
{
    "conversations": [
        {
            "conversationId": "string",
            "participants": [
                {
                    "participantId": "string",
                    "name": "string",
                    "role": "string"
                },
                ...
            ],
            "messages": [
                {
                    "messageId": "string",
                    "sender": "string",
                    "content": "string",
                    "timestamp": "epoch time in milliseconds"
                },
                ...
            ]
        },
        ...
    ],
    "pagination": {
        "currentPage": number,
        "totalPages": number,
        "pageSize": number,
        "totalItems": number
    }
}
```

#### Handling Errors

Ensure to handle potential errors when making the API call:

* **401: Unauthorized** - Check if the API token is correct and has the necessary permissions.
* **400: Bad Request** - Ensure all mandatory parameters are included and valid.

By managing both successes and errors effectively, you can seamlessly integrate conversation data into your workflow.


# Agent API

{% file src="/files/WUbVn9m7gSEmsymlePAa" %}
pdf version of the Agent API documentation
{% endfile %}

## Agent Public API Documentation

#### Note

* Fields marked with `?` are optional.

#### Error Response Format

All error responses are returned in the following format:

```json
{
  "message": "Error message",
  "error": "error code",
  "statusCode": code
}
```

Example:

```json
{
  "message": "Capri token not found",
  "error": "Unauthorized",
  "statusCode": 401
}
```

### Endpoints

#### 1. POST `/v1/agent/create`

**Description:** Create a new agent.

**Request Body:**

```json
{
  "agentName": "string",
  "folder"?: "string",
  "website"?: "string",
  "prompts"?: {
    "name": "string",
    "promptContent": "string",
    "customFallbackPrompt"?: "string"
  }
}
```

**Response:**

```json
{
  "agentName": "new Agent",
  "orgId": "6561047156b3825f13bwc878",
  "userId": "",
  "disabled": false,
  "aiProvider": {
    "companyId": "openai-hosted",
    "modelName": "gpt-4o",
    "accountName": "4O - Capri Hosted",
    "accountId": "capriHosted",
    "isAdvancedSettings": false,
    "advancedSettings": {
      "temperature": 0.3,
      "maxLength": 180,
      "frequencyPenalty": 0,
      "optimize": "accuracy"
    }
  },
  "failsafeAiProvider": {
    "failsafe": false,
    "companyId": "fireworks",
    "modelName": "llama-v3-70b",
    "accountName": "Capri Hosted",
    "accountId": "capriHosted"
  },
  "multipleInbound": false,
  "multipleInboundConfig": {
    "initialWait": 1,
    "maxWait": 10,
    "incrementBy": 30
  },
  "actions": [],
  "savedSessionIds": [],
  "humanTakeover": {
    "takeoverType": "None"
  },
  "contextLength": 1000,
  "textContentKnowledgeSource": null,
  "showNotifications": {
    "connectAgentToTrigger": true
  },
  "_id": "678578dc217db71ewe060b4d6",
  "processingJobs": [],
  "processedFiles": [],
  "triggers": [],
  "variables": [],
  "faqs": [],
  "__v": 0
}
```

#### 2. POST `/v1/agent/{agentId}/update-faq`

**Description:** Add a new FAQ to an agent.

**Params:**

* `agentId` // id of the agent to add the new FAQ.

**Request Body:**

```json
{
  "faqs": [
    {
      "question": "string",
      "answer": "string"
    }
  ]
}
```

**Response:**

```json
{
  "success": true,
  "faqs": [
    {
      "id": "string",
      "question": "string",
      "answer": "string"
    }
  ]
}
```

#### 3. POST `/v1/agent/edit/name`

**Description:** Update an agent’s name.

**Request Body:**

```json
{
  "agentId": "string",
  "agentName": "string"
}
```

**Response:**

```json
{
  "message": "Agent name updated successfully"
}
```

#### 4. POST `/v1/agent/{agentId}/website/scrape`

**Description:** Add websites as a knowledge source to an agent.

**Params:**

* `agentId` // id of the agent to add the website.

**Request Body:**

```json
{
  "urls": ["string"] // URLs of the websites to scrape.
}
```

**Response:**

```json
{
  "success": true,
  "message": "Website processing started",
  "processingJobs": [
    {
      "jobId": "manual-processing-website",
      "accountId": "e33c37-a6a0-4748-8807-07cf194f4e82",
      "fileName": "https://capriai.us",
      "jobType": "website-scrape",
      "maxDepth": 0
    }
  ]
}
```

#### 5. POST `/v1/agent/{agentId}/file-upload`

**Description:** Add a file as a knowledge source to an agent.

**Params:**

* `agentId` // id of the agent to upload the new file.

**Request Body:**

```json
{
  "files": file
}
```

**Response:**

```json
{
  "message": "Files queued for processing",
  "processingJobs": [
    {
      "jobId": "37",
      "accountId": "9772-4e01-a403-8916dc6b1c5a",
      "fileName": "capriai.txt",
      "mimeType": "text/plain",
      "jobType": "file-upload"
    }
  ]
}
```

#### 6. POST `/v1/agent/add/prompt`

**Description:** Add a prompt to an agent.

**Request Body:**

```json
{
  "agentId": "string",
  "prompt": {
    "name": "string",
    "promptContent": "string",
    "customFallbackPrompt"?: "string"
  }
}
```

**Response:**

```json
{
  "message": "New Prompt Pushed Successfully",
  "currentActive": "a17e6aa6-e54f77b-abf7-12080247fe4c",
  "prompt": {
    "promptId": "ff9a69f4-45eb-a119-aed31a75158d",
    "name": "main prompt",
    "promptContent": "You are a bot representing capri AI",
    "isFallbackPrompt": false,
    "customFallbackPrompt": "Say sorry and ask to contact customer support whenever you can't answer"
 
```


# Email and Plain Text Make Modules

To get started, sign up for a new account at <https://beta.capriai.us> and start a 2 week free trial! You'll need an account to get your Agent ID and Token. See the [Quickstart Guides](/) for information on setting up an agent (use the "Beta" section)!

### Connection

You'll need a Capri API Token to be able to use any of the Capri Make modules. Grab it [here](https://beta.capriai.us/home/organization?show=tokens).

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FcHFIJCAjyQ7XRMWIB7v1%2Fimage.png?alt=media&amp;token=148bf82b-04dc-42b2-bb49-acdb1feeea76" alt=""><figcaption></figcaption></figure>

After you get this Capri Token, you can then go ahead and add the Capri module that you'd like to your Make. In the module, at the top, there's a section for "Connection". In this section, click add, then paste your Capri token into the Capri API Key field and save the connection.\ <br>

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F0kLN0KvFZIT2pozJbDwz%2Fimage.png?alt=media&amp;token=14a0591e-db49-4b24-8b4a-5fad12285bfa" alt=""><figcaption></figcaption></figure>

Without this connection, the module won't function, and this applies for any of the Capri modules!

### Module Settings

After the connection is set, you then need to fill out the settings for the module.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FweUquxl60lzf7hB8e6jo%2Fimage.png?alt=media&amp;token=26f293d9-c6c4-46bb-84df-2d339162c740" alt=""><figcaption></figcaption></figure>

| Name                                                       | Description                                                                                                                                                                                                                                                         |
| ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Agent ID<mark style="color:red;">\*</mark>                 | (required) The desired agent ID, found at the very end of the URL of your agent's details page or as a copyable item next to the agent itself <https://beta.capriai.us/home/agents>                                                                                 |
| Session Id<mark style="color:red;">\*</mark>               | (required)  Any random string, provided by the application calling the capri API. Minimum of 8 unique characters required.                                                                                                                                          |
| Message (for plain text)<mark style="color:red;">\*</mark> | (required)  The user's query to be responded to by the agent.                                                                                                                                                                                                       |
| Subject (for email)<mark style="color:red;">\*</mark>      | (required) The subject of the email to be responded to by the agent.                                                                                                                                                                                                |
| Body (for email)<mark style="color:red;">\*</mark>         | (required) The body of the email to be responded to by the agent.                                                                                                                                                                                                   |
| Direction Type<mark style="color:red;">\*</mark>           | (required) Which direction the message is being sent.                                                                                                                                                                                                               |
| Custom Prompt                                              | If you'd like to use a different prompt than the one set in the agent, you can enter it here.                                                                                                                                                                       |
| Prompt ID                                                  | If you have more than one prompt set up for an agent, you can specify the one you'd like to use by entering its ID here. You can find the ID as a copyable item next to the prompt in the agent page itself.                                                        |
| History                                                    | How many hours of history that you'd like the AI to be able to read from. For instance, 12 would be 12 hours, 48 would be two days, and .5 would be 30 minutes. If blank, it will be unlimited.                                                                     |
| Knowledge                                                  | If you have a spreadsheet that you'd like the AI to be able to read from, you can specify it here by entering its URL. The spreadsheet does need to be connected in the Capri portal at <https://beta.capriai.us/home/settings/integrations> before it can be used. |

### Status Codes

{% tabs %}
{% tab title="200: OK Successful " %}
Response Parameters:

```
{
  "finalResponse" : //Your agent's final conversational response,
  "actions" : //array of actions your agent took during it's turn
       [
           {
              "eventId" : //unique Id representing the action
              "sender" : //who sent the message ('bot' or 'human'),
              "kind" : // the kind of action (i.e., googleSheet, ghlCalendar, etc),
              "accountId" : //id of which resource was used for this action,
              "accountName" : //name of which resource was used for this action,
              "deleted" : //boolean, represents if a user manually corrected the action from the emulator,
              "action" : //the action type (i.e., 'read', 'write', tag', etc),
              "eventData" : //event details (optional, only present if required such as calendar event dates and time ranges)
              "reference" : //reference url for the resource that was used (optional),
              "timestamp" : //time the action took place (epoch time in milliseconds)
           },
           {...}
        ]
}
```

{% endtab %}

{% tab title="401: Unauthorized Invalid or API Token not found" %}

```
{
    "message": string,
    "error": 'Unauthorized'
    "statusCode": 401
}
```

{% endtab %}

{% tab title="400: Bad Request Invalid request body. Most commonly occurs when a required request parameter is missing or invalid" %}

```
{
    "message": string,
    "error": 'Bad Request'
    "statusCode": 400
}
```

{% endtab %}
{% endtabs %}


# Model Pricing

#### Pricing Table for Models

<table><thead><tr><th width="92">Provider</th><th width="242">Model</th><th width="213">Input Cost/Mil Tokens</th><th>Output Cost/Mil Tokens</th></tr></thead><tbody><tr><td>Capri Ai</td><td>GPT-4o</td><td>$9.68</td><td>$9.68</td></tr><tr><td>Capri Ai</td><td>GPT-4o-mini</td><td>$0.56</td><td>$0.56</td></tr><tr><td>Capri Ai</td><td>llama-v3-70b-instruct</td><td>$1.00</td><td>$1.00</td></tr><tr><td>Capri Ai</td><td>llama-v3_1-70b-instruct</td><td>$2.00</td><td>$2.00</td></tr><tr><td>Capri Ai</td><td>llama-v3_2-1b-instruct</td><td>$0.15</td><td>$0.15</td></tr><tr><td>Capri Ai</td><td>llama-v3_2-3b-instruct</td><td>$0.15</td><td>$0.15</td></tr><tr><td>Capri Ai</td><td>llama-v3_2-11b-vision-instruct</td><td>$0.30</td><td>$0.30</td></tr><tr><td>Capri Ai</td><td>llama-v3_2-90b-vision-instruct</td><td>$2.00</td><td>$2.00</td></tr><tr><td>Capri Ai</td><td>DeepSeek V3</td><td>$0.96</td><td>$0.96</td></tr><tr><td>Capri Ai</td><td>Deepseek R1</td><td>$7.70</td><td>$7.70</td></tr><tr><td>Capri Ai</td><td>OpenAI O1</td><td>$52.50</td><td>$52.50</td></tr><tr><td>Capri Ai</td><td>Open AI O3-mini</td><td>$3.85</td><td>$3.85</td></tr><tr><td>Capri Ai</td><td>Google Gemini Flash 2.0</td><td>$0.40</td><td>$0.40</td></tr><tr><td>Capri Ai</td><td>Claude 3.7 Sonnet</td><td>$12.60</td><td>$12.60</td></tr><tr><td>Capri Ai</td><td>Perplexity: R1 1776</td><td>$7.00</td><td>$7.00</td></tr><tr><td>Capri Ai</td><td>Llama 4 Maverick</td><td>$0.55</td><td>$0.55</td></tr><tr><td>Capri Ai</td><td>Quasar Alpha</td><td>$0.25</td><td>$0.25</td></tr><tr><td>Capri Ai</td><td>Perplexity: Sonar Reasoning Pro</td><td>$7.00</td><td>$7.00</td></tr><tr><td>Capri Ai</td><td>Gemini 2.5 Pro Experimental</td><td>$7.85</td><td>$7.85</td></tr><tr><td>OpenAI</td><td>GPT-4o</td><td>$2.50</td><td>$10.00</td></tr><tr><td>OpenAI</td><td>GPT-4o Mini</td><td>$0.15</td><td>$0.60</td></tr></tbody></table>


# Contact Us!

If you have any questions or are running into any issues that can't be resolved by following the steps in the troubleshooting section, you can get in touch with us via messaging our Facebook page at <https://links.capriai.us/DyTe> Getting in touch with us this way ensures that you can get a support ticket created for your issue, but if you would rather directly email a team member, you can get in touch with us via <info@capriai.us>, though bear in mind that this might increase the initial response times! Our hours of operation are from 9AM to 5PM CST Monday through Friday!

You can also book a Zoom call with one of our team members at <https://link.capriai.us/widget/bookings/capri-support> to go over things like setup or if you have questions about the system! If you're having more technical issues or errors, though, that will likely have to go through email or the Facebook chat!


# Legacy Information

For any of our legacy users, help documentation can be found in this section! Any users who are on the latest version of Capri can safely ignore any information here, as it only applies to our older versions!


# Setup (Legacy)

## Step 1 - Logging in to Capri

The first step to accessing the Capri portal is to visit <https://systems.capriai.us/> where you will see the following page. While here, you will be able to log in with the email that you have setup with Capri!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FRdWzU8UxzAiIDKDjoTAE%2Fimage.png?alt=media&amp;token=0e875ec0-6c66-4eec-9b3c-2931af09d26b" alt=""><figcaption></figcaption></figure>

## Step 2 - Choosing your subaccount

When you login, you will be shown a page to choose which GoHighLevel subaccount you'd like to use, so just select the one you want and you're good to go! Remember, though, that if you are on a trial account, the first subaccount you choose will be the one that is linked with Capri, and you can only use one!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F94yyzNPqCe5pfNtF66Kv%2Fimage.png?alt=media&amp;token=ab8ec15e-5a77-4e56-a349-f6127ed34ccc" alt=""><figcaption></figcaption></figure>

## Step 3 - OpenAI Settings and API Key

After you've successfully signed into Capri, the next thing you need to do is make sure that your OpenAI account is set up correctly, including having a payment method on file with them, and that you have an API key to use with us! Firstly, set up an OpenAI account at <https://platform.openai.com> then go to the payment method page at <https://platform.openai.com/account/billing/payment-methods> and put a card on file with them. If you skip this step, your rate limit will be severely reduced, and you will basically not be able to use the system beyond 1 or 2 uses! Take note, this is NOT the OpenAI plus subscription that's 20 dollars a month that OpenAI has! This is an entirely different thing, and the subscription is not required!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FBK1b3OwommgklLx8cFcb%2Fimage.png?alt=media&amp;token=b2584ae6-dd19-4840-9839-d8ce22b70cde" alt=""><figcaption></figcaption></figure>

After you've put a payment method on file with OpenAI, you then need to go to the API keys page at <https://platform.openai.com/account/api-keys> and click "create new secret key". You will then have the opportunity to name the key whatever you wish, but after you name it, you will be shown the actual secret key! Bear in mind, this is the ONLY time you have the ability to see the full key, so make sure to write this down or copy it into a document somewhere that you can find it later! If you end up losing it, you can always make a new one, though!&#x20;

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FMSqnLUKOnqIdmekhsBPx%2Fimage.png?alt=media&amp;token=f5aa7ba6-5300-4ee0-b3af-8ded0fe02ae9" alt=""><figcaption></figcaption></figure>

## Step 4 - Capri Portal Settings

Now that you've setup things on the OpenAI side, go back to the Capri portal and select the tab on the left that looks like a gear. Once there, if you'd like to use Capri to book appointments or at least be able to check calendar times, you need to click the "Calendar" dropdown to select the primary calendar you want to use, and then click the "Primary Objective" dropdown and select "book appointment" to allow the AI to do so!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FXQthy0tGSWoZCrNr8SMW%2Fimage.png?alt=media&amp;token=480eb10a-5551-4d4b-8112-177d2369cb0d" alt=""><figcaption></figcaption></figure>

After that, click the AI tab and you'll see a bunch more options to fill out! Bear in mind, these settings are ONLY for using the emulator, and you'll need to fill out more settings in GHL itself before you can use Capri in a live scenario!

&#x20;First, fill out your OpenAI API key that you got in the last step! Then, fill out the prompt that you want to use in the emulator. You can find some examples of prompts in the "Prompt Design" section of this help doc! Next, select the model type you want to use. We recommend ChatGPT! Then, set the temperature, which affects bot creativity, to about 0.11 and the max output length to around 150-200. Next, you can enter in the knowledge base spreadsheet that you'd like to use! For more information about the spreadsheets, you can visit the "Spreadsheet and Knowledge Base" section!&#x20;

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F1U1vJJC7zx9seMRnDbHz%2Fimage.png?alt=media&amp;token=b169e8e1-2654-490c-b565-db91b6ed12b8" alt=""><figcaption></figcaption></figure>

Next, set Frequency Penalty to 0 and Presence Penalty to 1. This will make the AI try to use different words and try to avoid repeating itself! Finally, either leave "Fallback Mode" set to silent, or, if you'd like the AI to try to continue conversations when it gets confused and isn't sure what to say, set it to "respond"!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F1G7Iv13882wLBCq8e7dh%2Fimage.png?alt=media&amp;token=e2335d38-8cc7-4928-8cb6-1ce54947357c" alt=""><figcaption></figcaption></figure>

## Step 5 - Testing in the Emulator

After getting the portal settings done, move on the emulator, which is the robot icon, to test if the AI is working! Have a few conversations here, saving them if you like, before moving on to make sure that things are functioning properly. If you run into an error here, go back and review the other steps to see if you missed something, like putting a card on file with OpenAI!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F5U7IAz8yExfJrsSSHNA9%2Fimage.png?alt=media&amp;token=2f91b5c9-79be-47fa-a680-7820b4abbd20" alt=""><figcaption></figcaption></figure>

## Step 6 - Setting Up Workflows

After setting up the portal and making sure it functions in the emulator, you can move on to actually setting up things in GHL! To do so, you can either sign up to receive our snapshot at <https://capriai.us/gpt3>, which contains a few examples workflows that will technically work, though we recommend looking through them and editing them to suit your needs, or you can create your own workflows!

## Step 6A - Importing the Snapshot

After signing up to get the snapshot, you'll receive an email telling you how to import it and get it set up! Just remember, the snapshot will import custom values that you'll need to fill out as well!

## Step 6B - Setting Up Your Own Workflows

If you'd like to set up your own workflow, which we recommend if you have experience using GHL, all that is truly requried for Capri to function and respond to incoming messages is a workflow that is triggered with a "customer replied" trigger, and a webhook that's set up properly! The webhook needs to be a basic webhook, not the premium one, the method must be "post", and the URL needs to be "<https://systems.capriai.us/gpt3>" without the quotation marks! You then need to add a few required data points. You need one with a key of "prompt" and a value of whatever prompt you want to use for this webhook, one with a key of "key" with the value being your OpenAI API key, one with a key of "model\_type" and a value of whichever model you want to use, and you can find more information about the models available at <https://help.capriai.us/integrating-with-crm/connecting-to-the-crm/gohighlevel-ghl/using-workflows#model_type> You also need a data point with a key of "temperature", and a value of whatever you put in the Capri portal, one with a key of "max\_length" and a value of whatever you had in the portal, one with either "presence\_penalty" or "frequency\_penalty" and the value you had in the portal, and finally one with a key of "task" and a value of "respond". You can find more information about additional, optional data points and features you can add to the webhook in <https://help.capriai.us/integrating-with-crm/connecting-to-the-crm/gohighlevel-ghl/using-workflows> After this is done, make sure to set the workflow to "allow multiple" in the workflow settings, and now your AI should be able to respond to any incoming messages!


# Accessing the Capri Portal (Legacy)

## Step 1 - Logging in to Capri

The first step to accessing the Capri portal is to visit <https://systems.capriai.us/> where you will see the following page. While here, you will be able to log in with the email that you have setup with Capri!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FmQf3tQuUge5EUxjKgRRJ%2Fimage.png?alt=media&amp;token=fc98ef24-62cd-45ff-8dc5-f6b85b4edb24" alt=""><figcaption></figcaption></figure>

## Step 2 - Choosing your subaccount

When you login, you will be shown a page to choose which GoHighLevel subaccount you'd like to use, so just select the one you want and you're good to go! Remember, though, that if you are on a trial account, the first subaccount you choose will be the one that is linked with Capri, and you can only use one!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F5SgLkzpOcXmyBHWnlR04%2Fimage.png?alt=media&amp;token=edf482b6-620f-4f89-a95d-7d537ab169e8" alt=""><figcaption></figcaption></figure>


# Navigating the Capri Portal (Legacy)

## Fallbacks

When you first log into the Capri portal, you'll see this page, which lists any of the recent messages that triggered a fallback, as well as what the AI was going to say in response!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FTDpcB9ec29ykkmaCkoRu%2Fimage.png?alt=media&amp;token=36f49291-9f55-4e31-82e2-e50e05784ec2" alt=""><figcaption></figcaption></figure>

## Emulator

One of the most important pages in our portal is the emulator page! Here, you can simulate a live conversation with the AI to see how it would respond to you, and can also train the bot as to how you would like it to respond in certain situations!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FX1LJFeQp5oJbATIRnBGm%2Fimage.png?alt=media&amp;token=c42c5d99-c133-4429-bacf-641dc6b33db3" alt=""><figcaption></figcaption></figure>

## Settings&#x20;

The next page to take a look at is the [settings](/legacy-information/legacy-information/capri-portal-settings-legacy#calendar). Here you can find information the CRM that you're using, including information on the calendar that you have linked, as well as the settings for the emulator in our portal or any iframed emulators you may have!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FMqqZMiDmGpPe57iK5JMK%2Fimage.png?alt=media&amp;token=26150c3f-22ba-45d8-8dee-88a2536845f9" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2Fd7BvHaQ0wlMrn9D3XgSo%2Fimage.png?alt=media&amp;token=e0d1a27a-4094-4136-9323-8172d5855272" alt=""><figcaption></figcaption></figure>

## Knowledge Base

Next is the knowledge base tab! Here you will see one of two things: if you aren't subscribed with our knowledge base extension, you'll see a page telling you how you can get it, but if you are subscribed or have an enterprise plan, you'll see a spot where you can get your Capri token and add in new spreadsheets to use the extension with!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FGvWww6tdfrBEae3GANrr%2Fimage.png?alt=media&amp;token=06d7173a-5637-4d90-a9d2-12b602e0d413" alt=""><figcaption></figcaption></figure>

## Billing

Finally, we have the billing tab. Here, you can adjust your subscription and see what plan you have with us!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2Fs0skh9h2nlGXLLOAO7or%2Fimage.png?alt=media&amp;token=be10115c-bca0-4cab-9114-69b09ffc2b2d" alt=""><figcaption></figcaption></figure>


# Capri Portal Settings (Legacy)

In the settings page of the Capri portal, you will have two different tabs with two different purposes. The first tab is the CRM tab, and this is where you will choose some of the GHL connection settings!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FPzRfvTuLwdKtLbKjHo1e%2Fimage.png?alt=media&amp;token=320b8745-747b-4879-962e-8a767cd5fe7a" alt=""><figcaption></figcaption></figure>

## Calendar

In this page, under the calendar dropdown, you will find a list of all of the different calendars that are in the sub-account you have selected. The calendar you choose here will be the default calendar that the AI will access inside of GHL when offering times and booking and the like! You are able to have the AI use a different calendar by telling it which to use in the webhook step in GHL, though, and we'll go over that later!

## Primary Objective

The main thing to worry about in the primary objective dropdown is whether or not you want the AI to be able to have access to the calendar. If so, you just need to have the primary objective set to "book appointment". Bear in mind, however, you will still need to add a data point to the webhook in GHL for this as well, which we'll cover later!

## Connect Bot When

This is where you can choose when the AI will actually respond to webhooks that are being triggered in the CRM! ***In almost every situation, you should just have this set to "control with CRM workflows"***, but if you want to have certain criteria decide if the AI should respond to a contact when the webhook in the CRM is triggered, you can add those here, and they can be certain tags, the lack of certain tags, or the like, but once again, this kind of thing can be done in the CRM itself, and so having this set to "[control with CRM workflows](/legacy-information/legacy-information/connecting-to-the-crm-legacy/gohighlevel-ghl)" is much easier!

## Follow Up Stale Leads

This is where you can set up an action to be taken after a contact has stopped responding to your outgoing messages! You are able to handle this kind of thing through the CRM as well, such as by creating a workflow that sends an outreach message after a certain amount of time has passed, but if you'd rather use the portal to handle this, you can set a timer that counts how long it's been since the last outgoing message, an amount of times the follow up happens, and you can choose between 3 different actions. The first action is just a default message that's the same every time, and you can choose which channel it goes through and also set filters for it being sent or not. The second action is triggering a workflow that you have in your CRM, though once again you can just do this inside of the CRM itself rather than having the portal do this. The third and final action is to generate an outreach message using the AI, where you can set things like a prompt, the model, the temperature, etc. though you should just do this through an outreach webhook in the CRM rather than the portal, as you can set situational prompts and the like there, whereas in the portal, you can only have one prompt!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FsgPXsRoULVJxL0IAgPTM%2Fimage.png?alt=media&amp;token=5d93b693-e916-4bfa-889e-3c9ac40d0559" alt=""><figcaption></figcaption></figure>

Moving on to the AI settings tab, this is where you will fill out the settings to be used inside of the emulator! Once these are all filled out properly, you'll able to use the emulator to simulate what a live conversation would be like so you can train the AI! Remember, though, these settings are separate from the CRM, so even though you've filled them out here, you will also need to fill them out in the CRM webhooks that you use!

## OpenAI Key

This is where you will enter in the API key that you generate at <https://platform.openai.com/account/api-keys>, though remember, you can only ever see the key once, so make sure to write it down! While you're at the OpenAI website, be sure to enter a payment method at <https://platform.openai.com/account/billing/payment-methods>, as this will save you a lot of heartache and troubleshooting later!

## Prompt

This second section is where you will enter the prompt that you want to use inside of the emulator! You can make this the same prompt that you're using inside of the CRM, especially if you're trying to train the AI for that prompt, or you can experiment here with prompt design to try to get the AI to better perform for your use case, such as having it ask certain questions or trying to qualify the contact! To find more information about prompts and prompt design, you can check our [Prompt Design](/prompt-design/creating-prompts) pages!

## Model Type

The model type is the OpenAI model that you use inside of the emulator, and though right now we only integrate with Davinci and ChatGPT, we plan on expanding this in the future! We recommend using ChatGPT in pretty much every situation for now, however, as it is not only more powerful than Davinci, but also about 10x cheaper!

## Temperature

Temperature is a measure of how "creative" the AI will get with its answers, and is a scale from 0 to 1. If you have this set too low, the AI will be very "roboty", in that it will be very clear that it's not a human talking, and the AI will also likely not even attempt to answer any questions that it doesn't have a direct answer to. On the flip side, if you have the temperature set too high, the AI will likely just make things up entirely, generating completely false information! as a result, we recommend having this set to around .08 or .11, as we've found this to work relatively well for keeping the AI grounded but still willing to try to problem solve. Feel free to experiment with different numbers using the emulator, though!

## Max Output Length

Max output length is a measure of how many tokens will be sent in the response to the contact! This doesn't actually affect how long of a response the AI will generate, however, so if you have this too short, the AI's message will just get cut off in the middle. As such, if you want to shorten the Ai's actual responses, you need to tell it in the prompt to keep its messages short and concise, or something along those lines!

## Knowledge Base Spreadsheet

Here is where you will enter the URL of the spreadsheet that you're wanting to use inside of the emulator. Remember, the spreadsheet needs to be formatted in that the A1 cell says "Contact" and the B1 cell says "Assistant", and the spreadsheet needs to be a basic, default Google sheet! You can find an example template that shows you how it should be set up at <https://docs.google.com/spreadsheets/d/1aDcCR9mXipJNaKi45GGz_Rw-W13oQp2702FzkPVcwt0/edit#gid=0>

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2Fo8nmUJJmoja2mXKzWk54%2Fimage.png?alt=media&amp;token=5e1f3abc-41de-4106-b6e6-517c17d7aeb1" alt=""><figcaption></figcaption></figure>

## Frequency and Presence Penalty

Frequency and presence penalty are essentially two sides of the same coin. These two settings are meant to reduce the chance of repeat phrases or words in the messages that the AI generates, and they accomplish this in two different ways! Basically, frequency penalty works by checking how many times a specific word has been said, and if it's been used repeatedly, the AI will use synonyms, and presence penalty checks how many times entire topics or phrases have come up in the conversation and tries to avoid repeating them. These two settings go from 0 to 1, and we recommend only having one of these turned up at a time!&#x20;

## Handoff Prompt

This section is where you can enter in your ideas for handoff prompts! What you enter in here wont have any effect on the emulator, but you can still use this as a place to brainstorm before putting it into the live CRM!

## Fallback Mode

Under fallback mode you will be able to choose how the AI acts whenever it reaches a fallback. By default, the AI will remain silent and just add a tag to the contact called "fallback\_reached", and you can then utilize CRM workflows to take action when this tag is added. You can, however, set the AI to respond as well when a fallback is reached. Generally it will always respond similarly, though, something along the lines of "I'm not sure what you mean by that, can you try to rephrase things?"


# Using the Emulator (Legacy)

The Capri Ai emulator is a powerful tool you can use to "fine-tune" your Ai assistant to provide accurate answers according to your business data and ideal persona!

When you first pull up the emulator, you'll need to choose the AI model that you want to use! As of right now, we only integrate with ChatGPT and Davinci, and we recommend ChatGPT as it is about 10x cheaper to use!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FoHD0Dx22vuWUdlc3q6LT%2Fimage.png?alt=media&amp;token=36ffbb24-5d0c-4559-8d02-3eccfebe8db1" alt=""><figcaption></figcaption></figure>

After choosing an agent, you'll be able to directly talk with the AI, simulating a conversation that would be taking place in the CRM, but remember, the settings that the AI is using in the emulator are the ones that you've set up in the portal itself!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F2gCmHksxQUQ179xA2o3b%2Fimage.png?alt=media&amp;token=f7970e8d-ca1c-4012-affd-26788c3f01e9" alt=""><figcaption></figcaption></figure>

## Saving Sessions and Training the Bot

Eventually, you'll get an answer from the bot that you aren't quite happy with. Maybe it didn't give enough information, or maybe it just is using too formal of language, but there is a solution for this! Whenever you get an answer you don't like, you can click the bubble with an exclamation point to the right of the AI's answer!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FPPUwVcQuxaVol4BJcVgo%2Fimage.png?alt=media&amp;token=a553aa43-915d-4f76-a5b4-de5aabdad51b" alt=""><figcaption></figcaption></figure>

After clicking this, a dialogue box will pop up where you can then write out what you would have liked to AI to have said in that situation! After you're happy with its new answer, click the update button, and the conversation will be updated!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FwpLDe6CjskfRVKj12bxv%2Fimage.png?alt=media&amp;token=852798e7-862d-43e7-a127-1ff8b7c311f9" alt=""><figcaption></figcaption></figure>

After you've corrected the bot, you'll want to make sure that this correction is saved for future reference! To do so, you can click the save button in the top right, and our system will save the conversation as a potential example that the AI will be able to use for any future conversations, including in the CRM!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FzFLzrr5d0uSWfjWSJxsf%2Fimage.png?alt=media&amp;token=c4a6377c-d133-4e40-9c4b-73e26341c9b1" alt=""><figcaption></figcaption></figure>

To delete or check old saved sessions, you can click the button with three horizontal lines!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F9hLYXyGC46R20KR3PtgC%2Fimage.png?alt=media&amp;token=826e80bf-a032-41ee-a9e4-de62391c3f19" alt=""><figcaption></figcaption></figure>

## Importing Saved Sessions

If you ever run into a situation where you would like to import sessions that you've saved in a different subaccount to the current one that you're using rather than train the AI all over again, we have a solution for that! In the subaccount that you're trying to import to, click the button with the box and an arrow pointing into it!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FaTHMF4cHA1DTZirSP833%2Fimage.png?alt=media&amp;token=f885763f-5c67-4978-92ae-e3dc0a5c831e" alt=""><figcaption></figcaption></figure>

You will then be greeted with a screen where you can select the subaccount you wish to import from in a dropdown box, and all you then have to do is select the subaccount and click import!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FIQSVgP522NqvgtRWwZxl%2Fimage.png?alt=media&amp;token=44f3c36d-e1b2-48b4-9cb4-19e75a0b87f9" alt=""><figcaption></figcaption></figure>

##


# Adding the Emulator as a Custom Menu Item (Legacy)

If you have a Capri Enterprise plan and an Agency Unlimited plan from GHL, you can add the Capri emulator as a white labelled custom menu item in GHL!&#x20;

To do so, you first need to get your Capri token from the knowledge base tab in the Capri portal. Please note, if you have purchased the knowledge base extension you will also see a token here, but it will not give you access to the iframe emulator!

<figure><img src="https://lh6.googleusercontent.com/bbh7tNt-HRW6vbwsNOgMFp1u9m3heM5Y7twrFp03KQBqrcA5PI4HadaF-BVwr0rCGuRvCTTr8uqVv6rMLuXg9jzHILdy3-Z8WYNDLZX6GjtXdXg-mI4sqqTntH3jPfz_vtDcP1SnECEXlPuI" alt=""><figcaption></figcaption></figure>

Then, in your GHL agency dashboard, go to the settings in the bottom left.

<figure><img src="https://lh3.googleusercontent.com/Uy0uKkh5wcTyjQeflS2QmmVDgvCDelgaYts1FKYQ0XMseSnT8UP4hnOf-9_278AtOd5OOCMSi_hUJYOjk9jQx61PANqfizN-0ZOWupRtIO6m5lGHcn9UMXbucR0AdGaEnsMH5lgMh8K0O3Pq" alt=""><figcaption></figcaption></figure>

Then click on custom menu link.

<figure><img src="https://lh3.googleusercontent.com/c8K62QGpNBe4CN-6WyKeTHXWonbCLnr6XBR-kHbUQr7hr-b318QQi7gKwRKrWFdSbWY2u9vdZZ1xt029XypGzaIv16EeXJ32wKei-zrWQdEi3mWIOxBucB3CDKK7dhkiUdwBG8YK0HiksJYD" alt=""><figcaption></figcaption></figure>

You can then choose whatever icon and name that you want, but you need to have the URL be specifically <https://systems.capriai.us/menu/emulator?location={{location.id}}&token=YOUR_CAPRI_TOKEN>, with "YOUR\_CAPRI\_TOKEN" being the Capri token that you can find in the knowledge base in Capri!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FQWTxoBH39SYOdJsF1ueb%2Fimage.png?alt=media&amp;token=a5215471-1659-4ffa-89fd-93431654d198" alt=""><figcaption></figcaption></figure>


# Connecting to the CRM (Legacy)

Once you've finished setting up the Capri portal and tested that it works inside of the emulator, you can move on to actually integrating the system with the CRM that you're using. As of right now, we only offer integration with GoHighLevel, but we plan on expanding this in the future!


# GoHighLevel (GHL)

Connecting to GHL is at the base level extremely simple! All you technically need to do for the AI to respond to messages in GHL is to set up a workflow with a trigger of "customer replied", with any filters and the like that you want, and a webhook step inside with all of the proper data fields mapped out!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FQAm6TLGUNGxCBGQ3DUU8%2Fimage.png?alt=media&amp;token=b68eeee7-af13-4174-af47-925443a81dd8" alt=""><figcaption></figcaption></figure>

Once you've added these two steps, you can add any other specifications and steps to the workflow that you want, whether it be filters, if/else branches, custom field counters, or anything else! All that's needed is for you to make sure that the webhook is being hit when you want the AI to respond to the contact. The only exception to this is when you're using the outreach task, as this allows the webhook to fire even without a "customer replied" trigger, for instance if you're using it to respond to a form being filled out or a tag being created!

## Snapshot

We do also offer a free snapshot that you can import to your GHL that a few example workflows that you can check out and use as either inspiration or templates for your own built workflows, which you can find at <https://links.capriai.us/Cr3r> Remember, though, the workflows and custom values and anything in the snapshot are NOT REQUIRED for the AI to function! All you truly need is a customer replied trigger and a webhook that's filled out! We also recommend that you draft all of the workflows when you first import them, and only publish them again once you've reviewed them and decided you want to use one of them!


# Webhook Information

The most important thing to do when setting up the CRM integration is properly fill out the webhook step that you're using! There are a few important fields that you ALWAYS need to fill out in every webhook step that you use and many optional fields you can fill out as well! Check back here every once in a while to see if we've added any new optional fields, as we're constantly adding new features! Also remember that you can indeed use GHL keys in the values for your webhooks, so for instance you can set up a custom field for the prompt, and then enter the key for that field in the prompt data point in your webhook!

Remember that each different webhook step can have different data points depending on your needs!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FFZ4o2fUecBiJ0xnfAmpU%2Fimage.png?alt=media&amp;token=64c6c11f-29af-4bc7-8f45-c3255c7e22c8" alt=""><figcaption><p>Here's an example of a completed webhook!</p></figcaption></figure>

## Webhook Type, Name, Method, and URL

The very first thing to do when setting up your webhook is making sure that you have the settings done properly. First, the webhook needs to be a normal webhook, not a premium one. The name for the webhook can be whatever you want to help you remember what the webhook's purpose is, but the "method" needs to be set to "POST". Finally, the URL needs to be exactly, "<https://systems.capriai.us/gpt3>", without the quotation marks! If the URL is incorrect, the webhook will fail to fire, which you can check in the workflow history!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F9DR8QJvsouY66Mwyhp2p%2Fimage.png?alt=media&amp;token=b8cf4b63-fe17-464a-be59-97e8acd24828" alt=""><figcaption></figcaption></figure>

## Required Custom Data Points

There are a few custom data fields that absolutely need to be filled out in every single webhook that you use, though we'll go over the different options for them here! The name of these sections will be what you enter as the "key" of the data point, and the description will tell you what you should enter as the "value"!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FQ03TCTqTsP5UiIgvuZBl%2Fimage.png?alt=media&amp;token=709784bc-b358-415b-9600-bc36d6e84da4" alt=""><figcaption></figcaption></figure>

### prompt

Here you need to fill out the prompt that you wish the AI to use when this particular webhook is triggered. Remember, you can use a different prompt in each webhook to suit your particular needs!

### key

The key should be the API key that you got from OpenAI at <https://platform.openai.com/account/api-keys>, but remember, the key here needs to be the full key like you copied into the portal settings. Don't make the mistake of copying the shortened version of the key, since you can only see the full version once! If you have clients using Capri, you can also have them use their own API key here so save on costs, just remember to have them add a payment method to their OpenAI account!

### model\_type

Here you can choose the AI model that you want to use. Currently, we only support Davinci, which should be entered as "davinci", ChatGPT, which should be entered as "chatgpt", and GPT4, which should be entered as "gpt-4", but we will be integrating with more models in the future! For now, we recommend using ChatGPT, GPT4 right now has about half the rate limit that ChatGPT does, which can easily cause issues! If you want to use larger prompts or have larger tag prompts so that you can give the AI specific examples, you can also use the 16k ChatGPT model by entering "gpt-3.5-turbo-16k" as the model! This will give you 16k tokens to work with rather than the standard 4k!

### temperature

The value for the temperature should be between 0 and 1, and we recommend that you use the same temperature that you test with in the emulator, so around "0.08" or "0.11"!

### max\_length

For the max length, you should just enter in the same max length that you have in the portal settings, so around "180", give or take, though remember, this doesn't actually put a limit on the response the AI generates, so if you have it too low, the AI can get cut off!

### presence\_penalty or frequency\_penalty

You also need to include either a "presence\_penalty" or a "frequency\_penalty" data point, though you don't need to use both. We recommend using "presence\_penalty" with a value of "0.8" or so, but it can be any value between 0 and 1

### task

The final required data point is "task". Here you can enter "respond", "outreach", "evaluate", or "custom" for the value, and we'll go over those in a later page!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FIQsMptO8hchngmy29MfX%2Fimage.png?alt=media&amp;token=aea810e0-76da-4f56-88a1-126d7bf0daac" alt=""><figcaption></figcaption></figure>

## Optional Custom Data Points

These data points are absolutely optional, but you can add some of these to greatly expand the capabilities of the AI and the Capri system in general! Some of these, though, increase the token count being used in your webhook, and as such, if you use too many of them, say multiple custom tags, you can risk overloading the OpenAI system which will cause your AI to fail to respond! Remember, the total token count, including the prompt, the conversation history, the spreadsheet if you arent using the knowledge base extension, and certain webhook data points can only be 3000 or less before it overloads!

### channel

If you want the AI to only respond to the contact via a specific channel, you can enter it here! Currently the only supported channels are "SMS", "GMB", "FB", and "IG", which are SMS, GoogleMyBusiness, Facebook, and Instagram DM's, respectively. If you don't put this data point, the AI will, by default, reply to the contact via the channel the incoming message was in!

### knowledge

Here is where you need to enter in the URL for the spreadsheet that you are using, if you are using one! Each webhook step can only access a single spreadsheet, but if you have multiple webhooks for different situations, you can give them different spreadsheets relating to their individual situation!

### fallback

The two options that you have for this data point are "silent", which will be the default behavior if you don't have this data point and causes the AI to remain silent whenever it reaches a fallback and add a tag of "fallback\_reached" to the contact, or "respond", which will have the AI try to respond to the contact as well as add the "fallback\_reached" tag!

### handoff

The handoff function is where you can specify the conditions that you want met for the AI to remain silent and add the "handoff" tag. This is one of the data points where, if you use it, it will increase the amount of tokens being used in your webhook, usually between 100-300 tokens depending on how complicated the value is. There is a separate page with more information about how this works!

### disqualify

This function is where you can specify conditions that, when met, the AI will consider the contact to be disqualified, and it will stop interacting with that contact and add the "disqualify" tag. This works much the same as the "handoff" function, and as such, you can find more information about it in the handoff page, and it will also use extra tokens.

### tag:tagnamehere

This is where you can use the custom tag function! This allows you to set a condition or conditions that, when met, adds a tag to the contact. More information is available in the Custom Tag page, and this function uses extra tokens.

### goal

If you want the AI to have the capability to check a calendar to do things like book an appointment or offer times, you need to add a data point with a key of "goal" and a value of "booking". When this is added, the AI will check the calendar you have linked in your portal settings or that you've specified in the webhook step, though this will take additional tokens. If you have told the AI to book appointments and offer times and the like without this data point, it will just make up times!

### booking\_action

If you want the AI to have the capacity to actually book your appointments itself, rather than just offer times and have a team member book the appointment or have the AI offer a booking link, you can add this data point with a value of "auto". By default, the AI will book into the calendar that you have set in your portal settings, but you can designate a different calendar by using a data point that we will cover shortly! Be aware, the booking action uses around 1k tokens, so if you're using this in the same webhook that you have many custom tags or the like, you can easily overload the AI and cause it to not respond anymore, and in this case, you can try seperating out your workflows based on which tags the contact has!

### calendar

If you want to have the AI access a different calendar than the one you have in your portal settings, say for instance you have different webhooks depending on what service the contact is interested in, you can add this data point and have the value be the ID of the calendar you want to use. You can find this calendar ID by copying the permanent link from the calendar, pasting this somewhere, like the address bar of your browser, and then copying the last part of the URL!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F6sfiwI6L6Ho9yzBBvRNu%2Fimage.png?alt=media&amp;token=6e070a25-e642-436b-b2b2-05cee3cb96a6" alt=""><figcaption><p>You can find this in the calendar section of the settings in GHL!</p></figcaption></figure>

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FI66IIM84oQxwuqmI3zFA%2Fimage.png?alt=media&amp;token=91d12648-77b6-4d68-963d-414e3c06a388" alt=""><figcaption></figcaption></figure>

### history

This function allows you to limit the conversation history that the AI can see and respond to! By default, if you don't have this data point, the AI will be sent the entire conversation history every time a new response comes in, even things that were sent months ago! This can cause issues long term, but with the "history" function, you can limit this. If you have "exclude" as the value, the AI will only ever be sent the message that triggered the webhook. This is useful if you are creating something like a Q/A bot or a knowledge repository! If you want to limit the AI to only being sent the conversation from a certain time period, you can enter a number value instead, with whole numbers representing hours, and decimal numbers representing percentages of an hour. For example, a value of "2" would have the AI read the last two hours every time a message comes in, a value of "0.5" would have the AI read the last 30 minutes, or half hour to be specific, and a value of "0.16" would be the last 10 minutes. Having a limit like this, whether it be a few hours or a few days, can greatly help the AI not run into excess token issues long term!

### actions\_model

Different models can have different strengths or weaknesses. For instance, GPT4 is significantly smarter in how it can detect things like conditions, but it's also more expensive and has a low rate limit. If you want to take advantage of this increased ability to parse conditions, but don't want to risk hitting the decreased rate limit, you can choose to activate a different model for "actions", like the handoff prompt, the booking check, etc., than the main completion! You just need to have a data point with a key of "actions\_model" and a value of the model you want to use, so either "gpt-4", "davinci", or "chatgpt". If you want to use the same model for everything, you can just not include this step and it will default to using the same model for everything!

### actions\_api\_key

If for some reason you want to use a different API key for the actions compared to the main fulfillment, you can do so with this data point! This could be because, for instance, you have access to GPT4 while your client doesn't! In this case, adding the "actions\_api\_key" and "actions\_model" would allow the AI to use the GPT4 model for actions, even though your client normally couldn't

### language

If you're using Capri in a language other than English, you might have some issues with the "custom tag" features or the booking functionality. This is because our system prompts and everything in the backend is in English, while your main prompt and conversation might be in something else! To help solve this, you can use the "language" data point to have our system prompts translated to the specified language! Bear in mind, though, that the names of the languages need to be the English names rather than the native names! For instance, the value would be "German" rather than "Deutsch" or "Swedish" rather than "Svenska"!

### timezone

By default, Capri will book appointments using the timezone that is set for the subaccount that you're using, but if you want to specify a different timezone, you can by using this data point! For the value, you would just enter in the name for the timezone as it appears in GHL, not including the offset! For instance, for Eastern time, it would be "America/New\_York" and for AEST time it would be "Australia/Brisbane"!

### training

If for some reason you want the AI to not use any of the training sessions from the emulator, you can use this data point! If you have this with a value of "exclude", the AI will not be given any of the trained data when generating responses!


# Custom Tags (Legacy)

Custom tags are a way for you to set conditions where a tag of your choosing is added, but unlike the handoff and disqualify functions, the AI will continue to respond once these conditions are met! To format this function properly, the key in the webhook step needs to be "tag:tagname", so for instance, you could have something like, "tag:service1", and when the condition is met, the contact will have the tag service1 added to them!

Just like with the handoff and disqualify functions, you are able to add multiple conditions to the function, so something like "The contact has asked for service 1, AND the contact has given a credit score greater than or equal to 650", and when those are met, the AI will add the tag and continue the conversation.

Unlike with the other two functions, however, you can actually add multiple custom tags to a single webhook step! The caveat to this is that each custom tag check adds around 250-400 tokens, depending on how complex the conditions are. As a result, if you have too many of them, especially if you are using the automatic booking feature, you can easily exceed the token limit of 4000. As a reminder, our system uses around 1k tokens out of the gate, the automatic booking feature uses 1k as well, and the prompt, spreadsheet, and training sessions all use tokens too, and the longer the conversation, the more tokens being used to save the conversation history! If you want to use multiple tags, but don't need them to be checked in every single conversation turn, remember that you can use multiple different workflows, each with their own webhooks, and each webhook can use different custom tags!


# Handoff and Disqualify (Legacy)

In the webhook step you have in the CRM, you can use these two function to set conditions that will prevent the AI from responding, and adding the tag relating to the function you decide to use, which are "handoff" for the handoff function and "disqualify" for the disqualify function. To set these conditions, you essentially need to give the AI mini-prompts describing the conditions you want it to check for! For example, if you were wanting to have the AI check to see if the contact has asked to talk to a human, you would enter in the value for the handoff data point, "the contact has asked to speak to a human." If you want to have multiple conditions that, if any of them are met, the handoff will trigger, you would add something along the lines of, "the contact has asked to speak to a human, OR the contact has asked for the booking link, OR etc...", and if any of those conditons are met, it will trigger, stop responding, and add the handoff tag. If you want to have it check to see if multiple conditions are all met before adding the handoff, you would format it like, "The contact has asked to speak to a human, AND the contact has already answered the qualifying questions, AND etc...".&#x20;

The disqualify feature works much the same way, but adds a different tag compared to the handoff feature.  This is so you can have two different conditions sets that both cause the AI to stop responding, but can trigger different workflows based on which tag has been added! For instance, if you have a handoff condition of, "The contact has asked to talk to a human", and a disqualify condition of, "The contact has said that their credit score is a number under 650", you could have one workflow that triggers to contact a team member whenever the handoff tag is added, but another workflow that triggers to set the contact to "do not disturb" whenever the disqualify tag is added!

Remember, though, both of these increase the token count that your webhook generates, and the more conditions you have, the more tokens being generated, which can cause you to exceed the token limit!


# Testing and Debugging (Legacy)

Occasionally you will run into a situation where you're hitting an error. Perhaps when you try to use the emulator, an error message pops up, or perhaps when you're in the CRM, the AI isn't responding as it should. Before you contact support, there are a few things you can try to troubleshoot things for yourself!&#x20;

## Emulator Problems

The most common error that we see is one which says "Error Sending Query! Please Contact Support If This Continues!"

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FZE9uI3r2yC8u5ebPzIQH%2Fimage.png?alt=media&amp;token=75b08cb8-890a-4ce2-a121-e78b0dfb89b8" alt=""><figcaption></figcaption></figure>

This can be one of a variety of different issues, but most of them are quite easy to test and fix! The most common reason we see this error pop us is from the user not having a payment method on file with OpenAI! Even if you have a trial with them, our system uses so many tokens, that we exceed the trial rate almost instantly, so you have to be sure that you have a payment method with them. You can check this at <https://platform.openai.com/account/billing/payment-methods>

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F1zGsVgVTIyNCxHneWXc2%2Fimage.png?alt=media&amp;token=b49df43e-ea6c-4a82-98c7-a3520b95f621" alt=""><figcaption></figcaption></figure>

The next potential reason for this is that you're exceeding the token limit for OpenAI! A variety of things can cause this, but the most common is using too large of a spreadsheet. By default, our system can handle about 20-30 entries in the knowledge base spreadsheet that you're using, and if you go over this, OpenAI can get overloaded as too many tokens are being passed to their side for the bot to handle! If you are in the 20-30 range, try removing a few entries and seeing if that fixes the problem, or sign up for our [spreadsheet extension](/legacy-information/legacy-information/using-the-knowledge-base-extension-legacy) to get unlimited cells for your spreadsheet! In the same vein, if your prompt is too long, ususally about 1000 tokens or greater, this can also exceed the OpenAI token limit! You can check the length of your prompt at <https://platform.openai.com/tokenizer>

## CRM Problems

If you're having issues in the actual CRM, the first step to take is to check if the emulator is also having issues! If so, try the steps above and see if the problem continues, but if not, there are some troubleshooting steps you can take on your own to try to fix the problem! The first thing to check is if you have the webhook formatted properly. It should be a default webhook and look like the one in the picture below! We have many optional data points you can include in the webhook, but at minimum, you must have the ones that are circled!

![](https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2Fmi9FkOkLXgATR7nPlLbl%2Fimage.png?alt=media\&token=e1cde5f9-f71e-4c97-b0e4-4eff6db4c3a8)

Make sure that you have all of the data points spelled correctly, and if you're still having issues, try checking the settings of the workflow that you're using. Make sure that you have allow multiple turned on!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FMuvBtz164KrucrhWIqkG%2Fimage.png?alt=media&amp;token=6e7c6fc2-ee57-4dde-8635-74d0db33784a" alt=""><figcaption></figcaption></figure>

Next, try checking the history of the workflow and see if the webhook is actually firing. If not, you may have an issue with your workflow, such as the path the contact takes not actually reaching the webhook, or an issue with the webhook itself, so make sure that you have the URL spelled correctly in the webhook!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FsvaugvsvrymzDva7tpp8%2Fimage.png?alt=media&amp;token=8eea26ad-3438-4c64-bc2c-b974d48a4daa" alt=""><figcaption></figcaption></figure>

If none of those were the issue, try going to the "notes" section in the contact that's having issues, as our system automatically adds notes mentioning some of the more common errors that we see!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F4cSWvGsg7Q3IFaqa8E67%2Fimage.png?alt=media&amp;token=289f61f7-a91a-4514-86d2-6c8f69d83d8c" alt=""><figcaption></figcaption></figure>

If none of the above solutions worked, then get the location and contact ID that you've been testing with and send a message to us on [Facebook](https://links.capriai.us/DyTe) with both of those and the issue that you've been having or email us at <info@capriai.us>, and we'll do our best to help!


# Understanding Fallbacks (Legacy)

Fallbacks are what happens whenever the AI runs into a situation that it doesn't know how to handle. This could be something like the contact giving a gibberish answer, sending photos, which the AI can't understand, or something unexpected happening in the conversation. When this happens, the AI will, by default, stop responding to the contact, add a tag called "fallback\_reached", and there will usually be an entry added to the fallback section of the portal!

Fallbacks can also potentially happen whenever the AI fails to book an appointment, such as the booking function failing, and when this happens our system will add a fallback\_reached tag in this instance as well.

To solve for this sort of thing, you can set up a workflow that notifies a team member to come and take over whenever the fallback\_reached tag is added!


# Overview of the calendar integration (Legacy)

Straight out of the box, using only the required webhook data points, the AI is not able to read a calendar or book appointments into it. If you try to use the AI to book in this instance, the AI will likely just make up times to try to do what you're asking it to do, but it will never be accurate.

### Giving the AI Access to the Calendar

For the AI to actually have access to the calendar, you need to have a certain data point in the webhook. You have to have a data point with a key of "goal" and a value of "booking". If the webhook does not have this, the AI will not actually be able to read information from the calendar, even if you tell it to in the prompt! Bear in mind, though, if you have a webhook that fires in a situation where the AI will never need to have access to the calendar, it's best to not include this data point, as it requires tokens!

### Letting the AI Book Appointments

If you want the AI to actually be able to book appointments rather than just offer them then hand off to a team member, you need to have both the booking goal data point and another data point with a key of "booking\_action" and a value of "auto". When this is included, every conversation turn, our system check to see if the AI has confirmed an appointment. It does this by looking if the AI is about to say something along the lines of "Great! I have you booked for Friday, May 16th at 2:30 PM!" When the AI is about to say something like this, our system will read the date and time that the AI is saying, then attempt to book that into, by default, the calendar that is set in the Capri portal. For our system to properly get the date and time that's needed to be booked, the AI needs to fully say the date and time, rather than just saying something like, "Awesome, we have you booked!", as this would cause the booking function to fail, so it's important to not train this message out via the prompt or the emulator sessions! Our system will then prevent the AI from actually saying that final line, though, so if you want the customer to have a confirmation message, you'll need to set up a workflow that fires when an appointment is booked in the calendar that then sends them a message!

Once again, bear in mind that this feature uses many tokens, more than any other feature at around 1k tokens in fact, so don't include this step in a webhook unless you need to book an appointment with it. In fact, it's better to separate things out to where the booking action has its own, dedicated webhook!

### Using Different Calendars

By default, both the calendar check and the booking function will use the calendar that you have set in the Capri portal. If you want to use a different one, however, say for instance you have multiple calendars for multiple situations, you can include a data point with a key of "calendar" and a value of the calendar ID that you want to use. You can find this calendar ID by copying the permanent link from the calendar, pasting this somewhere, like the address bar of your browser, and then copying the last part of the URL!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F6sfiwI6L6Ho9yzBBvRNu%2Fimage.png?alt=media&amp;token=6e070a25-e642-436b-b2b2-05cee3cb96a6" alt=""><figcaption><p>You can find this in the calendar section of the settings in GHL!</p></figcaption></figure>

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FPaQnGRsh55iEIEInSJak%2Fimage.png?alt=media&amp;token=9e237fe6-67c9-43d6-904d-6626ac5d326e" alt=""><figcaption></figcaption></figure>


# Respond Tasks (Legacy)

The "respond" task will be the one you use most, as it is the task for the AI to have an actual conversation with the contact! For the AI to properly respond and have a conversation, you'll need to make sure that the trigger for the workflow is "contact replied", though you can have whatever filters you want on it. This ensures that the AI actually can read the conversation history, as it pulls the message that triggers the workflow and saves it. Bear in mind, if you swap between workflows, the conversation history will not carry over between workflows!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2F3wwRvEsGS5aYdNqnhBNZ%2Fimage.png?alt=media&amp;token=259077b6-fe49-4f0c-8e85-7eac9d1a17af" alt=""><figcaption></figcaption></figure>


# Outreach Tasks (Legacy)

The outreach task is intended to be used, like its name implies, for sending outreach messages only! When you have a webhook step set to this task, it will not be able to properly have a conversation with a contact, as it will format its message strangely and likely won't even respond when a contact sends in a message! The primary way that you would use an outreach task would be to do things like follow up with stale leads or send an initial message when someone fills out a form! You will likely need to use a different workflow than your primary "conversation" workflow to accomplish this, and we have a rudimentary example in our snapshot, that looks like the below picture!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FhEpC7MH5l0C5NGRwQhbf%2Fimage.png?alt=media&amp;token=8a38c841-a9a3-4f8c-9743-9c155b959589" alt=""><figcaption></figcaption></figure>

Whenever you use an outreach webhook, remember to use a different prompt to explain to the AI what kind of outreach message it should be sending!


# Evaluate Tasks (Legacy)

If you'd like to use Capri to do things like add tags but not actually respond, this is the task for you! When this task is set, the AI will never actually generate a message to be sent out to the contact, instead, all it will do is monitor the conversations and check the custom tags that you have in the webhook!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FrtIthcEDRQSVxNdIycWl%2Fimage.png?alt=media&amp;token=fda700f5-690d-46d0-b53e-97833e42f3c7" alt=""><figcaption></figcaption></figure>


# Custom Tasks (Legacy)

When you use the custom task in your webhook, this essentially removes all of our system prompts that we have in the background for the other tasks that form a kind of framework for the kind of task the AI is meant to be doing in those instances. For example, the "response" task has system prompts that tell the AI that it needs to continue the conversation and the "outreach" task tells the AI that it needs to generate an outreach message and gives it a few examples. With the custom task, the AI will have no additional prompting outside of what you directly give it, so we recommend only using this if you are very familiar with AI prompting!


# Setting up a Spreadsheet (Legacy)

The spreadsheet is where you give your AI actual answers that it can give to your clients' questions! You do this by filling out the sheet in a questions and answers format, where you can fill out things like what the business's hours are, or where the business is located, by showing the AI what answers it should give to questions or questions like them! The spreadsheet does need to be formatted a certain way for our system to work, however. It needs to have only two columns, and the A1 entry needs to be "Contact" and the B1 entry needs to be "Assistant". It also needs to be a default, basic Google sheet, not an imported Excel sheet or anything like that! You can find a template at <https://docs.google.com/spreadsheets/d/1aDcCR9mXipJNaKi45GGz_Rw-W13oQp2702FzkPVcwt0/edit#gid=0> that you can copy to make sure that it's the right form of spreadsheet! By default, the spreadsheet can only contain at max 15-30 rows, depending on the token length of the entries, so be aware!&#x20;

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FAi5TNnc0EUj7ebTG7rkD%2Fimage.png?alt=media&amp;token=b0e1f3a4-df19-4c15-940c-626455f7ea79" alt=""><figcaption></figcaption></figure>

Something to also be aware of is that our system does need to actually be able to access the spreadsheet, and you can do this by either making it to where anyone can view the spreadsheet if they have the link, or by adding the email "<capri-google-sheets@dwy-master.iam.gserviceaccount.com>" as an authorized viewer!

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FniLItIYMS9QKRNf1Ku1U%2Fimage.png?alt=media&amp;token=66cd7dc3-91fd-481b-99e3-801b188808eb" alt=""><figcaption></figcaption></figure>


# Using the Knowledge Base Extension (Legacy)

Out of the box, the spreadsheet can only contain between 15-30 rows, depending on how long the entries are, but this can be extended indefinitely by using our knowledge base extension, which you can either get for free with our Enterprise plan OR pay $5 a month per spreadsheet! At the bottom left of the portal, there is a tab that looks like a book, and when you click on this without having the extension or an Enterprise plan, you will be shown a link to sign up! After you've signed up, you'll be greeted with a new page.

<figure><img src="https://3405410158-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FceowT5YuHiPO9waGTyaH%2Fuploads%2FUROyKQ9xVlp3Myml8Mac%2Fimage.png?alt=media&amp;token=862fcdc2-c287-4773-a21f-48e133ade142" alt=""><figcaption></figcaption></figure>

Here can enter in the URL's for the spreadsheets you want to have use the extension, though remember the price is per spreadsheet unless you have the Enterprise plan! If the page loads forever whenever you try to upload the spreadsheet here, try checking the spreadsheet to make sure the format is right!&#x20;

Remember, you don't have to have the Enterprise plan to use the knowledge base extension, the Enterprise plan just gives it to you for free!


