# AI Tools

## What are AI tools and tool calling?

AI tools are services that an AI model can use to gain new abilities and information. Tool calling is the AI's internal decision-making process where it recognizes that a request requires it to temporarily stop its normal text generation and instead use a tool to assist the user. This allows the AI to fetch real-time data, run code, or take actions in the outside world, making it a much more useful assistant.

{% hint style="info" %}
You can find AI tools under **EbbotGPT** > **Configurations**. Go into your active configuration and set it to **prompt version: v2** (the tool calling version) and the **AI tools section** of the configuration will appear.
{% endhint %}

## How to use tools

Activating a tool makes the chat agent aware of its capabilities, but providing specific instructions ensures it uses those tools precisely when needed. You do that by adding explicit instructions to your Persona Settings.

* **Data Retrieval**: "If a user inquires about platform status, ongoing maintenance, or reported outages, use the Get website tool to retrieve the latest updates from our official status page."
* **Escalation**: "Trigger a Human Handover immediately if a user expresses a desire to cancel their subscription or requires a refund."

## Ebbot native AI tools

### Handover to human

Transfers the conversation to a human agent.

### Trigger scenario

This capability enables the LLM to recognize and launch your predefined scenarios or workflows. To ensure accurate execution, provide a clear, detailed description for each scenario, then simply activate the tool and select the scenarios the LLM is authorized to use.

**How to:**&#x20;

1. Add a description to the scenario to make it easy for the LLM to understand when it should be triggered
2. Activate trigger scenario tool
3. Select what scenario that can be triggered

### Get website

Use this tool to perform live web scrapes for information that is time-sensitive or frequently changing, ensuring the most current data is acquired on demand.

**Allowed URLs**: Specify what URLs the tool should be allowed to scrape.

{% hint style="warning" %}
Leaving the URL field empty allows the tool to access any publicly available webpage on the internet. To ensure the AI only pulls from trusted sources, define a specific URL or domain.&#x20;
{% endhint %}

* Adding a URL includes all paths under it (e.g., adding `www.ebbot.com` also allows `www.ebbot.com/about`).
* Add several URLs by separating them with a comma and a space:&#x20;

  `www.ebbot.com, www.wikipedia.com`

{% hint style="warning" %}
The allowed URLs field currently does not support regex or wildcards.
{% endhint %}

**Limitations**: The Get Website tool is designed for single-page extraction, not site-wide crawling. It should not be used as a substitute for a full website scrape.

**Use Case**: This tool is primarily used to retrieve real-time data from specific, high-value URLs, such as your [status.ebbot.ai](https://status.ebbot.ai/) or specific page on your website such as [ebbot.com/platform/integrations](https://www.ebbot.com/platform/integrations)

#### Providing a URL for the Get Website Tool

You need to provide your AI Agent with a target URL so it knows exactly what to scrape. Here are three ways you can pass URLs to the agent:

**Define a URL in the persona**

* **Persona:** If the user asks about maintenance, scrape the page: <https://status.ebbot.ai/>

&#x20;**Scrape a URL found in your uploaded knowledge**

* **Persona**: If you find a URL in one of the retrieved articles, use the Get Website tool to scrape that URL for more detailed information.

**Use the tool Search Google to find URLs**

* **Persona**: If asked about Microsoft 365, use the Search Google tool to find the relevant URL, and then use the Get Website tool to scrape that URL to find information answering the user's query.

### Calculator

Use this tool to perform accurate mathematical calculations. This bypasses the LLM's core weakness, which is its reliance on statistical probability rather than logical computation for numerical tasks.

### Get user info

Fetch information that already exist in Ebbot about the user. By design, EbbotGPT does not have blanket access to all your stored data. This ensures that sensitive information stays private and isn't processed by the LLM unless necessary. This tool acts as a secure bridge, allowing the LLM to fetch only the specific, safe user details it needs to provide a personalized experience.

{% hint style="info" %}
By default, the only information about the user in Ebbot is:<br>

* **User Location**: Belgium (IP: `35.228.240.254`)
* **Tech Stack**: Chrome browser on a non-standard OS; English language.
* **Current Activity**: Configuring an Ebbot GPT instance on the `v2.ebbot.app` dashboard.
* **Last Action**: The user clicked a Conversation Starter (a preset button) rather than typing a message manually.
* **Behavior Note**: The bot was set to "skip typing," meaning the response appeared instantly without a loading animation.
  {% endhint %}

You can add custom user metadata through the chat widget API. For implementation details, please refer to our documentation [here](https://docs.ebbot.ai/ebbot-docs/chatbot/chatbot-and-live-chat/chat-widget-api#setuserattribute).

### Set user info

Enables the LLM to dynamically update user profiles in Ebbot by extracting and saving key details from the conversation.

{% hint style="warning" %}
Data saved via this tool is generated entirely by the LLM based on chat context. Exercise caution with sensitive data, as it may contain inaccuracies, misinterpretations, or formatting errors in fields like emails and phone numbers.
{% endhint %}

### Search dataset

Search for information in the dataset by allowing the chat agent to create the query and perform the search.

**Extra description:** In the inputfield you can define when a specific data set should be used

**Searchable datasets:** Set one or more datasets the LLM should be able to access

**Number of results:** How many documents should be retrieved (more documents means slower LLM response)  &#x20;

<figure><img src="/files/DRH0HVuO6z3zaumA5cGl" alt=""><figcaption></figcaption></figure>

### Search Google

The Search Google tool enables the LLM to perform real-time web searches to retrieve up-to-date facts, news, and documentation. By processing live search results, the assistant can provide grounded answers and reduce hallucinations when discussing recent events.

{% hint style="warning" %}
By default, the Search Google tool can retrieve information from the entire indexed web. To restrict the assistant's knowledge to specific domains or pages, you must list those URLs in the Allowed Sites field.
{% endhint %}

<figure><img src="/files/QmX6p3zZfm1kvXu4dn2t" alt=""><figcaption></figcaption></figure>

You can add more allowed URLs by adding a comma and a space between them:

```
ebbot.ai, docs.ebbot.com, wikipedia.org 
```

### End chat

Let the chat agent be able to close the chat.

### Reject

Let the chat agent block harmful questions and topics. &#x20;

### HTTP request

Allow your chat agent to access information on the internet by making HTTP requests to external APIs and websites. This tool allows you to fetch real-time data or send information to third-party services instantly.

{% hint style="info" %}
Use this tool as a fast way to do light weight integrations. For instance, it can execute a GET request to your product recommendation engine in order to suggest products.&#x20;
{% endhint %}

<details>

<summary><strong>Technical instruction on how to use the http request tool</strong></summary>

## HTTP Request Tool (http\_request)

The `http_request` tool lets you define one or more preconfigured HTTP requests that the assistant can call as safe, named tools. Each request you configure becomes its own tool (for example, `request_search_products`).

This chapter explains the JSON config for `http_request` and how to set it up.

### How it works (short version)

* You provide a `requests` array in the tool config.
* Each request object defines a method, URL, headers/body, and optional placeholders.
* Placeholders are turned into arguments that the assistant must supply.
* The tool performs the HTTP call, then returns a JSON string with metadata and the response data.

### Config JSON

The tool config accepts a single key: `requests`.

```json
{
  "requests": [
    {
      "name": "Search catalog",
      "description": "Search our product catalog by keyword.",
      "method": "POST",
      "url": "https://api.example.com/catalog/search?limit={{limit}}",
      "headers": {
        "Authorization": "Bearer {{token}}",
        "X-Client": "assistant"
      },
      "body": {
        "query": "{{query}}",
        "includeOutOfStock": false
      },
      "placeholders": [
        { "key": "query", "type": "string", "description": "Search term" },
        { "key": "limit", "type": "number", "default": 10 },
        { "key": "token", "type": "string", "description": "API token" }
      ],
      "responsePath": "items"
    }
  ]
}
```

#### Request object fields

| Field          | Type   | Required | Description                                                                          |
| -------------- | ------ | -------- | ------------------------------------------------------------------------------------ |
| `name`         | string | Yes      | Human-readable name. Used to generate the tool name (e.g. `request_search_catalog`). |
| `description`  | string | No       | Custom tool description shown to the assistant.                                      |
| `method`       | string | Yes      | HTTP method. Allowed: `GET`, `POST`, `PUT`, `PATCH`, `DELETE` (case-insensitive).    |
| `url`          | string | Yes      | Target URL. Must be HTTPS and public. You can include placeholders like `{{id}}`.    |
| `headers`      | object | No       | Header key/value map. Placeholders are supported in both keys and values.            |
| `body`         | any    | No       | Request body for non-GET methods. Placeholders are supported anywhere in the JSON.   |
| `placeholders` | array  | No       | Defines the arguments the assistant must provide. See below.                         |
| `responsePath` | string | No       | JMESPath expression to extract a specific part of a JSON response.                   |

### Placeholders (dynamic arguments)

Use placeholders to insert user-provided values into the request.

* Placeholder format: `{{key}}`
* Supported in: `url`, `headers`, and `body` (including nested fields and object keys).
* Placeholders create tool arguments for the assistant.

Each entry in `placeholders` can include:

| Field         | Type   | Required | Description                                                                                                    |
| ------------- | ------ | -------- | -------------------------------------------------------------------------------------------------------------- |
| `key`         | string | Yes      | Argument name used in `{{key}}` placeholders.                                                                  |
| `type`        | string | No       | Argument type for the schema. Defaults to `string`. Options: `string`, `number`, `boolean`, `object`, `array`. |
| `description` | string | No       | Helpful explanation for the assistant.                                                                         |
| `default`     | any    | No       | If provided, the argument becomes optional.                                                                    |

#### Example: optional placeholder with default

```json
{
  "placeholders": [
    { "key": "limit", "type": "number", "default": 10 }
  ]
}
```

If the assistant does not pass `limit`, the tool uses `10`.

### Response selection with `responsePath`

If the response is JSON, you can extract a nested value using a JMESPath expression. If the path is invalid, the full JSON is returned instead.

Example:

```json
{
  "responsePath": "data.items[0].name"
}
```

### Safety limits and behavior

The tool enforces safe and predictable HTTP behavior:

* HTTPS only.
* No localhost, private IPs, single-label hostnames, or `.local` domains.
* Max response size: 1 MB.
* Max redirects: 3.
* Timeout: 15 seconds.
* Only certain content types are accepted (HTML, text, JSON, XML, etc.).
* Responses are returned as a JSON string and truncated to 16,384 characters.

The returned JSON string looks like this:

```json
{
  "url": "https://...",
  "method": "POST",
  "status": 200,
  "statusText": "OK",
  "contentType": "application/json",
  "headers": { "content-type": "application/json" },
  "data": { "...": "..." }
}
```

### Tips

* Use clear `name` values so the generated tool name is understandable.
* Define placeholders for anything that should be dynamic (query, IDs, auth tokens).
* Prefer `responsePath` to keep responses small and focused.
* For GET requests, `body` is ignored.

</details>

## How to see if a tool was used

To see exactly how your chat agent used its tools, go to your chat history. In the top right corner of the AI's reply you can see if a tool was used. Click on that text to see more information about the tool's output and how it was used.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.ebbot.ai/ebbot-docs/core-capabilities/ebbotgpt/ebbotgpt-configurations/ai-tools.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
