# Welcome to Tiledesk Help Center

### Jump right in

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>AI Chatbots and Automation</strong></td><td>Learn the basic &#x26; advanced automation hacks for your chatbot</td><td><a href="/files/CyBwOXRzG9YhV4Crf2mh">/files/CyBwOXRzG9YhV4Crf2mh</a></td><td></td><td><a href="/pages/eVoDY5uIanfPBgnHF8qh">/pages/eVoDY5uIanfPBgnHF8qh</a></td></tr><tr><td><strong>Knowledge Base</strong></td><td>Learn how to upload information into the system and use the RAG engine to instantly retrieve it</td><td><a href="/files/v0amq2BhCCXLdbzT6d3D">/files/v0amq2BhCCXLdbzT6d3D</a></td><td></td><td><a href="/pages/3eh37C8w2HAmY6lUvEf7">/pages/3eh37C8w2HAmY6lUvEf7</a></td></tr><tr><td><strong>Apps and Integrations</strong></td><td>Learn more about WA, FB, &#x26; Telegram integrations and web installations</td><td><a href="/files/ye0GIRBzglzu2hK1bqLp">/files/ye0GIRBzglzu2hK1bqLp</a></td><td></td><td><a href="/pages/T7OoTY5oI5QwKKTpuwZP">/pages/T7OoTY5oI5QwKKTpuwZP</a></td></tr><tr><td><strong>Manage Your Workspace</strong></td><td>These resources will help you manage your Teams, Departments</td><td><a href="/files/GJgR6qGU8zGbjjShBNr3">/files/GJgR6qGU8zGbjjShBNr3</a></td><td></td><td><a href="/pages/SCP5OTSM723nCox31ALV">/pages/SCP5OTSM723nCox31ALV</a></td></tr><tr><td><strong>Guides for Human Agents</strong></td><td>Everything you need to know about your chats, history, tags, internal</td><td><a href="/files/Wa7Bl6hY4ABmJXoL0QcR">/files/Wa7Bl6hY4ABmJXoL0QcR</a></td><td></td><td><a href="/pages/jNWRzzGRA87t18NYuL0w">/pages/jNWRzzGRA87t18NYuL0w</a></td></tr><tr><td><strong>Manage Your Contacts</strong></td><td>Manage your own CRM, including the authenticated users</td><td><a href="/files/ixcdcezMEjJkZ1p7DnqW">/files/ixcdcezMEjJkZ1p7DnqW</a></td><td></td><td><a href="/pages/nc1dyFWo7l5jItCkLMSw">/pages/nc1dyFWo7l5jItCkLMSw</a></td></tr><tr><td><strong>Support</strong></td><td>Learn about severity definitions, support hours and Service Level Targets</td><td><a href="/files/Z2ujfOrYWVV2vM4hhZKC">/files/Z2ujfOrYWVV2vM4hhZKC</a></td><td></td><td><a href="/pages/b2fcasNFHPY9Oh8UCwpT">/pages/b2fcasNFHPY9Oh8UCwpT</a></td></tr><tr><td><strong>Security</strong></td><td>Learn more about our policies</td><td><a href="/files/MuxnIwIYHwM8e9B6OeUk">/files/MuxnIwIYHwM8e9B6OeUk</a></td><td></td><td><a href="/pages/42dFSNdQsTkLmjRvTwLj">/pages/42dFSNdQsTkLmjRvTwLj</a></td></tr><tr><td><strong>Troubleshooting</strong></td><td>Solutions to most common issues, latest version, notifications and more</td><td><a href="/files/MVxPVrFpYhetmnbcjNdA">/files/MVxPVrFpYhetmnbcjNdA</a></td><td></td><td><a href="/pages/plaKfV6lvi2Hg9lmze4s">/pages/plaKfV6lvi2Hg9lmze4s</a></td></tr></tbody></table>


# Quick start

[How to transfer my chatbot to a live agent](/ai-chatbots-and-automation/quick-start/how-to-transfer-my-chatbot-to-a-live-agent)

[How to create a chatbot from scratch](/ai-chatbots-and-automation/quick-start/how-to-create-a-chatbot-from-scratch)

[How to move from a web-widget to WhatsApp chat](/ai-chatbots-and-automation/quick-start/how-to-move-from-a-web-widget-to-whatsapp-chat)

[Setting Language Filters in a Block](/ai-chatbots-and-automation/quick-start/setting-language-filters-in-a-block)


# How to transfer my chatbot to a live agent

#### Intro <a href="#intro" id="intro"></a>

What if, during a conversation, you want a **chatbot-human handoff**? Chatbot-human handoff is when you are transferring the conversation from a chatbot to a live agent.

Tiledesk's No Code Visual Builder allows you to set up a live chat with the option to hand over the conversation to a human agent when available. Additionally, if no agents are online, you can collect customer contact information for follow-up. In this tutorial, we'll guide you through the three easy steps to achieve this.

{% embed url="<https://www.youtube.com/watch?embeds_referring_euri=https://gethelp.tiledesk.com/&v=YuWQWdN6HjY>" %}

#### Step 1: Set Up Your Start Message <a href="#step-1-set-up-your-start-message" id="step-1-set-up-your-start-message"></a>

* Begin by setting up your chatbot's start message.
* Add a button to the start message to lead to agent handoff when clicked.

#### Step 2: Draw a Path for a New Block <a href="#step-2-draw-a-path-for-a-new-block" id="step-2-draw-a-path-for-a-new-block"></a>

* Draw a Path from the button exit port to create a new block by choosing “If Online Agent” from the menu
* Name it (e.g., "Handoff").

#### Step 3: Create 2x Paths  <a href="#step-3-create-2x-paths" id="step-3-create-2x-paths"></a>

* From the “**Online**” exit port, draw a path to create a corresponding block by choosing “**Agent Handoff**”. You can also include a “Reply” that advises the customer that somebody is about to hop on the chat
* In case the Agent isn’t online, draw a path from the “**Else**” to create a second block by choosing a “**Reply**”, and inserting, for example, an invite for your customer to leave a message

Congratulations! You've successfully set up a live chat with agent handoff and contact info collection using Tiledesk's No Code Visual Builder. Your chatbot will now efficiently handle customer interactions, transferring them to human agents when available, and collecting contact information for follow-up when needed.

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

Do you have any feedback on this article? Please send it to us at <info@tiledesk.com>

Enjoy Tiledesk!


# How to create a chatbot from scratch

#### Intro <a href="#intro" id="intro"></a>

This tutorial will show you how to start creating a no-code bot from scratch and have fun at the same time! Don't believe it? Continue to read or watch the video.

{% embed url="<https://www.youtube.com/watch?v=mezSQWQpVe0>" %}

#### Step 1: Log in to Your Tiledesk Account <a href="#step-1-log-in-to-your-tiledesk-account" id="step-1-log-in-to-your-tiledesk-account"></a>

1\. Open your web browser and navigate to the Tiledesk platform (<https://www.tiledesk.com/).\\>
2\. Log in to your Tiledesk account using your credentials.\
3\. Once logged in, go to the "Bots" section in the Tiledesk dashboard.

#### Step 2: Create a New Bot from Scratch <a href="#step-2-create-a-new-bot-from-scratch" id="step-2-create-a-new-bot-from-scratch"></a>

1\. In the "Bots" section, click on the "Add from Scratch" button to start creating your chatbot.

#### Step 3: Setting Up the Start Message <a href="#step-3-setting-up-the-start-message" id="step-3-setting-up-the-start-message"></a>

1\. Upon creating a new bot from scratch, you'll see two default blocks: "Welcome" and "DefaultFallback."\
2\. Start by setting up your chatbot's initial message. Click on the "Welcome" block to edit its content. This is the message that users will see when they initiate a conversation with your chatbot. Customize it to provide a warm welcome or any relevant information.

#### Step 4: Creating New Blocks and Paths <a href="#step-4-creating-new-blocks-and-paths" id="step-4-creating-new-blocks-and-paths"></a>

1\. Now, let's create a conversation flow for your chatbot. Begin by drawing paths from the exit ports of existing blocks to create new blocks with specific actions.\
2\. Click on the exit port of a block (e.g., the "Welcome" block) and drag it to an empty space on the canvas to create a new block.\
3\. A menu will appear, allowing you to choose a specific action for this block. You can choose actions such as "Reply" or "If Online Agent."\
4\. After selecting an action, you can name your block to keep your conversation flow organized and easily understandable.

#### Step 5: Handling Online Agent Availability <a href="#step-5-handling-online-agent-availability" id="step-5-handling-online-agent-availability"></a>

1\. To handle scenarios when an online agent is available, draw a path from the "Online" exit port of a block.\
2\. Create a corresponding block by choosing the "Agent Handoff" action. This block will handle interactions when a live agent is online.

#### Step 6: Handling Offline Agent Availability <a href="#step-6-handling-offline-agent-availability" id="step-6-handling-offline-agent-availability"></a>

1\. To handle situations when an online agent is not available, draw a path from the "Else" exit port of a block.\
2\. Create a second block by choosing the "Reply" action in this case. This block will be used to provide an offline message to the user.\
3\. Customize the content of the "Reply" block to convey a message or offer assistance even when no live agent is available.

#### Step 7: Continue Creating Blocks <a href="#step-7-continue-creating-blocks" id="step-7-continue-creating-blocks"></a>

1\. You can continue to create as many blocks as needed to build a complex chatbot conversation flow.\
2\. On the left side of the Tiledesk Design Studio, you'll find a list of all your blocks, making it easy to navigate and edit them as necessary.

#### Step 8: Test Your Chatbot <a href="#step-8-test-your-chatbot" id="step-8-test-your-chatbot"></a>

1\. Once you have created your chatbot's conversation flow, it's important to test it thoroughly to ensure it behaves as expected.\
2\. You can test your chatbot by simulating user interactions in the Tiledesk platform (top green button) or [by integrating it into your website](/web-integrations) or messaging channels.

That's it! You've successfully created a chatbot from scratch using Tiledesk Design Studio. You can further refine your chatbot's behavior, add more complex logic, and [integrate it with various channels](/apps-and-integrations/whatsapp-business) to provide efficient customer support and engagement.


# How to move from a web-widget to WhatsApp chat

We are all aware that people all around the world prefer to use their smartphone for pretty much everything. So why not make it even easier for your website visitors and customers to chat with you in real time. Aside from offering a nice classic web widget with chatbots, you can also give the option to move the conversation from the widget to an actual WhatsApp chat with a human operator. All thanks to chatbots and our Chatbot Design Studio. Let's see how.

#### Go to the Chatbot Design Studio <a href="#go-to-the-chatbot-design-studio" id="go-to-the-chatbot-design-studio"></a>

Once you're in the Chatbot Design Studio, select your start or any other block at which point of the conversation flow you wish to add the option to move to WhatsApp.

**Create a button as a URL link**

Add a button title, choose URL as a type, open in blank and **add the following link in the URL field**:

> \*\*<https://wa.me/**+393491234567&#x38;**?text=**&#x48;e&#x79;**%20**nee&#x64;**%20**mor&#x65;**%20**info>

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

The link consist of:

1. the initial part <https://wa.me/>
2. followed by **the phone number** you want to transfer the conversation to, so presumably your business number.
3. the final part is “**?text=**” after which you can insert any text you'd like that will be sent as a first message in the WhatsApp chat. Remember to include **%20** any time you'd like **to insert space**. Example: Hey%20need%20more%20info

[Check this video out to see how it looks like in practice](https://youtube.com/shorts/RXsDTgbn-vw?feature=share)!


# Setting Language Filters in a Block

#### Intro <a href="#intro" id="intro"></a>

This guide will help you set up language filters for text fields in a block, ensuring that users see content in their preferred language based on their browser settings. For a quick setup, you can import a Multilingual Chatbot [here](https://tiledesk.com/community/search/getchatbotinfo/chatbotId/65acd812484b9f0013c13e9c-Multi-language-chatbot-example-using-Reply-Filters).&#x20;

If, on the other hand,  you're looking for a simpler but effective Multilingual Bot, you can also try uploading a JSON structure for your translations - have a look at this template [here](https://tiledesk.com/community/search/getchatbotinfo/chatbotId/65aedcd48431bd0013646c72-Multi-language-chatbot-using-Globals-section-to-host-all-the-translations-in-JSON).

#### Step 1: Access the Filter Option <a href="#step-1-access-the-filter-option" id="step-1-access-the-filter-option"></a>

1\. **Open the Block:**\
&#x20; \- Navigate to the block where you want to set the language filters.\
&#x20; \- Click inside the block on the text field

2\. **Find the Filter Option:**\
&#x20; \- Look above the text field within the block for the filter option. \
&#x20; \- Click on the filter icon to open the filtering settings.

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

#### Step 2: Set the Filter for English - this can be your pivot language <a href="#step-2-set-the-filter-for-english-this-can-be-your-pivot-language" id="step-2-set-the-filter-for-english-this-can-be-your-pivot-language"></a>

1\. **Choose the Attribute:**\
&#x20; \- From the list of attributes, select \`user\_language\`.&#x20;

2\. **Set the Condition:**\
&#x20; \- Set the condition to \`contains ignore case\`.

3\. **Enter the Value (iso code "en"):**\
&#x20; \- This ensures that only users with their browser language set to English will see this text.

4\.  **Pivot language** (the fallback language used when there is no support for the user-language by the chatbot). Add another condition by selecting the “OR” option. The alternative condition should match a regex value containing the iso codes for your other filtered languages.

We used the regex:

```
^((?!it|es).)*$
```

We use this regex to get a "true" condition when the user language is different from the other two that we know are supported. As you can see, the languages are represented by their iso codes "it" and "es". If you support other languages different from the pivot one, you should add them as below:

```
^((?!it|es|fr|ru).)*$
```

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

#### Last Step: Add Filters for Additional Languages

1\. **Add a New Text Field:**\
&#x20; \- Add another text field to the block for the next language translation.

2\. **Repeat Filter Setup:**\
&#x20; \- Click on the filter option above the new text field.\
&#x20; \- Choose the \`user\_language\` attribute again.\
&#x20; \- Set the condition to \`contains ignore case\`.

3\. **Enter the Language Value:**\
&#x20; \- For Italian, enter \`it\` in the value field.\
&#x20; \- Repeat these steps for other languages by adding more text fields and setting the appropriate language codes (e.g., \`es\` for Spanish, \`fr\` for French).

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

#### Conclusion

Only the text fields that meet the conditions set by their respective filters will be displayed to the user.\
Ensure each text field is correctly set up with the \`user\_language\` attribute and the appropriate condition. By following these steps, you can effectively manage multilingual content in your blocks, ensuring users see content in their preferred language based on their browser settings.

For any feedback, don't be shy, shoot us an email at <info@tiledesk.com> 🧡


# Knowledge Base

[Knowledge Base overview](/ai-chatbots-and-automation/knowledge-base/knowledge-base-overview)

[Knowledge Base Administration](/ai-chatbots-and-automation/knowledge-base/knowledge-base-administration)

[Hybrid search](/ai-chatbots-and-automation/knowledge-base/hybrid-search)

[How does the Knowledge Base work](/ai-chatbots-and-automation/knowledge-base/how-does-the-knowledge-base-work)

[Best Practices for Utilizing Tiledesk Knowledge Base Effectively](/ai-chatbots-and-automation/knowledge-base/best-practices-for-utilizing-tiledesk-knowledge-base-effectively)

[Indexing URLs in Tiledesk’s Knowledge Base with Advanced Options](/ai-chatbots-and-automation/knowledge-base/indexing-urls-in-tiledesks-knowledge-base-with-advanced-options)

[Advanced Knowledge Base: AI Settings](/ai-chatbots-and-automation/knowledge-base/advanced-knowledge-base-ai-settings)

[How to add Multiple Knowledge Bases & link AI Agents](/ai-chatbots-and-automation/knowledge-base/how-to-add-multiple-knowledge-bases-and-link-ai-agents)

[Using Buttons in an AI Workflow to Trigger the Knowledge Base](/ai-chatbots-and-automation/knowledge-base/using-buttons-in-an-ai-workflow-to-trigger-the-knowledge-base)

[Self-Learning AI Agent](/ai-chatbots-and-automation/knowledge-base/self-learning-ai-agent)

[Unanswered Questions in the Knowledge Base](/ai-chatbots-and-automation/knowledge-base/unanswered-questions-in-the-knowledge-base)

[Copilot for Human Support Teams](/ai-chatbots-and-automation/knowledge-base/copilot-for-human-support-teams)

[Using Tags in Knowledge Base](/ai-chatbots-and-automation/knowledge-base/using-tags-in-knowledge-base)


# Knowledge Base overview

Managing Information Retrieval with Tiledesk native RAG

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

Tiledesk offers a powerful **Information Retrieval** module – the *Knowledge Base* – purpose-built to deliver **accurate, context-aware responses** based on your organization’s knowledge.

With the Knowledge Base engine, based on Retrieval Augmented Generation (RAG) paradigm, your  AI Agents will access to a unique platform designed to meet the real needs of companies looking for a production-ready Information Retrieval solution based on Agentic-AI.

What makes the Tiledesk solution different from our competitors is in the way the Knowledge Base is administered and delivered in production (automation).

Tiledesk is natively **multi-tenant**. This means that you can have one single Tiledesk instance (you can install Tiledesk using our [open-source](https://github.com/tiledesk) distribution) and create multiple projects. Each project is a sandbox where all the AI resources that you need live totally isolated from other projects. This means that with a single Tiledesk instance you can develop and manage multiple complex projects, saving a lot of time and computational resources. Inside a single project you can have multiple automations, multiple teammates collaborating with different roles but above all you have **multiple isolated RAGs** (the Knowledge Bases)

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

### Administration, Automations and APIs

Tiledesk provides you three different tools to manage your RAG projects, each one with a specific focus.

1. Administration
2. Automation
3. APIs

#### Administration

A fully featured UI will allow you to create new Knowledge bases, upload and maintain contents indexes, create new AI Agents on the fly etc.

Find more on [Administration guide](https://guide.tiledesk.com/ai-chatbots-and-automation/knowledge-base/knowledge-base-administration)

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

#### Automation

Automation flows provide the effective and fast way to use your Knowledge bases. With automation you can design automated responders for your end-users, information retrieval for your colleagues, [self-learning](/ai-chatbots-and-automation/knowledge-base/self-learning-ai-agent) to automatically feed your RAGs and much more.

<figure><img src="/files/EFHRMPL7HQenC0ByXnSL" alt="" width="563"><figcaption></figcaption></figure>

To build your automations you must create a flow using the [Ask Knowledge Base](/ai-chatbots-and-automation/actions-explained/ask-knowledge-base) Action.

You can also feed your RAG using the [Add to Knowledge Base](/ai-chatbots-and-automation/actions-explained/add-to-knowledge-base-action) Action.

#### APIs

You can use APIs to create new Knowledge Bases, index contents and query the information retrieval engine. Please refer to the official [Knowledge Base APIs](https://developer.tiledesk.com/apis/rest-api/knowledge-bases) guide.

### Technology

When an AI Assistant needs to answer a question, it uses Tiledesk’s [**hybrid**](/ai-chatbots-and-automation/knowledge-base/hybrid-search) **fulltext-semantic search engine** to find the most relevant information:

* **Fulltext search**: finds exact matches of words and phrases in your documents.
* **Semantic search**: understands the meaning behind the question, even if different words are used compared to the documents.
* **Hybrid mode**: combines both approaches to return results that are both precise and semantically relevant.\
  *(For more details, see our* [*Hybrid search*](/ai-chatbots-and-automation/knowledge-base/hybrid-search) *&* [*Tiledesk Hybrid Search RAG Architecture*](/ai-chatbots-and-automation/knowledge-base/hybrid-search) *articles.)*

The AI then generates an answer using this content, ensuring it is consistent with your company’s information and using by default the same language the user adopted for the question.

To effectively use the Knowledge base in your automations you must use the [Ask Knowledge Base Action](/ai-chatbots-and-automation/actions-explained/ask-knowledge-base) block in you AI flows.

For more details see the [How the Knowledge Base works](/how-tiledesk-notifications-work) article.

### Agentic RAG

RAG is a technique where an AI model retrieves information from a knowledge base before generating its response. This retrieval augments the generation process. Traditional RAG is like a quick lookup. The AI queries a knowledge base, retrieves information, and then generates a response. Crystal clear.

Agentic RAG is more dynamic. Here, the AI agent actively manages how it gets information, integrating RAG into its reasoning process. It’s not just retrieving; it’s refining its queries using reasoning, turning RAG into a sophisticated tool, and managing information over time. This intelligent approach allows AI agents to adapt much better to changing situations.&#x20;

Key Differences:

* Traditional RAG: Simple – query, retrieve, generate. Typically faster and less expensive.
* Agentic RAG: Dynamic – agent queries, refines, uses RAG as a tool, manages context over time. Works well for asynchronous tasks including research, summarization, and code correction.

Here will follow a list of super use-cases of how you can do Agenti RAG with Tiledesk, from chaining Knowledge, add analytics, use the RAG as a tool for self-learning workflows etc.

#### Chain of knowledge

Sequentially connect multiple knowledge bases to implement your retrieval strategy.

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

Tiledesk allows you to sequentially connect multiple knowledge bases: for example, you can prioritize official product documentation and, if there's no answer from that source, automatically query other sources like KBs coming from self-training or the product website, FAQs etc. This way, the answers are always reliable and verified, while keeping the right retrieval priority and maintaining complete information coverage.

#### Simple and advanced guard rails

Thanks to the visual designer, you can easily add quality controls, moderation, and verification: for example, by having each response validated by a different model (perhaps with different providers), or by setting specific policies for certain topics or customers, all without code.

#### Dynamic labeling and analytics

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

Each response can be dynamically labeled by AI with custom tags that describe its quality, source, or request type, allowing you to precisely monitor the effectiveness of automations and improve the process over time.


# Knowledge Base Administration

Organize, preview, and control knowledge bases to improve AI responses.

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

Tiledesk offers a powerful **Information Retrieval** module – the *Knowledge Base* – purpose-built to deliver **accurate, context-aware responses** based on your organization’s knowledge.

It is powered by a **native RAG** (Retrieval Augmented Generation) architecture, combining the capabilities of large language models with your company’s content to deliver relevant and contextual responses.

With a **no-code** management interface, you can add, update, and organize your knowledge sources directly in Tiledesk with zero-coding.

### Technology

When an AI Assistant needs to answer a question, it uses Tiledesk’s [**hybrid**](/ai-chatbots-and-automation/knowledge-base/hybrid-search) **fulltext-semantic search engine** to find the most relevant information:

* **Fulltext search**: finds exact matches of words and phrases in your documents.
* **Semantic search**: understands the meaning behind the question, even if different words are used compared to the documents.
* **Hybrid mode**: combines both approaches to return results that are both precise and semantically relevant.\
  *(For more details, see our* [*Hybrid search*](/ai-chatbots-and-automation/knowledge-base/hybrid-search) *&* [*Tiledesk Hybrid Search RAG Architecture*](/ai-chatbots-and-automation/knowledge-base/hybrid-search) *articles.)*

The AI then generates an answer using this content, ensuring it is consistent with your company’s information and using by default the same language the user adopted for the question.

To effectively use the Knowledge base in your automations you must use the Ask Knowledge Base Action block in you AI flows.

For more details see the [How the Knowledge Base works](/ai-chatbots-and-automation/knowledge-base/how-does-the-knowledge-base-work) article.

### Create a new Knowledge Base

With Tiledesk you can create [multiple Knowledge Bases](/ai-chatbots-and-automation/knowledge-base/how-to-add-multiple-knowledge-bases-and-link-ai-agents) in your project. This is useful in many cases:

1. If you need to create AI Assistants responding on different domains such as different products, different support departments (e.g. Support and Sales) etc.
2. If you want to create a Knowledge Base chain. For example, first ask the Website, on website fallback ask the official documentation pdfs and on fallback finally ask the self learning knowledge base.
3. Other scenarios that will come to mind in the future : )

You can create two kind of Knowledge Bases with different types of indexing/searching, all managed through the Tiledesk UI.

Select the 🧠 icon on the left side menu, you will be redirected on the **Default** Knowledge Base that Tiledesk automatically creates for you on your projects. If you want a new one, you can press the New Knowledge Base button on the left.

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

<mark style="color:$warning;">**Note: You can't delete the Default Knowledge Base nor change its type, which only supports Semantic search**</mark> <mark style="color:$warning;"></mark><mark style="color:$warning;">(Standard, see later)</mark>

### Choose the Knowledge Base type

Before creating a new Knowledge base, you must provide the name and choose your preferred type

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

#### Standard or Hybrid?

The main difference between the two is the following

**Standard** is powered by a classic *Semantic* Vector indexing. This means that the information retrieval is made using the semantics of the phrases and chunks, not specific keywords. It works very well in the majority of cases, but it doesn't suit very well when you deal with uncommon words such as acronyms, alphanumeric codes, names, etc.

[**Hybrid**](/ai-chatbots-and-automation/knowledge-base/hybrid-search) mixes results coming from a Semantic approach mixed with a full-text based one. To the final result is also applied a re-ranking algorithm that improves the query results. This is a more powerful query engine that provides more flexibility, power and precision on your results.

### Populate with your contents

Add a new source

Click **+ Add** and choose the type of content to import:

<figure><img src="/files/2MDyYVrJXTPiCsk2jf9T" alt=""><figcaption></figcaption></figure>

**URLs**: enter the address of one or more web pages (one on each line) to index.

<figure><img src="/files/8b1K8ji0JrjfTQ3kUqoz" alt=""><figcaption></figcaption></figure>

With Advanced options, you can fine-tune which parts of the webpage should be indexed, ensuring that your AI agent trains on the most relevant content.&#x20;

You can read more about [Advanced options](/ai-chatbots-and-automation/knowledge-base/indexing-urls-in-tiledesks-knowledge-base-with-advanced-options) here.

**Sitemap**: upload the URL of an XML sitemap to bulk import all its pages. It's very similar to the URLs importer, except that the first step extracts all the URLs contained in the sitemap you provided as a URL.<br>

**Questions & Answers**: manually create Q\&A cards for quick, specific replies. You can also bulk import your Q\&As using a CSV file<br>

<figure><img src="/files/QVvOTswx7wGiy1h3YjXi" alt="" width="563"><figcaption></figcaption></figure>

**PDF or DOCX documents**: upload files containing guides, manuals, technical sheets, or other text content.<br>

<figure><img src="/files/PjrIPvF009nNPXYY2D0q" alt="" width="375"><figcaption></figcaption></figure>

### Configure your Knowledge Base

You can configure and test your Knowledge Base directly from the administration zone using the *Configure toolbar* buttons as in the following figure

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

When you press the *Preview* button, a test popup will allow you to setup the user question and see how the Knowledge base reply based on your contents

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

You can provide your question in any language, the knowledge base will reply accordingly

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

As you can see, you can inspect the reply's info, such as the **delay** and **token consumption**, and you can inspect the **returned chunks** and **sources,** too.

You can experiment with AI configuration while in test mode. Click on the top right gear of the Preview pop-up and you will see the configuration window. Here you can play with all the options, from LLM model selection to System context, etc.&#x20;

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

### Knowledge Base Settings

Pressing the gear in the *Configure toolbar,* you can set the Knowledge base general configuration.

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

The configuration window has many options:

1. AI LLM Model
2. Max tokens
3. Temparature
4. Chunk limit
5. System context
6. Get content sources
7. Hybrid mode (only available for [Hybrid](/ai-chatbots-and-automation/knowledge-base/hybrid-search) Knowledge Bases)
8. Re-ranking (only available for [Hybrid](/ai-chatbots-and-automation/knowledge-base/hybrid-search) Knowledge Bases)

You can read more details about each option here: [Advanced Knowledge Base: AI Settings](/ai-chatbots-and-automation/knowledge-base/advanced-knowledge-base-ai-settings)

Enjoy building AI agents!


# Hybrid search

### Why is Hybrid search needed?

In Retrieval-Augmented Generation (RAG), the most common technique used during the retrieval stage is vector search, which identifies results based on semantic similarity. The process works by breaking down documents from an external knowledge base into semantically meaningful units, such as paragraphs or sentences, and then converting each unit into a numerical representation (multi-dimensional vectors) that can be processed by a computer. The same transformation is applied to the user’s query. This allows the system to recognize nuanced semantic connections between the query and the stored text. For example, the phrases “cats chase mice” and “kittens hunt mice” would be considered more closely related than “cats chase mice” and “I like eating ham.” Once the system finds the most relevant passages, it supplies them as context to the large language model, helping it formulate an accurate response.

Beyond enabling advanced semantic text retrieval, vector search offers several other benefits:

* Recognizing related meanings (e.g., car/automobile/vehicle, YouTube/Vimeo/video platform)
* Cross-language retrieval (e.g., matching English queries to Chinese content)
* Multimodal matching (e.g., comparing text, images, audio, and video on a similarity basis)
* Error tolerance (handling typos and imprecise queries)

However, vector search is less effective in certain scenarios, including:

* Specific names: “Marie Curie”, “Tesla Model 3”
* Retrieving abbreviations or short phrases: “NLP”, “HTML”
* Finding exact IDsi: “AB-1234-XY”, “ver.2.4.7”

These are precisely the areas where traditional keyword search remains superior, particularly for:

* Exact matches (e.g., product names, personal names, catalog numbers)
* Very short queries (vector search struggles with minimal input, yet many users only type a few keywords)
* Rare or low-frequency terms (often crucial to meaning, such as in “Would you like to have coffee with me?” where “coffee” and “have” are more significant than “you” and “like”)

For most text search scenarios, the primary goal is to ensure that the most relevant potential results appear in the candidate results. Vector search and keyword search each have their advantages in the retrieval field. Hybrid search combines the strengths of both search technologies and compensates for their weaknesses.In hybrid search, you need to establish vector indexes and keyword indexes in the database in advance. When a user query is input, the most relevant texts are retrieved from the documents using both retrieval methods.

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

“Hybrid search” does not have a precise definition. If in the future we'll use new combinations of search algorithms, we will still call it “hybrid search.” For instance, we've in the roadmap to use knowledge graph techniques for retrieving new powerful entity relationships. Different retrieval systems excel at finding various subtle relationships between texts (paragraphs, sentences, words), including exact relationships, semantic relationships, thematic relationships, structural relationships, entity relationships, temporal relationships, event relationships, etc. No single retrieval mode can be suitable for all scenarios. **Hybrid search achieves complementarity between multiple retrieval technologies through the combination of multiple retrieval systems. But for the moment in Tiledesk we only implement a mixed semantic + fulltext approach to search.**

### Vector search

Definition: Generating query embeddings and querying the text segments most similar to their vector representations.

**Chunk limit (TopK):** Used to filter the text fragments most similar to the user’s query. The system will dynamically adjust the number of fragments based on the context window size of the selected model. The default value is 3.

<figure><img src="/files/x9f5FqYS83OVkbqhoVHz" alt="" width="188"><figcaption></figcaption></figure>

### Full-text

Definition: Indexing all words in the document, allowing users to query any word and return text fragments containing those words.

### Hybrid search

Simultaneously performs full-text search and vector search, applying a re-ranking step to select the best results matching the user’s query from both types of query results.

<figure><img src="/files/LYFk5twYOCGJjRwPbw0H" alt="" width="188"><figcaption></figcaption></figure>

You can control how much weight is given to keyword search compared to semantic search by adjusting the slider. Moving it towards the left prioritizes keyword search, and at the far left only keyword search will be used. Moving it towards the right prioritizes semantic search, and at the far right only semantic search will be used. This allows you to fine-tune the balance between the two methods to get the most relevant results for your needs.

### Re-ranking

Enabling re-ranking greatly improves results quality providing at the same time less tokens usage in LLMs and reduced response latency.

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

More chunks you get from your vector store more probability you have to find the most effective chunks replying to user questions. The alghoritm used by the vector search engine only provides a mathematical distance in terms of meaning-matching of the chunks compared to the user question word embeddings. Not always this distance computation retrieves the right chunks in relevance order. Sometimes the distance ordering put on top of your results the wrong chunks despite the fact that they are semantically the most relevant.

Another complementary problem is that you want to use as less chunks as possible to be passed to your LLM prompt. So you'll try to "cut" yout query to the minimum possible chunks, for example 5. But if you are unlucky, the best chunks will have been the 6th and 7th, the ones immediately after the last returned chunk.&#x20;

The idea behind re-ranking is to ask for as much chunks as possible, suppose instead of 5 ask 50! Retrieving 5 or 50 chunks only increase of few milliseconds your vector store search. But once you have 50 chunks you can apply a ML model to find the best ones matching the user query with the goal of minimizing the number of chunks to use in the LLM prompt.

You can discover more about re-ranking [here](/ai-chatbots-and-automation/knowledge-base/re-ranking).


# Re-ranking

Re-ranking in Tiledesk: How It Works and Why It Matters

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

## What is re-ranking (easy explanation)

Re-ranking is a second, smarter selection step applied after an initial search (e.g. vector search, keyword search, hybrid search).

1. **First step – Retrieval**\
   The system retrieves a *set of candidate results* that are *probably relevant* to the user’s question\
   (e.g. top 20 chunks from a vector database).
2. **Second step – Re-ranking**\
   A more precise model evaluates each candidate in context of the actual user query and:
   * assigns a relevance score
   * sorts results from most to least relevant
   * optionally discards low-quality matches

In short:

> **Retrieval finds “possible answers” → Re-ranking finds the “best answers.”**

## Why re-ranking is needed

Vector similarity alone is powerful, but it has limitations:

* It may retrieve **semantically similar but contextually wrong** chunks
* It treats all candidates as equally good once retrieved
* It cannot always understand intent, constraints, or priority

Re-ranking solves this by deeply comparing the user question with each candidate, instead of comparing embeddings only.

## How re-ranking works

```
User Question
     ↓
Initial Retrieval (Vector / Hybrid Search)
     ↓
Top N Candidates (e.g. 20)
     ↓
Re-ranking Model
     ↓
Top K Best Chunks matches (e.g. 5)
     ↓
LLM Answer Generation
```

## What re-ranking model evaluates

In Tiledesk, re-ranking is used in **RAG pipelines** to improve answer quality across:

* Customer support assistants
* Internal knowledge bases
* Enterprise document search
* Multi-agent workflows

Tiledesk allows re-ranking to be applied:

* Automatically in RAG flows
* As a configurable step in agent pipelines
* In on-premise, hybrid, or cloud deployments

## Intuitive use case

#### Scenario

A company uses Tiledesk to power a support assistant with:

* Product manuals
* Internal procedures
* Troubleshooting guides

**User question:**

> “How can I reset my device if it’s stuck during firmware update?”

***

#### Without Re-ranking

Vector search retrieves chunks like:

1. Firmware update overview
2. Reset device after factory test
3. Device troubleshooting – connection issues
4. Firmware version history
5. Reset device procedure (correct)

The LLM sees mixed context and may:

* Answer partially
* Mention irrelevant steps
* Hallucinate missing details

***

#### With Re-ranking Enabled

The re-ranking model analyzes each chunk **against the exact question** and produces:

1. Reset device procedure (firmware recovery mode) ⭐⭐⭐⭐⭐
2. Troubleshooting – firmware stuck scenarios ⭐⭐⭐⭐
3. Firmware update overview ⭐⭐
4. Reset after factory test ⭐
5. Version history ⭐

Only the top, most relevant content is passed to the LLM.

#### Result for the User

* More precise answer
* Correct steps on the first try
* Less confusion
* Faster resolution

## Benefits for user and organizations

#### 1. Higher Answer Accuracy

Re-ranking significantly reduces:

* Irrelevant context
* Partial answers
* Hallucinations

#### 2. Better Use of Existing Knowledge

Even large or noisy knowledge bases become:

* More reliable
* Easier to maintain
* More scalable

#### 3. Improved User Trust

Users notice when:

* Answers are consistent
* Instructions are correct
* The assistant “understands” intent

This leads to:

* Higher adoption
* Lower fallback to human support

#### 4. Cost and Performance Optimization

By sending **only the best chunks** to the LLM:

* Fewer tokens are used
* Responses are faster
* Costs are reduced

#### 5. Enterprise-Grade Control

In Tiledesk, re-ranking supports:

* On-premise and GDPR-compliant deployments
* Integration with custom retrieval logic

## How to enable Re-ranking?

Move to the Knowledge Bases section and press + New Knowledge Base button, then choose the "Hybri search" option

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

Once the Knowledge base is created you can create and connect an AI Agent directly to it

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

In the AI Agent flow you can also decide to enable/disable the re-ranking for a specific Ask Knowledge Base Action

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

## When you should enable re-ranking?

Re-ranking is especially valuable when:

* Knowledge bases are large (hundreds or thousands of documents)
* Documents are similar to each other
* Precision matters (legal, technical, industrial domains)
* Users ask complex or multi-constraint questions

## Re-ranking uses GPUs

In Tiledesk, re-ranking is designed for enterprise-grade, real-time precision, which makes it suitable primarily for **on-prem GPU installations**.

Re-ranking relies on *cross-encoder* models that must score many *(query, chunk)* pairs in parallel, a workload that is computationally intensive and latency-sensitive. Running this step on CPUs introduces unpredictable delays.

An on-prem GPU allows Tiledesk to execute re-ranking models locally, with stable low latency, full data sovereignty, and predictable performance under load, making it the only deployment model that consistently meets enterprise SLAs and compliance requirements.

In our SAAS deployment we extensively use GPUs for Hybrid-search and Re-ranking.

### Re-ranking models

On our production enging we actually rely on local cross-encoder/ms-marco-MiniLM-L-6-v2 by default (optionally opting for some specific needs on the heavier bge-reranker-v2-m3)&#x20;

Evaluating TEI too with BAAI/bge-reranker-larg.

For Pinecone we opted for cohere-rerank-3.5, bge-reranker-v2-m3, pinecone-rerank-v0


# How does the Knowledge Base work

Tiledesk "Standard" Retrieval-Augmented Generation (RAG) architecture

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

### The explanation of the RAG concept

The **Standard** mode of Tiledesk Knowledge base works following the RAG architecture, with *semantic* vector retrieval at its core. This RAG paradigm has become the mainstream technical framework for enabling large models to access the latest external knowledge. This technology has been implemented in a variety of application scenarios.

Developers can use this technology to build AI-powered customer service, enterprise knowledge bases, AI search engines, and more at a low cost. By using natural language input to interact with various forms of knowledge organization, they can create intelligent systems. Let’s take a representative RAG application as an example:

Our RAG (the Knowledge Base) has two unique services that make it function:

1. A **parser** - triggered when you upload a KB document.
2. A **retriever** - triggered when your user asks a question that hits the KB.

#### Step-by-Step <a href="#step-by-step" id="step-by-step"></a>

You upload a Knowledge Base document to the parser service:

<figure><img src="/files/8Pa9uJ7sMzlFRsf4Pqzk" alt=""><figcaption></figcaption></figure>

1. The KB doc is uploaded via Tiledesk UI or API.
2. **The KB doc is securely stored. It is always removed in step \[7]**
3. The Parser service reads the KB doc from storage and "chunks" the content using different techniques (Note: with the KB Upload APIs you can fine-tune chunking, but you cannot dictate how many chunks are parsed within a document).
4. An embedding model is used to convert each chunk into a vector (aka “embedding”) that looks like a vector with i'ts numerical components \[3.2, 2.13, ...] and represents its “meaning.”
5. Computer programs don’t ‘understand’ spoken/written language as humans can. There needs to be a numerical representation of words to help programs understand. Each chunk from a KB doc is converted into a numerical representation (vector, aka “embedding”) of the MEANING behind the words in the chunk. More on why this is necessary in the Retriever section.\
   *Note*: Embedding models cost money to use, usually per token. The more files you upload, the more you are charged for embedding tokens.\
   In Tiledesk, we don't charge for the upload or embedding process.
6. The vector is placed in a vector db.
7. The original KB doc is deleted from Tiledesk

You can think of this vector as a specific 'point” in “space.” All these points are some “distance” from each other, and the distance between two of these points (vectors) is how similar in meaning different chunks of text are.

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

Image comes from this [online article](https://blog.christianperone.com/2013/09/machine-learning-cosine-similarity-for-vector-space-models-part-iii/)

User asks a question that hits the KB through the retriever service:

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

1. The retriever service gets the question and turns it into a vector.
2. The question vector is searched against the vectorDB by a similarity score, returning the most similar number of chunks (Chunk Limit defines how many chunks) in descending order by similarity score.
   1. **Similarity score?**\
      The similarity score is determined by something called semantic search. This goes beyond keyword matching (supported by Tiledesk through the [Hybrid search](/ai-chatbots-and-automation/knowledge-base/hybrid-search)) and refers to contextual similarity in meaning between words and phrases. (i.e. “The dog is a nightmare to train,” and “The puppy is stubborn and does not listen to commands” do not share keywords. However, they have high semantic similarity semantically.) So the question can be semantically compared to the KB doc chunks that exist. The “closest” vectors to the question are those with the highest similarity. The retriever will return a number of chunks (Chunk Limit in KB Settings) based on this vector proximity.
   2. **Chunk Limit?**\
      Chunk Limit is the KB setting that controls the number of chunks retrieved from the vector db and used to synthesize the response. This setting aims to provide flexibility to increase the accuracy of responses in line with certain use cases.\
      **How does the number of chunks retrieved affect the accuracy of the KB?**\
      In theory, the more chunks retrieved - the more accurate the response, and the more tokens consumed. In reality, the "accuracy" tied to chunks is strongly associated with how the KB data sources are curated.\
      If the KB data sources are curated so that topics are grouped together, this should be more than enough to accurately answer the question. However, if information is scattered throughout many different KB data sources, then likely more chunks of smaller size will increase the accuracy of the response.\
      You can control the max chunk size of your data sources with the Upload/Replace KB doc APIs, using the query parameter: maxChunkSize.\
      **Ultimately, in order to provide the best KB response 'accuracy' while optimizing token consumption, we recommend to limit the number of data sources and group topics inside those data sources.**

#### **Runtime Service:**

1. We take the:
   1. Returned chunks
   2. Knowledge Base Settings inputs
   3. Question

...and ask the LLM to give us an answer.

This step is called **answer synthesis**.

The internal prompts we use to iterate over time but are along the lines of, “using conversation history and user-provided instructions, answer the question sourcing information only found in Knowledge Base.”

**This LLM request has query and answer tokens that you are charged for**. You can see these token totals in a response citation while testing in Debug mode on Tiledesk:

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

#### How your data is treated and secured <a href="#how-your-data-is-treated-and-secured" id="how-your-data-is-treated-and-secured"></a>

In Tiledesk Knowledge base data is processed through several key steps to ensure both functionality and security. Firstly, an embedding of a chunk of text (semantic vector) is generated by sending the content over HTTPS to an OpenAI service.

**While OpenAI has access to the information during this phase, it does not store any data**. Anyway keep in mind that if you have strict policies on your data there are alternative solutions. See lasta paragraph.

The generated vector is then stored in a Pinecone database, which ensures encryption at rest. The original text chunk is associated with its corresponding semantic vector within the Pinecone database.

When a user submits a query, it is also sent to OpenAI (without storage) to generate a semantic vector. This vector is used for proximity search in Pinecone, utilizing cosine distance alghoritm to find the most relevant matching chunks.

Finally the chunks coming out from the search are merged and passed to OpenAI to generate the final reply. **This is another important step where your knowledge is used to feed an external service that anyway declares to never using your data**.

In general, **regarding the security of the original information, the semantic vector generation services are cloud-based for the basic service**.

#### **Enhanced data protection**

For enhanced data protection, if you want to stay in the cloud, it is possible to

1. Use Microsoft Azure services that implement [OpenAI on dedicated, client-owned machines](https://learn.microsoft.com/en-us/shows/azure-enablement/building-a-private-chatgpt-with-azure-openai) or
2. Use an on-premises installation of the entire Tiledesk platform. This last setup can leverage open-source software like Qdrant/LLAMA for embeddings and vector databases, ensuring that the information remains completely isolated from cloud services.


# Best Practices for Utilizing Tiledesk Knowledge Base Effectively

Optimize your Tiledesk Knowledge Base with content clarity, hybrid search, regular testing, analytics, and version control.

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

The Tiledesk Knowledge Base (KB) is a powerful and flexible tool that can store and index various types of content—not just for customer service, but for a wide range of business applications. Whether you're building AI agents to assist with internal workflows, automate sales inquiries, streamline onboarding, or provide technical guidance, a well-structured KB is essential. By organizing your content effectively and ensuring it's clear and accessible to the system, you unlock the full potential of AI across your organization.&#x20;

This guide offers best practices to help you optimize your Tiledesk KB for maximum performance and versatility.

#### 1. **Supported Content Types** <a href="#id-1-supported-content-types" id="id-1-supported-content-types"></a>

The Tiledesk Knowledge Base supports a wide range of content types to accommodate different use cases. Below are the main types of content that you can upload and how to use them effectively:

* **URLs:** Use for linking to external content such as articles, tutorials, and product pages.
* **Sitemap:** Ideal for importing a structured list of URLs in a single upload, enabling systematic indexing.
* **Plain Text:** Use for concise, textual information that doesn’t require formatting. Best for FAQ-style responses and short articles.
* **PDFs & DOCX:** Useful for sharing documents, product specifications, or guides. Ensure text is well-formatted for optimal indexing.
* **FAQs:** These can be created manually or uploaded via CSV files. Best used for structured Q\&A content such as product information, support documentation, or company policies.

#### 2. **Handling FAQs and Plain Text** <a href="#id-2-handling-faqs-and-plain-text" id="id-2-handling-faqs-and-plain-text"></a>

* **Manual Upload vs. CSV Import**: For bulk FAQ uploads, CSV files are recommended. Use separate columns for questions and answers to maintain clarity.
* **Textual Content Best Practices**: For FAQs or plain text, use direct language and short sentences. Avoid overly complex sentence structures, as this can complicate indexing and comprehension for the AI.

**Recommendation:**

* If you have product details or company policies, it’s best to use the **FAQ** format for uploading rather than plain text, as FAQs provide a structured Q\&A format that is easier to index.

#### 3. Use Hybrid Search for Numeric and Structured Data

Tiledesk’s [Hybrid search](/ai-chatbots-and-automation/knowledge-base/hybrid-search) engine—combining full-text and semantic search—is optimized for handling numeric and structured content. Whether you're indexing product specifications, technical metrics, or tabular data, Hybrid Search ensures fast, accurate retrieval and smarter AI responses.

#### 4. **Best Practices for Indexing URLs** <a href="#id-4-best-practices-for-indexing-urls" id="id-4-best-practices-for-indexing-urls"></a>

When indexing URLs, be aware that some web pages are rendered dynamically using JavaScript. The Tiledesk crawler may not be able to access and extract content from these pages.

**Recommendation:**

* **Check for JavaScript Rendering**: Before indexing a URL, verify that it doesn’t rely on client-side JavaScript for content display. Use static HTML pages or consider manually extracting and uploading the content as plain text or an FAQ entry if JavaScript is used.
* **Leverage Refresh Rate:** Keep your AI agents up to date by setting a refresh interval. Tiledesk will automatically reindex the URL at your chosen frequency, ensuring the latest content is always available to your agents.

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

#### 5. **General Tips for Optimizing Your Knowledge Base** <a href="#id-5-general-tips-for-optimizing-your-knowledge-base" id="id-5-general-tips-for-optimizing-your-knowledge-base"></a>

* **Keep Information Up-to-Date**: Regularly review and update content to ensure it remains relevant and accurate.
* **Use Clear Naming Conventions**: When uploading multiple entries (e.g., CSV files, PDFs), use descriptive names for better content management.

#### **6. Prioritize Content Quality Over Quantity** <a href="#id-6-prioritize-content-quality-over-quantity" id="id-6-prioritize-content-quality-over-quantity"></a>

When creating content for the Knowledge Base, always aim for quality over sheer volume. While it might be tempting to upload large amounts of data, focus on content that is clear, relevant, and useful to your target audience. Ensure that all entries, whether FAQs, documents, or plain text, are well-written and free from redundancy. Avoid uploading repetitive or overly detailed information that might overwhelm users or confuse the AI.

#### **7. Optimize for Searchability** <a href="#id-7-optimize-for-searchability" id="id-7-optimize-for-searchability"></a>

To enhance the AI's ability to find and serve the right information, pay close attention to keywords, tags, and structuring. Use:

* **Keywords and Phrases**: Make sure the entries use the same language and terms that customers are likely to use. For example, if customers often ask, "How can I reset my password?", include variations like “password reset” or “recover my password” in your content.

#### **8. Use Version Control for Documentation** <a href="#id-8-use-version-control-for-documentation" id="id-8-use-version-control-for-documentation"></a>

If you frequently update documentation (e.g., user guides or technical manuals), use a version control strategy. Label document versions clearly (e.g., Product Guide v1.2) and archive outdated versions. This prevents confusion and ensures that customers and the AI have access to the most up-to-date information.

#### **9. Test and Validate Regularly** <a href="#id-9-test-and-validate-regularly" id="id-9-test-and-validate-regularly"></a>

After uploading new content or restructuring the Knowledge Base, test how well the AI retrieves the information by simulating customer queries. Ask common questions and see if the correct information is served. If not, consider revising the content or adding new entries to fill gaps.

#### **10. Use Analytics to Improve Content** <a href="#id-10-use-analytics-to-improve-content" id="id-10-use-analytics-to-improve-content"></a>

Leverage Tiledesk’s analytics (or external tools if integrated) to identify gaps in your KB. Check for:

* **Common Unanswered Queries**: Are there questions frequently asked by users that the KB doesn’t address? Create new entries based on these queries. At Tiledesk, we automatically track these questions and populate a dedicated **"**[**Unanswered Questions**](/ai-chatbots-and-automation/knowledge-base/unanswered-questions-in-the-knowledge-base)**"** section in the KB. This helps the support team easily identify gaps and enrich the KB with relevant answers.

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

* **User Engagement**: See which articles or FAQs are accessed the most and consider enhancing them with richer content, visuals, or links to related entries.
* **Feedback and Ratings**: If the platform allows, encourage users to rate the usefulness of KB articles. Use this feedback to refine or expand content as needed.

#### 11. Multilingual Support Made Simple with AI Agent

With Tiledesk’s AI-powered features like [Ask Knowledge Base](/ai-chatbots-and-automation/actions-explained/ask-knowledge-base) and [ChatGPT Task](/ai-chatbots-and-automation/actions-explained/chatgpt-task), users get accurate answers in any language—no manual translation or folder setup needed. Multilingual support is now automatic, seamless, and scalable.

By incorporating these additional strategies, you can further optimize your Tiledesk Knowledge Base for accuracy, efficiency, and better overall performance. This will ultimately lead to a more powerful self-service experience for your customers and improve your AI’s response quality.


# Indexing URLs in Tiledesk’s Knowledge Base with Advanced Options

Index website URLs in Tiledesk’s Knowledge Base using customizable tags, classes, and filtering for precise content indexing.

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

This guide will walk you through the process of indexing URLs using the advanced options in the Tiledesk Knowledge Base. This feature allows you to paste one or more website URLs and fine-tune which parts of the webpage should be indexed, ensuring that your AI agent trains on the most relevant content while avoiding sections that could cause confusion.

### Step 1: Access the Tiledesk dashboard <a href="#step-1-access-the-tiledesk-dashboard" id="step-1-access-the-tiledesk-dashboard"></a>

1. [**Log in**](https://panel.tiledesk.com/v3/dashboard/#/projects) to your Tiledesk account.
2. From the left-hand side menu, click on **Knowledge Base**.

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

Step 2: Upload URLs

Within the Knowledge Base, you have two options for uploading URLs:

1. **Standard Indexing:** Indexes the full page.
2. **Advanced Options:** Gives you control over which parts of the page to index.

Select **Advanced Options** to customize the indexing process.

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

### Step 3: Configure Advanced Options <a href="#step-3-configure-advanced-options" id="step-3-configure-advanced-options"></a>

By choosing **Advanced**, you will see options, which I will explain below, one by one:

**Extract Tags (Mandatory):**\
Specify the HTML tags you want to index. For example, you might include tags such as \<h1>, \<h2>, \<p>, etc.

*If your page has multiple headings and paragraphs, list the tags to ensure they are all captured.*

**Unwanted Tags:**\
Here you can list any HTML tags you do not want to index.

*If there are sidebars or navigation elements with tags that you prefer to omit, add those tags here.*

**Unwanted Classnames:**\
Define the classnames that should be excluded from indexing.

*You might want to avoid indexing sections like main\_footer or any other classname that is not relevant to your training data.*

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

### Step 4: Paste your website URLs <a href="#step-4-paste-your-website-urls" id="step-4-paste-your-website-urls"></a>

1. In the designated field, paste your website URLs. You can paste a single URL or multiple URLs at once.
2. Confirm your entries, and Tiledesk will process the indexing based on your advanced configuration settings.

<figure><img src="/files/0Fzz6ZbSaAZoMTM9sZYm" alt=""><figcaption></figcaption></figure>

### Step 5: Using your indexed Knowledge Base[#](https://gethelp.tiledesk.com/articles/indexing-urls-in-tiledesks-knowledge-base-with-advanced-options-39iqkg/#step-5-using-your-indexed-knowledge-base) <a href="#step-5-using-your-indexed-knowledge-base" id="step-5-using-your-indexed-knowledge-base"></a>

Once your URLs are indexed:

1. Head to the **Flows** section from the left-hand side menu.
2. Select the AI Agent you want to train using the indexed data.
3. In the **Design Studio**, choose the **"**[**Ask Knowledge Base**](/ai-chatbots-and-automation/actions-explained/ask-knowledge-base)**"** action. This action retrieves the relevant data from the indexed URLs using one of the OpenAI models.

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

If you have any questions or need further help, please reach out to us at [**support@tiledesk.com**](mailto:support@tiledesk.com).

For more details on Tiledesk capabilities, visit [www.tiledesk.com](https://tiledesk.com/).

If you’re ready to jump in, you can [start with a free trial now](https://panel.tiledesk.com/v3/dashboard/#/signup).


# How to Use Synchronized Sitemap in Knowledge Base

The **Synchronized Sitemap** feature allows you to automatically import and maintain an entire sitemap in your Tiledesk Knowledge Base. Once configured, all URLs from the sitemap are continuously synchronized and updated based on the refresh rate you set, ensuring your knowledge base always reflects the latest content from your website.

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

This feature is ideal for maintaining up-to-date documentation, help centers, blogs, or any website content that changes regularly, without manual intervention.

### Key Features

**Automatic Synchronization**

* Continuous updates: URLs are automatically refreshed based on your configured refresh rate
* New URL detection: New pages added to your sitemap are automatically imported to the Knowledge Base
* Automatic cleanup: URLs removed from your sitemap are automatically deleted from the Knowledge Base

**Unified Configuration**

* Inherited settings: All URLs inherit the same configuration as the parent sitemap
* Consistent processing: [HTML tags](#html-tags-configuration) and [RAG tags](#rag-tags-configuration) settings apply uniformly to all URLs
* Centralized management: Configure once at the sitemap level, apply to all URLs

### How It Works

1. Initial Import: Tiledesk fetches all URLs from the sitemap and imports them into the Knowledge Base
2. Continuous Monitoring: Based on the refresh rate, Tiledesk periodically checks the sitemap for changes
3. Automatic Updates:

&#x20;     ◦ Existing URLs are re-crawled and updated with fresh content

&#x20;     ◦ New URLs are automatically added to the Knowledge Base

&#x20;     ◦ Removed URLs are automatically deleted from the Knowledge Base

4. &#x20;Inheritance: All URLs maintain the same HTML tags, RAG tags, and refresh rate as the parent sitemap

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

### Viewing Synced URLs

Once imported, you can:

* View all URLs from the sitemap in the Knowledge Base list
* See the last sync date and status for each URL
* Check individual URL content and metadata

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

<br>

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

### HTML Tags Configuration

Specify which HTML elements to include or exclude during content extraction. Pages are **fully rendered and executed in a headless Chromium instance** before text extraction, ensuring JavaScript-rendered content is captured correctly.

#### Extract Tags *(Mandatory)*

Define the HTML tags from which content will be extracted. **`<body>`** is included by default and covers the entire page body.

You can replace or extend it with more specific tags to narrow down the extracted content:

* `article` — main article content
* `main` — primary page content
* `div.content` — a specific div with class "content"

> **Tip:** Using more specific tags instead of `<body>` improves AI response quality by reducing noise from unrelated page sections.

#### Unwanted Tags

Define HTML tags that should be **excluded** from extraction, even if they fall within an Extract Tag:

**Examples:**

```
nav, footer, aside, header, script, style
```

#### Unwanted Classnames

Exclude elements by their **CSS class name**, regardless of the tag type. Useful for removing recurring UI components like banners, sidebars, or cookie notices:

**Examples:**

```
sidebar, comments, cookie-banner, related-posts, advertisement
```

### RAG Tags Configuration

Add metadata tags to improve AI retrieval and relevance.

#### What are RAG tags?

RAG tags are labels you can assign to one or more contents in your Knowledge Base to **filter which content the AI uses when answering questions**.

When a user asks a question, the AI searches **only among contents that match the specified tag**, ignoring all others.

**Example:** Suppose you have a Knowledge Base where:

* Some contents are imported manually and tagged as `approved`
* Other contents are generated automatically (e.g. via self-learning) and have **no tag**

When you perform a question using the tag `approved`, the AI will **only retrieve answers from contents tagged `approved`** — the untagged ones will be completely ignored.

This is especially useful when you want to:

* Separate **verified content** from automatically generated or draft content
* Serve **different audiences** with different subsets of your knowledge base
* Ensure the AI Agent only responds using **trusted or curated sources**

#### Tag Examples

* `approved`
* `product-documentation`
* `pricing-information`
* `technical-support`
* `getting-started`


# Advanced Knowledge Base: AI Settings

Configure advanced AI settings in Tiledesk to optimize AI Agent accuracy, tone, and response quality.

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

Tiledesk's AI settings provide powerful tools for fine-tuning the behavior and performance of your AI agent. These settings include the maximum number of tokens, temperature, chunks, system context, and prompt. This tutorial will explain each of these settings and how they impact your Knowledge Base.

#### Access AI Settings <a href="#access-ai-settings" id="access-ai-settings"></a>

* Once logged in, select the **Knowledge Base** section (brain icon) from the left-hand menu.
* Choose to either **create a new Knowledge Base** or use the **default one**.
* Click the **gear icon** to access and configure the **AI settings**.

<figure><img src="/files/6hpZSmHUBGuxRz59W5qr" alt=""><figcaption></figcaption></figure>

### AI Settings Explained <a href="#ai-settings-explained" id="ai-settings-explained"></a>

#### **1. AI Models**

You can choose the following AI models from the drop-down menu: GPT-4.1, GPT-4.1 mini, GPT-4.1 nano, GPT-4o, GPT-4o Mini and etc. As you can see from the picture below, each model consumes a different amount of tokens.

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

#### **Differences Among OpenAI Models**

* **GPT-4.1**\
  **Definition:** The latest generation in the GPT-4 family, offering the highest level of language understanding and text generation. Best suited for complex scenarios where accuracy and context are critical.\
  **Token consumption:** Higher cost per token, but delivers top performance.
* **GPT-4.1 Mini**\
  **Definition:** A lighter, faster variant of GPT-4.1. It provides solid language capabilities at a much lower cost, making it perfect for frequent interactions or less complex tasks.\
  **Token consumption:** Significantly lower, focused on efficiency and affordability.
* **GPT-4.1 Nano**\
  **Definition:** The most lightweight model in the GPT-4.1 series. Designed for simple tasks, quick replies, or when running costs must be kept minimal.\
  **Token consumption:** The lowest among all models, offering maximum efficiency with limited capabilities.
* **GPT-4o** \
  **Definition**: A specialized version of GPT-4, optimized for certain tasks or industries, offering targeted performance improvements. \
  Token Consumption: Typically higher than GPT-4 Turbo but lower than standard GPT-4, due to specific optimizations.
* **GPT-4o Mini** \
  Definition: A smaller, more efficient variant of GPT-4o, designed for applications requiring less computational power while still benefiting from targeted optimizations. Token \
  Consumption: Lower cost per token compared to GPT-4o, aimed at providing a balance between performance and resource usage.

| Model           | Definition                                                                      | Token Consumption                                                                   |
| --------------- | ------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
| GPT-4.1         | Latest generation of the GPT-4 family, with the highest accuracy and reasoning. | Higher cost, best performance                                                       |
| GPT-4.1 Mini    | Lightweight and efficient GPT-4.1 variant, solid language skills at lower cost. | Much lower cost than GPT-4.1, great for frequent interactions                       |
| GPT-4.1 Nano    | Ultra-light model for simple tasks and minimal costs.                           | Lowest cost, designed for maximum efficiency                                        |
| **GPT-4o**      | Specialized version of GPT-4 for targeted tasks                                 | Very high cost (second only to GPT-4 legacy), best for rich multimodal applications |
| **GPT-4o Mini** | Smaller, efficient variant of GPT-4o                                            | Much lower cost than GPT-4o, good balance between performance and efficiency        |

#### **2. Maximum Number of Tokens**

* **Definition**: Tokens are the pieces of words that the AI uses to process and generate responses. The maximum number of tokens setting controls the length of the responses.
* **Impact**: A higher token limit allows for longer, more detailed responses. A lower limit restricts the length, making responses shorter and potentially more concise.
* **How to Configure**:
  1. Locate the **Maximum Number of Tokens** setting in the AI Settings.
  2. Enter the desired number of tokens, up to a maximum of 9999 (e.g., 100, 200, 500).

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

#### **3. Temperature**

* **Definition**: Temperature controls the randomness of the AI's responses. A **lower** temperature makes the responses **more deterministic and focused**, while a higher temperature makes them more creative and varied.
* **Impact**: Adjusting the temperature helps balance between consistency and creativity in responses.
* **How to Configure**:
  1. Locate the **Temperature** setting.
  2. Set the temperature value (e.g., 0.2 for more focused responses, 0.8 for more creative responses).

#### **4. Chunks**

* **Definition**: Chunks are portions of content that the AI uses to create responses. Breaking content into chunks helps the AI process information more efficiently.
* **Impact**: Proper chunking ensures the AI can handle large documents or datasets without performance issues.
* **How to Configure**:
  1. Locate the **Chunks** setting.
  2. Define the size of the chunks, from 1 to 10.

#### **5. System Context**

* **Definition**: System context provides the AI with background information or guidelines that influence its behavior and responses. It sets the overall tone and direction for the AI.
* **Impact**: A well-defined system context helps the AI understand its role and the type of responses it should generate.
* **How to Configure**:
  1. Locate the **System Context** setting.
  2. Enter the context information, such as "You are a helpful customer support assistant."

#### **6. Advanced context**

[Learn more here](https://guide.tiledesk.com/ai-chatbots-and-automation/actions-explained/ask-knowledge-base#advanced-context)

#### 7. Get contents sources

Use this option to get accurate sources of documents used to generate the reply. Keep in mind that this consumes more tokens then regular KB retrieving.

#### 8. HyDE (Hypothetical Document Embeddings)

**Definition:** HyDE is an advanced retrieval technique. Instead of searching your Knowledge Base directly with the user's question, Tiledesk first asks the AI to generate a *hypothetical* answer to that question, and then uses the embedding of that hypothetical answer to look up the most relevant chunks in your Knowledge Base. The intuition is that a written answer is semantically closer to the documents stored in your KB than a short, often ambiguous user query.

**Impact**: Enabling HyDE typically improves the relevance of the retrieved content, especially for short, vague, or keyword-poor questions, which results in more accurate and on-topic answers. The trade-off is **higher token consumption**, because every user message triggers an additional LLM call to generate the hypothetical answer before the actual retrieval and response steps.

#### 9. Use Cache

**Definition**: When **Use Cache** is enabled, Tiledesk stores the AI's response for each unique question. The next time a user asks the same (or a very similar) question, the cached answer is returned immediately, without running the full retrieval and generation pipeline again.

**Impact**: Cached responses are returned much faster and **do not consume additional tokens**, which reduces both latency and operating costs. This is especially valuable on high-traffic chatbots where the same questions are asked repeatedly. On the other hand, if you have just updated the Knowledge Base content, cached answers may not reflect those changes until the cache entry is refreshed. While the cache is enabled, the response is delivered as a single block, so the streaming preview is not available.

#### **AI Agent Fine-tuning & Prompt**

Now that you've set your AI preferences, you can go even further and start drafting your prompt within the Flow. Please note that every AI Agent you create can have **different** AI settings if you so prefer.

* **Definition**: The prompt is the initial instruction provided to the AI, guiding it on how to generate responses based on user input.
* **Impact**: The prompt shapes the AI's initial understanding and response generation.
* **How to Configure**:
  1. Go to the Design Studio, and locate the **Prompt** field within any AI action (e.g. [Ask Knowledge Base](/ai-chatbots-and-automation/actions-explained/ask-knowledge-base),  [AI Assistant](/chatgpt-hacks/create-an-ai-assistant-in-openai)).
  2. Enter a clear and concise prompt, based on what you'd like to achieve with a specific AI agent, as below.

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

#### Configuring AI Settings - Recap <a href="#configuring-ai-settings-recap" id="configuring-ai-settings-recap"></a>

1. **Access AI Settings**: Go to the gears icon for the **AI Settings** under the **Knowledge Bases** tab.
2. **Adjust Maximum Number of Tokens**: Set the desired token limit based on the complexity and length of responses you need.
3. **Set Temperature**: Choose a temperature value that balances creativity and consistency.
4. **Define Chunks**: Determine the appropriate chunk size to optimize performance.
5. **Input System Context**: Provide relevant background information or guidelines to shape the AI's behavior.

Bear in mind, whilst these are overall AI settings, you can still configure each AI agent's settings within the Design Studio according to your specific needs

#### Best Practices <a href="#best-practices" id="best-practices"></a>

* **Experiment with Settings**: Adjust the settings incrementally and test the responses to find the optimal configuration for your use case.
* **Monitor Performance**: Regularly review the AI's performance and make adjustments as needed to maintain the quality of responses.
* **Keep Context Relevant**: Ensure that the system context and prompt are relevant to the specific Knowledge Base and user interactions.

#### Conclusion <a href="#conclusion" id="conclusion"></a>

Configuring the AI settings for your Knowledge Base on Tiledesk allows you to fine-tune the AI agent's behavior and response quality. By understanding and adjusting the maximum number of tokens, temperature, chunks, system context, and prompt, you can enhance the effectiveness and efficiency of your AI Agent.

Have any feedback for us? Send it to <info@tiledesk.com>&#x20;


# How to add Multiple Knowledge Bases & link AI Agents

Add and connect multiple knowledge bases in Tiledesk and assign them to different AI agents for precise, layered information retrieval.

<figure><img src="/files/3ZIjvSnDJQyJAZTWhse9" alt=""><figcaption></figcaption></figure>

In Tiledesk, you have the flexibility to manage multiple Knowledge Bases (KBs) using namespaces. This feature is incredibly useful for organizing different sets of information and ensuring that specific AI Agents have access to the relevant data. This tutorial will guide you through the process of creating and managing multiple namespaces for your Knowledge Bases in Tiledesk.

#### **Purpose of Multiple Namespaces**

* **Organization**: Separate different types of content, such as FAQs, technical documentation, and product-specific information.
* **AI Agent-Specific Knowledge**: Ensure that each AI agent only accesses the relevant Knowledge Base, improving the accuracy and efficiency of responses.
* **Scalability**: Easily manage and scale your Knowledge Bases as your content grows.

#### Step 1: Log in to Tiledesk and navigate to the Flows Section <a href="#step-1-log-in-to-tiledesk-and-navigate-to-the-bots-section" id="step-1-log-in-to-tiledesk-and-navigate-to-the-bots-section"></a>

1. Open your web browser and navigate to [Tiledesk](https://www.tiledesk.com/).
2. [Log in](https://panel.tiledesk.com/v3/dashboard/#/projects) with your credentials.&#x20;
3. From the left-side menu, click on the **Knowledge Base** with the brain icon.

#### Step 2: Understanding the Default Namespace <a href="#step-2-understanding-the-default-namespace" id="step-2-understanding-the-default-namespace"></a>

In the new page, you will see the list of knowledge bases on the left side. By default, you have a knowledge base ready to be populated, but you can add more.

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

### Managing Multiple Knowledge Bases <a href="#managing-multiple-knowledge-bases" id="managing-multiple-knowledge-bases"></a>

#### **1. Changing the Knowledge Base Name (o**ptiona&#x6C;**)**

**Purpose**: Rename the default namespace to better reflect its content.\
**How to Change**:&#x20;

* Click on “**Default**”.&#x20;
* Enter the desired name for your Knowledge Base; it'll automatically get saved.

#### **2. Adding a New Knowledge Base**

**Purpose**: Create additional namespaces for different sets of content.\
**How to Add**:

* From the left-side menu, click on "+ New Knowledge Base".
* In the pop-up window, you have the option to choose the type of knowledge base.
* Enter the name for the new Knowledge Base and click on Create, as shown below.

Note, you can build a standard or [Hybrid search](/ai-chatbots-and-automation/knowledge-base/hybrid-search) engine. [You can read more about it here](https://tiledesk.com/blog/tiledesk-hybrid-search-rag-architecture/).

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

<figure><img src="/files/c2durWjK8mHczS7PC5hE" alt="" width="375"><figcaption></figcaption></figure>

**3. Viewing and Switching Between Knowledge Bases**

**Purpose**: Easily navigate between different namespaces to manage or view their contents.\
**How to Switch:**

* From the left-side menu, under Your Knowledge Bases, choose the desired Knowledge Base
* The content and configuration for the selected namespace will be displayed
* Also, you can see which AI agent is connected to this Knowledge Base

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

#### Deleting Namespaces <a href="#deleting-namespaces" id="deleting-namespaces"></a>

To empty the entire namespace, simply click on the red Delete button, as shown below.&#x20;

You can also choose to remove the namespace altogether by ticking the box “Also delete the Knowledge Base”.

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

**Assigning AI Agents to Knowledge Bases**

1\. When you select a specific namespace, you will see which AI Agent is connected to that particular Knowledge Base.

<figure><img src="/files/4kvq9oLWsLlk5BsXADx2" alt=""><figcaption></figcaption></figure>

\
2\. To assign an AI Agent to a different Knowledge Base:\
&#x20; \- Go to the **Flows** section.\
&#x20; \- Select the AI Agent you want to configure.\
&#x20; \- In the agent flows, choose the appropriate [Block](/ai-chatbots-and-automation/visual-builder-101/how-to-create-a-block) with the [Ask Knowledge Base](/ai-chatbots-and-automation/actions-explained/ask-knowledge-base) feature containing the linked namespace.

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

#### **Best Practices for Using Multiple Namespaces**

\- **Categorize by Topic**: Create separate namespaces for different topics or departments to keep information organized.\
\- **Agent-Specific KBs**: Assign specific Knowledge Bases to AI agents designed for particular functions, ensuring they have access to the most relevant information.\
\- **Regular Updates**: Regularly update and review each namespace to ensure that the information is current and accurate.

#### Conclusion <a href="#conclusion" id="conclusion"></a>

Using multiple namespaces for your Knowledge Bases in Tiledesk allows for better organization, targeted information delivery, and scalability. By following this tutorial, you can efficiently create, manage, and utilize multiple Knowledge Bases, enhancing the overall performance and effectiveness of your Tiledesk AI Agents.

Send your feedback to <info@tiledesk.com> 👋


# Adding a Knowledge Base

\
Tiledesk is a powerful platform that allows you to create and manage chatbots, and one of its most useful features is the ability to add a Knowledge Base (KB). A Knowledge Base helps your chatbot provide accurate and quick answers to user queries by referring to predefined content. This tutorial will guide you through adding a Knowledge Base to your Tiledesk account.

#### Step 1: Log in to Tiledesk & Navigate to the Bots Section <a href="#step-1-log-in-to-tiledesk-navigate-to-the-bots-section" id="step-1-log-in-to-tiledesk-navigate-to-the-bots-section"></a>

1. Open your web browser and navigate to \[Tiledesk]\(<https://www.tiledesk.com/>).
2. Log in with your credentials.
3. Click on the **Bots** section in the main navigation menu.

#### Step 2: Access the Knowledge Bases Tab <a href="#step-2-access-the-knowledge-bases-tab" id="step-2-access-the-knowledge-bases-tab"></a>

1. In the Bots section, locate and click on the **Knowledge Bases** tab.
2. Click on the blue button labeled "**Add contents**". This will open a new window where you can add different types of content to your Knowledge Base.

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

#### Types of Contents You Can Add <a href="#types-of-contents-you-can-add" id="types-of-contents-you-can-add"></a>

**1. Text Content**

\
\- **Purpose**: Useful for uploading any other textual information that users might ask for.\
\- **How to Add**:\
&#x20;1\. Click on Add Contents: Plain Text.\
&#x20;2\. You can upload your texts simply by copying and pasting the content within the “File Text” field. Bear in mind that the maximum number of characters allowed for each text content is 32768.\
&#x20;3\. Add a name to your Plain Text KB to better identify the information added.

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

**2. FAQs**

\- **Purpose**: Similarly to the plain text option, you can also select the FAQs to a) copy and and paste your Frequently Asked Questions (FAQs) and/or b) upload directly a CSV file.\
\- **How to Add**:\
1\. Click on Add Contents: FAQs.\
2\. You can either insert your FAQs simply by copying and pasting the content within the “Answer” field following the “Question” field.\
3\. Alternatively, simply upload your FAQs CSV file.

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

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

#### **3. PDF and DOCX** - **Purpose**: Useful for uploading detailed documentation, technical guides, user manuals, and other extensive documents. - **How to Add:**  1. Click on Add Contents: Upload File.  2. Select the files you want to upload from your computer. Supported file formats are .pdf and .docx. - 10 Mb max.

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

#### **4. Sitemap** - **Purpose**: Useful for including all pages and articles from your website automatically. - **How to Add**:  1. Click on Add Contents: Sitemap.  2. Enter the URL of your website's sitemap (e.g., \`<https://gethelp.tiledesk.com/sitemap.xml\\`>).  3. Tiledesk will automatically fetch and include all the pages and articles listed in the sitemap.

<figure><img src="/files/1zACglCnIHc1H7hlSL0R" alt=""><figcaption></figcaption></figure>

**5. URL**\
\- **Purpose**: Useful for adding specific web pages or articles to your Knowledge Base.\
\- **How to Add**:\
&#x20;1\. Click on Add Contents: URLs.\
&#x20;2\. Copy and paste the desired URLs into the provided field.\
&#x20;3\. You can add up to 300 URLs each time, with relevant content for your users.

<figure><img src="/files/0885WXCvT0JsI2Z5upvj" alt=""><figcaption></figcaption></figure>

#### Test Your Knowledge Base via "Preview"

\
After adding all the desired contents, review them to ensure they are correct and complete via the Preview option. Click on it and test away until you're satisfied with the results; you can also use the “Re-use last question” option to speed up your testing.<br>

<figure><img src="/files/6JIdo1HjicYAEmsz7vF8" alt=""><figcaption></figcaption></figure>

#### Create a Bot

Once you're happy with your enriched KB, it is time to create a Bot that will be connected to all of that wealth of knowledge. Here's how. Click on the “**Create chatbot**” hyperlink and give a name to your Bot.

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

You'll see your newly created Bot right on the top of your KB; if you click on it, you'll be redirected to the Design Studio where you'll be able to edit it. Here you'll find some useful hacks and tutorials on [how to build your perfect Bot.](/ai-chatbots-and-automation/quick-start)

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

#### Conclusion

\
Adding a Knowledge Base to Tiledesk enhances your chatbot's ability to provide accurate and timely information to users. By following this tutorial, you can easily add different types of content, ensuring that your chatbot is well-equipped to handle a variety of user queries.

Email us at <info@tiledesk.com> to share your feedback on our KB feature


# Using Buttons in an AI Workflow to Trigger the Knowledge Base

Use buttons to trigger Knowledge Base queries in Tiledesk flows.

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

In this tutorial, you will learn how to use buttons in an AI flow such that the button's title text passes through as values for the next block to be triggered. We will achieve this by assigning the button's text as a value corresponding to its title and a key that corresponds to the \`lastUserText\` attribute. This attribute is then used to trigger a knowledge base lookup using the [Ask Knowledge Base](/ai-chatbots-and-automation/actions-explained/ask-knowledge-base) action in the subsequent block.

#### 1. Set Up Your AI Agent Flows <a href="#id-1-set-up-your-chatbot-flows" id="id-1-set-up-your-chatbot-flows"></a>

Ensure you have uploaded a Knowledge Base (URLs, text files, Sitemap) in the [Knowledge Base section](/ai-chatbots-and-automation/knowledge-base/knowledge-base-overview).\
Design the initial block where the user will interact with buttons. Each button will represent a query or option that will trigger a specific response. You can include these buttons in your Welcome Block, where you can offer some FAQ examples.

#### 2. Capture Button Text and Assign to lastUserText <a href="#id-2-capture-button-text-and-assign-to-lastusertext" id="id-2-capture-button-text-and-assign-to-lastusertext"></a>

**Make sure that each button is connected to a block first** by choosing the button type: **go to block** >> choose the respective block.&#x20;

Then click on the ‘**Attributes**’ section below and insert a) the ‘**lastUserText**’ as the **Key** and b) the **button's title** as the **Value**. This way, the AI Agent captures the button's text and assigns it to the \`**lastUserText**\` attribute.

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

#### 3. Configure the Knowledge Base Lookup Block <a href="#id-3-configure-the-knowledge-base-lookup-block" id="id-3-configure-the-knowledge-base-lookup-block"></a>

Create a new block that will handle the knowledge base lookup based on the \`lastUserText\` value. Use the [Ask Knowledge Base](/ai-chatbots-and-automation/actions-explained/ask-knowledge-base) action to query the knowledge base. Then add the text reply with the classic ‘kb\_reply’ that will allow the agent to stamp the answer.

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

#### 4. Test the AI Agent Flow <a href="#id-4-test-the-chatbot-flow" id="id-4-test-the-chatbot-flow"></a>

Test the complete flow by interacting with the [buttons](/ai-chatbots-and-automation/actions-explained/reply-action#buttons) and ensuring the appropriate knowledge base lookup and response is triggered.

#### Summary <a href="#summary" id="summary"></a>

By following this tutorial, you have successfully created an AI Agent flow where button interactions trigger specific [Blocks](/ai-chatbots-and-automation/visual-builder-101/how-to-create-a-block) based on the button's title text. This text is passed through using the \`lastUserText\` attribute and is utilized to query a knowledge base, providing users with relevant information based on their selections. This approach enhances user interaction by providing dynamic and contextually relevant responses.

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

Do not hesitate to get in touch and share your feedback with us at <info@tiledesk.com> 🧡


# Self-Learning AI Agent

Turn resolved human-handled chats into new KB articles so your AI agent improves over time—no manual updates needed.

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

The Self-Learning AI Agent improves automatically by learning from conversations resolved by human agents. When the AI Agent cannot answer, the chat is seamlessly handed over to a human. Once the operator closes the request, an automated process analyzes the conversation, extracts useful knowledge, generates a new article, and adds it to your Knowledge Base so the AI Agent can respond to similar questions in the future.

### **How the Self-Learning Flow Works**

#### 1. The AI Agent as First Responder

When a user sends a message, the AI Agent attempts to respond based on its knowledge base.

2\. Escalation to a Human

If the AI cannot answer, the conversation is seamlessly transferred to a human operator.

3\. Learning from Resolved Conversations

* Analyzes the resolved conversation
* Extracts relevant information
* Generates new content
* Automatically adds this content to the AI’s knowledge base

4\. Continuous Improvement

The next time a similar question is asked, the AI Agent is able to respond without human intervention. It’s like having an AI that learns from every support case — automatically.

### How to Get Started

The Self‑Learning AI Agent uses **Code Action** to interact with secure endpoints and update your Knowledge Base. Code Action enables server-side execution with authentication.

You have **two ways to implement** the Self-Learning flow:

**Option A — Use the prebuilt template (fastest)**\
You can [download the ready-to-use Self‑Learning Flow template](https://tiledesk.com/community/getchatbotinfo/chatbotId/688b12d7ba540d00138a60e6-Self-Learning-AI-Agent--Ready-to-Use-Flow-Template) from the community and import it into your project.\
All necessary Code Action configurations are already included, so **you don’t need Enterprise access to use it**.

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

**Option B — Build the flow from scratch**\
If you prefer to customize or build the flow manually in Design Studio, **Code Action must be activated** — and this is **only available under the Enterprise plan**.\
If Code Action is not enabled in your workspace, **contact us** and we’ll activate it for you.

#### Self-Learning AI Agent – Build the Flow from Scratch

To build the Self-Learning AI Agent flow from scratch, you need to have a project under the Enterprise plan with Code Action enabled. This tutorial walks you through every step in detail to create the learning loop inside Tiledesk Design Studio.

**Step 1: Create a New Flow**

1\. From the Tiledesk dashboard, go to the left-side menu and click on “Flows”.\
2\. On the new page, click the blue “New Flow” button at the top right.\
3\. Choose “Automation”, then select “Webhook” and give it a name (e.g., Self Learning Flow).\
4\. You’ll be redirected to the Design Studio.

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

**Step 2: Add the Code Action**

1\. Hover over the “Special” actions and choose “Code Action”.\
2\. Click on the Code Action block. A right-side menu will appear.\
3\. Replace the default code with the following snippet, and optionally rename the block to “create\_transcript”.

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

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

**Here is the code you should use:**

<pre><code><strong>let payload = context.attributes["payload"];
</strong>let messages = payload?.payload?.messages;
  messages?.shift();
  let transcript = "";
  messages?.forEach(message => {

    // only unuseful messages have subtype
    const subtype = message?.attributes?.subtype;

    // only chatbots
    const intentName = message?.attributes?.intentName;

    // only end-users
    // const requester_id = message?.attributes?.requester_id;

    // only service messages
    const messagelabel = message?.attributes?.messagelabel;

    // human only messages
    if (!subtype &#x26;&#x26; !messagelabel &#x26;&#x26; !intentName) {
      //console.log("message:", message);
      let text = message.senderFullname + ": " + message.text;
      transcript += text + "\n";
    }
  });
context.setAttribute("transcript", transcript);
<strong>
</strong></code></pre>

What it does:\
\- Gets chat messages from the payload.\
\- Filters out system messages, AI Agent responses, and service messages.\
\- Keeps only genuine human-to-human conversations.\
\- Formats each message as “SenderName: MessageText”.\
\- Creates a single transcript string stored as “transcript” in context.\
\
Why: The filtered transcript provides clean human conversation data without technical noise, making it ideal for training a self-learning AI agent on natural dialogue patterns.

**Step 3: Add a Flow Log**

1\. Hover again on “Special” and select “Flow Log”.\
2\. Place it after the Code Action block and write “self learning start” in the log section.

<figure><img src="/files/9xoYIYlSda8hv0ME6cAL" alt=""><figcaption></figcaption></figure>

**Step 4: Add the ChatGPT Task**

1\. Add a new block and insert the “ChatGPT Task” from the action types.

<figure><img src="/files/2xe6gqPvCF4czIGFxjEH" alt=""><figcaption></figcaption></figure>

2\. Write a prompt that analyzes a support transcript and extracts reusable content.\
Use the following prompt:\
*The transcript below is a support conversation where a user asks for a solution of a problem and someone replies providing the requested solution.*\
*If you evaluate that a solution was found, the solution was generic enough to be useful for other users - no user-specific solution regarding his personal account or the provisioning of sensible data are considered useful for someone else - please fillout the summary field of the json with a summary of the solution removing all sensible data. Otherwise set the summary field to null.*\
*Reply to me with this json:*\
*{*\
*"title":"a short title for this content",*\
*"summary": the summary you found out following the above instructions*\
*}*\
*conversation transcript: {{transcript}}*

3\. This prompt evaluates whether the conversation includes a reusable solution, excludes sensitive/user-specific info, and returns a JSON structure with a title and summary.

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

**Step 5: Extract the Summary**

1\. Add a new block with the “Set Attributes” action from the “Flow” actions.\
2\. Use the value {{gpt\_reply.summary}}.\
3\. Create a new attribute named “Summary”.\
This will store the AI-generated summary in a usable form.

<figure><img src="/files/9Tg0lPOoYJQqH87C3prF" alt=""><figcaption></figcaption></figure>

**Step 6: Add a Condition to Check Summary Validity**

1\. Add a “Condition w/else” block from “Flow” actions.\
2\. Configure the condition to check if Summary is Null, Undefined, or Empty.\
If it matches any of these, it means the summary is not usable.

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

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

**Step 7: Handle Unusable Summaries**

1\. From the green end of the condition block (if invalid), add a new “Flow Log” action.\
2\. Write “discarded” in the log field.

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

3\. Add a “Web Response” block to conclude the flow.

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

**Step 8: Check If Content Already Exists**

1\. From the red end of the condition block (if summary is valid), add an “Ask Knowledge Base” action.\
2\. Use the Summary attribute in the “Use question” field.\
3\. Select the target Knowledge Base.

<figure><img src="/files/2B9lISbHHlvFHxmOqQ5s" alt=""><figcaption></figcaption></figure>

4\. If found (green end), redirect back to the “discarded” log.\
5\. If not found (red end), continue to add the content.

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

**Step 9: Add Content to the Knowledge Base**

1\. From the red end of the “Ask Knowledge Base”, add an “Add to Knowledge Base” action.

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

2\. Set {{gpt\_reply.title}} as the Question.\
3\. Set {{gpt\_reply.summary}} as the Answer.\
4\. Choose the appropriate Knowledge Base for the content.

**Step 10: Log the Action**

1\. Add another “Flow Log” action to mark the new entry.\
2\. Fill it with a meaningful message (e.g., “article added to KB”).\
3\. Click the blue "Publish" button in the top right corner.

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

**Step 11: Register the Webhook to Trigger the Flow**

After building the flow, you need to connect it to the **“Request Close” event**. This ensures the flow is executed automatically every time a human agent closes a support conversation.

Follow these steps to set up the webhook:

1- Click on the **starting “Webhook” block** at the top of the flow.

2- On the right-hand panel, locate the field labeled **Production URL**.

3- **Copy the Production URL**. You’ll need it in the next steps.

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

**Register the Webhook in Tiledesk Dashboard**

1- Go back to the **Tiledesk dashboard**.

2- From the left-side menu, click on **Settings**, then go to **Project Settings**.

3- Select the **Developer** tab at the top of the page.

4- Click the **Manage Webhooks** button (blue).

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

**Create a New Subscription**

1- Click the **Add Subscription** button.

2- Under **Select Event**, choose **“Request Close”** from the dropdown menu.

3- Paste the **Production URL** (copied earlier) into the **Webhook URL** field.

4- Click the **Create Subscription** button to finalize.

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

Once saved, your self-learning flow will now automatically be triggered each time a support request is closed — activating the entire learning process without manual intervention.

### How to Test It

1. Ask a question your AI Agent doesn’t know.
2. Let the conversation escalate to a human agent.
3. Have the human respond and close the conversation.
4. Wait a few moments for the self-learning flow to activate.
5. If successful, new content will be added to your KB.

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

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

### Need help transferring knowledge to your AI Agent?

If your support center handles a **large volume of tickets** and you’re unsure how to **extract and structure that knowledge** for your AI Agent, **we’re here to help**.

Our team can assist you in:

* Analyzing historical conversations
* Identifying reusable knowledge
* Structuring and importing it into your Knowledge Base
* Optimizing your AI Agent for autonomous responses

[**Contact us**](https://tiledesk.com/free-live-chat-demo/) to get expert support and unlock the full potential of your self-learning AI Agent.


# Unanswered Questions in the Knowledge Base

Identify and review unanswered user queries to effortlessly expand your Knowledge Base.

### What is this feature?

The **Unanswered Questions** feature helps you identify and manage real user questions that your AI Assistant could not answer due to missing or incomplete information in the Knowledge Base. These questions are automatically collected and displayed in a dedicated tab inside your Knowledge Base, so your team can decide whether to add them as new content or discard them.

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

This makes your **AI Assistant more accurate over time**, without manual monitoring of daily conversations.

### Why is this useful?

Even with a strong Knowledge Base, there are always edge cases or new questions your AI Assistant may not be ready for. In the past, finding these gaps meant searching through hundreds of conversations manually — a slow and repetitive task.

This feature saves you time and helps your Assistant grow continuously by:

* Showing you what your Assistant couldn’t answer
* Helping your team turn real user queries into Knowledge Base content in one click
* Increasing the Assistant’s accuracy and ability to answer independently over time

**The result: fewer escalations, faster answers, and a smarter Assistant.**

### How to use it (Step-by-step guide)

#### 1. Head to the [Tiledesk dashboard](https://panel.tiledesk.com/v3/dashboard/#/projects)

Log into your Tiledesk account and go to the **dashboard** of your project.

#### 2. Open the Knowledge Base from the left-hand menu

Click on **Knowledge Base** to access your default collection of FAQs and articles.

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

#### 3. Click on the "Unanswered Questions" tab

Inside the Knowledge Base, you'll see a tab called **Unanswered Questions**. This is where all user questions that your AI Assistant could not answer are collected automatically.

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

#### 4. If the list is empty, here’s how to test it

If no questions appear yet, don’t worry — it means your AI Assistant hasn’t encountered any missing content or hasn’t been asked questions it cannot answer.

To test it:

* Use your Assistant and ask a question **not covered** by your current Knowledge Base
* Make sure the question triggers the **Ask Knowledge Base** action
* If the Assistant fails to answer, that question will be added to this tab automatically

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

#### 5. Review unanswered questions

Each question shows the exact message sent by the user. You’ll also see action buttons on the right side.

* Click the ➕ **plus icon** to open a popup where you can add a new answer
* Click the 🗑️ **trash icon** to delete questions that are not relevant

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

#### 6. Add the answer and save

When you click the plus icon, a simple form opens where you can write the answer. Once saved, it becomes part of your Knowledge Base — and the Assistant will be able to answer that type of question in the future.

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

To test if the AI agent is trained correctly, we go back to the design studio and ask the same question:

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

### Tips to make the most of this feature

* Review unanswered questions regularly — even weekly checks can improve AI coverage significantly
* Prioritize questions that are repeated often or block users from moving forward
* Involve your support or content teams in writing answers for faster KB growth

### Need help?

If you have any issues or suggestions, you can reach us at <support@tiledesk.com> or ask in our [Community](https://tiledesk.discourse.group/).


# Copilot for Human Support Teams

Let Copilot draft KB-based responses for operators to tweak and send, boosting speed and consistency.

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

Copilot is a built-in AI assistant that helps live agents resolve inquiries faster. When an operator clicks **Solve with AI** in the console, Copilot analyzes the conversation and searches your Knowledge Base (KB) to propose a ready-to-send answer. Operators review, tweak if needed, and send — no manual prompting required.

### Availability and Activation

**This feature is available only on the Business and Enterprise plans.** To enable it, email <support@tiledesk.com>.

We will activate Copilot on your project and can schedule a walkthrough to help your team configure it and get the most out of it.

### Using Copilot in the Agent Dashboard

1. Open the Tiledesk agent dashboard.
2. Open any active conversation.
3. Click **Solve with AI** (top right). The Copilot flow runs and returns a suggestion.

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

### Set Up the Copilot Flow

1. In the dashboard, go to **Flow** (left sidebar).
2. Click **New Flow** → **Automation** → **Copilot**.
3. Name the flow (e.g., *Copilot for Human Agents*) and choose the **Knowledge Base** to query (e.g., *Default*).

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

### How It Works

The Copilot automation is built in the Visual Flow Designer and is triggered by a webhook when the human **agent clicks the button.** Below are the two execution paths, with the exact block names as they appear in the template.

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

#### Trigger

* Webhook payload provides `payload.text` (customer message) and `payload.request_id` (conversation ID).
* `extract_message_and_request_id` stores them in `message` and `request_id`.

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

#### Message Validation

* `check_message` routes the flow:

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

* **Message missing** → *Transcript Recovery Path (Blue block)*
* **Message present** → *Direct Message Path (Green Block)*

<figure><img src="/files/6WrjWb9eru94bjn9YrRD" alt=""><figcaption></figcaption></figure>

#### Transcript Recovery Path (message missing)

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

**1- check\_request\_id** → if missing, go to `no_msg_no_req` (HTTP 400).

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

**2- get\_request** → fetch conversation messages using `request_id`.

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

**3- create\_transcript** → build `transcript` from human-authored messages only (filter out items with `subtype`, `intentName`, `messageLabel`), formatted as *SenderName: message*.

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

**4- extract\_question** (ChatGPT task) → summarize the last unresolved issue from `transcript`; if none, return `NULL`.

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

**5- check\_question** → if `gpt_reply == "NULL"`, go to `return_no_content_1` (HTTP 404); else continue.

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

**6- ask\_kb\_from\_request** → query KB with `{{gpt_reply}}`.

* Success → **return\_response\_request** (HTTP 200, sends `kb_reply` to Copilot UI).
* Else → **return\_no\_content\_2** (HTTP 404).

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

#### Direct Message Path (message present)

**1- extract\_issue\_ai** (ChatGPT task) → validate and rewrite `{{message}}`; return `NULL` if not actionable.

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

**2- check\_no\_issue** → if `gpt_reply == "NULL"`, go to `return_no_content_3` (HTTP 404); else continue.

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

**3- ask\_kb\_from\_message** → query KB with `{{gpt_reply}}`.

* Success → **return\_response\_message** (HTTP 200).
* Else → **return\_no\_content\_4** (HTTP 404).

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

4- We’re almost done! The final step is to publish the flow using the blue button at the top right. You’re all set!

<figure><img src="/files/35P2F0uFhkedzGqJdseI" alt=""><figcaption></figcaption></figure>

### How to Test Copilot for Human Support

To make testing easier, we prepared a simple mini AI Agent that triggers the **Transfer to human** action.

1. Add a button in your Agent flow and link it to the [Transfer to a Human](/ai-chatbots-and-automation/actions-explained/transfer-to-a-human) action.
2. Run the flow using the **Test** icon in the top-right corner of the editor.
3. In the conversation preview, click the **Talk with Operator** button.
4. Ask a question to start the test.
5. An operator will automatically be assigned to the conversation.
6. Go to the **Operator Dashboard** and open the conversation.
7. In the top-right corner, click **Solve with AI**.
8. Copilot will retrieve the answer from the connected Knowledge Base and display it for review.
9. The operator can tweak the suggestion if needed, then press **Send** to reply instantly.

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

### Flow Variables

| Variable     | Purpose                                                       |
| ------------ | ------------------------------------------------------------- |
| `message`    | Last customer message from webhook payload.                   |
| `request_id` | Conversation ID used to retrieve history and route replies.   |
| `transcript` | Clean, human-only conversation history built from `messages`. |
| `gpt_reply`  | AI-generated question for KB search.                          |
| `kb_reply`   | Knowledge Base answer returned by the Ask KB blocks.          |
| `kb_source`  | Source document/page for the KB answer (optional).            |

### Return Values to the Copilot UI

* **200 OK** → Copilot displays `kb_reply` (and optionally `kb_source`) for the agent to review.
* **404 Not Found** → No suggestion was found.
* **400 Bad Request** → Missing required data (`message` or `request_id`).

### Customization

* Adjust AI prompts for question extraction.
* Point to specialized Knowledge Bases.
* Include source citations for transparency.
* Add language detection and translation for multilingual support.

### Benefits

* 2× faster replies
* Less cognitive effort
* More consistent answers

Review the suggestion, tweak if needed, and send.

### Ready to Equip Your Team with Copilot?

Teams using Copilot are already resolving inquiries faster and with less effort.\
Don’t let your agents miss out — **email us today at** [**support@tiledesk.com**](mailto:support@tiledesk.com) to activate Copilot for your team and start boosting productivity right away.


# Using Tags in Knowledge Base

This tutorial explains how to use tags in the Knowledge Base and in the [Ask Knowledge Base](/ai-chatbots-and-automation/actions-explained/ask-knowledge-base) action. The goal is to control which contents the AI Agent can search when answering a question.

### What you will have at the end

At the end of this setup, your AI Agent will search only inside KB contents that match the selected tag, such as `approved`.

<figure><img src="/files/E70c4i9vkyk1HM8Yk2UG" alt="" width="563"><figcaption></figcaption></figure>

### What this feature does

Tags are simple labels applied to Knowledge Base contents. You can add one or more tags when creating or editing a content item.

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

{% hint style="info" %}
Please note: you have to press Enter after writing the Tag.
{% endhint %}

Then, inside the **Ask Knowledge Base** action in Design Studio, under AI Settings, you can add the same tag in the **Tags** field. When you do that, the search runs only on contents that match that tag.

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

Tags can be applied to different Knowledge Base content types, including website URLs, [synchronized sitemaps](/ai-chatbots-and-automation/knowledge-base/how-to-use-synchronized-sitemap-in-knowledge-base), FAQs, plain text, and uploaded files in supported formats. This means you can organize and filter many kinds of content using the same tag logic.

### When to use it

This option is useful when you want more control over what the AI Agent can use in production.

* Use only reviewed content with the tag `approved`
* Exclude self-learned content until a human reviews it. (Read more about self learning module here: [Self-Learning AI Agent](/ai-chatbots-and-automation/knowledge-base/self-learning-ai-agent) )
* Separate content by language, team, or use case
* Create different filtered experiences for different AI Agents

Typical approval workflow

{% stepper %}
{% step %}

### New content created

New self-learned content is created without the tag `approved`.
{% endstep %}

{% step %}

### Human review

A human reviews the new content.
{% endstep %}

{% step %}

### Tag if valid

If the content is valid, the reviewer adds the tag `approved`.
{% endstep %}

{% step %}

### Configure Ask Knowledge Base

The **Ask Knowledge Base** action is configured with the tag `approved`.
{% endstep %}

{% step %}

### AI uses approved knowledge

The AI Agent uses only approved knowledge.
{% endstep %}
{% endstepper %}

### How to use it

{% stepper %}
{% step %}

### Step 1: Add a tag to a Knowledge Base content

Open your Knowledge Base and create or edit a content item.

In the content form, add the tag you want to use, for example `approved`, then save the content.

This tag is now attached to that specific KB item.

<figure><img src="/files/MEqXhT4Ti2B52yIynWlE" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Step 2: Open the Ask Knowledge Base action

In Design Studio, open the flow where your AI Agent searches the Knowledge Base.

Select the **Ask Knowledge Base** action. This is the step that retrieves answers from the KB during the conversation.
{% endstep %}

{% step %}

### Step 3: Add the same tag in the Tags field

Inside the **Ask Knowledge Base** action, scroll to the **Tags** field.

Type the same tag used on the KB content, for example `approved`.

Once added, the action will search only within contents tagged `approved`. Contents without that tag will be ignored.

<figure><img src="/files/3YJwHLo8ceNaE7gdwkVi" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Step 4: Test the flow

Now test the AI Agent with a question that should be answered from the tagged content.

If the relevant KB item has the tag `approved`, it can be used in the answer. If another KB item does not have that tag, it will not be considered.

<figure><img src="/files/NREJo1cUq0CYKItPvbcE" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

\
Hope it helps,

If you need further assistance, feel free to contact us at <support@tiledesk.com>.&#x20;

To read more about Tiledesk, visit [www.tiledesk.com](https://www.tiledesk.com)


# Visual Builder 101

[How to Create a Block](/ai-chatbots-and-automation/visual-builder-101/how-to-create-a-block)

[How to connect your blocks](/ai-chatbots-and-automation/visual-builder-101/how-to-connect-your-blocks)

[How to scroll, zoom, move Blocks & Actions](/ai-chatbots-and-automation/visual-builder-101/how-to-scroll-zoom-move-blocks-and-actions)

[Duplicate Blocks and Actions](/ai-chatbots-and-automation/visual-builder-101/duplicate-blocks-and-actions)

[Flow’s Attributes](/ai-chatbots-and-automation/visual-builder-101/flows-attributes)

[Avoid dead loops](/ai-chatbots-and-automation/visual-builder-101/avoid-dead-loops)

[Multiple AI agents assigned to different pages or websites](/ai-chatbots-and-automation/visual-builder-101/multiple-ai-agents-assigned-to-different-pages-or-websites)


# How to Create a Block

One of the essential aspects of designing your AI Agent’s workflow is understanding how to use **Blocks**.\
Blocks are the core elements of your AI Agent’s conversation, and you can connect them together to create engaging interactions.\
In this tutorial, we’ll walk you through the process of creating a basic AI workflow using Blocks in Tiledesk.

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

In Tiledesk, AI Agent conversations are built using blocks. Blocks are the fundamental elements of an AI workflow.

On the left side of the Tiledesk interface, you’ll find a toolbar. Click on the "AI" icon.\
A dropdown menu will appear.&#x20;

From this menu, select an action such as [ChatGPT Task](/ai-chatbots-and-automation/actions-explained/chatgpt-task) \
Actions are the key components of your blocks.

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

Drag the "ChatGPT task" action from the toolbar into the visual builder, also known as the Design Studio, and drop it wherever you’d like on the canvas.

Congratulations! You have now created a new Block.

To create another block, start by drawing a path from the exit port.\
This action will open the same dropdown menu you used earlier to select an "Action."

Choose an "Action" from the menu that will form your second block. This action could be a "[Reply](/ai-chatbots-and-automation/actions-explained/reply-action)," "Condition," or any other option that fits your AI Agent’s workflow.

Once you select the action, another block will automatically be created in the canvas.

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

Once you’re satisfied with your AI Agent’s workflow, you can launch it and make it available to users on your website or any other platform.

Check out our installation guides here: [Web Integrations](/web-integrations)

Congratulations! You've successfully created a basic conversation flow for your AI Agent using Blocks in Tiledesk. You can continue to build upon this foundation to create more complex and engaging interactions.


# How to connect your blocks

Tiledesk allows you to create no-code AI Agents quickly. One of the key aspects of designing an AI workflow is understanding how to use Blocks and connect them together.&#x20;

In this tutorial, we’ll guide you through the process of building a workflow by linking [Blocks](/ai-chatbots-and-automation/visual-builder-101/how-to-create-a-block) in Tiledesk.

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

**Step 1: Understanding Blocks, Actions and Connections**

* In Tiledesk, AI Agent workflows are constructed using [Blocks](/ai-chatbots-and-automation/visual-builder-101/how-to-create-a-block).
* Blocks are built using Actions.
* Blocks are connected together to create a workflow.
* The connections between Blocks are made using paths.

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

**Step 2: Creating Paths**

* To connect Blocks, you need to create paths.
* Hover over the exit port of any [button](/ai-chatbots-and-automation/knowledge-base/using-buttons-in-an-ai-workflow-to-trigger-the-knowledge-base) or Block. It will turn into a green plus icon when you hover on it.
* Click and drag from the exit port to the Block you want to connect it to. This action creates a path.
* This path tells your AI Agent where the workflow should go next.

**Step 3: Deleting Paths**

* If you want to delete a path, click on it. The path will turn light blue to indicate that it is selected.
* Delete it using the delete icon, or press the Backspace key on your keyboard to remove the selected path.

When a path is selected, two additional options appear:

1. **Hide connector**\
   To simplify reading the graph, you can use the hide option.\
   Click on the connector, then select the 👁️ icon in the menu. The connector will be hidden, and a simple mouse-over will display it again. If you click on the label, the original connector will return to its position.
2. **Line text**\
   This option allows you to add a note on each path. Notes help you organize complex workflows more easily and keep your design clear.

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

**Step 4: Understanding the Significance of Paths**<br>

* Paths determine the decisions made by users within the workflow.
* They guide users through specific interactions based on how they engage with the AI Agent.
* Continue adding Blocks and connecting them with paths to build your AI workflow. This represents the next steps in the interaction.
* Test it!
*

**Step 5: Launch Your AI Agent**\
Once you are satisfied with the workflow, launch your AI Agent to make it available to users on your website or other platforms.\
[Learn how to install](https://guide.tiledesk.com/web-integrations) it here and/or [how to connect it to different departments](https://guide.tiledesk.com/creating-a-department).

Congratulations! You’ve successfully created an AI workflow by linking Blocks with paths in Tiledesk. These paths play a critical role in guiding users through specific interactions based on their choices, making your AI Agent more engaging and user-friendly.


# How to scroll, zoom, move Blocks & Actions

When designing an AI workflow in Tiledesk’s Design Studio, it’s important to know how to navigate the canvas and arrange your [Blocks](/ai-chatbots-and-automation/visual-builder-101/how-to-create-a-block) and Actions.&#x20;

Here’s how to do it:

**1. Scroll**\
To move around the canvas without zooming or changing the position of your Blocks, place two fingers on your touchpad and slide horizontally or vertically.

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

**2. Zoom**\
To zoom in or out of the canvas, place two fingers on your touchpad and pinch in to zoom out, or stretch out to zoom in.

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

**3. Move a Block**\
To move a Block, place your cursor on the top area of the Block you want to reposition, then drag it to a new location on the canvas.

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

**4. Detach an Action**\
To detach an Action from a Block, place your cursor on the Action’s icon and drag it away.\
You can then:

* drop it directly onto the canvas, and it will automatically be embedded into a new Block, or
* drag it onto an existing Block to embed it there.

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

Now you know how to scroll, zoom, and arrange Blocks and Actions in the Design Studio. These simple steps will help you keep your AI workflows clear and well organized.


# Duplicate Blocks and Actions

Tiledesk empowers you to create no-code AI Agents swiftly and efficiently.&#x20;

A key feature that simplifies the design process is the ability to use Copy and Paste.\
This feature allows you to duplicate an entire [Block](/ai-chatbots-and-automation/visual-builder-101/how-to-create-a-block) or just an Action within a Block, making your design process faster and more flexible.

####

#### Duplicate **a Block**

Blocks are the foundation of an AI workflow. To duplicate a Block, hover over the one you want to copy. A small toolbar will appear on the top right. Click on the “Copy block” option.

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

Then, right-click to open the dropdown menu and select “**Paste**.”&#x20;

That’s it — you’ve successfully copied and pasted a Block.

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

#### **Duplicate an Action Inside a Block**

Each Action enhances your AI Agent’s flexibility. You can duplicate an Action to speed up workflow design.&#x20;

To do this, hover your cursor over the Action you want to copy. A small toolbar will appear on the left side. Click on the “Copy action” option.

&#x20;

<figure><img src="/files/0p4hkBDHsHyF6E1nGcGo" alt=""><figcaption></figcaption></figure>

Then, right-click where you need that action and select “**Paste**” from the options. That's All :)

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

We hope this tutorial helps you in designing your AI Agent more efficiently.&#x20;

If you need to know more about AI Agents and their capabilities, please visit our website at [**www.tiledesk.com**](https://tiledesk.com/).&#x20;

If you require further assistance, do not hesitate to contact us at [**support@tiledesk.com** ](mailto:support@tiledesk.com)


# Flow’s Attributes

Attributes are a key part of your automations. They allow you to store information temporarily and reuse it across your workflows.

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

With Attributes, your AI Agent can capture data such as user input, phone numbers, or order IDs, and then use this information to deliver personalized and context-aware responses. Attributes can also be passed between different AI Agents, enabling more advanced, connected automations.

In this tutorial, we’ll explore how Attributes work and how you can use them to build smarter, more engaging AI workflows.<br>

Attributes can be used in many different Actions. Here are some examples:

**Chatgpt task**\
This Action brings the power of ChatGPT into your Flow. One use case is using an Attribute called {{user\_language}} in the [ChatGPT Task](/ai-chatbots-and-automation/actions-explained/chatgpt-task) to generate a response in the user’s language.

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

**Ask Knowledge Base**\
Another useful Action is [Ask Knowledge Base](/ai-chatbots-and-automation/actions-explained/ask-knowledge-base). It can use an Attribute like {{lastUserText}} to retrieve information from the Knowledge Base based on the user’s last question.

<figure><img src="/files/2SynANYOw3PxHVguiUK7" alt=""><figcaption></figcaption></figure>

**Capture user reply**\
This Action is handy when you want to [capture information from the user](/ai-chatbots-and-automation/actions-explained/capture-user-reply-action), for example their email address. The conversation pauses until the user replies, and the value is stored in an Attribute such as {{UserEmail}}. Later, you can reuse *UserEmail* in other Actions, for instance to send a message or dispatch an [email](/ai-chatbots-and-automation/actions-explained/send-email).

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

There are many more examples.

Now let’s take a closer look at the categories of Attributes:

1. User defined attributes
2. Most used attributes
3. System defined attributes
4. Uploaded documents attributes
5. Uploaded image attributes
6. Lead attributes
7. Dynamic attributes

####

#### **User defined attributes**

User defined attributes are especially useful when you need to collect user data or receive data from external web services (for example, Web Requests or ChatGPT tasks).

You can create a user defined attribute by clicking the `{}` icon, available wherever attributes can be used.\
For example, you can open a [Reply Action](/ai-chatbots-and-automation/actions-explained/reply-action) and click the `{}` icon in the lower right corner of the text box to define a new attribute.

From there, you can select one of the attributes listed under the *User defined* section. In this example, we’ll use **gpt\_reply**.

This means the response generated by the Chatgpt task will be stored in the **gpt\_reply** attribute. Then, by using a Reply Action, the content of **gpt\_reply** can be sent back to the user.

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

#### **Most used attributes**

The *Most used* category contains special attributes that are frequently applied in conversations.

* **lastUserText** (String)\
  The last text entered by the user. This value is overwritten each time the user replies.
* **user\_country** (String)\
  The user’s country, as detected by Tiledesk.
* **user\_city** (String)\
  The user’s city, as detected by Tiledesk.
* **user\_language** (String)\
  The user’s language, detected from the user’s browser settings.
* **transcript** (String)\
  The full transcript of all messages exchanged with the AI Agent during the conversation.

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

**System defined attributes**\
These are attributes automatically provided by Tiledesk during a conversation:

* **department\_name** (String)\
  The name of the department where the AI Agent is active.
* **department\_id** (String)\
  The ID of the department where the AI Agent is active.
* **project\_id** (String)\
  The ID of the project the AI Agent belongs to.
* **last\_message\_id** (String)\
  The unique ID of the last message sent.
* **conversation\_id** (String)\
  The unique ID of the conversation.
* **chatbot\_name** (String)\
  The name of the AI Agent.
* **chatbot\_token** (String)\
  A token you can use to invoke Tiledesk APIs. This token is continuously renewed during the Flow, and each token expires 4 hours after being issued.
* **user\_id** (String)\
  The unique ID of the user in the Tiledesk database.
* **user\_agent** (String)\
  The web user agent of the device where the conversation started.
* **chatChannel** (String)\
  The channel of the conversation, e.g. *web*, *whatsapp*, *facebook*, *telegram*.
* **user\_source\_page** (String)\
  The page where the conversation is running. Available only on the *web* channel.
* **chat\_url** (String)\
  The URL of the chat, which you can share with a colleague. Use the *Invite human* Action to invite a human agent to this chat.
* **user\_ip\_address** (String)\
  The user’s IP address, when available.
* **ticketId** (String)\
  The ticket ID automatically assigned to each conversation.

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

#### **Uploaded documents attributes**

These attributes are available when a user uploads a document during a conversation:

* **lastUserDocumentAsAttachmentURL** (String)\
  The public URL to access the uploaded document as an attachment. Empty if no document is uploaded. Use this attribute to provide a download link for end-users. The URL expires after 5 minutes.
* **lastUserDocumentURL** (String)\
  The public URL to access the uploaded document. Empty if no document is uploaded. The URL expires after 5 minutes.
* **lastUserDocumentName** (String)\
  The name of the uploaded document. Empty if no document is uploaded.
* **lastUserDocumentType** (String)\
  The type of the uploaded document. Empty if no document is uploaded.

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

#### **Uploaded image attributes**

These attributes are available when a user uploads an image during a conversation:

* **lastUserImageURL** (String)\
  The public URL to access the uploaded image. Empty if no image is uploaded. The URL expires after 5 minutes.
* **lastUserImageName** (String)\
  The name of the uploaded image. Empty if no image is uploaded.
* **lastUserImageType** (String)\
  The type of the uploaded image. Empty if no image is uploaded.
* **lastUserImageHeight** (String)\
  The height in pixels of the uploaded image. Empty if no image is uploaded.
* **lastUserImageWidth** (String)\
  The width in pixels of the uploaded image. Empty if no image is uploaded.

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

#### **Lead info attributes**

These attributes provide information about the user stored in Tiledesk Contacts or passed through authentication:

* **currentPhoneNumber** (String)\
  The phone number used in the current conversation (for example from WhatsApp or SMS channels).
* **userPhone** (String)\
  The user’s phone number stored in Tiledesk Contacts.
* **userEmail** (String)\
  The user’s email stored in Tiledesk Contacts.
* **userLeadId** (String)\
  The contact ID of the user in Tiledesk Contacts.
* **userCompany** (String)\
  The company name of the user in Tiledesk Contacts.
* **userFullname** (String)\
  The full name of the user in Tiledesk Contacts.
* **decodedCustomJWT** (JSON)\
  The JWT used by the user to authenticate with Custom (Strong) authentication.\
  To display the decoded JWT JSON, use the LiquidJS syntax to stringify the object.

  Example:

```
{
    "iat": 1727252***,
    "sub": "userexternal",
    "aud": "https://tiledesk.com/projects/6406e34727b57500120b1***",
    "_id": "6406e34727b57500120b1bd6_745408***",
    "firstname": "Andrew",
    "lastname": "Flavor",
    "email": "**@***.us",
    "profile": "Admin",
    "classified": "true",
    "id": "6406e34727b57500120b3bd8_745408***",
    "fullName": "Andrew Flavor"
}

```

* **strongAuthenticated** (String)\
  Indicates if the user authenticated with Custom (Strong) authentication. Values are “true” or “false.”

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

#### **Dynamic attributes**

These attributes are generated dynamically during the conversation:

* **timestamp** (Number)\
  The current timestamp in milliseconds (Number format).
* **now** (ISO date)\
  The current date in ISODate format, for example: `2024-09-25T10:14:41.638Z` (String format).
* **UUID** (String)\
  A dynamically generated UUID based on UUIDv4, with dashes removed.
* **UUIDv4** (String)\
  A dynamically generated standard UUIDv4.

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

**Creating a new attribute**

You can also create a completely new attribute to use in your workflows. Follow these steps:

1. Click on the `{ }` icon.
2. At the bottom of the page, click on **+ Add a custom attribute**.\
   (image)
3. A pop-up window will appear where you can define the name of your new attribute.
4. Once created, the attribute will be available and ready to use in your Flows.

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

**Set Attributes and Delete Attributes**

Both of these Actions are available under **Flow actions** and are directly related to managing Attributes.

**Set Attributes**\
This Action is useful when you want to assign a value to an Attribute, whether dynamic or static.\
For example:

1. You can ask a Chatgpt task to extract a tracking code from the conversation transcript.
2. The result is stored in the Attribute **gpt\_reply**.
3. Using *Set Attributes*, you can then save this value into a new Attribute you created earlier, such as **TrackingID**.

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

**Delete Attributes**\
This Action allows you to remove the value of an Attribute. It’s helpful when you no longer need certain data in your Flow and want to clear it.

<figure><img src="/files/2KCHimiIsibC1Jm2abq3" alt=""><figcaption></figcaption></figure>

With Attributes, you can store, update, and manage data across your Flows, making your AI Agents more dynamic and personalized.&#x20;

By combining Actions like Set Attributes and Delete Attributes, you gain full control over how information is captured, reused, or cleared, giving you the flexibility to build smarter automations.


# Avoid dead loops

Sometimes you might see the message **MAX\_ACTIONS exceeded** in your AI workflow:

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

This error occurs when an infinite loop (without user interaction) is accidentally created between [Blocks](/ai-chatbots-and-automation/visual-builder-101/how-to-create-a-block):

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

The system limits the number of Actions that can run without user interaction. Each time the user interacts, the MAX\_ACTIONS counter is reset.

In some cases, a loop in the background is useful — for example, when polling a remote API until the required data is available. If you expect the loop to run many times, you can prevent the **MAX\_ACTIONS exceeded** error by adding a **Wait Action** with at least 1 second of delay inside the loop:

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

Keep in mind that any Flow without user interaction — including loops — can run for a maximum of 4 hours. After this time, the Flow will stop automatically at whatever step it has reached.

If you have questions about Tiledesk features feel free to send an email to [support@tiledesk.com  ](mailto:support@tiledesk.com)or leave us a [feedback](https://feedback.tiledesk.com/feedback)


# Proactive Messages

A **Proactive Message** is a small, non-intrusive message bubble that appears on your website to greet visitors, share information, or invite them to start a conversation — **before they decide to open the chat widget themselves**.

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

Instead of waiting for users to click on the chat icon, a proactive message helps you take the first step. This way, your virtual assistant looks more approachable and available.

### Benefits of Proactive Messages

* **Increase engagement:** visitors are more likely to start a conversation when they see a friendly, ready-to-help message.
* **Boost loyalty:** showing that your team (or AI assistant) is always available creates a feeling of reliability and care.
* **Guide the customer journey:** trigger messages on specific pages (e.g., product pages or checkout) to provide personalized support.
* **Personalization:** adapt the message content based on the visitor’s context, such as the page they are visiting.

### How to Set Up a Proactive Message in Tiledesk

Follow these steps to create and activate your proactive message:

#### 1. Create the Proactive Message

Go to **Design Studio** in your Tiledesk dashboard.

Create a new message (text, emoji, or short greeting).

Example: “Hi 👋 I’m here if you need any help today!”

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

*Optional:* You can also use the [**ChatGPT Task**](/ai-chatbots-and-automation/actions-explained/chatgpt-task) **action** to dynamically generate a proactive message based on the page the visitor is browsing (e.g., on a pricing page: “Need help choosing the right plan?”).

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

Save the message.

#### 2. Add a Rule

From the left-side menu, click **Rules**.

Click **Add New Rule**.

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

#### 3. Configure the Rule

In the rule editor pop-up:

* **Name:** Give your rule a simple name (e.g., “Proactive Greeting”).
* **Condition:** Choose where the message should appear. Select *Any* for all pages or specify a URL (e.g., checkout page).
* **Frequency:** Set how often the same user will see the message (e.g., once every 24 hours).
* **Action:** Select the proactive message you created in Design Studio.

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

#### 4. Save and Test

Click **Add Rule** and then test it on your website. You should see the proactive message appear according to your settings.

### Best Practices

* Keep your proactive messages **short and friendly**.
* Use **personalized messages** based on the visitor’s page to make the engagement more relevant.
* Show proactive messages on **key pages** (product, pricing, checkout) where customers may need support.
* Avoid showing the same message too often — once per day is usually enough.
* Test different messages to find out which ones drive the most engagement.

With proactive messages, you can make your AI assistant more visible, approachable, and effective, while keeping the conversation experience relevant and personalized.


# Multiple AI agents assigned to different pages or websites

Force the Tiledesk widget to start from a specific AI Agent using a Department ID.

By default, the widget loads using only the `projectid`. If your project contains multiple AI Agents, you can force the widget to start from a specific one by setting the `departmentID` of the Department linked to that AI Agent.

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

* Same website: use different AI Agents on different landing pages (same Project ID, different Department IDs).
* Different websites: use different AI Agents and different Projects (different Project IDs and Department IDs).

## Steps

{% stepper %}
{% step %}

### Create a Department for the AI Agent

* Go to **Settings → Routing and Departments**.
* Create a new Department and connect it to the AI Agent you want as the default experience.
* Copy the **Department ID** generated by Tiledesk.

<figure><img src="/files/aHV7udLgOta4QhDmjYZC" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Hide the Department (optional)

If you want the AI Agent to start in the background without showing that Department in the widget selector:

* In the Departments list, click the blue button **Make invisible**.
* The Department will be hidden from the widget menu, but it will still work when used in the installation snippet.
  {% endstep %}

{% step %}

### Install the widget with projectid and departmentID

Add this snippet on the pages where you want a specific AI Agent to be the default. Replace `YOUR_PROJECT_ID` and `YOUR_DEPARTMENT_ID` with your values.

{% code title="widget snippet" %}

```html
<script type="application/javascript">
  window.tiledeskSettings = {
    projectid: "YOUR_PROJECT_ID",
    departmentID: "YOUR_DEPARTMENT_ID"
  };
  (function(d, s, id) {
    var w = window;
    var d = document;
    var i = function() { i.c(arguments); };
    i.q = [];
    i.c = function(args) { i.q.push(args); };
    w.Tiledesk = i;
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s);
    js.id = id;
    js.async = true;
    js.src = "https://widget.tiledesk.com/v6/launch.js";
    fjs.parentNode.insertBefore(js, fjs);
  }(document, "script", "tiledesk-jssdk"));
</script>
```

{% endcode %}

Important: On a single page, load only one Tiledesk widget snippet to avoid conflicts.
{% endstep %}
{% endstepper %}

## Common scenarios

### Scenario A: Different AI Agents on different landing pages (same website)

* Keep the same `YOUR_PROJECT_ID`.
* Use a different `YOUR_DEPARTMENT_ID` on each landing page.
* Result: each page opens a different AI Agent journey.

### Scenario B: Different AI Agents on different websites

* Use the correct `YOUR_PROJECT_ID` for each website (each website can have its own Project).
* Set the related `YOUR_DEPARTMENT_ID` for the AI Agent you want as default on that website.
* Result: each website can have its own default AI Agent and configuration.

## Alternative approaches

### Option 1: Enable disabled Departments

If the Departments linked to your AI Agents are currently disabled, the widget may not be able to start the chat from a `departmentID`. In this case, enable the Departments you want to use and then keep using the `departmentID` in the snippet.

Note: If you enable more than one Department, on pages where you do not specify `departmentID` the widget can show a Department selection step, because multiple active Departments are available.

### Option 2: Use `participants` instead of `departmentID`

If you prefer not to use `departmentID`, you can start the chat with a specific bot using the `participants` parameter. Set it to `bot_<BOT_ID>`.

{% code title="participants example" %}

```javascript
window.tiledeskSettings = {
  projectid: "YOUR_PROJECT_ID",
  participants: "bot_YOUR_BOT_ID"
};
```

{% endcode %}

Crucial note for Option 2: With `participants`, the conversation is still assigned to the default Department, but it is managed directly by the selected bot.

## Notes and limitations

* Widget design (colors, logo, launcher style) is shared inside the same Project. If you need different widget designs, use different Projects.
* If you hide a Department using **Make invisible**, users will not see it in the widget menu, but the widget can still start from it via `departmentID`.

Need help? [Contact the Tiledesk team](mailto:support@tiledesk.com).


# Actions explained

[Reply Action](/ai-chatbots-and-automation/actions-explained/reply-action)

[ChatGPT Task](/ai-chatbots-and-automation/actions-explained/chatgpt-task)

[Web Request Action](/ai-chatbots-and-automation/actions-explained/web-request-action)

[Send Email](/ai-chatbots-and-automation/actions-explained/send-email)

[Qapla’](/ai-chatbots-and-automation/actions-explained/qapla)

[Brevo](/ai-chatbots-and-automation/actions-explained/brevo)

[Code Action](/ai-chatbots-and-automation/actions-explained/code-action)

[Make.com Action](/ai-chatbots-and-automation/actions-explained/make.com-action)

[AI Prompt (Multi-LLM)](/ai-chatbots-and-automation/actions-explained/ai-prompt-multi-llm)

[Transfer to a Human](/ai-chatbots-and-automation/actions-explained/transfer-to-a-human)

[Hidden Messages](/ai-chatbots-and-automation/actions-explained/hidden-messages)

[Wait Action](/ai-chatbots-and-automation/actions-explained/wait-action)

[Random Reply](/ai-chatbots-and-automation/actions-explained/random-reply)

[Ask Knowledge Base](/ai-chatbots-and-automation/actions-explained/ask-knowledge-base)

[Replace AI Agent action](/ai-chatbots-and-automation/actions-explained/replace-ai-agent-action)

[Add Tag](/ai-chatbots-and-automation/actions-explained/add-tag)

[Capture User Reply Action](/ai-chatbots-and-automation/actions-explained/capture-user-reply-action)

[n8n.io](/ai-chatbots-and-automation/actions-explained/n8n.io)

[HubSpot](/ai-chatbots-and-automation/actions-explained/hubspot)

[ChatGPT Assistant (beta)](/ai-chatbots-and-automation/actions-explained/chatgpt-assistant-beta)

[How to manage an inactive chat](/ai-chatbots-and-automation/actions-explained/how-to-manage-an-inactive-chat)

[If Online Agent](/ai-chatbots-and-automation/actions-explained/if-online-agent)

[Close Action](/ai-chatbots-and-automation/actions-explained/close-action)

[Change Department](/ai-chatbots-and-automation/actions-explained/change-department)

[Move to Unassigned Action](/ai-chatbots-and-automation/actions-explained/move-to-unassigned-action)

[Clear Transcript Action](/ai-chatbots-and-automation/actions-explained/clear-transcript-action)

[Send Whatsapp message](/ai-chatbots-and-automation/actions-explained/send-whatsapp-message)

[Add to Knowledge Base Action](/ai-chatbots-and-automation/actions-explained/add-to-knowledge-base-action)

[Condition Action](/ai-chatbots-and-automation/actions-explained/condition-action)

[AI Condition](/ai-chatbots-and-automation/actions-explained/ai-condition)

[If operating hours](/ai-chatbots-and-automation/actions-explained/if-operating-hours)


# Reply Action

The “core” of conversational automations

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

The Reply action is the “core” of conversational automations. It helps you to correctly reply to the user creating what, in fact, is the perceived end-user UI on his chat application. The Reply Action can send to the user different pieces of contents, some non-interactive as simple text or images, some others interactive like buttons or carousels. It can also send back to the user multimedia contents like video or (it depends by the channel obviously) entire small web applications contained inside an iframe.

Moreover consider that all the components sent back to the user can adapt automatically to the channel that the user is using to chat. For example, Whatsapp chats only support up to three buttons, but if you send more than three buttons the reply adapts the conversation automatically to show the buttons with a pop-up over menu instead of single buttons. Some other channels don't support buttons at all (i.e. SMS) and the Reply does an additional effort to apply more "energy" in inventing a solution for you, for example auto-creating a number based menu with all the options.

It's time to see how the Reply action works.

When you work with replies (and other Actions) you will always have two different “views” of the action.

1. Action preview
2. Action editor

The **Action preview** represents a syntetic view of the action inside the stage. It is very useful to have a good preview of the action in the stage to a get a good understanding of the whole flow when you have many blocks. Some action previews, like the Reply Action itself, are also interactive. For example you can easily create and connect a button directly from the preview, without the need to open the editor.

The **Action Editor** represents the detailed view of the action and allows you to edit and set up your actions with all the needed and supported details.&#x20;

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

### Text replies

If you want to reply simple text the default Reply dragged on the stage is ready for the task. You only have to fill out the shown text field with the desired phrase:

<figure><img src="/files/02SckoLlBssKX4wa5DEG" alt=""><figcaption></figcaption></figure>

Let's try. Test it!

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

We got our text as the welcome message.

### URL Preview

The **URL Preview** option allows you to add one or more source links to a Reply Action.

You can use it to show users pages or documents related to the answer when the reply is generated with the [Ask Knowledge Base](/ai-chatbots-and-automation/actions-explained/ask-knowledge-base)action.

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

#### Add URL previews

To add a URL preview:

1. Open the **Reply Action**.
2. Click the **URL Preview** option.
3. Choose how you want to provide the URLs.

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

Tiledesk supports three ways to add URL previews:

#### JSON Sources

Use **JSON Sources** when you want to display the accurate source URLs of the documents used to generate an AI response.

To use this option:

1. Open the linked **Ask Knowledge Base** action.
2. Go to the **AI settings**.
3. Enable **Get contents sources**.
4. In **Assign KB JSON Sources to**, add the attribute where the source URLs will be saved.\
   For this tutorial, we use:
5. Go back to the Reply Action.
6. Select **JSON Sources** in the URL Preview section.

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

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

Once configured, the Reply Action can display the source URLs used to generate the response.

#### Text

Use **Text** when you want to manually add one or more URLs.

Add a list of valid URLs separated by a space.

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

#### Form

Use **Form** when you want to add URL previews manually with more details.

For each link, you can add:

* **Link**: the URL you want to display
* **Title**: the title of the page
* **Description**: a short description of the page
* **Image URL**: an optional image to show in the preview

To add more links, click **Add** and complete the fields for each URL.

This option is useful when you want full control over how the link preview appears to the user.

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

### Images

Adding an image to your reply is very easy too. Simply use the toolbar and click on the image icon. An image component will be appear in the reply. You can now set up your image uploading it directly from your device.

<figure><img src="/files/0Cu175z9inx9vdaanC2m" alt=""><figcaption></figcaption></figure>

Setup your image.&#x20;

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

Test it again. Your image displays in the welcome message.

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

We now have our image following our text.

### Buttons

Buttons, also known as Quick replies, are a main element in user interaction. They provide the user a quick way to reply to your chatbot. You can add one or more buttons attached to some reply elements (text, images, frames etc.).

Buttons can three main actions in Tiledesk:

1. Move to another block
2. Send a predefined text
3. A clickable web url shaped like a button

You can add a button in two main ways.

1. Adding a button from the Reply action editor
2. Adding a button from the preview

#### **Adding a button from the Reply action editor**

When in the editor, you can easily add a button pressing the + Add button placeholder below the selected element. In this example we'll add a button attached to the welcome message.

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

As soon as you click a button is added with a basic prefilled text “Button”. You can change the text of the button clicking on it. The button detail editor appears, where you can choose the text of you button and his type. We'll talk about button types later. For the moment we will limit ourselves to change the button name. For example “Support” (an ideal button that can move the user to another “Department”). We can leave the standard type “text” for the moment. This means that the text of the button will be sent back to the chatbot as soon as the user clicks on it.

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

We can see this in action. Just press the the Test button and let's see what happens:

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

The button appears following the text reply. If you press the button you will get a default message of “not understanding” what you said. This is because no blocks were trained with the text sent by the button and when this happens the defaultFallback block is automatically executed (the defaultFallback block was also available in the previuos designs images, I simply hide it for the sake of semplicity). Let's try:

<figure><img src="/files/85X7rVS2Yxhfk1zOb9vN" alt=""><figcaption></figcaption></figure>

Now we can try to add a new reply action on the stage and connect it to the button. Open the Actions menu on the left and drag the action on the stage:

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

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

As soon as you release your mouse button a new block is put the the stage with a Reply action inside. We can customize the action with a welcome message for the Support department:

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

But how to connect the button to the block? Simply click on the Support button. The button detail editor will open:

<figure><img src="/files/4vuAjFbSlMaCFVpI89iJ" alt=""><figcaption></figcaption></figure>

Now change the button type to “go to clock” from the Type selector. The Go to block selector appears. Find the destination block of the button from the list. In our case it is “Support flow”.

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

As soon as you choose the destination block an arrow appears on the stage (3) connecting the button directly to the block.

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

Running the flow we will get the block replying with the configured text inside as soon as we press the Support button:

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

#### **Adding a button from the preview**

You can easily add a button from directly from a reply action on the stage. Press “Add button” directly and a button will be added. You can now connect the button to the block you want simply clicking on the small button tag on the left and then dragging the row to the selected block.

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

Once connected you can setup the button name simply clicking on it, using the button editor that will appear on the right of the stage:

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

### JSON Buttons

You can dynamically render your buttons using JSON. This feature is useful when you don't know your buttons at design-time and you need to render your buttons - for example - based on a Web Request action reply.

There are many type of buttons supported by Tiledesk.

1. Action buttons: used to directly connect to a block
2. Text buttons: these buttons simply mimic the end-user typing some text. Its' up to the flow to manage the text reply
3. URL Buttons

**Action buttons**

You can configure the buttons using the basic JSON structure documented [here](https://developer.tiledesk.com/widget/advanced/widget-json-protocol#action-buttons).

Here follow an example. An action button directly connects to a block using the block name as shown in the following figure. **Once you connect the button to the block pay attention in renaming the block title, because the button will not work anymore**.

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

For fast prototyping purposes it's useful to know that your static buttons simply became grayed while you have JSON Buttons active. This is useful if you want to see a graph with some connectors active, despite the fact that those connectors will be later dynamically rendered using the JSON Buttons section, as in the following picture:

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

Attributes in JSON Buttons.

You can also use attributes to render JSON Buttons. Attributes can be set in a Code Action or a Set Attribute as in the following example:

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

Once you define your JSON you can render your buttons in the JSON Buttons section using your attribute:

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

If your attribute is a real JSON (not a stringified JSON) don't forget to use the modifier (we use [LiquidJS](https://liquidjs.com/filters/json.html) to render attributes)

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

### Carousels (Gallery)

A gallery in Tiledesk (aka **Carousel)** is an interactive message made up of a sequence of scrollable “cards,” each containing an image, title, description, and action buttons.

<figure><img src="/files/8fThV3PGguqb06VwpOd9" alt="" width="375"><figcaption></figcaption></figure>

\
It’s especially useful in contexts like **e-commerce (i.e. Shopify)** because it allows you to showcase multiple products or options in a compact way, helping customers make choices without leaving the chat.

With a carousel you can, for example:

* Quickly present a selection of featured products
* Suggest related items during customer support
* Guide users toward purchase with buttons that link directly to the product page or add items to the cart

### Static Carousels

Static carousels are useful as a prototype tool. You can configure it fast to showcase your clients simple demos of your ecommerce agents. If you are getting dynamic lists of products and you want to use a carousel you must use a dynamic carousel (JSON Gallery)

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

Press the Gallery button on top of the Reply components toolbar

<figure><img src="/files/K6qssBT5asvQUzNsTPXX" alt="" width="375"><figcaption></figcaption></figure>

You can now add cards with prevew, description and a buttons of various types.

<figure><img src="/files/1uIqV8hQaCb54D36ywMU" alt="" width="375"><figcaption></figcaption></figure>

Getting the following as final result

<figure><img src="/files/jienLd4VsxZFaUT9Z0pB" alt="" width="375"><figcaption></figcaption></figure>

### Dynamic Carousels

Once you add a Gallery element, press JSON gallery:

<figure><img src="/files/bP7sFf3hcFc2gvoP855f" alt="" width="375"><figcaption></figcaption></figure>

Now you have a text box where you can fillout your Dynamic JSON using the carousel's JSON syntax to dynamically render the product cards in Tiledesk:

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

The synthax has the following general specification:

```json
[
    {
        "preview": {
            "src": "Your card image URL"
        },
        "title": "The card title",
        "description": "The card description",
        "buttons": [] // the buttons array, follows the JSON Buttons syntax
    }, {...}
]
```

First consider that the cards list is a JSON array, so all the cards are embedded between \[ ... ].

Moreover it's important to note that buttons section follows the [JSON Buttons](#json-buttons) syntax.

You can find a complete [Carousel template](https://tiledesk.com/community/getchatbotinfo/chatbotId/6878ad0b1485170013edec5a-Carousel-demo-flow) in our community. Simply import the template and use it as a starting point.

Consider that we extensively support LiquidJS syntax in our text sections and so it does the JSON Gallery section. We already provide an example with LiquidJS supporting a products list iteration rendering a cards on the fly (see the above template).

```liquid
[
    {% for item in results limit:10 %}
    {
        "preview": {
            "src": {{item.imageURL | json}}
        },
        "title": {{item.name | json}},
        "description": {{item.description | json}},
        "buttons": [{"type": "url","value": "Buy","link": {{item.imageURL | json}}}]
    }{% unless forloop.last %},{% endunless %}
    {% endfor %}
]
```

### Filters

Filters are a special way to hide/unhide specific sections of a Reply Action based on flow attributes values.

You can use Filters to reduce the number of branching in the flow, simply building a Reply that automatically adapts the shown contents based on the values of some attributes.

A good Use case to understand Filters is for Multi language. You can create a single Reply “serving” multiple languages. In this way, when the Multi language use case is not too complex, you can approach a viable solution with Filters.

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

To better understand Filters we created a documented Agent in our community. Please take a look at the tutorial at the following URL: \
<https://tiledesk.com/community/search/getchatbotinfo/chatbotId/65acd812484b9f0013c13e9c-Multi-language-chatbot-example-using-Reply-Filters>

### Advanced Reply

Advanced Reply is a new Action that we developed to provide more control over the flow.

<figure><img src="/files/aJnpp02TnxrK57WcYCX5" alt="" width="375"><figcaption></figcaption></figure>

With Advanced Reply you have:

* User Input timeout
* Check on buttons matches the user input

#### No input

If the user doesn't reply into the specified amount of the you can take a specific action. This is extremily useful when, for example, you want to close a conversation after some inactivity period. A real game changer option for managing your conversations flow with your AI-agents.

<figure><img src="/files/04HK6l1mBoXlfXpw4cyb" alt=""><figcaption></figcaption></figure>

#### No match

We introduced the No match connector allowing your users to be able to reply not only clicking on a button but also writing the text inside.\
This is extremly useful especially on Whatsapp (or other external channels) where the user sometimes prefer to reply to a question writing a text instead of clicking the button.

With the new Reply you can also take a specific action when a written text doesn't match any of the buttons text. You can use the "no match" connector to manage this case with a specific flow.

<figure><img src="/files/OrWKHwOG7zXflR3rXyr2" alt="" width="375"><figcaption></figcaption></figure>

If you have questions about the Reply Action or other Tiledesk features feel free to send an email to [support@tiledesk.com  ](mailto:support@tiledesk.com)or leave us a [feedback](https://feedback.tiledesk.com/feedback)


# ChatGPT Task

Tiledesk Design Studio allows you to create chatbots that generate pertinent responses using the ChatGPT Task feature. With this feature, you can enhance your conversation flow with the power of ChatGPT. Some use cases for this feature include:

* Generating answers based on customer feedback
* Prioritizing and categorizing customer inquiries
* Sentiment analysis
* Generating emails and much more

This feature enables you to leverage the power of different OpenAI models, including the most recent one - ChatGPT-4o, to make your conversations more diverse, human-like, and automate many manual tasks.

{% embed url="<https://www.youtube.com/watch?v=m_gk1nnaYCg>" %}

#### How to Use ChatGPT Task in a Conversation Flow[#](https://gethelp.tiledesk.com/articles/learn-how-to-use-the-chatgpt-task-feature/#how-to-use-chatgpt-task-in-a-conversation-flow) <a href="#how-to-use-chatgpt-task-in-a-conversation-flow" id="how-to-use-chatgpt-task-in-a-conversation-flow"></a>

Before you start, it’s essential to have a clear use case in mind. For this example, let’s say you want to create a bot that handles feedback requests.

\
First, navigate to the [Tiledesk dashboard](https://panel.tiledesk.com/v3/dashboard/#/projects) and then to the Design Studio.&#x20;

Next, we need to create a new attribute to record the user feedback. To do this, ask the user, “How did you find our support team?” and then use an action called “[Capture User Reply](/ai-chatbots-and-automation/actions-explained/capture-user-reply-action)” to save the user’s response in a new attribute called.

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

That's it! You've successfully created a chatbot with Tiledesk Design Studio that uses the GPT Task feature to generate pertinent responses based on customer feedback. This can greatly enhance your chatbot's ability to provide relevant and context-aware responses to users.

Next, drop the “ChatGPT Task” into a new block. By clicking on the block, a right top-up menu will appear, allowing you to insert your prompt. Use the following prompt:

*Try to generate a short and pertinent response to our customer feedback, which is.*

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

\
By clicking on the AI settings in the right-side menu, you can define the OpenAI model you prefer and the number of AI tokens.&#x20;

Decide the maximum number of tokens you want the GPT response to have.&#x20;

Tokens are chunks of text, and limiting their number can help control the length of the generated responses.&#x20;

Determine whether you want shorter or longer responses based on your use case. For example, if you want concise responses, you might set the max number of tokens to 50. If you want more detailed responses, you can set it to a higher value, like 150.

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

Next, create a “[Reply](/ai-chatbots-and-automation/actions-explained/reply-action)” action with the GPT attribute.&#x20;

Create a new block or use an existing one where you want to generate GPT responses. Within the block, create a “Reply” action to generate the response. In the “Reply” action, add the attribute to store the generated response.

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

Test your chatbot to ensure it generates pertinent responses based on customer feedback. Provide feedback in the chat to see how the GPT-generated response is handled.

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

I hope you found this helpful.&#x20;

If you need assistance, do not hesitate to contact us via <support@tiledesk.com>.&#x20;

For more details, please visit [www.tiledesk.com](https://tiledesk.com/).&#x20;

If you haven’t created your free account yet, [start here](https://panel.tiledesk.com/v3/dashboard/#/signup).


# Web Request Action

The Web Request action is a fundamental component to connect with your own APIs and third party applications.

Web Request action supports many HTTP methods and allows you to invoke REST APIs, sending and receiving data in text and JSON formats. You can use the flow's attributes as data, put them in the JSON payload or in headers. You can also assign data coming from your API requests back to your attributes, in both text and JSON formats.

Let's take a look at the Web Request anatomy:

<figure><img src="/files/9y0Oozjyvf6ZqnvTIeaU" alt=""><figcaption></figcaption></figure>

The Web Request, when invoked, automatically executes the HTTP request using the settings that you see in the picture above. The result is automatically assigned to the “result” attribute. You can optionally remove all the default response attributes - *result*, *status* and *error* - and rename them as you prefer.

#### Setup the Request's URL <a href="#setup-the-requests-url" id="setup-the-requests-url"></a>

The top section of the Web Request is the place where you setup your HTTP Method + URL endpoint address of your API invocation. You can select your preferred HTTP method choosing one from the methods dropdown menu.

You can also setup your URL. This can be a totally static piece of text or include some dynamic parts. Take care of url-escaping your attributes to be suitable for a URL composition. You must use the for your url parameters to keep them consistent with the HTTP URL request specification, as in the following example:

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

#### Setup the Request <a href="#setup-the-request" id="setup-the-request"></a>

The other important part of Web Request is the **Body section**. Here you setup your JSON to send to your API endpoint. If you set the JSON payload take care to check that the corresponding "Content-type" header will be automatically set to “application/json”.

#### **Working with your JSON body**

You can setup your JSON body in the “Body” tab of your Web Request Action, like in the following figure:

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

Rarely the JSON body for your API endpoint is a simple static document with fixed data. You often want this structure to be dynamic using the attributes that you collected during your flow (i.e. attributes coming from user interactions like Set Attribute or [Capture User reply](/ai-chatbots-and-automation/actions-explained/capture-user-reply-action) or from other API calls using the Web Request action itself).

In your JSON you can set attributes of various types:

1. String or Numeric attributes
2. JSON format attributes
3. Sub-properties of JSON attributes

As you can see in the image below, feel free to use your flow attributes in your JSON payload, but always use the syntax (we use [LiquidJS](https://liquidjs.com/filters/json.html) for attribute rendering) , to correctly render the attribute in the JSON document based on his native type. With this syntax, the render engine will treat the attribute in the right way, adding quotes for strings and removing them for JSON or Numbers, as in the following example:

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

> Take note that it is unnecessary to wrap Attributes fo type "string" in the quotations since the LiquidJS *json* filter we used before will add them for you, if necessary. This filter also **escapes quotes as needed** inside those outputs.

You can also use sub-properties of your json attributes. As in the following case we used *user.name* and *user.city* of the “user” JSON attribute.

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

#### **Working with files**

You can send files to your API endpoints. Simply move to the *form-data* tab. Use the multi-field section to upload your files. You can send text or a file gor from a publicly accessible URL.

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

#### **Get Web Request output**

You can get back your data from the remote services invokation in *text* or *JSON* format. These two are actually the only supported formats available.

The data type is automatically decoded by the response content-type.

In the case of JSON you can get sub fields of your JSON structure using the “." notation, as highlighted in [Attributes](/ai-chatbots-and-automation/visual-builder-101/flows-attributes).&#x20;

For practical reasons we prepared a tutorial in our community, that you can import with a simple click.

#### Tutorials <a href="#tutorials" id="tutorials"></a>

You can find some interesting tutorial (that you can import with just one click) on our community. There are many tutorials using the the Web Request but the following two are designed for an easy quick start.

Web Request tutorial for POST method (in our community): [Connect to Hubspot using a Web Request](https://tiledesk.com/community/getchatbotinfo/chatbotId/659854dc1164bb0013a0bd4e-Collect-Data-and-send-to-HubSpot-through-a-Web-Request-Action).

Web Request tutorial for GET method (in our community): [Weather.com API call to get city conditions info](https://tiledesk.com/community/search/getchatbotinfo/chatbotId/65a0298effd9e300139ec847-Weather-com-API-call-to-get-city-conditions-info--Demo-for-Web-Request-Action-GET).

If you have questions about the Web Request or other Tiledesk features feel free to send an email to <support@tiledesk.com>


# Send Email

In Tiledesk, you have plenty of actions that make your conversation flow more natural. Some of these actions also automate the human agent’s workflows.&#x20;

One such action is “Send Email”.  This action is helpful for businesses from different industries.&#x20;

Imagine an e-commerce site that requests a lead’s email address and automatically sends a promo code via email. Alternatively, consider a business that needs to send a confirmation email to its customers.

All these processes can be automated simply, with no human action required.

Okay, let’s dive into it.

First, you need to head to the [Tiledesk dashboard](https://panel.tiledesk.com/v3/dashboard/#/signup) and then select the bot you want to use. Enter the Design Studio.

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

To explain this action, I will create a very simple flow to show you how it works.&#x20;

First, I will add “[Capture User Reply](/ai-chatbots-and-automation/actions-explained/capture-user-reply-action)” to ask for leads’ contact email addresses, as you can see in the image below:

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

Then, drag the “Send Email” action from the right-side menu and create a new [Block](https://gethelp.tiledesk.com/articles/how-to-create-blocks/) for it.&#x20;

<figure><img src="/files/5hnIbU0Ds19KGPKRdPwn" alt=""><figcaption></figcaption></figure>

By clicking on the “Send Email” action, a popup setting will appear on the right side of the page. From there, you can define the email address to which you want to send the email (which we asked before).&#x20;

By clicking on the attribute icon, you need to select .

For the subject of the email, I will say “Tiledesk Support Team”.

The next placeholder is "Reply To", which means if the user replies to your email, it specifies which email address will receive the user’s response.

And the last one is the “Body”, where I simply write:&#x20;

*Dear ,*&#x20;

*Here is your discount code: TY2024.*&#x20;

*Best regards,*&#x20;

*Saeid and the Tiledesk Team.*

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

\
I will add another Block to finish the conversation with the final message and “Wait” and “Close” actions.

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

That’s all, this flow will ask for the user’s email and share an email with a promo code right away, as you can see in the image below:

<figure><img src="/files/7tSYU5Jyk8ZP47mpSaV9" alt=""><figcaption></figcaption></figure>

Hope you find it helpful. If you need further assistance, contact us via <support@tiledesk.com>.

If you need an AI agent that truly saves on your customer and human agent time, [**start here**](https://panel.tiledesk.com/v3/dashboard/#/signup).

To get more information about our services, visit: [www.tiledesk.com](https://tiledesk.com/)


# Qapla’

With the Qapla’ integration, you can streamline your ecommerce customer support by automating responses to common tracking inquiries such as “Where is my parcel?” and “When will my package arrive?”.&#x20;

This integration allows your AI agent to instantly and accurately provide the status of your customer’s parcel using only the tracking number.

Let’s see how to integrate your Tiledesk AI agent with Qapla’. The good news is that this native integration can be activated with just a few clicks.

**1- Start on the Tiledesk dashboard:**&#x20;

First, head to the [Tiledesk dashboard](https://panel.tiledesk.com/v3/dashboard/#/signup) and create a block to ask for the tracking number.

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

**2- Assign the tracking code to a new attribute**:&#x20;

Next, assign the tracking code to a new attribute, which we’ll call “TrackingNumber”. To do this, select the “Capture User Reply” action and define a new attribute for it.

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

**3- Select Qapla’ among the integrations**:&#x20;

The next step is to select Qapla’ from the list of integrations.

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

**4- Configure Qapla’ integration**:&#x20;

This integration requires two parameters. The first one is the tracking number of the user’s package, which we’ve already asked for. The second one is the Qapla’ API key, which you can add using the “Manage Integration” option, as shown in the image below.&#x20;

<figure><img src="/files/7zou8O8kDPDByKhP6KNH" alt=""><figcaption></figcaption></figure>

After entering the API key, simply click on Save.&#x20;

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

If you need assistance obtaining your Qapla’ API code, [this article](https://api.qapla.dev/1.2/en/) can help you.

**5- Use a condition in our flow**:&#x20;

Now, it’s time to use a condition in our flow to check if the given tracking code exists in the Qapla’ database. To do this, we’ll drag the action called “Condition w/else”.

Click on “Add new condition” and select the predefined attribute called . Then click on “=equal as Text” among the conditions and type “OK” in the value. This condition determines if the TrackingNumber exists in the Qapla’ database or not, with “OK” meaning that the code exists.

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

**6- Set up success and failure paths**:&#x20;

From the green endpoint (which signifies success), continue the flow to a new reply block where we will share the status of the package with another predefined attribute called.

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

There might be instances where the “TrackingNumber” cannot be found in the Qapla’ database, due to a typo or other reasons. For this scenario, we continue the conversation from the red endpoint of the condition block and ask the user to contact the support team, or re-enter the tracking number.

Thank you for reading! I hope you find this tutorial helpful.&#x20;

To start your journey, head to your [Tiledesk dashboard](https://panel.tiledesk.com/v3/dashboard/#/signup).&#x20;

If you need any support for this integration, do not hesitate to contact us at <info@tiledesk.com>.


# Brevo

#### Intro <a href="#intro" id="intro"></a>

With this action, you can directly invoke Brevo automation from Tilesdesk. This integration allows Tilesdesk to automatically create a new contact in Brevo.

#### Get an API Key from Brevo <a href="#get-an-api-key-from-brevo" id="get-an-api-key-from-brevo"></a>

Click on your profile name in the upper right corner and pick SMTP & API option from the drop-down menu. Then choose the API Keys tab and create your API key.&#x20;

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

Once copied, paste the API Key in the Integrations section under Settings, as below.

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

#### Get the Brevo Action from the Design Studio <a href="#get-the-brevo-action-from-the-design-studio" id="get-the-brevo-action-from-the-design-studio"></a>

Once in the Design Studio, simply drag & drop the Brevo action on the canvas from the side menu “Integrations”, as shown in the picture below:

\
&#x20;

<figure><img src="/files/1V20vRdeFXWb7pfn2xfv" alt=""><figcaption></figcaption></figure>

Once you drag the action you can configure it. The main part is to set up the Brevo webhook and populate all the fields to send to the Brevo API endpoint using the right flow attributes:

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

In the following example, we configure four fields: first name, last name, and email address, as well as the telephone number (SMS), for the contact that will be created in the Brevo database.&#x20;

A new contact will be transmitted to Brevo with the values "custom\_firstname", "custom\_lastname", "custom\_email" and “custom\_SMS”. The Brevo action will trigger a Brevo API call (<https://api.brevo.com/v3/contacts>), which will create a new contact using the transmitted information.

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

You can connect various blocks to extend the automation's actions created on Brevo. Specifically, two blocks can be linked with the Brevo block, which will trigger upon the success or failure of the webhook invocation on the Brevo platform. In the example depicted in the image below, we've merely connected two blocks to the Brevo block: "Brevo ok" and "Brevo fail," which handle the information sent to and received from the Brevo API, respectively.

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

#### How to retrieve the result of the invoked automation <a href="#how-to-retrieve-the-result-of-the-invoked-automation" id="how-to-retrieve-the-result-of-the-invoked-automation"></a>

To view the response from the invoked automation, you need to open the "Advanced" section within the "Brevo" block and assign a new variable to the "Assign result to" field, naming it, for example, "Brevo\_result". Upon completion of the execution, the created variable will be populated with the JSON formatted result of the automation.

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

The automation creates a new contact in the Brevo database and returns the inserted information to Tilesdesk in the 'Brevo\_result' variable as JSON data.

<figure><img src="/files/8axhESDaDoARl7SB5lOc" alt=""><figcaption></figcaption></figure>

The following is a contact created in the Brevo database using the automation described in this article.

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

If you have questions about the Brevo Action or other Tiledesk features feel free to send an email to [support@tiledesk.com  ](mailto:support@tiledesk.com)or leave us [feedback](https://feedback.tiledesk.com/feedback).


# Code Action

The Code Action provides a great method to maximize your flows flexibility using Javascript language.

The language you can use is actually Javascript. We plan to add more languages in the future, starting with Python support.

You will mainly use the Code Action to develop “low code” automation when you need advanced features only provided by a programmatic approach. Keep in mind that **no async features are allowed**. You can only use synchronous coding. If you need to get some data from a remote web services you can do it prepending a Web Request action to the Code Action.

Use **context.attributes.KEY** or **context.attributes\[KEY]** to read the value of a flow attribute

Ex.

```
let age = context.attributes.age;
```

Use **context.setAttribute(KEY, VALUE)** to set the value of an attribute

Ex.

```
context.setAttribute('age', 35);
```

In the following example published on Tiledesk Community you can test how the Code Action works.

[Community Code Action example](https://tiledesk.com/community/search/getchatbotinfo/chatbotId/65d12ff648cc2800132cd27e-Code-Action-basic-example)

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

In this example we execute a couple of tasks:

1. Modify the existing “age” attribute set up using the Set Attribute action (age = 2)
2. Add a totally new attribute (jsondata) to the flow

You are able to see the result printed in the reply:

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

**Use case: A/B testing with Code Action**

Take a look at this Community Chatbot to create an A/B testing chatbot using the Code Action.

<https://tiledesk.com/community/search/getchatbotinfo/chatbotId/6622718217940b00137de783-Chatbot-A-B-test-with-Code-Action>

If you have questions about the Code Action or other Tiledesk features feel free to send an email to [support@tiledesk.com  ](mailto:support@tiledesk.com)or leave us [feedback](https://feedback.tiledesk.com/feedback).


# Make.com Action

With the Make.com Action you are able to invoke Make.com automations directly from TIledesk.

Simply drag & drop the Make.com action on the stage from the side menu, as show in the picture belok:

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

Once you drag the action you can configure it. The main part is to set up the Make.com webhook and populate all the fields to send to the Make webhook endpoint using the right flow attributes:

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

In the example above we set up an email field to be sent to Make with the value of “userEmail”.

You can connect arbitrary blocks to continue the Make action in the cases of success of failure of the Make webhok invocation. In the example in the picture above we simply connected a couple of Reply actions.

You can find more info, with a video explaining all the details of how to correctly setup a Make integration using the article here:&#x20;

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

[Connect Your Tiledesk Bot to Thousands of Apps Using Make.com](/other-integrations/connect-your-tiledesk-bot-to-thousands-of-apps-using-make.com)

If you have questions about the Make.com Action or other Tiledesk features feel free to send an email to [support@tiledesk.com  ](mailto:support@tiledesk.com)or leave us [feedback](https://feedback.tiledesk.com/feedback)


# AI Prompt (Multi-LLM)

This action is suited to execute LLM-prompts with MCP support from multiple AI Providers, including on-prem once based on Ollama/vLLM. [LLMs Full list](#supported-llm-providers-and-models).

### How to configure and use the action <a href="#how-to-configure-and-use-the-action" id="how-to-configure-and-use-the-action"></a>

Drag & Drop the Action from the actions palette on the left to the stage:

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

Once on the stage you can configure your favourite LLM prompt using the action detail panel.

<figure><img src="/files/7ppI9Ps1tDECINsQgK92" alt=""><figcaption></figcaption></figure>

To properly use you Action you need to configure your LLM models in the Settings > Integrations section, provinding the corresponding LLM API-KEY.

E.g. for Google Gemini:

<figure><img src="/files/9ssxHbQKOWDVfzD8V0cY" alt=""><figcaption></figcaption></figure>

### Using Ollama with Action PromptAI <a href="#using-ollama-with-action-promptai" id="using-ollama-with-action-promptai"></a>

As with others LLMs, in order to use Ollama with the PromptAI action, you need to configure the Ollama Integration on Tiledesk by going to Settings → Integrations, entering:

* The URL of the machine where Ollama is running
* (Optional) Your favorite models to use for a faster action configuration

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

To add a model to your Favorites List, type the exact model name and press the Enter button. Finally save the settings clicking on **Save** button.

In the PromptAI action, select Ollama as LLM and choose a model between the predefined favorite models

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

### MCP support

MCP tools are fully supported in your AI Prompt action.

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

You can add as many tools your current selected model supports using the " + Add MCP tools" button in the AI Prompt detail panel, just under the prompt section.

Once you press the button a popup appears where you can add the tools. Simply choose a name for your tool and fill the corresponding MCP endpoint URL. Consider that actually only MCP of type HTTP streamable are supported.

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

Add your own tools pressing the "Add MCP Server" button on the bottom of the MCP popup, then fll out the MCP server form to setup your tool

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

We hope you enjoy our new Action that will let you use your favourite LLM provider and models!

If you have questions about the AI Prompt Action or other Tiledesk features feel free to send us an email to [support@tiledesk.com  ](mailto:support@tiledesk.com)or leave us [feedback](https://feedback.tiledesk.com/feedback)


# Transfer to a Human

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

When you need to handover a chat from a flow to a human operator (HITL: Human in the loop) this is the action that makes the work for you.

The easiest example is to use the action attached to a button to allow the end-user to “Talk to a human” whenever they want.

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

To create this flow simply drag & drop the Human handover from the side menu to the stage.

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

Once connected to a button (or whatever block in the flow) this action will move the flow to an available agent, if any. If no agents are available the action will automatically be moved to the *unassigned* status and put in the *unassigned queue*.

If no [Smart Assignment](/manage-your-workspace/setting-up-automatic-assignment) is active the only variable checked for assignment is the Agents' *avaialble status*. The chat will be moved to the first available following a round-robin alghorithm.

Instead, when Smart Assignment is active, also the *Maximum chats* (see picture below) option of the Smart Assignment module setting will be checked.

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

If no agents are available the chat will be again put in the Unassigned status (you'll see the chat in the Monitor panel under the *Unassigned* section).

Using this Action along with [If Online Agents Action](/ai-chatbots-and-automation/actions-explained/if-online-agent) will give you the best results when no Smart Assignment is active.

When instead Smart Assignment is active sometimes the best approach is to always use the [Move to Unassigned Action](/ai-chatbots-and-automation/actions-explained/move-to-unassigned-action).

You can find a small tutorial on how to Transfer a chat to a human

Do you have any feedback on this article? Please send it to us at <info@tiledesk.com>

Enjoy Tiledesk!


# Hidden Messages

One of the actions categorized in the special section of Tiledesk Design Studio is the Hidden Message.&#x20;

This action allows you to send messages to the machine without being visible to the end customer.&#x20;

There are several applications for this action, such as conditional logic, data storage, and more.

#### &#x20;Step-by-step guide to using Hidden Messages[#](https://gethelp.tiledesk.com/articles/hidden-messages-and-how-to-use-them-in-design-studio/#step-by-step-guide-to-using-hidden-messages) <a href="#step-by-step-guide-to-using-hidden-messages" id="step-by-step-guide-to-using-hidden-messages"></a>

To use the hidden action, first, navigate to the Tiledesk dashboard and then to the Design Studio.&#x20;

For this example, I will evaluate the user’s email to determine if it is a company email. If it is, I will store it as the user’s company without sharing this information with the user.

To assess the user’s email, I need to use an action called “[ChatGPT Task](/ai-chatbots-and-automation/actions-explained/chatgpt-task)” and insert the following prompt in its prompt section:

*Analyze the email address provided by the user and respond only and exclusively with the name of their company if it is a business email.*

*The user's email is:*

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

Then, I will use the Hidden Message action and insert . In this scenario, we extract the user’s company from their email without sharing this information with the end user, as it is not necessary to share with them.&#x20;

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

In the next step, I will use another action called “Set attribute” to assign the user’s company name to a new attribute, as shown in the image below.

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

With this strategy, we can record the user’s company in a new attribute just by asking for their work email.

\
I hope you found this helpful.&#x20;

If you need assistance, do not hesitate to contact us via <support@tiledesk.com>.&#x20;

For more details, please visit [www.tiledesk.com](https://tiledesk.com/).&#x20;

If you haven’t created your free account yet, [start here](https://panel.tiledesk.com/v3/dashboard/#/signup).


# Wait Action

In today’s tutorial, I am going to show you how you can use the Wait action to make your conversation more human-like. The Wait action helps you introduce delays in providing responses or actions in the conversation flow, making your conversation feel more natural.

\
Imagine your customer wants to close the conversation, and you want to send a message like “goodbye” and then use the [Close action](/ai-chatbots-and-automation/actions-explained/close-action) to end the conversation.&#x20;

Without using the Wait action, your customer might not have enough time to read your message, and the conversation will be closed instantly. By using the Wait action, you can decide how much delay to introduce before the next action is triggered.

#### &#x20;How to use the Wait action in the conversation flow <a href="#how-to-use-the-wait-action-in-the-conversation-flow" id="how-to-use-the-wait-action-in-the-conversation-flow"></a>

To get started, head to the [Tiledesk dashboard](https://panel.tiledesk.com/v3/dashboard/#/projects) and, from the bot section, choose the bot you want to edit.

Then, simply drop the Wait action from the left side menu into the [Block](broken://pages/ZXxfwYY21Yz9PCv9X7ja) where you want to use the Wait action.

Next, click on the Wait action, and the right side menu will appear, allowing you to define the Delay Time, as shown in the image below.

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

That’s all!&#x20;

From now on, after the last message, the conversation will wait for 4 seconds before the next action is triggered.

Hope you found it helpful. \
For more details, please visit [www.tiledesk.com](https://tiledesk.com/).

To get started, [you can create a free account](https://panel.tiledesk.com/v3/dashboard/#/signup).

In case you have questions or need support, do not hesitate to contact us via: <support@tiledesk.com>\
&#x20;


# Random Reply

Would you like to make your conversation flow more dynamic? The Random Reply action can help you send back randomly selected messages chosen from a static set.&#x20;

This cool action allows you to define a set of responses, and the system will randomly pick one of them to share with customers.

#### Step-by-Step Guide to Using Random Reply in Action[#](https://gethelp.tiledesk.com/articles/how-to-use-the-random-reply-action-in-design-studio/#step-by-step-guide-to-using-random-reply-in-action) <a href="#step-by-step-guide-to-using-random-reply-in-action" id="step-by-step-guide-to-using-random-reply-in-action"></a>

To use this action, you need to select it from the left side menu and insert it into the block where you want to use it.

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

\
I will insert it in the first block to send different welcome messages to users.

As you can see in the image below, by clicking on the block, a new right-side menu will appear that allows you to insert different messages. I will add these to the system:

* *Hi there, thanks for visiting our website. How may I help you?*
* *Welcome, what brings you here today?*
* *Greetings! How can I assist you today?*
* *Hi! What can I do for you today?*

<figure><img src="/files/4xsDFhGuhDk8xxcv9yOs" alt=""><figcaption></figcaption></figure>

That’s all! Let’s test the bot by initiating the conversation twice.

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

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

As you can see, in each iteration, one welcome message has been sent to the user. Hope this helps!

To read more about AI agents, please visit [www.tiledesk.com](https://tiledesk.com/).&#x20;

To get started for free, [click here](https://panel.tiledesk.com/v3/dashboard/#/signup)

Also, if you have any questions, do not hesitate to contact us via <support@tiledesk.com>.


# Ask Knowledge Base

One of the most utilized features based on our customer experience is the “**Ask Knowledge Base”** action. This action is among the AI actions in the left side menu and is a free feature that you can use for your business.

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

#### When to use the Ask Knowledge Base action? <a href="#when-to-use-the-ask-knowledge-base-action" id="when-to-use-the-ask-knowledge-base-action"></a>

The **Ask Knowledge Base** action is a powerful feature that allows you to infuse your AI agent with specific data. This data can be your website URLs, sitemap, or files in different formats.

When you provide your content, the AI agent scans, crawls, and learns from the information available in that content. This could include details about your products, services, company history, and more. If you provide a sitemap, the AI agent understands the structure of your site and finds the information it needs more efficiently.

Once the AI agent is trained on your data, it can leverage this knowledge to answer customer inquiries independently. This means that instead of relying on pre-defined responses, the AI agent can generate answers based on the specific data it has been trained on. This allows for more accurate and context-specific responses.

#### How to use the Ask Knowledge Base action? <a href="#how-to-use-the-ask-knowledge-base-action" id="how-to-use-the-ask-knowledge-base-action"></a>

#### **Upload your content**:&#x20;

First, you need to upload your content on the Tiledesk system. Head to the [Tiledesk dashboard](https://panel.tiledesk.com/v3/dashboard/#/login), select “Knowledge Bases” from the left sidebar menu.

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

#### **Add your content**:&#x20;

When it comes to uploading content on the Tiledesk dashboard, the format you choose can impact how your information is communicated via the AI Agent. Here are some guidelines to help you select the best format for your needs:

**FAQs**: If you’re looking to upload Frequently Asked Questions (FAQs), you can simply copy and paste your questions and their corresponding answers one after the other into the plain text section. This classic Question/Reply format is simple, straightforward, and easy for the AI Agent to navigate.

**Company documents**: If you have company documents to share, these are generally in PDF or DOCX format. These formats are ideal for preserving the layout and formatting of your original documents, ensuring that your AI Agent can retrieve data and share it with customers.

**Published Knowledge Bases**: If you already have a published knowledge base, website URLs are your best option. You can simply paste the URLs in bulk. This allows users to access your existing resources directly, without the need for additional formatting or uploading.

Remember, after uploading your content, ensure that it’s indexed. A double blue tick on the Tiledesk dashboard indicates successful indexing. This means your content is now ready to be accessed by users.

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

#### **Create/Edit an AI Agent**:&#x20;

Now, it’s time to get back to the “**Flows**” to edit/create an AI agent to use this action in it.&#x20;

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

Then you will be redirected to the Design Studio, as shown in the image below

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

Locate the **"Ask Knowledge Base"** action in the left-hand toolbar under the **AI** category. Drag and drop it into the d**efaultFallback** block.

And remove the existing [Reply Action](/ai-chatbots-and-automation/actions-explained/reply-action) from the d**efaultFallback** block, as it is no longer needed.

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

#### **Ask Knowledge Base configuration**:&#x20;

When you click on the d**efaultFallback** block, a configuration menu will appear on the right side of the screen. This menu allows you to customize the **Ask Knowledge Base** action.

In the **Use Question** section, you'll notice that the default attribute is set to **LastUserText**. Just below that, there's an option to select a **Knowledge Base**. For this tutorial, we'll stick with the **default Knowledge Base**, but you're free to create and use custom ones depending on your needs.

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

There are also two attributes here: **kb\_reply**, which is the generated answer via your AI agent, and **kb\_source**, which is the source of the answer.&#x20;

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

These settings allow you to customize how your AI agent interacts with the knowledge base and presents information to the user.

#### **Configure AI settings:**&#x20;

You can also see an option for **AI Setting** configuration

**OpenAI Models:** You can choose from a variety of AI models depending on your needs. Alongside each model, you'll be able to view its **token consumption**, which helps you manage performance and cost.

Additionally, there's an option to define the **System context**, allowing you to tailor how the model interprets and responds to user input. This can be configured as shown in the image below. [You can read about the system context at the end of this tutorial.](/ai-chatbots-and-automation/actions-explained/ask-knowledge-base#advanced-context)

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

**Max Tokens**: This sets the total number of tokens you want to use when completing your prompt.&#x20;

**Temperature**: This setting influences the variability of your responses. A higher temperature increases variability, while a lower temperature yields more exact, prompt-focused answers.

**Chunk**: Your AI agent selects data “chunks” with the highest relevance to the question/prompt. Each chunk includes specific information that the bot is using to answer the user’s question.

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

Next, connect both the **green** and **red** endpoints to two separate @[Reply Action](/ai-chatbots-and-automation/actions-explained/reply-action)s:

* The green endpoint should be linked to a KB Reply. This will display the AI-generated response when the agent successfully finds an answer in the Knowledge Base.&#x20;
* You can also include the KB Source to share a reference or link, allowing users to read more if they’re interested. Keep in mind that this consumes more tokens than regular KB retrieving. Max-tokens quota will be automatically adjusted to get the citations if needed.
* The **red endpoint** should connect to a different Reply action that handles cases where the AI agent couldn't find any relevant information. This message can inform the user that no suitable answer was found.

This setup ensures a smooth and informative experience for both successful and unsuccessful query responses, as illustrated in the image below.

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

#### Testing the AI Agent <a href="#testing-the-ai-agent" id="testing-the-ai-agent"></a>

Now that we have uploaded our content in the system and used a ready-to-go chatbot template for it, it’s time to test the AI agent.&#x20;

As you can see, our AI agent has generated a welcome message and accurately answered my question based on the website URLs I uploaded on the system.

<figure><img src="/files/5CD5JqodMotekzJ1p7nj" alt=""><figcaption></figcaption></figure>

We hope this tutorial helps you in creating specified AI Agents.&#x20;

#### Advanced context <a href="#advanced-context" id="advanced-context"></a>

Whenever you use the Ask KB action, behind the scenes, OpenAI is invoked with a specific system context automatically created by Tiledesk. This context is a mix of the system context you provide (if any) and a hidden context instructing OpenAI on how to use the Vector Database chunks to create the final reply for your end-users.

With the Advanced context feature, you can directly manipulate the hidden context, improving the tuning of your replies when necessary. Keep in mind that the Tiledesk provided system context is already engineered to create the best possible answers. But sometimes this is not sufficient to address all your targets, so this feature comes really handy to overcome the perceived limits of Tiledesk pre-engineered prompts.

Another thing that you have to keep in mind is that each model (i.e., gpt-40, gpt-4o-min, etc.) has its own pre-engineered context. This is, for example, the system context that Tiledesk uses for the GPT-4o model.

gpt-4o pre-engineered system context used by the Tiledesk Ask Knowledge Base Action:

```
you are an helpful assistant for question-answering tasks. Follow these steps carefully:
1. If the question was in English, answer in English. If it was in Italian, answer in Italian. If it was in French, answer in French. If it was in Spanish, answer in Spanish, and so on, regardless of the context language
2. Use ONLY the pieces of retrieved context delimited by #### to answer the question.
3. If the context does not contain sufficient information to generate an accurate and informative answer, return <NOANS>
####{context}####
Let's think step by step.
```

The system context that you provide in the dedicated text area is appendend to the end of the pre-engineered context.

If for example you provide your own special system context:

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

The final context submitted to OpenAI will be something like the following:

```
you are an helpful assistant for question-answering tasks. Follow these steps carefully:
1. If the question was in English, answer in English. If it was in Italian, answer in Italian. If it was in French, answer in French. If it was in Spanish, answer in Spanish, and so on, regardless of the context language
2. Use ONLY the pieces of retrieved context delimited by #### to answer the question.
3. If the context does not contain sufficient information to generate an accurate and informative answer, return <NOANS>
####{context}####
Let's think step by step.
You are the online assistant of the "Assist Digital" Company. When someone asks you questions, answer as if you were part of the team. So for example if someone asks you "what services do you offer" you answer "we offer etc. etc.".
Manage these intents during the conversation:
- Demo Intent: when the user wants a demo. Example sentence: "I would like a demo" etc.
- Abandon Intent: if the user wants to abandon the conversation. Example sentence "delete" "let's forget it" "I changed my mind" etc.
If you decode one of these intents, answer with the name of the intent and do not use chunks from the knowledge base
```

As you can see we added the provided system context appended at the end of the pre-engineered context, just after “Let's think step by step.”

#### **Pre-engineered System Context anatomy**

When you will switch to Advanced context Tiledesk doesn't use the pre-engineered system context anymore and awaits for you to provide all the new system context.

**IMPORTANT**: You must always start from a pre-engineered context because it has an anatomy that you must comply and understand if you want the automation engine to continue working as expected. For example, it's really important to explain in the prompt when to reply as “no answer in this context” replying with the NOANS tag, as the following picture explains:

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

You must always supply the {context} tag, because it will be dynamically replaced by the chunks returned by the Vector Index DB.

**Advanced context supply**

Once you switch to the Advanced context mode you'll be responsible to provide the whole system context. You can start mixing up the two contexts using the above context as a start example, as in the following picture:

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

Feel free to modify the context while preserving the anatomy. Your own context will be an explicit, visible part of the whole system context. With Advanced context you have control on the whole context.

To get started, [create a free account here](https://panel.tiledesk.com/v3/dashboard/#/signup).

If you have any questions, do not hesitate to contact us via <support@tiledesk.com>.&#x20;

For more information, please visit [www.tiledesk.com](https://www.tiledesk.com/).


# Replace AI Agent action

Tiledesk Design Studio offers a unique feature known as the “Replace AI Agent” action.&#x20;

This action allows you to recall different AI agents as needed, significantly enhancing your conversation flow design.&#x20;

Imagine having an AI agent specialized for sales and another for support. This approach allows you to deal with smaller, more understandable, customizable and maintainable agents instead of a single large and complicated agent. Enhancing them is easier, and their behavior is more predictable.

#### Implementing the Replace AI Agent action <a href="#implementing-the-replace-bot-feature" id="implementing-the-replace-bot-feature"></a>

To implement this feature, you first need to create different agents for different purposes. When you want to call another agent, you need to drag the “Replace AI Agent” action, which is located under Flow features on the left side.

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

By clicking on the “Replace AI Agent” action, a menu will appear on the right side, allowing you to choose the correct AI agent to take over the conversation in the same chat widget.

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

For this example, I chose the Sales AI agent. We can also define which block should be triggered when the new AI agent is recalled — in this case, I selected the Start block.

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

Then you can use an [AI Condition](/ai-chatbots-and-automation/actions-explained/ai-condition) to check whether the customer’s inquiry is sales‑oriented or support‑oriented, and trigger the appropriate AI agent.&#x20;

Alternatively, you can simply use buttons, as shown in the image below:

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

That’s all. You’ve created an AI agent that can recall the appropriate agent when needed, whether the inquiry is support‑ or sales‑oriented, based on our example. You can create as many agents as you need for different purposes — there’s no limit.

#### Replace the AI Agent using the bot slug <a href="#replace-bot-using-the-chatbot-slug" id="replace-bot-using-the-chatbot-slug"></a>

Using the slug ensures that an AI agent refers to another agent in a project‑invariant way. This allows you to export the same group of agents from one project to another while keeping their orchestration working without issues. If you don’t use the slug, the chatbot ID is used to reference another chatbot — but remember that a chatbot ID is globally unique in Tiledesk. The slug, instead, is only required to be unique within a single project. So, if you carefully choose your AI agent slugs, you can coordinate your agents to work correctly in any project where you import them.

Set the slug in the Settings section:

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

Then mark the “Use slug” property from the action when you decide to refer to that agent for the replacement:

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

In our Community, you can find [an AI agent template using the slug feature](https://tiledesk.com/community/search/getchatbotinfo/chatbotId/6797c042eafa7e0013d42997-Chatbot-using-slug-property)

We hope you find this tutorial helpful.&#x20;

If you need to know more about chatbot design, please visit our website at [**www.tiledesk.com.** ](https://www.tiledesk.com/)

If you require further assistance, do not hesitate to contact us at <support@tiledesk.com>&#x20;


# Add Tag

The “Add Tag Action” is designed to allow flows using the “add tag” feature already available to the human operators.

Tagging is very useful when you want to classify your conversations during the flow, statically or dinamcally for example aided by a chatGPT or LLM task with a prompt engineered exactly for that purpose.

Let's start with an example about the “static” classification, applying a *tag* to all conversations moved to a human agent. Simply insert a  button to ask for a human operator, then apply the tag before executing the *Transfer to a human* action:

<figure><img src="/files/4XTe8BKhHdVRqUEZ8N8B" alt=""><figcaption></figcaption></figure>

You can apply many tags at once with a single Add Tag action, simply separate them by a comma as in the previous example, where we applied two tags: **human** and **important**:

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

You can also add tags using attributes. A single attribute can also contain more then one comma-sepatated tag so you can add multiple tags using a single attribute. In the example below we will ask chatGPT to apply a set of tags choosen from a set of available ones:

<figure><img src="/files/3oum6zqE5hM64gEs9Ifw" alt=""><figcaption></figcaption></figure>

In the prompt we explicitly ask to separate multiple tags with commas:

```
reply me with a list of comma separated tags selected among the following that you use to classify the user question.
Tags:
- sales
- support
- positive_sentiment
- negative_sentiment
User question:
I need some help for returning the product, very unhappy because it arrived me broken
```

We'll apply the tag(s) using the ChatGPT Task output attribute *AI\_tags*:

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

Every time we wil invoke this action it will apply the tags extracted from the user submitted text.

You can use the Panel's History section advanced form to search using the applied tags:

<figure><img src="/files/5VlMKfiyYbJ2HMZp7SHL" alt=""><figcaption></figcaption></figure>

You can visualize tags analytics in the Metrics > Tags section

<figure><img src="/files/0Zsjl2Nhmd9wVH31t0Mb" alt=""><figcaption></figcaption></figure>

Do you have any feedback on this article? Please send it to us at <info@tiledesk.com>

Enjoy Tiledesk!


# Capture User Reply Action

To interact with a chatbot it is crucial to have some tool to get user input and processing it in some way. The Capture User Reply (CUR) action is designed exactly for this purpose.

You can use the Capture User Reply action in your existing blocks, in chain with your already existing actions.

To understand how the CUR works let's create a new project and customize your reply action with a text to ask the user name:

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

What we want now is to block the flow until the user replies with their own name, then assign the captured name to a flow attribute.

Drag the “Capture User Reply” action into the “welcome” block, just under the above configured Reply action, like in the following two pictures:

<figure><img src="/files/2TdGYS5bEwy1uixQHs43" alt=""><figcaption></figcaption></figure>

Now click on the Capture User Reply action to open the corresponding action editor. We want to create a new flow attribute that we'll fill out with the name that the user will provide during the chat. Press the {} button under the “Assign user reply to” field. In the attributes pop up press “Add custom attribute”.

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

Choose the attribute name "user\_name". Click on the added attribute so it will be selected in the action editor. The name that the user will provide will be assigned to the user\_name attribute.

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

We want to use the attribute to greet the user soon after he tells us his name. Go on the bottom right corner of the block near the Capture User Reply and create “on the fly” a new Reply action. As soon as the user will reply, the automation flow will move to the end of the block (because there are no other actions to execute). The tag on the bottom right corner will connect the block to another block to optionally continue the flow. In this case this is exactly wath we want: after capturing the user name the flow will continue to the next connected block and his actions will be executed. Drag the tag with the connector on the stage, a menu will appear where you can keep the Reply action. An enclosing block will be created on the fly.

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

We have our new Reply action enclosed in a new block.

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

Click on the Reply detail and modify the text that we'll send back to the user. Click on the {} button and select “user\_name” from the pop-up

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

We setup the “Hi ”. The placeholder of the user\_name will be replaced at runtime with the provided name.

<figure><img src="/files/7uTkiSb0GFbSj5UHvBVo" alt=""><figcaption></figcaption></figure>

Once the converstation starts we ask the user for his name. The user name is got from the user input and assigned to the flow attribute *user\_name*, then used in the following reply action to correctly greet the user with his name.

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

You can find the example in this tutorial in the [Tiledesk Chatbot Community](https://tiledesk.com/community/):

[Basic Capture User Reply](https://tiledesk.com/community/search/getchatbotinfo/chatbotId/65a5796c4a04b20013a46e9e-Basic-Capture-User-Reply) &#x20;

#### Capture User Reply chain[#](https://gethelp.tiledesk.com/articles/capture-user-reply-action/#capture-user-reply-chain) <a href="#capture-user-reply-chain" id="capture-user-reply-chain"></a>

Sometimes you want to ask the user multiple questions before he can continue the conversation.

For example it's not unusual to ask the user his email in addition to the name. In this case you can “chain” replies and CURs together to obtain a simple “form”. Let's see this in action.

We can use the previous example, asking the user for his name. We must add a new reply in the block, after the last CUR. It will act ask the user for his email. Consider that a block action sequence is blocked as soon as you reach a blocking action. This is the case of our Capture User Reply, that blocks the flow waiting for the user to reply. As soon as he replies the flow will move to the next action, in this case it is the next reply that will send “Your email?” text to the user. As in the following example:

<figure><img src="/files/8g1nSpeNXyIvBecsAUJ4" alt=""><figcaption></figcaption></figure>

But we want to get the email in some way, so we need to add a new Capture User Reply next to the last reply action, like in the following picture:

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

We added a new CUR as well as a new attribute: user\_email. We added the new attribute exactly as we did with the previous user\_name attribute.

We can now add a new Reply block to certify the user that we have all the needed data:

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

Let's run this flow to see it in action.

<figure><img src="/files/5N69muu1pCuWjYrOHIQw" alt=""><figcaption></figcaption></figure>

As you can see all the attributes are asked in sequence, exactly as we expected!

You can find the chatbot in this tutorial in the community: [Capture Reply Chain](https://tiledesk.com/community/search/getchatbotinfo/chatbotId/65a583deba5618001233c885-Capture-Reply-chain)&#x20;

**Happy Capture User Reply with Tiledesk!**

If you have questions about the Web Request or other Tiledesk features feel free to send an email to <support@tiledesk.com>


# n8n.io

With this action, you are able to invoke n8n.io automations directly from TIledesk. This action integrates Tiledesk with n8n to automatically create a new Google Sheet row with student contact information from training courses.

Simply drag & drop the n8n.io action on the stage from the side menu, as show in the picture below:

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

Once you drag the action you can configure it. The main part is to set up the n8n.io webhook and populate all the fields to send to the n8n webhook endpoint using the right flow attributes:

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

In the following example, we configure three fields: the name and surname, the class, and the email address of a student attending a specific course to be transmitted to n8n with the values "custom\_name", "custom\_class", and "custom\_email", respectively. The automation created in the n8n platform will utilize these input values to create a new row containing the student's information in a Google Sheets sheet previously configured.

In the n8n action, select the POST operation from the HTTP operations dropdown. Then, in the Url field, enter the URL of the automation created in the n8n platform.

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

* In the Header field, enter the HTTP headers for the request. The specific values will depend on the webhook that you are calling.
* In the authorization field, enter the authorization type and credentials for the webhook. The specific values will be generated in n8n when you create the webhook.

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

Next, select the "body" tab and enter the values (in json format) that the bot needs to send to the automation created on n8n to insert a new row in the Google Sheet.

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

You can connect various blocks to extend the automation's actions created on n8n. Specifically, two blocks can be linked with the n8n block, which will trigger upon the success or failure of the webhook invocation on the n8n platform. In the example depicted in the image below, we've merely connected two blocks to the n8n block: "n8n ok" and "n8n fail," which handle the information sent to and received from the n8n webhook, respectively.

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

The automation created in the n8n platform uses these input values to create a new entry in the previously configured Google Sheets document, which contains the student's information.

#### How to retrieve the result of the invoked automation <a href="#how-to-retrieve-the-result-of-the-invoked-automation" id="how-to-retrieve-the-result-of-the-invoked-automation"></a>

To view the response from the invoked automation, you need to open the "Advanced" section within the "n8n" block and assign a new variable to the "Assign result to" field, naming it, for example, "n8n\_result". Upon completion of the execution, the created variable will be populated with the JSON formatted result of the automation.

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

As can be seen from the following figures this action allows the Tiledesk bot to invoke an automation created on n8n that creates a new row in a Google Sheet with the contact information of the student participating in a training course communicated by the user to the bot.

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

The automation on n8n creates a new row in the Google Sheet and returns the inserted information to Tiledesk in the "n8n\_result" variable in JSON format.

<figure><img src="/files/6WcaOAfSNWYVx8KOkcVU" alt=""><figcaption></figcaption></figure>

If you have questions about the n8n.io Action or other Tiledesk features feel free to send an email to [support@tiledesk.com  ](mailto:support@tiledesk.com)or leave us a [feedback](https://feedback.tiledesk.com/feedback).


# HubSpot

HubSpot CRM is undoubtedly one of the most robust on the market, and we’re thrilled to announce our native integration with it. This integration allows you to record all your website/app user contact information directly in your CRM. Let’s dive in!

#### **1. Create a Lead Generation AI Agent:**

&#x20;The first step is straightforward. You can either start from one of our chatbot templates or build from scratch. For the sake of detailing the process, let’s start from scratch. Head over to the Tiledesk dashboard. If you don’t have an account yet, you can create one for free here: [Create your free Tiledesk account](https://panel.tiledesk.com/v3/dashboard/#/signup)

#### **2. Use a Form to Gather User Leads:**&#x20;

As shown in the image below, you can create a form using the form icon at the top right of each block. There are basic and advanced preset forms available, or you can create your own from scratch. For this tutorial, we’ll ask for the user’s name and email, but you can also ask for the company name, phone number, or any other information you need.

<figure><img src="/files/9pvHXKt0c3SXwxeEqRN7" alt=""><figcaption></figcaption></figure>

#### **3. HubSpot Integration:**&#x20;

The next step is to simply drag the HubSpot action from the Integrations in the left side toolbar, as shown in the image below.&#x20;

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

Then click on “Manage integration” to configure your integration. In the new page, you’ll see a placeholder for the HubSpot API Key. Paste your key here and save.

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

If you don’t have an API key yet, you can get one for free by creating an app in HubSpot. Here’s a step-by-step tutorial:&#x20;

* Visit HubSpot.com and create an account if you don’t have one.
* Click on “Settings” after logging in.
* Navigate to “Integrations” and select “Private Apps”.
* Create your private app.
* In the “Scopes” section, ensure to activate “Read” and “Write” for crm.objects.contacts

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

* Click on “Create App”.
* You will now have access to your HubSpot API Key.

#### **4. Send Data to Your HubSpot CRM:**&#x20;

Back in the Design Studio, click on the HubSpot block we created earlier. We need to define which attributes/parameters should be sent to HubSpot. They are:

* email: userEmail
* firstname: firstname
* lastname: lastname

Please consider that it is essential to create a property in HubSpot with the internal name the same as the key in HubSpot’s block in Tiledesk.

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

Great, we’re almost done. Let’s test the bot and see how it instantly sends data to our HubSpot CRM.&#x20;

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

If you head to the “Contacts” section of your HubSpot CRM, you’ll see the contact there.

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

We hope you find this tutorial helpful.&#x20;

If you need further assistance, don’t hesitate to contact us at <info@tiledesk.com>.&#x20;

Happy bot building!


# ChatGPT Assistant (beta)

The new, special, ChatGPT Assistant action allows to easily interact with the new [OpenAI Assistant APIs](https://platform.openai.com/docs/assistants/overview?context=without-streaming).

Assistants APIs helps you create a full, consistent exeperience with OpenAI, because they create a sandbox able to embed all of your documents with a great, embedded Vector indexing features, computing capabilities (with the “code interpreter”) and “function calling”.

#### Quick start <a href="#quick-start" id="quick-start"></a>

Supposing you already know how ChatGPT Assistants work, starting using assistants with Tiledesk is very easy and straightforward experience.

You must simply import our [Assistant Quick Start tutorial](https://tiledesk.com/community/search/getchatbotinfo/chatbotId/66426f62f3c66700137f331d-Drag---drop-OpenAI-Assistants) (with the “Import” button) into your own project.

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

Once you import the assistant into your project you simply have to do two easy steps:

1. Setup the ChatGPT Assistant Action with your Assistant ID
2. Setup your OpenAI APIKEY in Integrations

To setup your Assistant ID

Click in the Assistant Action in the defaultFallback block. The Action detail will open. In the Assign GPT Assistant, put your own Assistant ID (see the arrow in the picture):

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

Setup your OpenAI APIKEY

Move to the Settings > Integrations > OpenAI section and setup your personal APIKEY, as in the following picture:

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

You are now ready to use your assistant!

Go back to your flow and launch it with the test button, starting interacting with your assistant:

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


# How to manage an inactive chat

#### Intro <a href="#intro" id="intro"></a>

The "No Input" option within the Advanced Reply feature addresses the issue of having inactive chats. This guide will walk you through the steps to configure the No Input exit port, which can be set to execute an action such as closing the chat or sending another message after a specified number of seconds of inactivity.

#### Step 1: Access the Delay Settings <a href="#step-1-access-the-delay-settings" id="step-1-access-the-delay-settings"></a>

1\. Locate the delay icon in the Advanced Reply feature >> No Input, which by default is set to a +10s delay.\
2\. Click on the +10s delay icon to change the maximum value to 120 seconds (2 minutes).

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

#### Step 2: Set the Maximum Value <a href="#step-2-set-the-maximum-value" id="step-2-set-the-maximum-value"></a>

1\. Once the +2m (120 seconds) indicator is set, click on it again to set the desired number of seconds for the No Input action.\
2\. You can input values such as 7200 seconds (2 hours) or even 100000 seconds, depending on your requirement.

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

#### Step 3: Input the Desired Seconds <a href="#step-3-input-the-desired-seconds" id="step-3-input-the-desired-seconds"></a>

1\. Notice that the seconds bar only allows numerical inputs. It will not accept any special characters or letters.\
2\. You can increase or decrease the value using the arrows provided.\
3\. Alternatively, you can paste the desired number directly into the input field.

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

#### **Example Configuration**

\- Closure of Chat: Set the No Input exit port to close the chat after 300 seconds (5 minutes) of inactivity.\
\- Sending Another Message: Configure the No Input exit port to send a follow-up message after 600 seconds (10 minutes) of inactivity.

#### **Important Notes**

\- Ensure that you only input numerical values.\
\- The seconds bar is designed to prevent any non-numerical characters, ensuring accurate configuration.\
\- You can fine-tune the duration by manually entering the seconds or using the arrows for minor adjustments.

By following these steps, you can effectively manage inactive chats using the Advanced Reply feature's No Input option, enhancing the responsiveness and efficiency of your chat interactions.

Have any feedback? Get in touch at <info@tiledesk.com> 🧡


# If Online Agent

One of the main advantages of Tiledesk compared to its competitors is that it allows you to hand over the bot conversation to your human agent. In many cases, the bot can perfectly handle the conversation, but sometimes the conversation is complicated, and it is better to hand over the conversation to an available agent.

But how can you be sure that there is an available agent before handing over? This is where the “If Online Agent” action plays an important role in the conversation.

When you want to use the “[Agent Handoff](/ai-chatbots-and-automation/quick-start/how-to-transfer-my-chatbot-to-a-live-agent)” action, it’s very helpful to use “**If Online Agent**” before it, as you can see in the image below.

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

By clicking on the “If Online Agent,” you can also define a specific department or keep it as the default “Project Wide.”

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

Finally, from the green endpoint, which means there is an **available human agent**, continue the flow to “Agent Handoff,” and from the red endpoint, direct to the offline message, as you can see in the image below:

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

\
You can also[ **define the operating hours**](/manage-your-workspace/define-the-operating-hours) and [**create different departments**](/manage-your-workspace/creating-a-department) specific to your business.

Hope this helps.

To get started, you need to create [**your free account first** ](https://panel.tiledesk.com/v3/dashboard/#/signup)

In case you need further assistance, do not hesitate to contact us via [**support@tiledesk.com**](mailto:support@tiledesk.com).

For more information, please visit [**www.tiledesk.com**](https://tiledesk.com/).\
&#x20;


# Close Action

Every conversation needs to be ended at some point. Imagine once the bot has successfully answered your customer and your customer wants to close the conversation. This is where the Close action becomes handy.

#### &#x20;How to insert the Close action in the conversation flow

\
You can use this action whenever you think the customer has received adequate support and needs to close the conversation.

First, we need to head to the [Tiledesk dashboard](https://panel.tiledesk.com/v3/dashboard/#/projects), select the bot we want to modify, and enter the Design Studio.

For this example, I used an “[Ask Knowledge Base](/ai-chatbots-and-automation/actions-explained/ask-knowledge-base)” action. Inside its response, insert a button and provide the close chat option, as the user will most likely get the correct answer and want to close the chat after the answer is generated by the knowledge base.&#x20;

As you can see in the image below:

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

Then, connect this button to the Close action.&#x20;

In the left sidebar menu, you can find the Close action. Simply drop it somewhere on the canvas.

Now, you need to connect the button to this new block, as shown in the image below:

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

That’s all! From now on, by clicking on this button, the conversation will end.

Let’s test it together.

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

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

Hope you found it helpful.&#x20;

For more details, please visit [www.tiledesk.com](https://tiledesk.com/).

To get started, [you can create a free account](https://panel.tiledesk.com/v3/dashboard/#/signup).

In case you have questions or need support, do not hesitate to contact us via: <support@tiledesk.com>\
&#x20;


# Change Department

Change Department is one of the actions in Design Studio that enables you to move from one department to another in a conversation.&#x20;

Imagine having different departments specified for support, sales, after-sales, etc. You can create a bot for each of these departments and, based on the user’s inquiries, activate the proper bot and department.&#x20;

With this strategy, you will achieve first contact resolution as the appropriate bot will be assigned to the user’s request. Additionally, you can ensure that sales-oriented inquiries are not directed to the support team and vice versa.

If you haven’t created your departments yet, you can [use this tutorial to create different departments](/manage-your-workspace/creating-a-department) for different purposes.

#### Embedding Change Department in conversations

First, navigate to the [Tiledesk dashboard](https://panel.tiledesk.com/v3/dashboard/#/projects) and then to the Design Studio.&#x20;

The Change Department action is located among the Special actions in the left-side menu.&#x20;

Drop it onto the canvas as shown in the image below.&#x20;

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

Then, from the “Talk with the Sales Team” button, continue the conversation to the Change Department action. By clicking on the block, the right-side menu will appear, allowing you to choose the proper department.

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

I hope you found this helpful.&#x20;

If you need assistance, do not hesitate to contact us via <support@tiledesk.com>.&#x20;

For more details, please visit [www.tiledesk.com](https://tiledesk.com/).&#x20;

If you haven’t created your free account yet, [start here](https://panel.tiledesk.com/v3/dashboard/#/signup).


# Move to Unassigned Action

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

This action sets this chat status to *Unassigned*. Useful if you have Smart Assignment active and want to manage all the chat requests through the Unassigned queue.

When you have the [Smart Assignment](/manage-your-workspace/setting-up-automatic-assignment) option active all the chat requests in the Unassigned status (aka put in the Unassigned queue) will be delivered to Agents in a FIFO way based on the chat request's creation time.

If a user is in a flow with a chatbot you have many ways to assign it to the respective agent when this moment comes. One way is through the [Agent Handoff Action](/ai-chatbots-and-automation/actions-explained/transfer-to-a-human). This Action will find an available agent based on the Agent's availability status. This means that the Agent Handoff will do his best to assign the request to an agent that is both in the available status and with a number of assigned chats (aka *chat requests*) under the [Maximum chats](/manage-your-workspace/setting-up-automatic-assignment#chat-limit) option of the Smart Assignment section:

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

But when Smart Assigment is active is generally preferrable to don't try the approach to directly assign a chat to an agent. It's better to directly put the incoming chat in the Unassigned queue and let the the Smart Assignment module (if active) to dequeue the chats and assign them to the available agents based on the arrival (creation) time.


# Clear Transcript Action

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

This action resets the current chatbot transcript. The chatbot transcript represets the message flow between the end-user and the chatbot. You can access the transcript in textual format using the flow's *transcript* attribute. For example:

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

It's very useful sometimes to reset your transcript - during a flow - for a lot of reasons. One of the main reasons is when you need to restart a conversation with a ChatGPT Task (or Ask the Knowledge base) that has the *Use chat History in the Prompt* option active:

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

Using this action you can restart a conversation moving through the flow restarting your prompt so the old one does not interfer with the new one.

Do you have any feedback on this article? Please send it to us at <info@tiledesk.com>

Enjoy Tiledesk!


# Send Whatsapp message

This Action allows you to easily send a whatsapp message using a Meta approved Whatsapp template.

Drag the Send Whatsapp Action from the side menu:

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

Now you can setup the Action using the detail panel as in the following figure.

In Phone number id put the corresponding value provided by Meta. It's the ID associated to your Meta-registered Whatsapp number. Then choose a template from the “Choose a template” menu. In the list only appear the approved Meta templates. Once you choose a template simply fill the template values. You can use both static values or flow's attributes.

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

You can also see a template preview using the preview button on the template:

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

Now once the automation is invoked The destination number (Phone numer) will receive the filled message.

Happy messaging automation with Tiledesk!

If you have questions about the Send Wahtsapp Action or other Tiledesk features feel free to send an email to [support@tiledesk.com  ](mailto:support@tiledesk.com)or leave us a [feedback](https://feedback.tiledesk.com/feedback)


# Add to Knowledge Base Action

Use this action to populare the Knowledge Base using an automation flow.

You can select the target Knowledge Base and use this action to upload a specific text, document or URL during a flow.

Very useful to create self-train flows, where some content uploaded by users or human agents are used to populate a knowledge base

<figure><img src="/files/74kCt5bNyT3Ad0PUREsu" alt=""><figcaption></figcaption></figure>


# Condition Action

The **Condition** Action is very useful for designing dynamic workflows. Whenever you need to divide a conversation into two or more branches, this Action comes in handy — for example, sending sales inquiries directly to the sales team.

<figure><img src="/files/7Kw4syxRICnnee3MplaR" alt=""><figcaption></figcaption></figure>

There are two Condition Actions under **Flow actions** in the left toolbar. In this tutorial we’ll focus on **Condition w/ else**. This Action lets you define a condition:

* if the condition is true, the **green endpoint** is triggered,
* if the condition is false, the **red endpoint** is triggered.

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

### How to use it

1. Find **Condition w/ else** under *Flow actions* in the left toolbar.
2. Drag and drop it onto the canvas where you need it.
3. Click on it: a panel opens on the right where you can choose the Attribute you want to evaluate.

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

### To create a condition:

1. Click **Add a new condition**.
2. A pop-up will appear.
3. Select the [Attribute](/ai-chatbots-and-automation/visual-builder-101/flows-attributes) (for example, *userEmail*).
4. Define the condition by choosing one of the available options.
5. Enter a value if required (for some conditions, no value is needed).
6. Click **Apply condition**.

That’s it — you’ve set a new condition.

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

### Available condition options

Here’s what each option means in simple words:

* **= equal As Numbers / = equal As Text** → check if two values are exactly the same (as numbers or text).
* **≠ not Equal As Numbers / ≠ not Equal As Text** → check if two values are different.
* **> greater Than / ≥ greater Than Or Equal** → check if a number is larger (or larger/equal).
* **< less Than / ≤ less Than Or Equal** → check if a number is smaller (or smaller/equal).
* **starts With / not starts With** → check if a text begins with (or does not begin with) a specific value.
* **starts With Ignore Case** → same as above but ignoring uppercase/lowercase differences.
* **ends With** → check if a text ends with a specific value.
* **contains / contains Ignore Case** → check if a text contains a specific value (ignoring case if selected).
* **is Empty** → true if the attribute has no value.
* **is Null** → true if the attribute is null.
* **is Undefined** → true if the attribute is not defined at all.
* **matches** → check if the value matches a specific pattern (for advanced use cases).

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

### Examples

**1. Ask for email before closing a chat**\
Check if *userEmail* is **Undefined**. If true, the green endpoint will trigger and you can ask for the email before ending the conversation.

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

**2. Ask a series of questions before moving on**\
Use a [Chatgpt task](/ai-chatbots-and-automation/actions-explained/chatgpt-task) to collect details step by step (for example: name, needs, phone number).\
In the prompt, you can write:

```
Your role is to ask one by one the questions below:  
- name  
- needs  
- phone number  
Once you receive all the responses, answer strictly with the word "eject".
```

When the user has answered everything, the **gpt\_reply** will contain ***eject***.\
Set a condition: if **gpt\_reply contains "eject"**, continue the Flow.&#x20;

Otherwise, connect the Else branch to a [Reply Action](/ai-chatbots-and-automation/actions-explained/reply-action) so the user keeps receiving questions until the condition is met. Keep in mind you also need a [Capture User Reply](/ai-chatbots-and-automation/actions-explained/capture-user-reply-action) action to receive the user's response, and you need to connect it to the ChatGPT task again.&#x20;

Then ChatGPT will ask the next question until it responds with "eject".

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

**3. Immediate handover to human support**\
Use a Chatgpt task to run sentiment analysis on the conversation transcript.\
In the prompt, you can write:

```
Check if there are signs of frustration or negative sentiment in the lastUserText.
If yes, answer strictly with the word "human".
```

When the AI Agent detects frustration, the **gpt\_reply** will contain *human*.\
Set a condition: if **gpt\_reply equals "human"**, trigger the [**Transfer to human**](/ai-chatbots-and-automation/actions-explained/transfer-to-a-human) Action.

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

These are just a few examples of how the Condition Action can be used. There are many more possibilities to design smart, flexible workflows.

If you have any questions about the Condition Action or other Tiledesk features, contact us at [**support@tiledesk.com**](mailto:support@tiledesk.com).


# AI Condition

**AI Condition** is an intelligent action that lets you automate decision-making inside a conversation flow using **Generative AI models (LLMs)** such as **OpenAI GPT-5**, **Google Gemini**, **Anthropic Claude**, **Grok**, and more.

<figure><img src="/files/1Wk9qpR2r07JMWRHmAY4" alt=""><figcaption></figcaption></figure>

Unlike the standard Condition Action, which relies on basic logic (for example, “if value equals…”), the **AI Condition** uses language understanding to evaluate the semantic meaning of the user’s message and make context-aware decisions.

{% hint style="info" %}
Tiledesk can only continue down one Condition path per execution.

If you define a Condition and do not add a step afterwards, the execution will stop.
{% endhint %}

## Why use AI Condition

This action is ideal when your logic can’t be expressed through simple rules. It allows you to:

* Interpret tone, intent, or context directly from natural language.
* Route conversations automatically to the correct department or human agent (Sales, Support, Billing, etc.).
* Improve First Contact Resolution (FCR) by connecting users to the right resource on the first try.
* Detect frustration or dissatisfaction and immediately transfer the chat to a live operator.
* Apply complex decision logic without writing code or creating multiple manual conditions.

## Where to find it

In the left panel of the Design Studio, go to **AI → AI Condition**. This action is currently marked as **BETA**.

## How it works

{% stepper %}
{% step %}

### Step 1

Sends the user’s latest message to the selected LLM (for example, GPT-5 or Gemini).

<figure><img src="/files/cgl6fD3e46ec5QXrUHxK" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Step 2

The model analyzes the language and evaluates whether one or more **AI Conditions** are met.
{% endstep %}

{% step %}

### Step 3

Based on the result, the flow continues along the corresponding **Success** paths (for example, Support, Sales, Transfer to Human).
{% endstep %}

{% step %}

### Step 4

If the model can’t classify the message, the **Fallback** connector is triggered.
{% endstep %}
{% endstepper %}

### Example 1: Detecting frustration and transferring to a human

You can use **AI Condition** to enhance the way you handle difficult or emotional conversations. For instance, if a user shows frustration or dissatisfaction, the chat can be automatically escalated to a live agent.

#### How to configure

{% stepper %}
{% step %}
Drag an **AI Condition** block into your flow.
{% endstep %}

{% step %}
Select the LLM (for example, OpenAI GPT-5).
{% endstep %}

{% step %}
In Condition 1, enter:

> If the user shows any sign of frustration, dissatisfaction, or emotional distress, whether expressed directly or implied through tone, wording, or repeated complaints.
> {% endstep %}

{% step %}
Set the **Success** path to **Transfer to Human**.
{% endstep %}

{% step %}
In the *Instructions* field, type: `User said: {{lastUserText}}`

<figure><img src="/files/KFLzudl06DlORRDmAAjp" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

Benefit: Proactively detect unhappy users and prevent churn by connecting them with a human representative at the right moment.

### Example 2: Routing between Support and Sales

With multiple AI conditions, you can design a smart routing system that identifies the right department based on the user’s query.

#### How to configure

{% stepper %}
{% step %}
Add an **AI Condition** block and select a model (for example, OpenAI GPT-5).
{% endstep %}

{% step %}
Define two conditions:

* Condition 1:

  > If the user’s last question is related to support, troubleshooting, instructions, tutorials, or guidance on how to perform a task\
  > Success → **Support dept**
* Condition 2:

  > If the user’s question is related to subscriptions, pricing, plans, upgrades, discounts, or any other sales-related topic\
  > Success → **Sales dept**
  > {% endstep %}

{% step %}
In the *Instructions* field, type: `User’s last question: {{lastUserText}}`

<figure><img src="/files/qbMcfkymuxcs04Woh8p8" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

Benefit: Automatically send each conversation to the right team without human intervention, reducing waiting times and increasing First Contact Resolution (FCR).

### In summary

**AI Condition** takes conversational automation to the next level — transforming the natural-language understanding of large language models into actionable routing decisions that improve efficiency and customer satisfaction.

It’s the foundation for building **human-AI hybrid flows** that are more adaptive, empathetic, and productive.


# If operating hours

**If Operating Hours** checks whether the **current time** is included in a configured **operating hours** slot. It is useful whenever you want to connect a conversation to a live agent only when a team is actually open, so users do not wait for an agent that cannot reply.

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

You can create **different working hours** for different teams or departments (for example, Sales and Support), and this is also very useful for **international teams** working across time zones.

### Where to find the action

In **Tiledesk Design Studio**, you can find it here: Most used actions → If Operating Hours

### How to use it in your flow

Place **If Operating Hours** right before **Transfer to a Human**. Whenever the chat is supposed to be connected to a live agent, the system checks if it is currently inside the team’s operating hours.

Green endpoint

* If the current time is within operating hours, the green endpoint is triggered and the flow can continue to **Transfer to a Human**.

Red endpoint

* If the current time is outside operating hours, the red endpoint is triggered. You can route users to an offline path (collect email or phone number, or ask them to leave a message).

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

{% hint style="info" %}
Tip: This pattern keeps your experience clean. Live handoff happens only when the team is available and offline requests are collected in a structured way.
{% endhint %}

### How to configure the action

{% stepper %}
{% step %}

#### Add the action

Add the **If Operating Hours** action to your flow.
{% endstep %}

{% step %}

#### Open configuration

Click the action to open the configuration panel.
{% endstep %}

{% step %}

#### Choose which operating hours to check

Under **Check operating hours**, choose one of these options:

* Option A: **General** (project-wide)\
  Use this when the same opening hours apply to the whole project. The **General** operating hours refers to your whole project.

  Your customers cannot ask for an agent during **offline hours**, and their requests will be automatically put in the **Unassigned conversations** queue.
* Option B: **Selected time slot** (team-specific)\
  Use this when different teams need different schedules. For example, you can set a dedicated time slot for your **Sales** team, and another one for **Support**.
  {% endstep %}
  {% endstepper %}

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

### How to create operating hours and time slots

To configure the general opening hours or create additional time slots, follow this guide: [Define the Operating Hours](/manage-your-workspace/define-the-operating-hours)

Once your operating hours and time slots are set, come back to Design Studio and select **General** or a **Selected time slot** in the action configuration.

### What to do on the red endpoint (offline)

When the **red endpoint** is triggered, it means the current time is **outside** the selected operating hours.

Common offline paths include:

* Ask for **email** and/or **phone number** so you can contact the user later
* Ask the user to **leave a message** describing the issue or request
* Provide an alternative self-service option (FAQ, knowledge base) and offer follow-up

In this tutorial example, we inform the user that the **Sales team** is currently outside operating hours, and we ask them to **leave a message**. The message can then be handled by the team when they are back online.

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

Hope this helps.

If you need further assistance, do not hesitate to contact us at <support@tiledesk.com>. You can also visit our website for more AI Agent use cases: [www.tiledesk.com](https://www.tiledesk.com/).


# JSON Condition

## JSON Condition Action

The JSON Condition action is the **decision point** of your chatbot. It looks at the value of one or more attributes (data collected during the conversation, returned by an API, produced by the AI, etc.) and routes the flow down one of two branches: **MATCH** when the conditions are met, or **Else** when they are not. Think of it as the *if / then / else* of your automation: it lets you personalize the experience, validate user input, branch on a language, a score, the length of an array, and much more — all without writing code.

Like every action, the JSON Condition has two views:

* **Action preview** — the compact card you see on the canvas, which summarizes the conditions and shows the two output connectors (the green **true** branch and the **Else** branch).
* **Action editor** — the panel that opens when you click the action, where you build the conditions.

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

***

### How it works

1. Add the **JSON Condition** action to a block.
2. Build one or more conditions in the editor (see below).
3. Connect the **MATCH** output to the block that should run when the conditions are **true**.
4. Connect the **Else** output to the block that should run when they are **false**.

At runtime the chatbot evaluates the conditions:

* if the result is **true** → it follows the **MATCH** branch;
* if the result is **false** → it follows the **Else** branch.

***

### Building a condition

Each condition is made of three parts, shown in the editor as **Attribute name**, **Condition**, and **Value**.

> *Screenshot: the "Custom Attribute" editor with the Attribute name, Condition and Value fields.*

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

#### 1. Attribute name

This is the **left side** of the comparison — the attribute whose value you want to check. You can:

* **type it** directly, or
* **pick it** from the attribute list using the `{ }` button (it inserts the attribute for you), then edit it freely.

Click the **ⓘ** icon next to *Attribute name* for a quick reminder of the syntax. You can reference simple attributes, nested properties and array elements:

| You write               | Meaning                                      |
| ----------------------- | -------------------------------------------- |
| `email`                 | a simple attribute                           |
| `user.name`             | a nested property                            |
| `people[0]`             | the **first** element of an array            |
| `people[0].name`        | the *name* of the first element of an array  |
| `kb_json_sources[2].id` | nested properties and array indexes combined |

> **Note** — write the attribute **without** the `{{ }}` braces here: just `user.name`, not `{{user.name}}`.

#### 2. Condition

This is the **operator** — *how* you want to compare the attribute. Operators are grouped by the **type of data** you are working with (Existence, Text, Number, Boolean, Date & Time, Array), so you can pick the right comparison for the value at hand.

There is **no default operator**: when you open a new condition the field is empty and you must choose one. See the full Operators reference below.

> **Tip** — the same value can be compared in different ways. For a chunk count, *“is equal to (number)”* compares it as a number (`5 == 5`), while *“is equal to (text)”* compares it as text (`"5" == "5"`). Choose the operator whose type matches your intent.

#### 3. Value

This is the **right side** of the comparison. Depending on the operator you can:

* type a **fixed value** (a constant) — e.g. `Roma`, `18`, `2026-01-01`; or
* click the `{ }` button to compare against **another attribute** (a variable), e.g. compare `user.city` with `user.preferredCity`.

Some operators are **unary** — they don’t need a value (for example *is empty*, *exists*, *is true*). For those the **Value** field is hidden automatically.

When the condition is complete, press **Apply Condition**. The button stays disabled until you have chosen an attribute, an operator and (when required) a value.

***

### Combining conditions

A single JSON Condition can evaluate **many** conditions together.

#### AND / OR inside a group

Add more rows to combine conditions with the **AND** / **OR** connector that appears between them:

* **AND** → *all* the joined conditions must be true.
* **OR** → *at least one* must be true.

Standard precedence applies: **AND binds tighter than OR**, so `A AND B OR C` is read as `(A AND B) OR C`.

#### Condition groups

Use **Add conditions group** to create separate groups. Each group is evaluated as a unit and the groups are combined with their own AND / OR connector — this lets you express logic like:

```
(country == "IT" AND age >= 18)  OR  (vip == true)
```

***

### Operators reference

Below are all the available operators, grouped by data type, with a concrete example. `x` is the attribute (left side), values in quotes are text, bare numbers are numbers.

#### Existence (no value needed)

| Operator       | Meaning                                             | Example                 |
| -------------- | --------------------------------------------------- | ----------------------- |
| exists         | the attribute is present (even if empty/null)       | `email` exists          |
| does not exist | the attribute is not present                        | `coupon` does not exist |
| is empty       | empty string, empty array/object, or null/undefined | `cart` is empty         |
| is not empty   | has some content                                    | `cart` is not empty     |
| is null        | the value is exactly `null`                         | `middleName` is null    |
| is undefined   | the value is exactly `undefined`                    | `nickname` is undefined |

#### Text (compared as text, case-sensitive)

| Operator               | Example                                |
| ---------------------- | -------------------------------------- |
| is equal to (text)     | `user.city == "Roma"`                  |
| is not equal to (text) | `user.city != "Roma"`                  |
| contains               | `message` contains `"invoice"`         |
| does not contain       | `message` does not contain `"invoice"` |
| starts with            | `lang` starts with `"it"`              |
| does not start with    | `lang` does not start with `"it"`      |
| ends with              | `file` ends with `".pdf"`              |
| does not end with      | `file` does not end with `".pdf"`      |
| matches regex          | `email` matches `"^.+@.+$"`            |
| does not match regex   | `email` does not match `"^.+@.+$"`     |

#### Number (compared as numbers)

| Operator                    | Example          |
| --------------------------- | ---------------- |
| is equal to (number)        | `kb_chunks == 5` |
| is not equal to (number)    | `count != 0`     |
| is greater than             | `age > 18`       |
| is greater than or equal to | `age >= 18`      |
| is less than                | `score < 100`    |
| is less than or equal to    | `score <= 100`   |

#### Boolean (no value needed)

| Operator | Example            |
| -------- | ------------------ |
| is true  | `consent` is true  |
| is false | `consent` is false |

#### Date & Time (value = a date, e.g. `2026-01-01`)

| Operator               | Example                                        |
| ---------------------- | ---------------------------------------------- |
| is equal to (date)     | `createdAt` is equal to `2026-06-15`           |
| is not equal to (date) | `createdAt` is not equal to `2026-06-15`       |
| is after               | `createdAt` is after `2026-01-01`              |
| is before              | `createdAt` is before `2026-01-01`             |
| is after or equal to   | `createdAt` is after or equal to `2026-01-01`  |
| is before or equal to  | `createdAt` is before or equal to `2026-01-01` |

#### Array

| Operator                        | Meaning                                | Example                                      |
| ------------------------------- | -------------------------------------- | -------------------------------------------- |
| contains (array)                | the array contains the element         | `tags` contains `"vip"`                      |
| does not contain (array)        | the array does not contain the element | `tags` does not contain `"vip"`              |
| length equal to                 | number of elements == value            | `people` length equal to `0`                 |
| length not equal to             | number of elements != value            | `people` length not equal to `0`             |
| length greater than             | more than N elements                   | `people` length greater than `0`             |
| length less than                | fewer than N elements                  | `people` length less than `3`                |
| length greater than or equal to | at least N elements                    | `people` length greater than or equal to `1` |
| length less than or equal to    | at most N elements                     | `people` length less than or equal to `5`    |

***

### Concrete examples

#### Example 1 — Route by language

Send Italian users to a dedicated flow.

1. **Attribute name**: `lang`
2. **Condition**: *starts with*
3. **Value**: `it`
4. Connect **MATCH** → Italian welcome block, **Else** → default welcome block.

#### Example 2 — Check the knowledge base returned results

Branch depending on whether the AI retrieved any chunks.

1. **Attribute name**: `kb_chunks`
2. **Condition**: *is greater than* (number)
3. **Value**: `0`
4. **MATCH** → answer from KB, **Else** → fallback “I couldn’t find anything” message.

#### Example 3 — Validate input is an adult

1. **Attribute name**: `user.age`
2. **Condition**: *is greater than or equal to* (number)
3. **Value**: `18`
4. **MATCH** → continue, **Else** → “Sorry, you must be 18+”.

#### Example 4 — The array has at least one element

Useful right after an API call that returns a list.

1. **Attribute name**: `results`
2. **Condition**: *length greater than*
3. **Value**: `0`
4. **MATCH** → show results, **Else** → “No results found”.

#### Example 5 — Required field is filled in

1. **Attribute name**: `user.email`
2. **Condition**: *is not empty* (no value needed)
3. **MATCH** → continue, **Else** → ask for the email again.

#### Example 6 — Multiple conditions with groups

Greet VIPs, or adults from Italy:

* **Group 1**: `country` *is equal to (text)* `IT` **AND** `age` *is greater than or equal to (number)* `18`
* **OR**
* **Group 2**: `vip` *is true*

```
(country == "IT" AND age >= 18) OR (vip == true)
```

#### Example 7 — Compare two attributes

Check that the confirmed city matches the chosen one (the right side is a variable, not a fixed text).

1. **Attribute name**: `user.city`
2. **Condition**: *is equal to (text)*
3. **Value**: click `{ }` and pick `user.preferredCity`
4. **MATCH** → proceed, **Else** → ask the user to confirm.

***

### How conditions are evaluated

A few rules worth knowing, so your conditions behave as expected:

* **Type matters.** The operator decides how both sides are compared. *“is equal to (number)”* compares numbers (`"11"` and `11` are equal), while *“is equal to (text)”* compares text (`"11"` and `11` are equal as the text `"11"`). Pick the operator that matches the data type you want.
* **Text comparisons are case-sensitive.** `"Roma"` is different from `"roma"`. (Older *ignore-case* operators have been removed; legacy chatbots that used them now behave as the case-sensitive equivalent.)
* **A failed comparison is never an error.** If an attribute is missing or a value can’t be converted to the expected type, that single condition is simply treated as **false** — the chatbot won’t crash and will follow the **Else** branch.

***

### Notes

* The **Condition** field has no preset value: you always choose the operator explicitly.
* Write attribute names **without** `{{ }}` braces in the *Attribute name* field.
* The right-side **Value** can be a fixed value or another attribute (pick it with the `{ }` button).
* Need help with the syntax? Use the **ⓘ** icon next to *Attribute name*.

***


# Data Tables

Creating, managing, and using Data Tables in Tiledesk Agents

## Introduction

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

Data Tables is a Tiledesk feature (currently in BETA) that lets you create simple, structured tables of data directly inside the Tiledesk Design Studio and use them as a lightweight database for your chatbot flows. Each table is made up of typed columns and rows, similar to a spreadsheet, and can be read from and written to while a conversation is running.

Data Tables are designed for use cases where a bot needs to persist or look up small amounts of structured information without connecting to an external database — for example, storing user registrations collected during a conversation, checking whether an email already exists before creating a new record, keeping a simple FAQ or product catalog, or maintaining counters and flags across sessions.

### What Data Tables are used for

* Storing information collected from users during a chat (e.g. name, email, preferences) so it can be reused in later steps or later conversations.
* Looking up existing records before creating new ones, to avoid duplicates (e.g. “does this user already exist?”).
* Maintaining simple reference data for the bot to consult, such as product lists, FAQs, or configuration values.
* Feeding retrieved values back into the flow (messages, conditions, AI prompts) using flow variables.

## Creating and managing Data Tables from the Console

Data Tables are created and managed from the “Data Tables (BETA)” section of the Tiledesk console, accessible from the same workspace where your Flows and AI agents live.

### Creating a table

To create a new table:

1. Open the Data Tables (BETA) section and click Create table in the left-hand “YOUR TABLES” panel.
2. In the Create table dialog, enter a Name for the table (e.g. “Users”).
3. Define the table’s Columns. For each column, set a Name and a Type. Supported column types are: string, number, boolean, and datetime.
4. Use Add column to add further columns, or the × icon to remove one.
5. Click the confirmation button to save and create the table.

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

**Note**: Column types are enforced when data is inserted or updated, so choose the type that matches the data you plan to store (e.g. number for counters, boolean for flags, datetime for timestamps).

### Browsing and editing table data

Once created, a table appears in the “YOUR TABLES” list on the left. Selecting it opens a spreadsheet-like grid view showing all rows and columns, with the following controls available:

* Add Row — manually inserts a new empty row that you can fill in directly in the grid.
* Add Column — adds a new column to the table, with its own name and type.
* Search — a search box in the top-right filters rows matching the entered text.
* Row deletion — each row has a trash-can icon to delete it individually.
* Refresh and row counter — a refresh icon and a “Total number of rows: X / 200” counter are shown above the grid.

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

### Storage limit

There is an overall storage cap of a single Data Table. Its size cannot exceed 30 MB. This limit applies to the combined size of all rows and columns in the table, so it is worth keeping column content (especially long strings) reasonably compact, particularly for tables that are expected to grow toward the maximum row count.

## Using Data Tables in a Flow

Inside the Design Studio flow editor, Data Tables are accessed through the Data Table (BETA) block, found under the “Most used” / block category panel (the grid icon). Dragging this block into a flow lets you perform CRUD-style operations against one of your tables as part of the conversation logic.

### The Data Table block

Each Data Table block is configured with the following fields:

* Data table — a dropdown to select which table the block should operate on (e.g. “Users”).
* Operation — the action to perform on the table. Available operations are: Get, Insert, Update, Upsert, and Delete.
* Match conditions (Get, Update, Upsert, Delete) — one or more conditions used to filter/find rows, each defined by a Column, an Operator (e.g. Equal), and a Value. Multiple conditions can be combined with all (AND) or any (OR) logic, and further conditions can be added with Add condition.
* Assign result to — the name of the flow variable that will receive the operation’s result (e.g. data\_table\_result).
* Assign error to — the name of the flow variable that will receive error details if the operation fails (e.g. error).

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

Every block exposes two outgoing paths, shown on the right edge of the block:

* Success — followed when the operation completes successfully.
* else — followed when the operation fails or no matching row is found.

### Available operations

<figure><img src="/files/h7qrHtlkNso81AJ56blt" alt="" width="375"><figcaption></figcaption></figure>

<table data-header-hidden><thead><tr><th valign="top"></th><th valign="top"></th></tr></thead><tbody><tr><td valign="top"><strong>Operation</strong></td><td valign="top"><strong>Purpose</strong></td></tr><tr><td valign="top">Get</td><td valign="top">Retrieves one or more rows from the table that match the specified Match conditions. Typical use: check whether a record (e.g. a user by name or email) already exists.</td></tr><tr><td valign="top">Insert</td><td valign="top">Adds a new row to the table with the specified column values, without checking for existing matches.</td></tr><tr><td valign="top">Update</td><td valign="top">Modifies the column values of existing rows that match the given Match conditions.</td></tr><tr><td valign="top">Upsert</td><td valign="top">Updates the matching row if one exists, or inserts a new row if no match is found — useful for “create or update” logic in a single step.</td></tr><tr><td valign="top">Delete</td><td valign="top">Removes the rows that match the given Match conditions.</td></tr></tbody></table>

### Example: looking up and inserting users

A common pattern combines a Get block with an Insert block to avoid creating duplicate records. For example, a flow can:

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

1. Use a Data Table block with Operation = Get on the Users table, matching the Name column (Equal) against a value such as the visitor’s name, and store the result in data\_table\_result.
2. On the Success path, send a confirmation message such as “User found!” (optionally offering follow-up actions).
3. In parallel or as a fallback, use a second Data Table block with Operation = Insert on the same table to add a new row (e.g. via an “Add User” button in the chat), storing the outcome in the same or a different result variable.
4. On the Insert block’s Success path, send a confirmation message such as “User added!” to let the visitor know the record was created.

In both cases, the else path can be connected to an error-handling message, letting the bot gracefully inform the user (or an agent) that the lookup or insert did not succeed.

### Using the results in the flow

The value(s) assigned via “Assign result to” become a flow variable that can be reused anywhere later in the flow — for example, inserted into a message with curly-brace syntax, used inside a condition block, or passed to an AI/agent block as context. Likewise, the “Assign error to” variable can be inspected on the else path to branch the conversation based on the specific failure.


# Supported LLMs

Tiledesk's supported LLMs and integrations

<figure><img src="/files/DoYeNmkCrAldLrJqSxPA" alt="" width="375"><figcaption></figcaption></figure>

Tiledesk natively supports multiple Large Language Models, including both cloud-based solutions and open-source models via Ollama and vLLM integrations.

### Supported LLM providers and models <a href="#supported-llm-providers-and-models" id="supported-llm-providers-and-models"></a>

### Cohere

* command-r
* command-r-plus

### Google

* gemini-pro

### Anthropic

* claude-3-5-sonnet

### Groq

Grouped by "creator"

### Meta (LLAMA)

* llama-3.2-11b-vision-preview
* llama-3.1-8b-instant
* llama-3.2-3b-preview
* llama-3.2-90b-vision-preview
* llama-guard-3-8b
* llama3-8b-8192
* llama-3.2-1b-preview
* llama-3.3-70b-versatile
* llama3-70b-8192
* llama-3.3-70b-specdec

### Deepseek

* deepseek-r1-distill-qwen-32b
* deepseek-r1-distill-llama-70b

### Alibaba cloud

* qwen-2.5-32b

### Mistral

* mixtral-8x7b-32768

### Ollama/vLLM

* *User defined models*

Feel free to [ask for more models](mailto:support@tiledesk.com)


# Automations

[Webhooks Automations](/ai-chatbots-and-automation/automations/webhooks-automations)

[Build Agentic Sentiment Analysis](/ai-chatbots-and-automation/automations/build-agentic-sentiment-analysis)

[AI Agent that Schedules meetings via MCP server](/ai-chatbots-and-automation/automations/ai-agent-that-schedules-meetings-via-mcp-server)


# Webhooks Automations

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

**Webhooks Automations** in Tiledesk allow you to expose an automation flow as an HTTP endpoint that can be invoked by external systems.\
They work in a very similar way to **Make.com webhooks**, enabling event-driven integrations, backend-to-backend communication, and custom automation triggers.

A webhook automation acts as an **entry point** into a Tiledesk flow, receiving an HTTP request, processing it through the flow logic, and optionally returning a structured HTTP response.

## Create your webhook

Go in Flows > Automations anche choose "Webhook"

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

Choose a name for your Webhook

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

You are moved to the Webook Design Studio

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

When you create a Webhook Automation, Tiledesk automatically generates **two distinct webhook URLs**:

* **Development Webhook URL**
* **Production Webhook URL**

Each URL is tied to the same automation flow but serves a different purpose.

<figure><img src="/files/0eglwK624d3HhQouxYiB" alt=""><figcaption></figcaption></figure>

#### Development Webhook

The **development webhook** is designed for testing and debugging.

Key features:

* Invoking this endpoint allows you to **observe the execution of the flow in real time**
* A **live debug panel** appears at the bottom of the flow editor

<figure><img src="/files/6rijc0JswBveuZjbpWt2" alt=""><figcaption></figcaption></figure>

* You can inspect:
  * Incoming payload
  * Node execution order
  * Variables and intermediate data
  * Errors and exceptions

This makes it ideal for:

* Flow design and testing
* Payload inspection
* Debugging integration logic

#### Production Webhook

The **production webhook** is intended for live environments.

Characteristics:

* No real-time debug panel
* Optimized for performance and stability
* Should be used by production systems and external clients

Once your automation is tested via the development webhook, you can safely switch clients to the production URL.

### Incoming Payload Handling

All data sent to the webhook request is automatically made available inside the flow through the **`payload`** object.

#### Example

If an external system sends the following JSON body:

```json
{
  "name": "Andrea",
  "email": "andrea@example.com"
}
```

You can access these values anywhere in the flow using:

* `payload.name`
* `payload.email`

In the following example we are echoing the name provided in the post payload in the call

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

### Returning a Response

To return a response to the calling client, you must explicitly use the **Response** action inside the flow.

#### Response Action

The **Response** action allows you to define:

* HTTP status code (e.g. `200`, `201`, `400`, `500`)
* JSON response body

### Fire-and-Forget Webhooks

If **no Response action** is present in the flow:

* The webhook behaves as **fire-and-forget**
* Tiledesk immediately returns a default response to the caller
* The automation continues executing asynchronously in the background

This mode is useful when:

* The caller does not need a response
* You are triggering long-running or background processes
* You want maximum responsiveness on the client side

### Webhook Logs & Administration

Tiledesk provides a dedicated **Webhook Administration** section in the dashboard.

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

From this panel you can:

* Monitor **runtime webhook logs**
* Inspect request payloads and execution outcomes
* Temporarily **disable a webhook** if needed (e.g. for maintenance or security reasons)

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

This component is especially useful in production environments to ensure observability and operational control.

### Typical Use Cases

Webhook automations are ideal for:

* Integrating external systems (CRM, ERP, backend services)
* Triggering workflows from third-party platforms
* Receiving events from custom applications
* Building server-to-server automations
* Implementing asynchronous background processing

### Tiledesk Webhook Summary

* Webhooks automations expose Tiledesk flows as HTTP endpoints
* Two URLs are available: **Development** (with real-time debug) and **Production**
* Incoming request data is accessible via the `payload` object
* Use the **Response** action to return custom HTTP responses
* Without a Response action, the webhook runs in **fire-and-forget** mode
* The dashboard provides full monitoring and administrative control

This makes Tiledesk Webhooks a powerful and flexible foundation for event-driven automation and system integration.


# Build Agentic Sentiment Analysis

Learn how to analyze closed conversations automatically, assign a sentiment score, generate a short AI summary, and classify chats with useful tags in Tiledesk.

This tutorial explains how to build an Agentic Sentiment Analysis flow in Tiledesk.

The goal is to analyze a conversation when the chat is closed, even if the user does not leave an explicit rating or written feedback.

At the end of the flow, Tiledesk can:

* detect whether the transcript is meaningful
* assign a sentiment score from 1 to 5
* generate a short AI summary of how the conversation was perceived
* apply tags such as feedback, suggestion, error report, or feature request

This approach helps teams extract value from conversations that would otherwise end without any structured signal.

<figure><img src="/files/1gUOupzVuEf5Pid24U1f" alt=""><figcaption></figcaption></figure>

## What this workflow does

When a chat is closed, the workflow triggers an AI step that reads the conversation transcript.

The AI returns:

* **NC** (No Comment) if the transcript is not useful or does not contain enough meaningful information
* a score from **1 to 5** to represent the user’s likely sentiment
* a short mini-report that explains the likely outcome of the interaction
* a category based on the overall conversation

This makes it possible to monitor conversation quality even when the user does not leave a rating.

{% stepper %}
{% step %}

### Step 1: Identify the chat closing point

Open your flow in Tiledesk Design Studio and identify where the conversation ends.

This can be:

* a manual close action
* an automatic close after the final message
* a close triggered after a period of inactivity
* a close after a human handoff is completed

This is the point where the Agentic Sentiment Analysis should start.
{% endstep %}

{% step %}

### Step 2: Trigger a post-chat analysis flow

After the closing point, add a step that starts the sentiment analysis workflow.

The purpose of this step is to run the analysis only after the conversation is finished.

This is useful because:

* the AI can evaluate the full transcript
* the workflow stays lightweight
* the analysis is done only once per conversation
  {% endstep %}

{% step %}

### Step 3: Pass the transcript to the AI

Configure an AI step that receives the full conversation transcript.

At minimum, the AI should analyze:

* the user messages
* the assistant or agent replies
* the overall outcome of the conversation
  {% endstep %}

{% step %}

### Step 4: Ask the AI for a structured output

Configure the prompt so the AI returns a structured result.

A recommended output includes:

* **analysis\_status**
* **sentiment\_score**
* **mini\_report**
* **category**

#### Example structure

```
analysis_status: NC or valid

sentiment_score: number from 1 to 5

mini_report: short explanation of the likely user perception

category: one category based on the overall conversation
```

The important part is consistency. The output should always follow the same format.
{% endstep %}

{% step %}

### Step 5: Save the result in attributes

Once the AI returns the result, save it in conversation attributes.

For example:

* **analysis\_status**
* **sentiment\_score**
* **mini\_report**
* **ai\_category**

This allows you to reuse the output later in analytics, filtering, and follow-up automations.

<figure><img src="/files/2fD8MFfJjfNIwFF3VaRh" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Step 6: Apply tags automatically

If your AI returns a category, use it to classify the conversation automatically and add it as a tag using [Add Tag](/ai-chatbots-and-automation/actions-explained/add-tag)action.

You can use one of these categories:

* **product\_feedback**
* **missing\_features**
* **support\_quality\_issues**
* **repeated\_error\_reports**

This step turns sentiment analysis into something operational, not just descriptive.

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

After applying tags automatically, you can go to Tiledesk Analytics and view conversations together with their related tags in a simple way.

<figure><img src="/files/uAM9ZtYesaQPvzvBGokL" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

## Simple prompt example for category classification

To keep this part simple, you can add a prompt that asks the AI to read the full conversation and return only one category.

Use a prompt like this:

```
Read the full conversation carefully.

Based on the overall conversation, classify it into one and only one of the following categories:

product_feedback
missing_features
support_quality_issues
repeated_error_reports

Rules:
- Read the full conversation before deciding
- Choose only one category
- Answer strictly with one of the category names above
- Do not add explanations
- Do not add any extra text

Conversation:
{{conversation}}
```

With this prompt, the AI acts as a strict classifier and returns only one value that you can save in an attribute or apply directly as a tag.

## Why this is useful in Tiledesk

This workflow fits well in Tiledesk because it can be built with a no-code approach and extended over time.

It helps teams:

* capture signals from unrated conversations
* classify feedback automatically
* detect recurring issues
* improve support quality
* turn closed chats into actionable insight

{% hint style="info" %}
Instead of letting conversations disappear once they are closed, you can use them to generate structured data for continuous improvement.
{% endhint %}

Hope it’s helpful.

***

To read more about Tiledesk, visit: <https://www.tiledesk.com>

In case you have a question, email us at: <support@tiledesk.com>


# AI Agent that Schedules meetings via MCP server

This tutorial explains how to build an AI Agent in Tiledesk that can schedule meetings automatically.

The goal is to create a simple flow where the agent collects booking details during the conversation, checks availability in Google Calendar, and creates the meeting directly when a slot is free.

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

## What this workflow does

At the end of this setup, your AI Agent will be able to:

* greet the user
* ask for the information needed to schedule a meeting
* check availability in Google Calendar
* suggest alternative slots if the requested one is not available
* create the calendar event automatically
* confirm the booking in the conversation

{% stepper %}
{% step %}

### Create a Google Calendar MCP server

First, create an MCP server for Google Calendar.

You can build it with the platform you prefer. One option is Composio, which supports MCP server creation and managed authentication for connected tools.

Once the Google Calendar MCP server is ready, keep the MCP endpoint and credentials available for Tiledesk.
{% endstep %}

{% step %}

### Create a simple scheduling flow in Tiledesk

In Tiledesk, create a new flow dedicated to appointment booking.

This flow can stay very simple and include just 3 blocks:

* one block for the welcome message
* one **AI Prompt** block that asks questions and handles the conversation
* one **AI Reply** block that collects the user input and keeps the interaction going

This structure is enough to build a first working version of the scheduling assistant.

<figure><img src="/files/DUwlHs9uIXHZ1HybIQjo" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Add the welcome message

Start the flow with a short message that explains what the AI Agent can do.

For example:

**Hi, I can help you schedule a meeting. To get started, I just need a few details.**

This makes the entry point clear and prepares the user for the next step.

<figure><img src="/files/27jQleBVaRVNzQksm7BS" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Configure the AI Prompt block

This is the core block of the workflow.

At Tiledesk, we have developed [**AI Prompt** ](/ai-chatbots-and-automation/actions-explained/ai-prompt-multi-llm)to let you define the role of the AI Agent, guide the conversation, and decide which action it should take inside the flow.

In this block, your AI Agent should:

* ask for the user’s full name
* ask for the email address
* ask for the preferred date
* ask for the preferred time
* ask for the timezone
* optionally ask for a short meeting note
* check Google Calendar before confirming any booking
* offer 3 nearby free slots if the requested slot is busy
* create the event if the slot is free
* confirm the meeting clearly in the chat

The AI Prompt block is also where you connect the Google Calendar MCP server, so the AI Agent can move from conversation to action in the same step.

<figure><img src="/files/27jQleBVaRVNzQksm7BS" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Add the AI Reply block

After the AI Prompt block, add the **AI Reply** block.

This block is used to [collect the user input ](/ai-chatbots-and-automation/actions-explained/capture-user-reply-action)and continue the conversation naturally while the AI Agent gathers the booking details and moves the scheduling flow forward.

In practice, this is the block that keeps the interaction smooth while the AI Prompt block handles the logic and the Google Calendar MCP server handles the action.

{% endstep %}

{% step %}

### Let Google Calendar create the event

Once the requested slot is available, the AI Agent should create the event through the Google Calendar MCP server.

Google Calendar supports event creation through the Calendar API, and when attendees are included, email notifications can also be sent through the event insert flow by using the attendee and update settings.
{% endstep %}
{% endstepper %}

## Prompt example for the scheduling AI Agent

Use this as a starting point for the AI Prompt block:

```
You are an AI assistant connected to my Google Calendar.
Your task is to help schedule meetings based on my availability and create the calendar event only when a suitable slot is found.

Before every reply:
- Read the full transcript: {{transcript}}
- Read the last user message: {{lastUserText}}
- Identify which details have already been provided
- Never ask again for information that is already clearly present
- Ask only the next missing question
- Ask questions one by one and wait for the user reply before asking the next one

Required information:
1. user name
2. reason for the meeting
3. user email address to send the calendar invitation
4. preferred date
5. preferred time
6. time zone if provided by the user

Flow:
1. First, ask for the user name.
2. Then ask for the reason for the meeting, and mention that the meeting is **30 minutes** by default.
3. Then ask for the user email address to send the calendar invitation.
4. Then ask for the preferred **date** and **time**, and ask the user to include their **time zone** in the same message.
5. If the user does not provide a time zone, use **CEST** as the default.
6. Once all required information is collected, check my calendar for that exact requested slot.
7. A slot is available only if the **entire meeting duration** fits inside a completely free continuous interval.
8. If there is **any overlap**, even partial, treat the slot as unavailable.
9. Also treat **pending**, **tentative**, **unaccepted**, or **awaiting-response** events on my calendar as **busy**.
10. Never create a meeting on top of another existing event.
11. If the slot is free:
   - create the event
   - add the provided email address as attendee
   - send the invitation to that attendee
   - include the meeting link if available
   - confirm that the meeting has been scheduled
   - always share the **meeting link** in the final confirmation message
   - thank the user
12. If the slot is not available:
   - do not create the event
   - inform the user that the requested slot is not available
   - suggest 3 closest available slots based on the requested time, the user's time zone or default **CEST**, and my availability
   - ask the user to choose one of those slots or share a different date and time
13. When suggesting alternative slots:
   - suggest only slots where the **full meeting duration** fits without any overlap
   - never suggest a slot that starts inside a busy interval
   - never suggest a slot that partially overlaps with an existing event
   - never suggest a slot if any part of the requested duration falls inside an occupied period
   - validate the suggested slots against my calendar before sharing them
   - only offer slots that are already truly bookable
   - do not offer a slot first and reject it later unless my calendar changed after the suggestion
14. If the user selects one of the suggested slots:
   - re-check that slot immediately before creating the event
   - if it is still fully free for the **entire duration**, create the event
   - add the provided email address as attendee
   - send the invitation
   - include the meeting link if available
   - confirm that the meeting has been scheduled
   - always share the **meeting link** in the final confirmation message
   - thank the user
15. If the user proposes a different date and time:
   - use the provided time zone, or **CEST** if none is provided
   - check my calendar again for that exact slot
   - if the slot is fully free for the **entire duration**, create the event, add the provided email address as attendee, and confirm it
   - always share the **meeting link** in the final confirmation message
   - if the slot is not free, suggest 3 new closest available slots
16. Continue this process until a mutually accepted available slot is found and the event is created.

Rules:
- Always check my calendar before creating any event.
- Never invent availability.
- Never confirm a meeting unless it has actually been created through the calendar tool.
- Never ask repetitive questions.
- If the email address looks invalid, ask the user to correct it.
- Keep replies short, clear, friendly, and natural.
- If the user gives multiple details in one message, do not ask for them again. Move to the next missing item.
- If the user changes the requested date or time, use the latest user instruction.
- Default meeting duration is **30 minutes** unless the user says otherwise.
- The requested slot must be checked using the full **start time** and **end time**.
- If any event already exists during that full interval, do not create the new meeting.
- Do not place a meeting above, inside, or overlapping another event on my calendar.
- Always re-check availability immediately before creating the event.
- Do not ask for the time zone in a separate question unless the date and time are still missing.
- When asking for date and time, ask the user to include the **time zone** in the same message.
- If the user does not provide a time zone, assume **CEST**.
- Show suggested slots in the user's time zone if provided, otherwise in **CEST**.
- If the calendar tool returns a meeting link, always include it in the final confirmation.
- If no meeting link is returned, say so clearly.
- Treat tentative, pending, unaccepted, or awaiting-response events as unavailable.

Response style:
- Ask only one question at a time.
- Be polite, conversational, and concise.
- Use light markdown to emphasize important details, such as **date**, **time**, **time zone**, and **meeting link**.
- After successful booking, clearly confirm the final **date**, **time**, **time zone**, and **meeting link**, then thank the user.

Examples of good behavior:
- If the user already shared their name and email, do not ask for them again.
- When asking for scheduling preferences, ask for **date**, **time**, and **time zone** together in one message.
- If the user does not mention a time zone, use **CEST**.
- If the user asks for **1:00 PM** and the calendar is busy from **1:00 PM to 3:00 PM**, do not suggest **1:30 PM**, **2:00 PM**, or **2:30 PM** for a 30-minute meeting.
- Only offer slots that are truly bookable for the full duration.
```

I hope you find this tutorial helpful. Stay tuned for more.

In case you need further assistance, contact us at <support@tiledesk.com>.

To read more, visit [www.tiledesk.com](https://www.tiledesk.com/).


# ChatGPT Hacks

[How to connect your Knowledge Base for GPT automation](/chatgpt-hacks/how-to-connect-your-knowledge-base-for-gpt-automation)

[Learn how to prioritize Inbound Requests thanks to ChatGPT](/chatgpt-hacks/learn-how-to-prioritize-inbound-requests-thanks-to-chatgpt)

[Create an AI Assistant in OpenAI](/chatgpt-hacks/create-an-ai-assistant-in-openai)

[Mix multiple Knowledge Bases outcomes](/chatgpt-hacks/mix-multiple-knowledge-bases-outcomes)

[How to send your images through AI](/chatgpt-hacks/how-to-send-your-images-through-ai)

[How to use GPT & Set of Variables to make enquires about products](/chatgpt-hacks/how-to-use-gpt-and-set-of-variables-to-make-enquires-about-products)


# How to connect your Knowledge Base for GPT automation

Title: Connecting Your Knowledge Base to Tiledesk Using ChatGPT

#### Introduction <a href="#introduction" id="introduction"></a>

Integrating ChatGPT into Tiledesk can enhance your chatbot's capabilities by connecting it to a knowledge base (KB). This tutorial will guide you through the steps to connect your knowledge base to Tiledesk using ChatGPT. This integration enables your chatbot to retrieve information from the KB to provide more accurate responses to user queries. You'll be able to upload your own KB by simply indexing a chunk of URLS, a sitemap and/or uploading plain text.

#### Prerequisites <a href="#prerequisites" id="prerequisites"></a>

* Access to Tiledesk account.
* URL(s) of your knowledge base.
* FAQ plain text to copy & paste.
* Your sitemap.

{% embed url="<https://www.youtube.com/watch?embeds_referring_euri=https://gethelp.tiledesk.com/&source_ve_path=MzY4NDIsMjg2NjY&time_continue=2&v=it9I7bDWsTQ>" %}

#### Steps <a href="#steps" id="steps"></a>

**1. Add your Knowledge Base (KB):**

* Log in to your Tiledesk account.
* Navigate to the Chatbots section.
* Scroll down to Knowledge Base: Manage your Contents
* Index a chunk of URLs, plain text or a sitemap, as below.

<figure><img src="/files/6Gxucto4H8ejQSqHPttm" alt=""><figcaption></figcaption></figure>

**2. Set Up Your Welcome Message:**

* Still in the chatbot settings, scroll down to the "Welcome Message" section.
* Customize your welcome message as desired. This is the initial message users will receive when interacting with your chatbot, see an example below.

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

**3. Add "Ask the Knowledge Base" Action:**

* Navigate to the "Actions" menu in your chatbot configuration.
* Select "Ask the Knowledge Base" from the Integrations drop down list of actions.
* Drag and drop it within the **Default Fallback Block**, as below.

<figure><img src="/files/0bl0iz9F7OlsW3MG9Lj0" alt=""><figcaption></figcaption></figure>

**4. Add Reply Attributes: kb\_reply and kb\_source:**

* While still in the Actions section, edit the "Ask the Knowledge Base" action.
* In the action settings, find the "Reply Attributes" section.
* Add two reply attributes:\
  &#x20;   \- "kb\_reply": This attribute will store the response retrieved from the knowledge base.\
  &#x20;   \- "kb\_source": This attribute will hold the source or reference of the KB information, see below.

**5. Create Paths for Success and Failure Blocks:**

You'll need to create two paths: 1st connected to “Success” path and 2nd connected to the “Fail” path.

* Create a new path by clicking the green exit port (Success) and connect it to the "KB Success" block. This path represents successful knowledge base responses.
* Create a second path from the red exit port (Else) to a new block called "KB Fail." This path will handle cases where the knowledge base doesn't provide a relevant response, see below.

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

With these steps completed, your ChatGPT-powered chatbot in Tiledesk is now connected to your knowledge base. When users interact with the bot, it will use ChatGPT to query the KB for information, store the response and source, and guide users through the appropriate path based on the KB's response.

**6. How to refresh, check status, and delete your KB contents**

Remember to regularly update your knowledge base to ensure that your chatbot provides accurate and up-to-date information to users. Additionally, you can further customize your chatbot's behavior and responses based on the knowledge base content and user needs. Once updated, click on the **Refresh** icon to refresh your resources, as below.

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

To check each content's **status**, click on the three dots and choose “Check status”. Similarly, chose the “Delete” option if you want to **remove** a content, as below.

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

Thanks for reading. For any feedback, shoot an email to <info@tiledesk.com>


# Learn how to prioritize Inbound Requests thanks to ChatGPT

#### **Intro** <a href="#intro" id="intro"></a>

In this tutorial, we'll dive into the powerful world of customer support optimization by harnessing the synergy of Tiledesk Generative AI Chatbot Development and the integration capabilities of ChatGPT by OpenAI. Learn how to tag inbound customer requests and define their priority levels, all with the help of cutting-edge AI technology. Let's begin!

#### **Step 1: Prepare Your Use Case and Attributes and create a GPT Task block** <a href="#step-1-prepare-your-use-case-and-attributes-and-create-a-gpt-task-block" id="step-1-prepare-your-use-case-and-attributes-and-create-a-gpt-task-block"></a>

* To generate pertinent responses using GPT, you need to define a prompt that instructs GPT on how to generate an answer based on the customer's feedback. Before you start, it's essential to have a clear use case in mind. For example, let's say you want to create a bot that handles support requests based on their urgency or priority.&#x20;
* In ythe DefaultFallback block, choose the GPT Task action; therein assign an attribute to the gpt response as well as the last user’s text. You can create a custom attribute (e.g., "gpt\_reply”, “last\_user\_text”) to intercept the generated response by ChatGPT based on what the user has told you last.
* Consider the context of your chatbot. If your use case involves support requests, you might use a prompt like: "Analyse an incoming customer request via live chat ot determine its priority. If the priority is high, you can answer “high”, otherwise “low”

#### **Step 2: Set the Max Number of Tokens** <a href="#step-2-set-the-max-number-of-tokens" id="step-2-set-the-max-number-of-tokens"></a>

* Decide the maximum number of tokens you want the GPT response to have. Tokens are chunks of text, and limiting their number can help control the length of the generated responses.
* For example, if you want concise responses, you might set the max number of tokens to 50. If you want more detailed responses, you can set it to a higher value, like 150.

#### **Step 3: Set up a condition with GPT Attribute** <a href="#step-3-set-up-a-condition-with-gpt-attribute" id="step-3-set-up-a-condition-with-gpt-attribute"></a>

* Once configured your GPT Task block, add a “Condition" action below to generate the response based on the set condition.
* To set the "Condition", configure the "gpt\_reply" attribute to: “contains Ignore Case” and in the value filed insert the word “high”.
* This way if the GPT answer is high, it won’t text it to the user.

#### **Step 4: Configure the Urgent + Not Urgent blocks** <a href="#step-4-configure-the-urgent-not-urgent-blocks" id="step-4-configure-the-urgent-not-urgent-blocks"></a>

* Create a new block called “Urgent” where you can customize your customer service by connecting immediately a human agent, for example.
* Create another block for Low Urgency where instead you can connect your user’s data and inform them that you’ll look into the issue ASAP.
* If the condition set up in Step 3 is met - the priority is indeed found to be high by GPT Task - the block called “Urgent will be actioned.
* Conversely - or “else” - the conversation will continue to the “Not Urgent” block.

#### **Step 5: Test Your Chatbot** <a href="#step-5-test-your-chatbot" id="step-5-test-your-chatbot"></a>

* Test your chatbot to ensure it generates pertinent responses based on customer feedback.
* Provide feedback in the chat to see how the GPT-generated response is handled.
* Verify that the response is captured in the "gpt\_reply" attribute and displayed correctly to the user.

\
That's it! You've successfully created a chatbot with Tiledesk Design Studio that uses the GPT Task feature to analyze the support requests based on user's feedback. This can greatly enhance your chatbot's ability to tag inbound support request an prioritize the support needed.


# Create an AI Assistant in OpenAI

OpenAI has recently enabled Assistants that can work seamlessly with different file formats, such as Google Sheets. This advancement allows you to create an AI assistant for sales and support using the most recent model, ChatGPT-4o.

You can now develop an AI sales assistant that utilizes a product listing to guide users in finding the best product fit within seconds, rather than leaving them to sift through tens or hundreds of similar products.

\
After observing the initial results, we decided to add a new action called “GPT Assistant” to enable you to connect your AI agent to GPT Assistant for enhanced performance with numeric data.

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

We’ve previously explained the use of the [**GPT Assistant action**](/ai-chatbots-and-automation/actions-explained/chatgpt-assistant-beta) in the Tiledesk Design Studio.&#x20;

This tutorial will guide you through creating your AI assistant on OpenAI.

Please note that a custom plan from OpenAI is required for this tutorial. If you don’t have one, there’s no need to worry—contact us at [**support@tiledesk.com**](mailto:support@tiledesk.com), and we’ll provide access to ours.

#### How to Create an AI Assistant in OpenAI <a href="#how-to-create-an-ai-assistant-in-openai" id="how-to-create-an-ai-assistant-in-openai"></a>

Visit OpenAI and navigate to ‘Products’, then ‘API’.

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

Log in and select ‘API’.

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

Make sure you’re on the Dashboard and click on ‘Assistant’ from the left sidebar menu.

Click the green ‘Create’ button in the top right corner.

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

Name your assistant and provide context in the ‘Instructions’ section to fine-tune your assistant’s responses.

Select the model; for this example, we’re using GPT-4o.

Remember, if you’re uploading a CSV file, it’s best to use a Code interpreter. For PDF or text files, use the File Search feature.

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

Now, copy the assistant ID and proceed to the Tiledesk dashboard. Click on the block where the ChatGPT Assistant is placed, and in the right-side menu, paste the assistant ID into the “Assign GPT Assistant” field.

<figure><img src="/files/4ydmJEPHGJtg62TrBXmO" alt=""><figcaption></figcaption></figure>

That’s it! With Tiledesk’s native integration with OpenAI, your AI agent can now harness the capabilities of an AI assistant powered by GPT-4o

Hope this helps.

In case you need further assistance, do not hesitate to contact us via [**support@tiledesk.com**](mailto:support@tiledesk.com)**.**

For more information, please visit [**www.tiledesk.com**](https://tiledesk.com/)**.**


# Mix multiple Knowledge Bases outcomes

Sometimes a single Knowledge base is not enough. Some examples:

1. You indexed your PDFs or your website but you want to add more knowledge ar runtime, without modifing or adding more pdfs, modifing original website pages etc.
2. You splitted your Knowledge base in more KBs for easy maintainance, but you want to query all you KBs all at once to find out the best answer from all of them
3. You uploaded your original contents but you wnat to fix some reply, improving the answer quality, without touching the original contents (pdfs, docs, website pages etc.)

There are a lot of ways to achieve the previous goals. But first of all you will take advantage of the Tiledesk ability to **mix multiple Knowledge Bases in the same chatbot flow**.

How to mix many KBs to provide the best answers? Use prompt engineering! In the following article we want show you one elegant way to reach your “KBs mixing” goals using prompts with the Tiledesk Design Studio.

In Tiledesk we have our Help Center (<https://gethelp.tiledesk.com/>) that we indexed for live cunsulting through our chatbot in our home page:

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

You can ask everything you find in the Help Center to our chatbot. Our RAG engine will provide you the best available answer using the Knowledge base action filled up using the tiledesk sitemap ("<https://gethelp.tiledesk.com/sitemap.xml>" uploaded with the “sitemap” feature of the KB).

What happens when we want to add some additional content in our Help Center but without modifying or updating it?

You can simply add another Knowledge base action in the flow. In the new one you can add more FAQs, fixing some reply adding more info and/or using some external content that you don't want to add to your online Help center (e.g. because of SEO policies) etc. How can query all of your KBs at once getting a simple, unique, comprehensive reply mixing the best of all your KBs? Use a super prompt!

Suppose that we want our chatbot to also reply to some prompt engineering questions, despite the fact that this course is not available in our Help Center. We can add all the course contents into a specific KB created for the pourpose.

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

Well, now we want to get replies from both our KBs, Tiledesk Help Center and Prompt engineering course. Move to our designer. Put in chain the two KBs as in the following picture.

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

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

There is no need to connect the Success and Else flows. When no connectors are set the Actions are executed, the attributes populated (kb1 and kb2) and the flow continues upward → downward. When a connector is encountered it will be automatically followed.

During the flow kb1 attribute will be fulfilled with the reply eventually coming from the first KB query (tiledesk), and kb2 with the reply from the second one (prompt engineering course). At this point we have 2 attributes available, eventually populated with some content (depending on the user question asked during flow runinng).

Here is where the magin happens. Create a new block with the GPT Task, with the following prompt, that will mix both replies, generating the best answer mixing kb1 and kb2 attributes:

<figure><img src="/files/0AMj42aYRHvqC2RDxFgs" alt=""><figcaption></figcaption></figure>

This is the whole flow:

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

How it works? Simply ask something targeted for the first or the second Knowledge base, and the prompt will do the magic of mixing the contents togheter. I asked for some info about Prompt engineering and the chatbot correctly got the reply from the second KB (prompt engineering course)

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

Then I asked something about Tiledesk, and the “tiledesk” Knowledge Base replied accordingly:

<figure><img src="/files/9x3tpRYIy5Lnjzd9GRg4" alt=""><figcaption></figcaption></figure>

We also introduced a typo, just to show you how great are LLMs : )

This is the prompt we used:

```
Generate an answer to the user's question using the text contained between << >>
<<
{ {kb1} }
{ {kb2} }
>>
user's question: 
```

You can also use this method to mix whatever content you like. You can for example mix contents coming from multiple [OpenAI Assistants](/ai-chatbots-and-automation/actions-explained/chatgpt-assistant-beta) or mixing Ask KB Actions with OpenAI Assistants and whatever new content actions will come in the future!

This Chatbot is available to fork on the community! <https://tiledesk.com/community/search/getchatbotinfo/chatbotId/66e55d1feb7e950013c54d48-Mixing-Knowledge-Bases>

Write to <info@tiledesk.com> for more info. Happy Tiledesk!


# How to send your images through AI

This chatbot is designed to analyze and respond to user-submitted images, specifically focusing on bicycles in this case scenario; you can decide on what topic to focus. The bot guides users through uploading images and gathers responses based on the image and accompanying text inputs.

The core functionality of the chatbot centers around its ability to analyze images, specifically bicycle images, using OpenAI's Vision API (GPT-4 with vision) to produce meaningful insights. This step-by-step breakdown shows how the bot processes and responds to images with integrated AI capabilities.

**1. Set Up Basic Intent Structure**

* **Intents or Blocks** are the foundational units that define the bot's responses and actions. For this bot:
  * There is a **welcome intent/block** that triggers an initial greeting and a prompt to upload an image with the following message “*Insert an image, please*”.
  * A **default fallback intent/block** is usually set up to handle unrecognized inputs with prompts like “Can you rephrase your question?” BUT in this case, it is set up to prompt the user to write what they want to know about the image they've uploaded.

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

**2. Image Analysis Using Vision API and GPT Integration**

* **Vision API Intent**: This is the primary feature where the bot analyzes the uploaded images and responds with insights.
* **Steps in Image Analysis**:
  * **Image Request**: Users are instructed to upload an image. The bot pauses with a message like, "Analyzing...".
  * **Web Request Setup**: Choose the “Post” option and then insert the API: <https://api.openai.com/v1/chat/completions>

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

* **Prompt Design**: Choose then the “Body” option where you can insert the Json-structured prompt: {\
  &#x20;  "model": "gpt-4o-mini",\
  &#x20;  "messages": \[\
  &#x20;    {\
  &#x20;      "role": "user",\
  &#x20;      "content": \[\
  &#x20;        {\
  &#x20;          "type": "text",\
  &#x20;          "text":\
  &#x20;        },\
  &#x20;        {\
  &#x20;          "type": "image\_url",\
  &#x20;          "image\_url": {\
  &#x20;            "url":\
  &#x20;          }\
  &#x20;        }\
  &#x20;      ]\
  &#x20;    }\
  &#x20;  ],\
  &#x20;  "max\_tokens": 300\
  &#x20;}
* **Authorization**: Insert the attribute in this field after you've inserted the OpenAI Key in the Globals section of your Bot you'll find as the third icon on the far right of the Design Studio.
* **Result Processing**: The API’s response is stored in a variable (*result*), which the bot formats and relays back to the user as a detailed bike description.

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

**3. Sending the Image to OpenAI’s Vision API**

* **API Call Configuration**: The bot constructs an API request to OpenAI's GPT-4 Vision API. This API call is configured to send both a text prompt and the image URL to the model for processing.
* **API Request Structure**:
  * The bot first extracts the URL of the uploaded image and then incorporates this URL into the API request.
* The prompt given to the model is crucial. In this case, it’s set to “Describe this bike in detail, including color, frame style, and any visible features.” A well-designed prompt helps the model return a comprehensive description.

**4. Handling the Response from the Vision API**

* **Data Extraction**: The API’s response includes detailed descriptions of the bicycle, such as frame type, color, and any notable features.
* **Storing the Result**: The bot stores the response in a variable (e.g., result) to ensure the data is readily accessible for further steps.
* **Error Intent**: If an error occurs during API interaction, the bot captures and displays it in the error attribute.
* **User Feedback**: The bot formats the response and sends it back to the user as a detailed description, ensuring the information is clear and user-friendly.
* **Optional follow-ups**: After displaying the results, the bot asks if the user wants to upload another image.&#x20;

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

**5. Integration with Tiledesk and OpenAI API**

* **API Authorization**: The bot uses an API key stored securely in Tiledesk’s backend. Requests to OpenAI's API are authorized using the Authorization header.
* **JSON Configuration**: The bot uses JSON requests to send and receive data from the Vision API, following a structured format for image and text-based queries.

The integration of Tiledesk with OpenAI’s GPT-4 Vision API is essential for powering the image analysis functionality. This section covers the key aspects of securely setting up and utilizing APIs for optimal performance.

**A. Obtaining and Securing API Keys**

* **API Key for OpenAI**: The bot requires an API key to access OpenAI’s Vision API. This key is issued upon account creation and is securely stored in Tiledesk’s backend or a secure environment variable.
* **Authorization**: When making requests to OpenAI’s API, the bot includes the API key in the request headers to authenticate each call.

**B. Configuring the API Requests in Tiledesk**

* Tiledesk allows for custom API integrations by configuring webhook requests in the bot’s setup. In this case:
  * **Webhook Settings**: The bot’s webhook is configured to route each user image upload request to OpenAI’s Vision API endpoint.
  * **API Endpoint**: The API endpoint for OpenAI’s Vision model is specified in Tiledesk, allowing each request to be seamlessly routed.
* **Testing the API Call**: Once configured, initial tests are conducted to ensure the bot successfully sends requests and receives the desired image descriptions in response.

**C. Handling the API Response**

* The bot’s code processes the JSON response from the OpenAI API, extracting and formatting the description data to make it user-friendly.
* **Example of a Response Handling Snippet**:
* This approach ensures that users receive a clear and relevant answer based on the image they submitted.

**D. Structuring the JSON Configuration for API Requests**

* Each API request is structured in JSON format, specifying the model, prompt, image URL, and optional settings like max\_tokens to control the length of the response.
* **Example JSON for API Request**:
* This structure allows the chatbot to send specific prompts and receive detailed responses tailored to the user's query.

**E. Error Handling and Fallbacks**

* **API Error Handling**: If the API fails or returns an error, the bot is configured to catch these errors and respond with an informative message to the user.
* **Fallback Responses**: If the response does not meet the expected criteria (e.g., if it’s too vague or irrelevant), the bot can prompt the user to try rephrasing their request or uploading a clearer image.

**F. Data Security and Compliance**

* **Storing User Data**: All API interactions should comply with data protection standards. User images and messages should be securely stored, anonymized if necessary, and deleted after a specified period to protect user privacy.
* **Using Environment Variables**: API keys and other sensitive data are stored in environment variables or Tiledesk’s secure backend settings to prevent unauthorized access.

This chatbot structure efficiently guides users through image-based inquiries, responds with relevant information using AI, and ensures a smooth user experience through predefined fallback and error responses. This setup can be adapted to various applications requiring image analysis and detailed feedback.


# How to use GPT & Set of Variables to make enquires about products

Here it is:

#### **1. First, select “Globals” from the left sidebar menu.**&#x20;

Then, add a new global variable, as shown in the image below.

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

#### **2. Next, choose a Key for your variables and input your price list in the Value section**

see image below

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

#### **3. Now, return to the Blocks section to design the bot**

You’ll need an action called “Capture User Reply” to capture the customer’s response. You can assign an attribute to it. In this case, I used ‘UserReply’ as the attribute

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

#### **4. For the next block, use the ‘ChatGPT Task’ action**

You can see the prompt that includes the Global's attribute created earlier under ‘pricetable’. Getting the perfect prompt might require a few attempts to get it just right.

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

**5. Finally, add a new reply block and simply choose the gpt\_reply.**

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

That’s it! In the video below, you can see how the bot finds the price in the table and shares it with the user.

<figure><img src="/files/0LZHOJyZFL3uk9YeAS1w" alt=""><figcaption></figcaption></figure>

Cheers

Tiledesk Team


# Prompt Engineering 101

[How to Draft a Step-by-Step Prompt for Effective Customer Support](/prompt-engineering-101/how-to-draft-a-step-by-step-prompt-for-effective-customer-support)


# How to Draft a Step-by-Step Prompt for Effective Customer Support

#### **Intro: A Chain-of-Thought Approach** <a href="#intro-a-chain-of-thought-approach" id="intro-a-chain-of-thought-approach"></a>

When drafting prompts for customer support agents, the goal is to create a systematic, logical structure that ensures every customer inquiry is handled effectively. This "chain-of-thought" approach helps agents provide clear, empathetic, and efficient solutions while maintaining consistency. Below is a generic framework, suitable for customer support across industries, inspired by the principles of the step-by-step prompt method.

Once ready, ensure you insert your prompt in the AI settings section >> System context. Together with the prompt, you can choose the GPT Model as well as set up the temperature, a maximum number of AI tokens, and chunks when scraping your dedicated [Knowledge Base](/chatgpt-hacks).

***

#### **1. Define the Role and Context** <a href="#id-1-define-the-role-and-context" id="id-1-define-the-role-and-context"></a>

Start by clearly outlining the role of the customer support agent and the type of support they provide. This ensures the agent understands their purpose and the scope of their responsibilities. For example:

* **Role:** The agent should be knowledgeable, approachable, and skilled in resolving common customer issues within the domain (e.g., internet services, e-commerce, or technical support).
* **Context:** The agent operates within a structured support flow, using tools like a knowledge base (KB) and FAQs to assist customers efficiently.

***

#### **2. Adopt a Step-by-Step Framework** <a href="#id-2-adopt-a-step-by-step-framework" id="id-2-adopt-a-step-by-step-framework"></a>

A step-based approach allows agents to solve customer problems in a logical and manageable sequence. Here’s how to structure the framework:

**Step 1: Clarify the Customer’s Query**

* Begin by actively listening to the customer’s problem or question.
* If the query is unclear or missing critical information, kindly ask for clarification. For example:\
  *"Could you provide more details about the issue you’re facing? This will help me assist you better."*

**Step 2: Present the Proposed Steps**

* Once the problem is understood, present a series of actionable steps to resolve it. Use clear, numbered points, ensuring each step is concise and starts with a **bolded action** (e.g., *"Restart your router."*).
* Order steps logically, prioritizing non-intrusive actions first (e.g., checking settings before resetting equipment).
* Example phrasing:\
  \*"Here’s what we can do to solve this issue:
  1. **Restart your device.** Turn it off and back on to reset its connection.
  2. **Check for network outages.** Visit our outage page here: \[link].\
     Let me know if you’d like to proceed!"\*

**Step 3: Execute and Verify Each Step**

* Guide the customer through each step, one at a time. After completing a step, ask for feedback:\
  *"Step 1: Restart your router by pressing the power button. Did this resolve the issue?"*
* If a step resolves the issue, confirm it with the customer before proceeding further.

***

#### **3. Confirm Resolution and Offer Additional Help** <a href="#id-3-confirm-resolution-and-offer-additional-help" id="id-3-confirm-resolution-and-offer-additional-help"></a>

* Once the customer confirms their issue is resolved, perform a follow-up check to ensure satisfaction. For example:\
  *"Great! Could you run a quick test to confirm everything is working as expected?"*
* Always offer additional assistance before ending the interaction:\
  *"Is there anything else I can help you with today?"*

***

#### **4. Address Customer Frustration** <a href="#id-4-address-customer-frustration" id="id-4-address-customer-frustration"></a>

If the customer expresses frustration or dissatisfaction:

* Empathize and apologize sincerely: *"I’m sorry to hear this has been frustrating. Let’s get this sorted for you as quickly as possible."*
* If the customer prefers speaking with a human agent, initiate a transfer with clear communication:\
  *"I’ll transfer you to one of our live agents right away. Please hold on."*

***

#### **5. Handle Technical Issues with Precision** <a href="#id-5-handle-technical-issues-with-precision" id="id-5-handle-technical-issues-with-precision"></a>

For troubleshooting specific technical problems (e.g., internet connectivity or software bugs), follow these best practices:

* Identify the root cause systematically (e.g., check for outages, confirm equipment functionality, distinguish between hardware and software issues).
* Use general instructions if the exact details (e.g., router model) are unavailable.
* Prioritize actions that minimize customer effort, such as remote diagnostics or easy-to-follow guides.

***

#### **6. Use Knowledge Base and Tools Effectively** <a href="#id-6-use-knowledge-base-and-tools-effectively" id="id-6-use-knowledge-base-and-tools-effectively"></a>

* Provide resources like step-by-step guides, FAQ articles, or video tutorials where applicable. Ensure links are clear and relevant to the issue.
* Structure article links and resources in a consistent format, such as:\
  *"You can find more details in this guide: \[link]."*

***

#### **7. End the Interaction Gracefully** <a href="#id-7-end-the-interaction-gracefully" id="id-7-end-the-interaction-gracefully"></a>

When the customer’s issue is resolved, or they no longer need assistance, close the conversation politely. Use a friendly and professional tone, such as:\
*"Thank you for reaching out! Enjoy the rest of your day!"*

***

#### **8. Optimize Prompts for Industry-Specific Needs** <a href="#id-8-optimize-prompts-for-industry-specific-needs" id="id-8-optimize-prompts-for-industry-specific-needs"></a>

Tailor the generic framework to match the industry you’re supporting. For example:

* In **e-commerce**, include steps like confirming order details or checking refund policies.
* In **telecommunications**, prioritize troubleshooting for common connectivity issues (e.g., router resets, service outages).
* In **software support**, focus on guiding customers through setup, error troubleshooting, or feature use.

***

#### **Conclusion** <a href="#conclusion" id="conclusion"></a>

A well-designed step-by-step prompt framework ensures customer support agents can handle inquiries with clarity, empathy, and efficiency. By structuring conversations logically, personalizing solutions, and leveraging resources like knowledge bases, agents can consistently deliver excellent customer experiences. Whether the problem is technical or service-related, this chain-of-thought approach provides a reliable way to guide customers toward resolution.

And how are your prompt engineering skills coming along? Send us some useful tips or feedback at <info@tiledesk.com>


# Human in the Loop (HITL)

[Human in the loop: chatbot back in the conversation](/human-in-the-loop-hitl/human-in-the-loop-chatbot-back-in-the-conversation)


# Human in the loop: chatbot back in the conversation

This article describes the workflow of conversations involving a chatbotFirst-Human-chatbotBack interaction.

Modern support chats are generally AI-driven: end-users always starts by talking with AI. But a human is always welcome when AI cannot reach your goals. This is the HITL (Human In The Loop) basic flow. A human enters the conversation whenever is needed. Once in the conversation the human operator tries to fulfill the end-user task. Once he finishes there are two options: he closes the conversation (that moves to "resolved") or put the chatbot back in the conversation. Why put a chatbot back in the conversation? For a lot of reasons. Some examples:

1. Rate the conversation: the simplest one is to let the user review the human interaction assigning him a score.
2. Human helped, now gt my chatbot back: another reason can be that the end-user was happy with chatbot interaction, he just had a problem, the problem was solved because of the human, now he wants his chatbot back.
3. The workflow involves the chatbot working hand in hand, step by step, with the human

To put a chatbot back in the conversation you must configure the chatbot accordingly. The agent needs to open the three dots menu and select "Reassign".&#x20;

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

Now he can choose to reassign the conversation to a human or a chatbot.

First of all you must allow the chabot to be available to human agents, so they can choose to reassign the conversation to him

Go in the chatbot settings and siwtch on the “Available to Agents” switch:

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

Now select the available blocks to invoke for the chatbot to go back in the conversation. Select the block detail from the menu and switch the Available to agents option. A small human icon appears on the block indicating that the block is available to be put back in the conversation.

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

Once you configured the chatbot “Rating Bot” chatbot and his “rate” block as “Available to Agents” they can finally Reassign the conversation to the chatbot from the menu.

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

Now the end user is able to rate the conversation using the “rate” block

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

With the new “Available to Agents” feature you will be better configure the “chatbot back in the conversation” feature and better customize the whole HITL (Human in the loop) experience in Tiledesk. We hope you'll enjoy this new feature as we did!

If you have questions about the Reply Action or other Tiledesk features feel free to send an email to [support@tiledesk.com  ](mailto:support@tiledesk.com)or leave us a [feedback](https://feedback.tiledesk.com/feedback)


# WhatsApp Business

[How to configure a WhatsApp Business account](/apps-and-integrations/whatsapp-business/how-to-configure-a-whatsapp-business-account)

[How to connect Tiledesk with WhatsApp Business](/apps-and-integrations/whatsapp-business/how-to-connect-tiledesk-with-whatsapp-business)

[How to use WhatsApp templates with Tiledesk](/apps-and-integrations/whatsapp-business/how-to-use-whatsapp-templates-with-tiledesk)

[How to perform a WhatsApp broadcast using Tiledesk and Customer.io](/apps-and-integrations/whatsapp-business/how-to-perform-a-whatsapp-broadcast-using-tiledesk-and-customer.io)

[How to perform a WhatsApp broadcast using Tiledesk](/apps-and-integrations/whatsapp-business/how-to-perform-a-whatsapp-broadcast-using-tiledesk)

[How to set up a webhook for your WhatsApp updates](/apps-and-integrations/whatsapp-business/how-to-set-up-a-webhook-for-your-whatsapp-updates)

[How to integrate ActiveCampaign with Tiledesk](/apps-and-integrations/whatsapp-business/how-to-integrate-activecampaign-with-tiledesk)

[How to create WhatsApp Broadcasts](/apps-and-integrations/whatsapp-business/how-to-create-whatsapp-broadcasts)


# How to configure a WhatsApp Business account

Tiledesk WhatsApp Integration allows your customers to reach you through their favourite messaging application: WhatsApp. On the other end, your agents will be able to promptly respond directly from our Web Chat. Quick replies, action buttons and media like images, videos and documents are supported on both sides.

But first, you need to create and configure a WhatsApp Business account. Keep reading to find out everything you need.

#### Create app on Facebook Developer console[#](https://gethelp.tiledesk.com/articles/configure-a-whatsapp-business-account/#create-app-on-facebook-developer-console) <a href="#create-app-on-facebook-developer-console" id="create-app-on-facebook-developer-console"></a>

If you have already created an app, you can skip this step. Otherwise, go to[ Meta for Developers](https://developers.facebook.com/) and sign in with you Facebook credentials, where you can see your Facebook apps. Then click on "My Apps", and on "Create App", as below.

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

Select an app type and click on “Next”. Now choose the display name and type the contact email.

> Note: a Business Account is required to have access to all features and to allow certain permissions. You can create an account for your company from the [dedicated tool](https://business.facebook.com/overview) or by continuing to read this guide.

If you already have a Business Account, select it and click on “Create app”. If you don't, not to worry, you can create a Business Account later.

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

Well done! Your app is now ready.

#### Integrate WhatsApp with your app <a href="#integrate-whatsapp-with-your-app" id="integrate-whatsapp-with-your-app"></a>

When on the same Facebook Developer console, make sure that you have selected the app where you want to install WhatsApp and search “WhatsApp" from the products list, then click “Set up”.

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

You should be able to see that on the left-side bar. Click on “Getting Started”. If you've selected a Business Account in the previous step, you can skip the steps below, otherwise keep reading!

#### **Create a Business Account**

After clicking on “Getting Started” you will see the tool for selecting or creating a business account. Select “Create a business account” from the dropdown menu and click “Continue”.

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

A default Business Account has been created. You can customize this account accessing the [Meta Dashboard](https://business.facebook.com/settings/people/) or clicking on Test Business in MyApp page, as below.

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

#### Test the integration <a href="#test-the-integration" id="test-the-integration"></a>

A *Test Number* is now associated with your app. Further down this article we will see how to setup the company's real number.&#x20;

From the Getting Started tab you can test the WhatsApp integration, but first you need to configure a receiver number.

> In this testing phase, you can send a message from the test number to up to 5 phone numbers to receive free test messages.

To configure a test phone number click on the “To” dropdown, and then on “Manage phone number list” button.

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

Select the prefix and insert the phone number, then start the verifying procedure by clicking on "Next" (a numeric code is sent by SMS).

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

Once completed, the phone number can receive test messages. Click on “Send Message” button to try it out. You should receive a message on WhatsApp from the test number.

#### Add a production phone number[#](https://gethelp.tiledesk.com/articles/configure-a-whatsapp-business-account/#add-a-production-phone-number) <a href="#add-a-production-phone-number" id="add-a-production-phone-number"></a>

You may need to register a company production phone number.

> Use of a private number is **highly discouraged**. You won't be able to use the WhatsApp mobile app anymore.

From the Getting Started page, click on “Add phone number”, as below.

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

Fill in your business information and click on “Next”.

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

Fill in the required information to create a WhatsApp Business profile and click on “Next”.

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

Finally, add the phone number and verify it through a Text message or Phone call.

> Note: If you are using a landline number, you can verify the number only with a Phone call.

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

Once the number has been approved, you can test it, as shown earlier in this guide, by selecting the production number from the “From” dropdown.

#### Configure a Permanent Access Token <a href="#configure-a-permanent-access-token" id="configure-a-permanent-access-token"></a>

To use the WhatsApp integration with Tiledesk you need a valid access token. A **Temporary access token** is provided, but you need to refresh the information every 24 hours. This is a good solution for a testing phase, but you need a **Permanent access token** in production.

Let's see how to create a Permanent Accesso Token!

Click on the name of the Business Account in My Apps or go directly in [Facebook Settings Dashboard](https://business.facebook.com/settings/) from the Facebook Developer dashboard.

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

On the left-side panel, make sure that Business Account for which you want to activate the permanent token is selected, click on “System users” and then click the “Add” button.

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

Type a System user name and choose Admin role. Now you can click on the “Create system user” button.

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

A user system has now been created. Note that the permanent token will be associated to that user.

Let's add assets to the newly created system user by clicking on “Add Assets” and giving the Full Control to the Facebook App, as illustrated below.

<figure><img src="/files/4eoidyeCtiOfccw2yF3o" alt=""><figcaption></figcaption></figure>

Click on “Save Changes” and the app will be added to the system user.

Finally, we are ready to generate our **Permanent Access Token** by clicking on “Generate new token”. Select the app…

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

… and check the following permissions:

* **whatsapp\_business\_messaging**
* **whatsapp\_business\_management**

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

Click on “Generate token” and that's it! Your permanent token is now available.

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

Don't know how to use the permanent token on Tiledesk?

Maybe the guide on [How to connect WhatsApp Business to Tiledesk](https://gethelp.tiledesk.com/articles/connect-tiledesk-with-whatsapp-business/) might be helpful.

If you have any questions, feel free to contact us live on chat or at <support@tiledesk.com> or you can pop on our [Discord Channel](https://discord.com/invite/nERZEZ7SmG) 📣.

For more info on who we are, what we do, or what is our shtick, visit the [Tiledesk Website](https://tiledesk.com/) 👩‍🚀.


# How to connect Tiledesk with WhatsApp Business

Tiledesk WhatsApp Integration allows your customers to reach you through their favourite messaging application: WhatsApp. On the other end, your agents will be able to promptly respond directly from our Web Chat. Quick replies, action buttons and media like images, videos and documents are supported on both sides.

If you haven't yet configured a WhatsApp Business account, our guide [Configure a WhatsApp Business account](/apps-and-integrations/whatsapp-business/how-to-configure-a-whatsapp-business-account) awaits you!

### Install the WhatsApp Business app on Tiledesk <a href="#install-the-whatsapp-business-app-on-tiledesk" id="install-the-whatsapp-business-app-on-tiledesk"></a>

Login into the [Tiledesk Console](https://panel.tiledesk.com/v3/dashboard/#/projects) and create a project if you haven't already. Just click on “Add project”, choose a name for your project and then click on "Add project" button (leave all the options on default values).

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

Once your project is ready, use the left-bar menu to go to **Settings → Integrations**, and search for the **WhatsApp Business** app.

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

As shown in the image, you have two options to authorize WhatsApp: **Configure using OAuth** or **Manual Configuration**.

#### **Configure using OAuth** (recommended)

“Configure using OAuth” means you can connect Tiledesk to WhatsApp Business through Meta’s standard OAuth authorization flow, instead of pasting app IDs, secrets, and tokens by hand.\
The process is designed to be intuitive and simple. After clicking on "Configure using OAuth," a pop-up will appear asking you to confirm your account and then provide **your** **business name**, **business email**, **website**, and other details, as shown in the image.

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

The process is quite straightforward. After that, you'll be asked to either connect your existing WhatsApp Business app or start with a new WhatsApp phone number.&#x20;

Follow the steps one by one, and once your phone number is verified, click the **Finish** button.

That’s it! After a few seconds, you should see the confirmation page. In the top right corner, you’ll see the status: **Connected**.

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

**Here is also a video tutorial on how to connect Tiledesk to WhatsApp Business using OAuth configuration:**

{% embed url="<https://youtu.be/vGeZYu0fL4w>" %}

#### **Manual Configuration**

Let’s also take a look at **Manual Configuration**. After selecting this option, you will see the fields below, which you’ll need to fill out and configure:

1. WhatsApp token which is your permanent token;
2. Verify Token which is a simple password of your choosing
3. WhatsApp Business Account ID which you can find in the API configuration section of your app on the [Meta for developers console](https://developers.facebook.com/apps/)
4. Tiledesk Webhook Endpoint, which is to be pasted in the API configuration section of your app on the [Meta for developers console](https://developers.facebook.com/apps/)

More details about each field below.

<figure><img src="/files/2BMMO5KM3XOxgOVHkolf" alt=""><figcaption></figcaption></figure>

1\. If you have doubts about the permanent token, please look up our guide [Configure a WhatsApp Business account](/apps-and-integrations/whatsapp-business/how-to-configure-a-whatsapp-business-account).

> Note: you can use a **Temporary access token** instead of a permanent one. You can find it on [Meta for Developers Console](https://developers.facebook.com/apps/) → WhatsApp → Getting Started. You can use it for testing purposes, however, since it expires after 24 hours, its use is **highly discouraged**.

2\. Choose a verify token (i.e. "my-verify-token") and type it in the “Verify Token” field, then click on the “Connect” button. Your app is now connected. Click on “Copy” button to copy the webhook endpoint to clipboard, then move to [Facebook Developer Console](https://developers.facebook.com/apps/) and open the app where you have installed the WhatsApp plugin.

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

On the left-side menu, underneath products section, go to WhatsApp → Configuration. Then click on “Edit” and paste the URL you copied earlier in “Callback URL". Type in your verify token as well, then click on “Verify and save” button.

<figure><img src="/files/2j36FbzQbtPv9Pzc6kos" alt=""><figcaption></figcaption></figure>

If the verification fails, please check your configuration parameters.

Now click on “Manage” …

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

… click on “Subscribe” for messages option, then click on “Done” button.

<figure><img src="/files/8fJUZfIfT0tGTS6sC2cN" alt=""><figcaption></figcaption></figure>

Well done! The configuration is now completed and you should be able to receive message from WhatsApp to your Tiledesk chat. If a chatbot has been configured, it will the first one to greet your customers!

<figure><img src="/files/4mRRkIoQgkNaAQ60oGyZ" alt=""><figcaption></figcaption></figure>

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

If you have any questions, feel free to contact us live on chat or at <support@tiledesk.com>

For more info on who we are, what we do, or what is our shtick, visit the [Tiledesk Website](https://tiledesk.com/) 👩‍🚀.


# How to use WhatsApp templates with Tiledesk

A message template is required to start a [business-initiated conversation](https://developers.facebook.com/docs/whatsapp/conversation-types). These conversations can be customer care messages or appointment reminders, payment or shipping updates, alerts, and more.

If you haven't yet configured a WhatsApp Business account, our guide [Configure a WhatsApp Business account](/apps-and-integrations/whatsapp-business/how-to-configure-a-whatsapp-business-account) awaits you! Also, you can watch a video version of this guide below, too.

{% embed url="<https://www.youtube.com/watch?v=K4IMJWI291s>" %}

#### **Create a WhatsApp template**

In order to create a template simply go to **Message templates** page in the [Meta Business Suite](https://business.facebook.com/wa/manage/message-templates/), select a Business Account on the left side and choose a WhatsApp Account on the right side.

> Note: each phone number has a different WhatsApp Account ID, therefore a different WhatsApp Account corresponds to different templates.

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

Click on **Create template**, follow the steps and submit the template for the approval process. For further info about message template creation please refers to the official [guidelines](https://developers.facebook.com/docs/whatsapp/message-templates/guidelines/).

#### **Set up the WhatsApp Business app on Tiledesk**

Let's see how to configure the WhatsApp Business app to allow Tiledesk to send templates. If you haven't already connected Tiledesk with WhatsApp Business take a look at [How to connect Tiledesk with WhatsApp Business](/apps-and-integrations/whatsapp-business/how-to-connect-tiledesk-with-whatsapp-business).

In order to use WhatsApp templates you need to add the **WhatsApp Business Account ID** in the Tiledesk WhatsApp configuration.

Go to Meta Developer console, select your app and on the left-side menu, underneath products section, go to WhatsApp → API Setup. Is important to select your production phone number, then copy the corresponding Business Account ID.

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

Now go to [Tiledesk Console](https://panel.tiledesk.com/v3/dashboard/#/projects), open the WhatsApp integration app and paste the Business Account ID, as in the image below.

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

That's it, now you will be able to send Whatsapp templates from the Tiledesk Chat.

A template allows you to send a message to a WhatsApp user even if more than 24 hours have passed since the last message. Note that this is the only way to do it.&#x20;

So, let's open the Tiledesk Chat and select a WhatsApp conversation. Click on **Templates** and select one of your approved templates.

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

If you have added some variables to your template, you have to fill all field in order to send it. Moreover, you can also add images, files or locations. You can add these media selecting a local file or pasting a remote url.

<figure><img src="/files/5Ean1NYwabQ40TXArY6z" alt=""><figcaption></figcaption></figure>

Once your template is ready, click on the *Send* button and *les jeux sont faits!*\
You will see a simple preview in the Tiledesk chat, while the user will receive immediately the template.

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

\
If you have any questions, feel free to contact us live on chat or at <support@tiledesk.com>

For more info on who we are, what we do, or what is our shtick, visit the [Tiledesk Website](https://tiledesk.com/) 👩‍🚀\
&#x20;


# How to perform a WhatsApp broadcast using Tiledesk and Customer.io

If you are a Customer.io user you may have noticed that it isn't possible to perform a native broadcast on the WhatsApp Channel. However, it is possible to use the Webhook option to “move” the broadcast towards Tiledesk and to use our new WhatsApp dedicated actions. How is it possible? Easy, Chatbot's actions can now be performed through API!

Let's see how to do that!

#### Create and configure a Chatbot on Tiledesk <a href="#create-and-configure-a-chatbot-on-tiledesk" id="create-and-configure-a-chatbot-on-tiledesk"></a>

If you haven't created a Chatbot yet, sign in on the [Tiledesk Dashboard](https://panel.tiledesk.com/v3/), create or select a project and click on **Bot** on the left sidebar. Click on *Add from scratch* button and create a new Chatbot.

You are now in the Chatbot Design Studio. Create a new block clicking on *+add* button and choose a name for this block. Before continuing, please delete the default Reply action as it isn't necessary to reach our goal.

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

Now click on *Add action* and select the **WhatsApp by Attribute** action. Configure this action is very easy. Simply create a custom attribute by giving it a name that you will use later and choose it in the select "Assign to"

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

Done! Your action is ready to be used.

#### Use the action in Customer.io[#](https://gethelp.tiledesk.com/articles/how-to-perform-a-whatsapp-broadcast-using-tiledesk-and-customerio/#use-the-action-in-customerio) <a href="#use-the-action-in-customerio" id="use-the-action-in-customerio"></a>

Sign in on [customer.io](https://customer.io/), create a new Broadcast, and configure it to your preferences choosing segments, conditions, goals, etc.

On the Step 3 (**Content**), choose the **Webhook** option and access the advanced settings click on *Content* box.

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

At this point, an HTTP request must be written correctly and to do so, it is necessary to know the language and the structure of the WhatsApp template to be sent in broadcast. But, don't worry, we have a trick for you!

> Remember that you can send messages to your customers on WhatsApp only using an approved template. For any doubt about the process of templates creation and WhatsApp configuration please refers to our guides on [WhatsApp Business Integration](/apps-and-integrations/whatsapp-business).

#### Use the Fast Prototyping trick to generate the request payload <a href="#use-the-fast-prototyping-trick-to-generate-the-request-payload" id="use-the-fast-prototyping-trick-to-generate-the-request-payload"></a>

Come back on Chatbot Design Studio. Add a new block for the Chatbot previously created, than click on *Add action* and select the **WhatsApp Static** action.

Note that this block will never be executed directly, but can be used as an important fast prototyping tool.

At this point, get your *Phone Number Id* from the [Meta for Developers](https://developers.facebook.com/apps/) platform and paste it on the Phone Number Id input field, then choose the template that you want to use in the broadcast.

It's very probable that the selected template contains parameters, so let's fill in the corresponding fields with some example information, including the recipient's phone number.

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

if you want, you can see the preview of your WhatsApp message as the recipient will see it.&#x20;

A little further down you will be able to see the auto-generated payload that we can use to compile the HTTP request on customer.io.

> **Warning!** In the specific case of customer.io it is necessary and sufficient to enter only one recipient.

<figure><img src="/files/4ECihOn4dozQopDv3v1o" alt=""><figcaption></figcaption></figure>

Copy the auto-generated payload and move again on customer.io. Paste the static payload on the editor e make it dynamic.

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

Place the variables provided by customer.io to fill  parameters like recipient phone\_number, name, etc. Then, pay attention to the following changes:

* payload.text must be the name of the **WhatsApp by Attribute** action
* payload.token must be the chatbot token provided by **Tiledesk**

**Get chatbot token**

You can get the token associated with your chatbot from the Chatbot Design Studio itself, clicking on **General** on the left side menu, and under the **Developer** tab you can generate a new token simply clicking on **Get Token** button.

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

Let's complete the HTTP request on customer.io specifying:

* Method: **POST**
* Url: **<https://api.tiledesk.com/v3/modules/tilebot/ext/YOUR\\_BOT\\_ID>**
* Header: **Content-Type: application/json**

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

That's all! You will now be able to make your first WhatsApp broadcast with Tiledesk.

You can perform a test by clicking the **Send test** button on customer.io to be sure that all works correctly, then you can save changes, review your entire broadcast and choose whether to send it immediately or schedule it.

If you have any questions, feel free to contact us live on chat or at <info@tiledesk.com> 📧\
&#x20;

For more info on who we are, what we do, or what is our shtick, visit the [Tiledesk Website](https://tiledesk.com/) 👩‍🚀


# How to perform a WhatsApp broadcast using Tiledesk

If you want to perform a broadcast operation on the WhatsApp Channel you are in the right place! Let's see how is possible to use the powerful of Tiledesk and the new Chatbot Design Studio to send WhatsApp templates to you customers using the API. Not only this, let's see also how to check the broadcast status and how to receive real time notifications using a webhook.

#### Create and configure a Chatbot on Tiledesk <a href="#create-and-configure-a-chatbot-on-tiledesk" id="create-and-configure-a-chatbot-on-tiledesk"></a>

If you haven't created a Chatbot yet, sign in on the [Tiledesk Dashboard](https://panel.tiledesk.com/v3/), create or select a project and click on **Bot** on the left sidebar. Click on **Add from scratch** button and create a new Chatbot.

You are now in the new **Chatbot Design Studio**. You can customize your chatbot as you prefer.&#x20;

It is not necessary that the actions that we are going to setup will be part for the principle flow, so it can be unconnected with the others blocks.

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

Drag and Drop the **WhatsApp by Attribute** action in the canvas (you can find it under the Integrations section) and change the name of the block like you prefer. In this example we called it ‘whatsapp\_broadcast’.

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

Configure this action is very easy. Simply create a custom attribute by giving it a name that you will use later and choose it in the “Assign to” select box.

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

Done! Your action is ready to be used.

#### Use the Fast Prototyping trick to generate the request payload <a href="#use-the-fast-prototyping-trick-to-generate-the-request-payload" id="use-the-fast-prototyping-trick-to-generate-the-request-payload"></a>

In order to use this action with the **Tiledesk API** is necessary to discover how the request payload is made. To do this we can use another action which purpose is only to help you understand the structure of the json.&#x20;

Drag and Drop the **WhatsApp Static** action in the canvas and start working on it, but note that this block will never executed directly, but can be used as an important fast prototyping tool.

Get your *Phone Number Id* from the [Meta for Developers](https://developers.facebook.com/apps/)  platform (go to WhatsApp >> API Setup, as below) and paste it on the Phone Number Id input field, then choose the template that you want to use in the broadcast.

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

It's very probable that the selected template contains parameters, so let's fill in the corresponding fields with some example information, including the recipient's phone number.

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

A little further down you will be able to see the auto-generated payload that we can use to compile the HTTP request.

Keep entering all your recipients to have a complete payload or continue adding them in the editor you like best.

#### Perform the request[#](https://gethelp.tiledesk.com/articles/how-to-perform-a-whatsapp-broadcast-using-tiledesk/#perform-the-request) <a href="#perform-the-request" id="perform-the-request"></a>

Once your payload is completed and ready to be used we can finally process sending the broadcast. In this example, we used Postman as a platform to build and perform API requests, but feel free to use whatever software you find comfortable.

Let's configure the HTTP request as follows:

* Method: **POST**
* Url: **<https://api.tiledesk.com/v3/modules/tilebot/ext/YOUR\\_CHATBOT\\_ID>**
* Header: **Content-Type: application/json**

Paste the auto-generated payload making sure that:

* payload.text must be the name of the **WhatsApp by Attribute** action
* payload.text.request\_id must be on the format “*automation-request--"*
* payload.token must be the chatbot token provided by **Tiledesk**

<figure><img src="/files/6YCIfdOS2lyBuvKBCfcR" alt=""><figcaption></figcaption></figure>

**Get chatbot token**

You can get the token associated with your chatbot from the Chatbot Design Studio itself, clicking on **Settings** on the left side menu, and under the **Developer** tab you can generate a new token simply clicking on **Get Token** button.

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

That's all! Just send the request and wait for the magic. **Tiledesk** will take care of the broadcast request and send the messages to the selected contacts.

#### Broadcast results

You may ask where and how you can check the broadcast status and the status of every single message.&#x20;

Well,  come back to the [Tiledesk Dashboard](https://panel.tiledesk.com/v3/) and go to **Settings** → **Automations Log**. Here you can find all your automations and their status.

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

Click on one automation to see the detail.s Here you see how many messages are currently processed and the status coming from WhatsApp directly, but above all it is possible to get feedback on any errors when sending the message.

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

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

If you have any questions, feel free to contact us live on chat or at <info@tiledesk.com> 📧&#x20;

For more info on who we are, what we do, or what is our shtick, visit the [Tiledesk Website](https://tiledesk.com/) 👩‍🚀


# How to set up a webhook for your WhatsApp updates

In this article you will learn how to set up a webhook to receive **Real Time Updates** for your [WhatsApp Broadcasts](/apps-and-integrations/whatsapp-business/how-to-perform-a-whatsapp-broadcast-using-tiledesk) and all Whatsapp Updates for your standard conversations.

For any doubt on how to connect you WhatsApp Business account with Tiledesk and how perform WhatsApp Broadcasts, please refer to the following guides:

* [How to configure a WhatsApp Business account](/apps-and-integrations/whatsapp-business/how-to-configure-a-whatsapp-business-account)
* [How to connect Tiledesk with WhatsApp Business](/apps-and-integrations/whatsapp-business/how-to-connect-tiledesk-with-whatsapp-business)
* [How to perform a WhatsApp broadcast using Tiledesk](/apps-and-integrations/whatsapp-business/how-to-perform-a-whatsapp-broadcast-using-tiledesk)

**Receive Real Time Update for a WhatsApp Broadcast**[**#**](https://gethelp.tiledesk.com/articles/how-to-set-up-a-webhook-for-your-whatsapp-updates/#receive-real-time-update-for-a-whatsapp-broadcast)

After starting a broadcast operation, you can receive all updates regarding it. Tiledesk will send these updates automatically, so you just need to create your own webhook endpoint and subscribe to the correct event.

Login to [Tiledesk Dashboard](https://panel.tiledesk.com/v3/dashboard/#/projects), select a project and go to *Settings → Project Settings → Developer → Manage Webhook.*

Then click on **Add Subscription** to create a new subscription.&#x20;

Select from the dropdown menu the event ‘**Event Emit**', type your webhook endpoint address and click on **Create Subscription**.

<figure><img src="/files/4KoSXhYKUu5gkGuuV200" alt=""><figcaption></figcaption></figure>

From now on you will receive all events on your webhook.

In order to discriminate the events that concern a broadcast, simply add on your webhook the following code:

```
app.post('/hook', async (req, res) => {
	if (req.body?.payload?.name === "tiledesk.whatsapplog") {
    	let whatsapp_log = req.body.payload.attributes?.messageLog;
    	console.log(whatsapp_log);
  	}
});
```

👉 Check out the [Public example on Glitch ](https://glitch.com/edit/#!/tiledesk-whatsapp-hook?path=index.js%3A37%3A0)

**Receive all updates from WhatsApp**[**#**](https://gethelp.tiledesk.com/articles/how-to-set-up-a-webhook-for-your-whatsapp-updates/#receive-all-updates-from-whatsapp)

Similarly to the previous case,  the only thing you need is to create your own webhook endpoint and subscribe to the correct event.

Again, login to [Tiledesk Dashboard](https://panel.tiledesk.com/v3/dashboard/#/projects), select a project and go to *Settings → Project Settings → Developer → Manage Webhook.*

Then click on **Add Subscription** to create a new subscription.&#x20;

Select from the dropdown menu the event ‘**Event Emit**', type your webhook endpoint address and click on **Create Subscription**. Feel free to choose the same endpoint then before or a new one. Just be careful how to discriminate this type of event on your webhook, for which you will have to follow the following code:

```
app.post('/hook', async (req, res) => {
 	if (req.body?.payload?.name === "tiledesk.whatsappfw") {
    	let whatsapp_body = req.body.payload.attributes?.whatsappBody;
    	console.log(whatsapp_body);
  	}
});
```

👉 Check out the [Public example on Glitch ](https://glitch.com/edit/#!/tiledesk-whatsapp-hook?path=index.js%3A37%3A0)

If you have any questions, feel free to contact us live on chat or at [support@tiledesk.com](mailto:info@tiledesk.com) 📧&#x20;

For more info on who we are, what we do, or what is our shtick, visit the [Tiledesk Website](https://tiledesk.com/) 👩‍🚀


# How to integrate ActiveCampaign with Tiledesk

#### Intro[#](https://gethelp.tiledesk.com/articles/how-to-integrate-activecampaign-with-tiledesk/#intro) <a href="#intro" id="intro"></a>

This tutorial will guide you through integrating ActiveCampaign with Tiledesk to send WhatsApp messages triggered by an automation workflow. Follow these steps:

***

**Step 1: Create a New Bot in Tiledesk**[**#**](https://gethelp.tiledesk.com/articles/how-to-integrate-activecampaign-with-tiledesk/#step-1-create-a-new-bot-in-tiledesk)

1. Log in to your **Tiledesk Dashboard**.
2. Create a new bot:
   * You can either build a bot from scratch or import one using the provided template. [Import this bot](https://tiledesk.com/community/getchatbotinfo/chatbotId/673df602e43c060013805c05-WhatsApp-Broadcast-w--Active-Campaign).
3. Once the bot is set up, proceed to configure actions.

***

**Step 2: Configure the WhatsApp Action in Tiledesk**[**#**](https://gethelp.tiledesk.com/articles/how-to-integrate-activecampaign-with-tiledesk/#step-2-configure-the-whatsapp-action-in-tiledesk)

1. Navigate to the **Actions Menu** within your bot settings.
2. Select the action **Send WhatsApp** from the list.
3. Populate the following required information:
   * **Phone Number ID**:\
     Obtain this ID from the **Meta for Developers** platform where you’ve installed your WhatsApp app. You can find it in the **API Configuration** section, as shown below:\
     *(Insert relevant image here)*
   * **WhatsApp Template**:\
     Choose any pre-approved WhatsApp template you've created in Meta. If you need help with creating templates, [see more about templates here](/apps-and-integrations/whatsapp-business/how-to-use-whatsapp-templates-with-tiledesk).
   * **Variables**: Insert the relevant placeholders, such as the recipient's phone number and first name, for dynamic messaging.

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

***

**Step 3: Create an Automation in ActiveCampaign**[**#**](https://gethelp.tiledesk.com/articles/how-to-integrate-activecampaign-with-tiledesk/#step-3-create-an-automation-in-activecampaign)

1. Log in to your **ActiveCampaign** account.
2. Go to the **Automation** section and create a new workflow.
3. Select your desired **Trigger** and choose the **Webhook** option from the workflow list. This will allow ActiveCampaign to call Tiledesk when the trigger conditions are met.

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

***

**Step 4: Set Up the Webhook URL in ActiveCampaign**[**#**](https://gethelp.tiledesk.com/articles/how-to-integrate-activecampaign-with-tiledesk/#step-4-set-up-the-webhook-url-in-activecampaign)

To integrate ActiveCampaign with Tiledesk, you need to generate a Webhook URL for your bot:

Use the base URL:

Append the following details to complete the Webhook URL:

* **Project ID**: Your Tiledesk project ID.
* **Chatbot ID**: The ID of the chatbot you want to trigger.
* **Block Name**: The name of the block to activate (usually "start").

Insert this Webhook URL into ActiveCampaign’s webhook field in your automation workflow.

***

**Example: Complete Webhook URL**[**#**](https://gethelp.tiledesk.com/articles/how-to-integrate-activecampaign-with-tiledesk/#example-complete-webhook-url)

Suppose your:

* Project ID: 12345
* Chatbot ID: 67890

Your Webhook URL will look like this:

```
https://api.tiledesk.com/v3/modules/tilebot/block/12345/67890/start
```

***

With this integration, you’ve successfully linked ActiveCampaign and Tiledesk. Now, whenever the automation trigger fires in ActiveCampaign, your Tiledesk bot will send a WhatsApp message using the configured template.

***

If you have any questions or run into issues, feel free to [reach out to the Tiledesk Community](https://tiledesk.com/community/) for support!

```
https://api.tiledesk.com/v3/modules/tilebot/
```


# How to create WhatsApp Broadcasts

The **WhatsApp Broadcasts** feature enables you to send a single, templated message from your WhatsApp Business Account to a large number of contacts at once. This is ideal for sending announcements, marketing promotions, order updates, or event reminders efficiently and at scale.

To use this feature:

* You must have a WhatsApp Business account connected to Tiledesk (see [Related Articles](#related-articles) below)
* Send all messages using pre-approved WhatsApp message templates (this ensures compliance with WhatsApp policies and provides a structured and reliable messaging format for recipients).

To guarantee maximum compatibility across different WhatsApp Business Platform implementations, we **recommend using templates that rely exclusively on numbered variables (e.g., {{1}}, {{2}}, {{3}})** within the message body.\
This approach follows Meta’s official guidelines and helps avoid potential issues related to named variables, which may be handled inconsistently by external systems.

The image below shows an example of a properly configured template.

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

To begin creating a broadcast from the left sidebar select the **WhatsApp Broadcast** menu item and then click on the **New broadcast** button<br>

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

In the **New broadcast** page follow this step<br>

**Choose a template**

* Locate the **"Choose a Template"** combo box.
* Click selection button to view all available templates from your linked WhatsApp Business Account.
* Select the appropriate template for your message (e.g., `appointment_reminder`, `health_tip`).

**Import Contacts from a CSV File**

* Click the **"Import from CSV"** button
* A dialog window will open. **Download the sample file** by clicking the link for **`dental_office.csv`** (or the suggested file name). Use this file as a guide to format your CSV correctly.

1. Prepare your CSV file following the sample structure (note: In the CSV file, the column names have the same name as the placeholders in the template preview). The most important column is **phone\_number**, which must be in **international format**: a **+**, the **country dial code**, and the **full phone number**.\
   Example: `+1 555 123 4567`.
2. Upload your CSV file by clicking **"Choose File"**

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

#### **Check Fields and Send**

After importing the CSV file, check the fields in the Contacts section and then click on the **Send broadcast** button

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

#### After Sending the Broadcast

You can monitor the status of your broadcast on the WhatsApp broadcasts page (this page contains the entire history of your broadcasts).<br>

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

For more detailed information, simply click on any broadcast in the list to view its details

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

#### Related Articles

* [How to configure a WhatsApp Business account](/apps-and-integrations/whatsapp-business/how-to-connect-tiledesk-with-whatsapp-business)
* [How to connect Tiledesk with WhatsApp Business](/apps-and-integrations/whatsapp-business/how-to-connect-tiledesk-with-whatsapp-business)
* [How to use WhatsApp templates with Tiledesk](/apps-and-integrations/whatsapp-business/how-to-use-whatsapp-templates-with-tiledesk)


# How to Send WhatsApp Messages to Contacts

The **Send WhatsApp Message** feature allows you to send templated WhatsApp messages directly to individual contacts from your contact list. This is ideal for sending personalized communications such as appointment confirmations, follow-ups, promotional offers, or important updates to specific contacts.

Before sending WhatsApp messages to contacts, ensure you have:

* A WhatsApp Business Account connected to Tiledesk (see [Related Articles](#related-articles) below)
* Pre-approved WhatsApp message templates (this ensures compliance with WhatsApp policies and provides a structured and reliable messaging format for recipients). To guarantee maximum compatibility across different WhatsApp Business Platform implementations, we **recommend using templates that rely exclusively on numbered variables (e.g., {{1}}, {{2}}, {{3}})** within the message body.

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

* Contacts with valid phone numbers in your Tiledesk contact list (the phone number must be in  **international format**: a **+**, the **country dial code (**&#x74;he international prefi&#x78;**)** , and the **full phone number (**&#x65;xample: `+1 555 123 4567`**).**<br>

#### How to Send a WhatsApp Message to a Contact

#### Step 1: Access the Contacts List

Navigate to the **Contacts** section from the left sidebar menu to view your contact list.

#### Step 2: Select a Contact

Locate the contact you want to message in the contacts list. Each contact row includes a **WhatsApp message button** for quick access. Click the **WhatsApp message button** next to the contact's name. This will open the **WhatsApp Message dialog box**

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

#### Step 3: the WhatsApp Message Dialog

In the WhatsApp Message dialog **Select a template** from the dropdown menu

* Choose the template that matches your communication needs (e.g., `appointment_reminder`, `order_confirmation`, `promotional_offer`)
* After selecting a template (the template preview will display the message structure with placeholders), customize the template variables to personalize the message

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

Once you've completed customizing the template variables click **Send** to deliver the message via WhatsApp

#### Tracking Message Status

After sending the message, you can monitor its delivery status (Delivered, Read, Error ...) in the "Sent Messages"section on the contact details page&#x20;

<figure><img src="/files/6jCTxj1cqmt62MkzORIw" alt=""><figcaption></figcaption></figure>

More detailed information is available by clicking on the arrow next to the sent message

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

#### Related Articles

* [How to configure a WhatsApp Business account](/apps-and-integrations/whatsapp-business/how-to-connect-tiledesk-with-whatsapp-business)
* [How to connect Tiledesk with WhatsApp Business](/apps-and-integrations/whatsapp-business/how-to-connect-tiledesk-with-whatsapp-business)
* [How to use WhatsApp templates with Tiledesk](/apps-and-integrations/whatsapp-business/how-to-use-whatsapp-templates-with-tiledesk)


# Other integrations

[How to connect Tiledesk with Telegram](/other-integrations/how-to-connect-tiledesk-with-telegram)

[How to integrate Facebook Messenger with Tiledesk](/other-integrations/how-to-integrate-facebook-messenger-with-tiledesk)

[Connect Your Tiledesk Bot to Thousands of Apps Using Make.com](/other-integrations/connect-your-tiledesk-bot-to-thousands-of-apps-using-make.com)

[How to Connect Your Bot to Slack](/other-integrations/how-to-connect-your-bot-to-slack)

[Integrate Tiledesk AI Agent with Zendesk Ticketing](/other-integrations/integrate-tiledesk-ai-agent-with-zendesk-ticketing)

[Voice Feature Overview](/other-integrations/voice-feature-overview)

[How to Send WhatsApp Templates via Tiledesk Webhook and HubSpot Workflow](/other-integrations/how-to-send-whatsapp-templates-via-tiledesk-webhook-and-hubspot-workflow)

[How to Retrieve Data from Make.com to Tiledesk](/other-integrations/how-to-retrieve-data-from-make.com-to-tiledesk)

[How to configure the App Book your holiday with a bot](/other-integrations/how-to-configure-the-app-book-your-holiday-with-a-bot)

[Shopify Integration Using MCP Server](/other-integrations/shopify-integration-using-mcp-server)


# How to connect Tiledesk with Telegram

> **Note**: the **Telegram** integrations is available on the Tiledesk cloud version only.

First Login in **Tiledesk** Dashboard, then click “**Apps**” in the left menu and click **Install** on the Telegram icon.

### ***Step 1. Create a Bot*** <a href="#step-1-create-a-bot" id="step-1-create-a-bot"></a>

**Creating a new bot**

You can create a new bot using Bot Father.

Just talk with [BotFather](https://telegram.me/botfather) (<https://telegram.me/botfather>) or search for **@BotFather** in the Telegram app.

If you have already created a bot, then copy your telegram token and skip to Step 2. If you have lost the token, then use the **/token** command and select you bot to retrieve it.

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

Otherwise use the **/newbot** command to create a new bot. The BotFather will ask you for a name and username, then an authorization token is generated for you.

The name of your bot is displayed in the contact details and elsewhere.&#x20;

The Username is a short name, to be used in mentions and telegram.me links. Usernames are 5-32 characters long and are case insensitive, but may only include Latin characters, number and underscores. Your bot’s username must end in ‘bot’, e.g. ‘**tetris\_bot**‘ or ‘**TetrisBot**‘.

<figure><img src="/files/3YQ4pLoiqcmYh32yopgJ" alt=""><figcaption></figcaption></figure>

### ***Step 2. Integration with Tiledesk***[#](https://gethelp.tiledesk.com/articles/telegram/#step-2-integration-with-tiledesk) <a href="#step-2-integration-with-tiledesk" id="step-2-integration-with-tiledesk"></a>

In your Tiledesk dashboard, enter the **Bot Name** and paste your **Bot Token** generated before, then click on **“Connect”** button.

<figure><img src="/files/8MgcMFZwvcu2fTyayywY" alt=""><figcaption></figcaption></figure>

### ***Step 3. Start messaging from Telegram to Tiledesk*** <a href="#step-3-start-messaging-from-telegram-to-tiledesk" id="step-3-start-messaging-from-telegram-to-tiledesk"></a>

Search the bot created with bot name on Telegram.

<figure><img src="/files/9Z21OOAW2rplbBPe97VX" alt=""><figcaption></figcaption></figure>

You can send a message from mobile, web or desktop application and get messages on the Tiledesk dashboard.

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

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


# How to integrate Facebook Messenger with Tiledesk

Within Tiledesk, you can manage your page messages and chats with our seamless integration with Facebook -messenger. Here's both a video guide and a written step-by-step tutorial.

{% embed url="<https://www.youtube.com/watch?v=unQQ0i_QTXA>" %}

### ***Step 1. Configure your Facebook*** <a href="#step-1-configure-your-facebook" id="step-1-configure-your-facebook"></a>

First login into the Tiledesk Dashboard, then click “Apps” in the left menu and click **Install** on the Facebook icon.

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

You will then be redirected to Facebook to enter your email and password.

<figure><img src="/files/50NfVaAAaD7hIduMFhnH" alt=""><figcaption></figcaption></figure>

Facebook changed their user policies recently, while logged in, you will need to give Facebook permission to send page messages. This integration will not work without this permission.

From there, you can also add all Facebook Pages that you want your Webhook to receive events for when people on Facebook Messenger chat with it.

For that, please follow the instructions below:

Add/reconnect Facebook Pages again and click allow/yes to all permissions.

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

Give Tiledesk permission to access data.

<figure><img src="/files/9hBvZQmieKgh88myeCJr" alt=""><figcaption></figcaption></figure>

Once completed, you will see a confirmation page. &#x20;

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

### ***Step 2. Page Subscribed*** <a href="#step-2-page-subscribed" id="step-2-page-subscribed"></a>

Go back to the Tiledesk Dashboard, Apps section and select the FB page you'd like to connect. If you haven’t created any pages on FB, then please do so to be able to complete this final step. Your selected page will have a green tick. You can also select the department connected to your FB Bot or simply leave it as default.

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

### ***Step 3. Send a message from your page to test it*** <a href="#step-3-send-a-message-from-your-page-to-test-it" id="step-3-send-a-message-from-your-page-to-test-it"></a>

Now open your subscribed page ex: Tiledesk portal and send a text message from there.

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

After that, go to the Tiledesk dashboard and check your chats.

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

You're all set!&#x20;

If you have any questions or need further help, just give us a shout via our live chat!


# Connect Your Tiledesk Bot to Thousands of Apps Using Make.com

Make.com allows you to connect your apps to thousands of other apps. You can leverage this integration to connect your Tiledesk bot to many apps like Sheets, Calendar, Trello, Discord, and many more.&#x20;

In this example, I’ll show you how to link a chat widget to Google Sheets using Make.com. This will let you see how customer details from chat conversations can be automatically added to a Google Sheets document.

You can either watch the video tutorial for a visual guide or follow the step-by-step written tutorial below.

{% embed url="<https://www.youtube.com/watch?v=uJpHRVhmFiw>" %}

#### Step 1: Set Up Your Make.com Account <a href="#step-1-set-up-your-makecom-account" id="step-1-set-up-your-makecom-account"></a>

First, [sign up for a Make.com](https://www.make.com/en/register) account. Once you’ve signed up and logged in, navigate to the ‘Scenarios’ section. This is where you can design your automation workflows.

#### Step 2: Configure Webhooks Module <a href="#step-2-configure-webhooks-module" id="step-2-configure-webhooks-module"></a>

Next, select the Webhooks module. Give it a name and copy the Webhook URL (as shown in the image below).

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

#### Step 3: Connect Tiledesk Bot to Make.com <a href="#step-3-connect-tiledesk-bot-to-makecom" id="step-3-connect-tiledesk-bot-to-makecom"></a>

Now, head over to your [Tiledesk dashboard](https://panel.tiledesk.com/v3/dashboard/#/signup). Select the bot that you want to integrate with Google Sheets. In the integrations section, choose the ‘Make’ action and paste the Webhook URL that you copied earlier.

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

For this example, we will be asking for the user’s name, email, and company name. These will be sent to Make.com as body parameters.

#### Step 4: Create a Form <a href="#step-4-create-a-form" id="step-4-create-a-form"></a>

At this point, you need to create a form to collect information from the users.

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

#### Step 5: Set Up Google Sheets <a href="#step-5-set-up-google-sheets" id="step-5-set-up-google-sheets"></a>

Now, create a new Google Sheets document and name the columns accordingly.

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

#### Step 6: Connect Make.com to Google Sheets <a href="#step-6-connect-makecom-to-google-sheets" id="step-6-connect-makecom-to-google-sheets"></a>

Return to your Make.com dashboard and add the Google Sheets module. You will need to connect your Google account to your Make.com account. Once connected, you can access your Google Sheets file from the Sheets settings in Make.com.

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

#### Step 7: Test Your Setup <a href="#step-7-test-your-setup" id="step-7-test-your-setup"></a>

Save all changes and click on ‘Run once’. Go back to your Tiledesk dashboard and test the bot.

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

After responding to the form questions, return to your Make.com dashboard. Click on the Sheets module to set the column attributes.&#x20;

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

Run the scenario again and return to your Tiledesk dashboard.

#### Step 8: Transfer Data from Chat Widget to Google Sheets <a href="#step-8-transfer-data-from-chat-widget-to-google-sheets" id="step-8-transfer-data-from-chat-widget-to-google-sheets"></a>

Now, when you fill out the form in the chat widget again, the data will be transferred directly to your Google Sheets.

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

And that’s it! You’ve successfully automated data transfer from your chat widget to Google Sheets using Tiledesk bots and Make.com. This integration is a powerful way to streamline your data collection and management processes.

**Keen on starting automation today?** [**Your gateway is right here!**](https://panel.tiledesk.com/v3/dashboard/#/signup)

We hope you found this tutorial helpful.&#x20;

If you need any further support with automation or have any questions, please don’t hesitate to contact us at <support@tiledesk.com>. We’re here to help!


# How to Connect Your Bot to Slack

#### Introduction <a href="#introduction" id="introduction"></a>

Integrating real-time updates from your Bot into Slack is made simple with webhooks. This method streamlines the process of delivering instant notifications directly to Slack.

The setup process is uncomplicated: start by creating a Slack App, then use it to generate a unique webhook URL. Follow these instructions to get your Webhook URL for sending Slack notifications.

Ready to begin?

#### Step 1: Create a Slack App <a href="#step-1-create-a-slack-app" id="step-1-create-a-slack-app"></a>

1. Go to the Slack API website.
2. Click "Create New App" and choose "From scratch."
3. Name your app, select a workspace, and click "Create App."
4. Consider using a sandbox environment to keep test messages separate from your main workspace.

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

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

#### Step 2: Enable Incoming Webhooks <a href="#step-2-enable-incoming-webhooks" id="step-2-enable-incoming-webhooks"></a>

1. In your app's settings, locate the "Incoming Webhooks" section.
2. Turn on this feature to activate it.

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

#### Step 3: Create an Incoming Webhook <a href="#step-3-create-an-incoming-webhook" id="step-3-create-an-incoming-webhook"></a>

1. Click "Add New Webhook to Workspace."
2. Choose a channel for the webhook to send messages to and authorize the app.
3. You will be redirected back to your app settings.
4. The webhook URL will appear under "Webhook URLs for Your Workspace."

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

#### Step 4: Add the Web Request Action within your Chatbot Flow[#](https://gethelp.tiledesk.com/articles/how-to-connect-your-bot-to-slack/#step-4-add-the-web-request-action-within-your-chatbot-flow) <a href="#step-4-add-the-web-request-action-within-your-chatbot-flow" id="step-4-add-the-web-request-action-within-your-chatbot-flow"></a>

Now, you've copied your webhook and all you need to do is paste it into the dedicated Chatbot block containing the Web Request, as below.

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

In the “Body” section of the Web Request, pick the Json option and draft your alert as you deem appropriate.

<figure><img src="/files/3OpntDVooe1wdyQHgE82" alt=""><figcaption></figcaption></figure>

And that's it! Your Incoming Webhook is now set up and linked to the selected Slack channel.

Thoughts on this? Send us your feedback to <info@tiledesk.com>&#x20;


# Integrate Tiledesk AI Agent with Zendesk Ticketing

While Zendesk is a dominant and powerful tool in ticketing, it doesn't offer the best AI capabilities for AI-driven agents or assistants. New platforms like Tiledesk, with AI-focused features, have shown a more innovative approach in automated customer support.

Combining Zendesk's robust ticketing system with Tiledesk's AI-driven solutions can significantly improve efficiency and customer satisfaction.&#x20;

In this tutorial, we'll show you step by step how to integrate Tiledesk with Zendesk.

#### **Tiledesk Configuration** <a href="#tiledesk-configuration" id="tiledesk-configuration"></a>

First, you'll need to log in to your Tiledesk account.&#x20;

If you don’t have an account yet, don’t worry—you can [**create one quickly here.**](https://panel.tiledesk.com/v3/dashboard/#/signup)

Once you’re logged in, head over to the **Bots** section in your Tiledesk dashboard. Here, you have the option to either choose an existing bot or start from scratch.&#x20;

For this tutorial, we’re going to start from scratch.

In the **Design Studio**, you'll set up your bot to gather essential information from users, such as their name, email, and request. To do this, simply use the "[Capture User Reply](/ai-chatbots-and-automation/actions-explained/capture-user-reply-action)" action, as shown in the image below.

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

Now, let’s connect Tiledesk to Zendesk using [**Make**](/ai-chatbots-and-automation/actions-explained/make.com-action).&#x20;

On the left toolbar, under the **Integrations** section, find and select **Make** to add it to your bot’s flow, as illustrated below.

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

When you click on the Make block, a popup will appear on the right. This is where you'll define which information should be sent to Make. In the **Body Parameters** section, map the user’s details to the following attributes:

* userFullname
* userEmail
* UserRequest

Next, you’ll need to create a webhook URL in Make, which I’ll show you how to do shortly.&#x20;

Once that's done, you'll connect the flow’s green endpoint to a simple reply action to confirm that the data has been successfully sent.

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

Great! That’s the Tiledesk setup done. Now, let’s move on to the Zendesk configuration.

#### **Zendesk Configuration**

To connect Tiledesk with Zendesk, the first thing you'll need to do is create an OAuth client in your Zendesk account. This will provide you with the necessary **Domain**, **Client ID**, and **Client Secret** for the integration.

Here’s how you do it:

1. Log in to your Zendesk account as an administrator.
2. Navigate to the **Admin Center** by clicking on the gear icon or through your profile dropdown.
3. In the Admin Center, go to **Apps and Integrations > APIs > OAuth Clients**.
4. Click the **Add OAuth Client** button.
5. Fill in the required fields:
   * **Client Name**
   * **Unique Identifier (Client ID)**
   * **Client Type**: Set this to **Confidential**.
6. A **Secret key** will be automatically generated—make sure to copy and save it securely, as Zendesk suggests.
7. Finally, click **Save** to create your OAuth client.

Awesome! Now that we have what we need from Zendesk, let's finish setting up the integration in Make.

#### **Make Configuration**

First, log in to your Make account and navigate to the **Scenarios** section.

From there, select the **Custom Webhook** module. Once you do, a webhook URL will be generated—copy this URL.

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

Next, go back to your Tiledesk dashboard, and in the **Make** block of your bot’s flow, paste the webhook URL you just copied.

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

Now, return to Make and add a new module called **Zendesk - Create a Ticket**.&#x20;

You'll need to connect this module to your Zendesk account using the **Unique Identifier (Client ID)**, **Secret (Client Secret)**, and **Domain** that we got earlier from the Zendesk OAuth setup.

If you're unsure about the Domain, you can easily find it in the URL of your Zendesk dashboard, something like \<yourdomain>.zendesk.com.

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

Once you’ve done that, your Make scenario will be all set to connect Tiledesk with Zendesk.&#x20;

Hit **Run Once** to test everything out.

Then get back to your Tiledesk dashboard.Click on the **Test it** button in the top right corner.&#x20;

Go through the conversation with the bot, providing your name, email, and request.

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

Now we need to get back to the Make scenario.

In the Zendesk module, map the data from Tiledesk to the appropriate fields:

* For **Subject**, you can use .
* For **Requester Name**, use .
* For **Requester Email**, use .

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

Feel free to customize other fields based on your specific needs.

Perfect. All done. We just need to save and activate the scenario.

#### **Testing the Integration**

Let’s test the bot in Tiledesk. Click the **Test it** button in the top right corner of the Tiledesk dashboard and interact with the bot to go through the conversation.

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

Next, check your Make dashboard to see if the scenario ran successfully and received the data from Tiledesk.

Finally, head over to your Zendesk dashboard, refresh the page, and you should see a new ticket created with the information you provided.

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

Now, your integration is live, and any new interactions with your Tiledesk bot will automatically create tickets in Zendesk.

Please note that the **Make integration** is not available in the Tiledesk **trial version**. If you’re on a trial and want to test this feature, feel free to [**contact us**](mailto:support@tiledesk.com).

We hope this integration enhances your customer support experience!

If you have any questions, don’t hesitate to reach out to us at [**support@tiledesk.com**](mailto:support@tiledesk.com).

Learn more about Tiledesk: [**www.tiledesk.com**](https://tiledesk.com/)

Get started with a free Tiledesk account: [**Sign Up Here**](https://panel.tiledesk.com/v3/dashboard/#/signup)


# Voice Feature Overview

### Tiledesk Voice Features Integration via Twilio[#](https://gethelp.tiledesk.com/articles/voice-feature-overview/#tiledesk-voice-features-integration-via-twilio) <a href="#tiledesk-voice-features-integration-via-twilio" id="tiledesk-voice-features-integration-via-twilio"></a>

Tiledesk extends its conversational AI capabilities to the **voice channel** through integration with **Twilio**, enabling voice-driven experiences such as IVR flows, welcome messages, and intelligent call transfers. This tutorial provides an overview of the current voice features, integration with WhatsApp bots, and customization options.

Tiledesk voice workflows can be configured using different blocks inside the Design Studio or a voice-enabled conversation flow. Here’s what’s currently available:

#### 1. Welcome Message[#](https://gethelp.tiledesk.com/articles/voice-feature-overview/#1-welcome-message) <a href="#id-1-welcome-message" id="id-1-welcome-message"></a>

You can greet users with either a **static** or **dynamic** welcome message:

**Static Options**

**Play Prompt**: Plays a fixed message using TTS (Text-to-Speech).

**Speech Form** (with **No Input** support): Asks a question and listens for a voice input. If no response is given, it can trigger a fallback or transfer.

**Dynamic Option**

**GPT Task**: Generates a personalized welcome message using a prompt-based interaction with a GPT model.

> Example: “Hi! I’m your assistant. Say something or press a number to continue.”

You can create an **interactive menu** where users press digits to navigate options. This is achieved using the **DTMF Menu** block.

Example menu:

```
Press 1 → Get chatbot information  
Press 2 → Leave your number  
Press 3 → Provide more details  
```

Each option can redirect the caller to:

A Tiledesk agent

A chatbot flow

A form to collect numeric input (like phone numbers)

#### 3. Collecting User Input (DTMF Form)[#](https://gethelp.tiledesk.com/articles/voice-feature-overview/#3-collecting-user-input-dtmf-form) <a href="#id-3-collecting-user-input-dtmf-form" id="id-3-collecting-user-input-dtmf-form"></a>

Use the **DTMF Form** block when you want to collect numeric information like phone numbers or ID codes.

You can set:

**Minimum/maximum digits**

**Timeouts**

**Validation rules**

> Example: "Please enter your customer ID, followed by the pound key."

#### 4. Call Transfer[#](https://gethelp.tiledesk.com/articles/voice-feature-overview/#4-call-transfer) <a href="#id-4-call-transfer" id="id-4-call-transfer"></a>

Calls can be routed to a live operator or another number using:

**Blind Transfer**

Instantly transfers the call to a specified number.

Can be used as a fallback in case of **No Input** from the user.

### Integrating Voice and WhatsApp[#](https://gethelp.tiledesk.com/articles/voice-feature-overview/#integrating-voice-and-whatsapp) <a href="#integrating-voice-and-whatsapp" id="integrating-voice-and-whatsapp"></a>

#### Can I use the same bot for both voice and WhatsApp?[#](https://gethelp.tiledesk.com/articles/voice-feature-overview/#can-i-use-the-same-bot-for-both-voice-and-whatsapp) <a href="#can-i-use-the-same-bot-for-both-voice-and-whatsapp" id="can-i-use-the-same-bot-for-both-voice-and-whatsapp"></a>

Yes, the **underlying logic and chatbot engine** are shared, but **voice requires specific adjustments**:

For **Voice**: Use blocks like Play Prompt, Speech Form, and DTMF Menu instead of Reply.

For **WhatsApp**: Regular text replies and buttons are supported.

**One number for both channels?**

Technically possible with Twilio, but needs careful configuration to route messages correctly based on the channel (voice vs. WhatsApp).

You’ll need separate flows or channel-specific handling logic.

### Voice Customization Options[#](https://gethelp.tiledesk.com/articles/voice-feature-overview/#voice-customization-options) <a href="#voice-customization-options" id="voice-customization-options"></a>

Currently, the **voice used for TTS messages** is predefined and not customizable.

❌ No support yet for:

Changing TTS providers

Choosing different voices or languages

Voice tone/style selection

> Features actively being developed at the moment.

### Summary[#](https://gethelp.tiledesk.com/articles/voice-feature-overview/#summary) <a href="#summary" id="summary"></a>

| Feature                   | Description                                              |
| ------------------------- | -------------------------------------------------------- |
| **Welcome Message**       | Static (Play Prompt / Speech Form) or dynamic (GPT Task) |
| **IVR Menu**              | DTMF-based navigation using keypad                       |
| **Input Collection**      | DTMF Form for structured numeric input                   |
| **Call Transfer**         | Blind transfer for fallback or live agent routing        |
| **Cross-channel Support** | Same bot logic, adapted per channel (WhatsApp vs. Voice) |
| **Voice Customization**   | Not currently available                                  |


# How to Send WhatsApp Templates via Tiledesk Webhook and HubSpot Workflow

#### Intro <a href="#intro" id="intro"></a>

Do you need to set automatic WhatsApp messages being sent to your selected audience based on the state of their deal your contact is in? Follow these 5 simple steps to achieve a complete flow entailing a HubSpot workflow integration with a conversation automation tool such as Tiledesk.

### 1. Connect WhatsApp Business API to Your Tiledesk Project <a href="#id-1-connect-whatsapp-business-api-to-your-tiledesk-project" id="id-1-connect-whatsapp-business-api-to-your-tiledesk-project"></a>

Follow the official Tiledesk guide to connect your WhatsApp Business API:\
[Tiledesk WhatsApp Integration Guide](/apps-and-integrations/whatsapp-business)

Once connected, you will be able to send and manage WhatsApp messages from Tiledesk.

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

### 2. Create a Webhook in Tiledesk Design Studio <a href="#id-2-create-a-webhook-in-tiledesk-design-studio" id="id-2-create-a-webhook-in-tiledesk-design-studio"></a>

Go to the **Bots** section in your Tiledesk console.

Click **Create from scratch**.

In the type dropdown, choose **Webhook**.

Once inside the Design Studio, find the **Webhook** button in the panel.

Click on the three dots next to the webhook button and select **Generate URL**.

Copy the generated URL: you will use it later in HubSpot.

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

### 3. Configure the Webhook Action in Your Bot[#](https://gethelp.tiledesk.com/articles/how-to-send-whatsapp-templates-via-tiledesk-webhook-and-hubspot-workflow/#3-configure-the-webhook-action-in-your-bot) <a href="#id-3-configure-the-webhook-action-in-your-bot" id="id-3-configure-the-webhook-action-in-your-bot"></a>

Connect a **Web Response** action to your Webhook button.

Configure the Web Response block with:

Response status: **200**

Response body (JSON):

```
{
  "phone": 
}
```

This acts as a gatekeeper to ensure that only valid phone numbers proceed.

<figure><img src="/files/9lQHgLrIqhl1p6IQYQZz" alt=""><figcaption></figcaption></figure>

### 4. Configure the WhatsApp Template Sending Action[#](https://gethelp.tiledesk.com/articles/how-to-send-whatsapp-templates-via-tiledesk-webhook-and-hubspot-workflow/#4-configure-the-whatsapp-template-sending-action) <a href="#id-4-configure-the-whatsapp-template-sending-action" id="id-4-configure-the-whatsapp-template-sending-action"></a>

From the **Actions** menu on the left, under the **Integrations** tab, select **Send WhatsApp**.

Drag and drop this action right after the Web Response block.

Edit the Send WhatsApp action:

**Phone number ID**: Insert the Phone Number ID available in your Meta for Developers account.

**Template**: Select the WhatsApp template already approved in your Meta account.

**Receiver phone number**: Insert the variable .

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

#### Add Web Response Blocks for Success and Error Paths[#](https://gethelp.tiledesk.com/articles/how-to-send-whatsapp-templates-via-tiledesk-webhook-and-hubspot-workflow/#add-web-response-blocks-for-success-and-error-paths) <a href="#add-web-response-blocks-for-success-and-error-paths" id="add-web-response-blocks-for-success-and-error-paths"></a>

Connect two **Web Response** blocks to the "Success" and "Else" exits of the Send WhatsApp action.

For the **Success** port:

Response status: **200**

Response body (JSON):

```
{
  "success": true,
  "message": "WhatsApp message sent"
}
```

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

For the **Else** port:

Response status: **400**

Response body (JSON):

```
{
  "success": false
}
```

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

### 5. Configure HubSpot to Trigger the WhatsApp Webhook[#](https://gethelp.tiledesk.com/articles/how-to-send-whatsapp-templates-via-tiledesk-webhook-and-hubspot-workflow/#5-configure-hubspot-to-trigger-the-whatsapp-webhook) <a href="#id-5-configure-hubspot-to-trigger-the-whatsapp-webhook" id="id-5-configure-hubspot-to-trigger-the-whatsapp-webhook"></a>

Log into your HubSpot account.

Go to **Automation** > **Workflows** (note: this feature is not available on free plans).

Click the orange **Create workflow** button in the top right corner.

Choose a **Deal-based** workflow.

#### Set Up the Trigger <a href="#set-up-the-trigger" id="set-up-the-trigger"></a>

For enrollment trigger, select:

**Has completed: Property value changed**

**Property name**: Deal Stage

**New Value**: Contract Sent (or any stage where you want the message triggered).

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

#### Add a Webhook Action[#](https://gethelp.tiledesk.com/articles/how-to-send-whatsapp-templates-via-tiledesk-webhook-and-hubspot-workflow/#add-a-webhook-action) <a href="#add-a-webhook-action" id="add-a-webhook-action"></a>

Click the plus icon below the enrollment trigger.

Select **Send a Webhook**.

Configuration:

Method: **POST**

URL: Paste the webhook URL you copied from Tiledesk Design Studio.

Authentication: **None**

Request body: Select **Choose properties to include**, and add:

**deal name = Deal name**

**userPhone = WhatsApp number** (make sure this matches your HubSpot contact property for WhatsApp numbers).

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

#### Test the Workflow[#](https://gethelp.tiledesk.com/articles/how-to-send-whatsapp-templates-via-tiledesk-webhook-and-hubspot-workflow/#test-the-workflow) <a href="#test-the-workflow" id="test-the-workflow"></a>

Move a test deal into the "Contract Sent" stage in your pipeline.

The webhook should trigger, sending the WhatsApp template through Tiledesk.

Once the message is sent, the chatbot configured in Tiledesk will automatically take over the conversation based on the knowledge base you have set up.

Check our video about this integration (don't forget to activate the English subtitles) [here](https://youtu.be/1frIJQROZSw).

{% embed url="<https://www.youtube.com/watch?v=1frIJQROZSw>" %}




---

[Next Page](/llms-full.txt/1)

