> For the complete documentation index, see [llms.txt](https://docs.eesel.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.eesel.ai/integrations/helpdesks/freshdesk/freshchat.md).

# Fresh Chat

Set up an AI agent for Freshchat live chat. It answers chats on the topics you choose in real time, using what it learned from your Freshdesk account.

eesel's AI agent for Freshchat answers your live chats inside the Freshchat widget, in real time. It replies from your Freshdesk help center, canned responses and past tickets. Replies arrive in your existing widget under one of your Freshchat agents' names, so there is no separate chatbot widget.

Freshchat is Freshworks' live chat product. Give your AI teammate access to it and the same agent that works your [Freshdesk](/integrations/helpdesks/freshdesk.md) tickets answers your live chats. It uses the help center, the canned responses and the past tickets it already learned from. There is no separate knowledge to set up, and the instructions you write decide which chats it joins and what it does in them.

<figure><img src="https://3732419023-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2xXO0947TYoPIhGoBgSE%2Fuploads%2Fgit-blob-6a227c62c42d1b3f7db6a3d4f8ef1eee45c4b1c5%2Ffreshchat-hero.png?alt=media" alt="A live chat widget open on a website, where the agent answers a question about refund timing after reading the help center"><figcaption><p>Your agent answering a live chat in the widget.</p></figcaption></figure>

## Set up eesel in Freshchat

{% stepper %}
{% step %}

### Ask your agent to set up Freshchat

Freshchat is a channel on your Freshdesk integration, called **Fresh Chat** in eesel, so connect [Freshdesk](/integrations/helpdesks/freshdesk.md) first. Then open the chat in your dashboard and ask it to set up Freshchat. It checks whether Freshchat is connected. It then names what you need from your Freshchat admin: an API token, and a webhook key. eesel gives you the webhook URL to save in Freshchat, and Freshchat shows you the key once it is saved. Your agent tells you where the form is, and that it cannot open the form for you.

<figure><img src="https://3732419023-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2xXO0947TYoPIhGoBgSE%2Fuploads%2Fgit-blob-7dcda47c30a73ba681de9d567ddd9556373e865e%2Ffreshchat-connect-chat.png?alt=media" alt="The dashboard chat where the user asks the agent to set up Freshchat, and the agent reports it is not connected and lists the API token and webhook key needed"><figcaption><p>The agent checks the connection and names what the setup needs.</p></figcaption></figure>
{% endstep %}

{% step %}

### Fill in the setup form

Open **Integrations > Freshdesk** in the left sidebar and open **Connect Fresh Chat**. The form has three steps: an API token, a webhook URL to paste into Freshchat, and the key Freshchat shows after you save it.

<figure><img src="https://3732419023-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2xXO0947TYoPIhGoBgSE%2Fuploads%2Fgit-blob-9f409cc8109f77f3d01921d99a12b77cef7baee9%2Ffreshchat-setup-form.png?alt=media" alt="The empty Freshchat setup form in the dashboard, with an API Token field, a webhook URL with a Copy button, a Webhook Authentication Key field, and a Connect Freshchat button"><figcaption><p>The Freshchat setup form and its three steps.</p></figcaption></figure>

1. **Get your API token.** In your Freshworks admin, go to **Settings > API Settings > API Details for Chat**. Copy the value labelled Your API Key (the eesel form calls it the API Token) and paste it into the API Token field. eesel works out your Freshchat region from the token, so there is nothing to pick.

   <figure><img src="https://3732419023-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2xXO0947TYoPIhGoBgSE%2Fuploads%2Fgit-blob-d88e85d10444f384fa6d5929b258aada0c58f90c%2Ffreshchat-api-token.png?alt=media" alt="The Freshworks API Settings page with the API key highlighted under API details for chat"><figcaption><p>The API key on the Freshworks API Settings page.</p></figcaption></figure>
2. **Save the webhook.** Click **Copy** next to the webhook URL in the form. In your Freshchat admin, go to **Admin Settings > Webhooks**, paste the URL, and click **Save**. The URL carries your eesel workspace id, which is how Freshchat messages find your workspace. Each Freshchat account has one webhook, so you do this once.

   <figure><img src="https://3732419023-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2xXO0947TYoPIhGoBgSE%2Fuploads%2Fgit-blob-87991ea6bb0187433391c4cfdb298f67e559a594%2Ffreshchat-webhook-url.png?alt=media" alt="The Freshchat Webhooks page with the eesel webhook URL pasted into the Webhook field and the Save button highlighted"><figcaption><p>The Webhooks page in Freshchat, with the URL pasted in.</p></figcaption></figure>
3. **Copy the webhook authentication key.** After you save, an **Authentication** section appears with a public key. Copy the whole key into the form, including the `-----BEGIN RSA PUBLIC KEY-----` and `-----END RSA PUBLIC KEY-----` lines. Freshchat signs every message it sends, and eesel checks that signature against this key. A missing or wrong key means your agent never sees the chat.

   <figure><img src="https://3732419023-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2xXO0947TYoPIhGoBgSE%2Fuploads%2Fgit-blob-1b4e81454b5160c6e4fe5a5d3d29a907c6b8c3fa%2Ffreshchat-webhook-key.png?alt=media" alt="The Authentication section on the Freshchat Webhooks page showing the public key to copy"><figcaption><p>The key Freshchat shows after you save the webhook.</p></figcaption></figure>

With all three filled in, click **Connect Fresh Chat**. eesel checks your API token and saves the connection.

<figure><img src="https://3732419023-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2xXO0947TYoPIhGoBgSE%2Fuploads%2Fgit-blob-57ed2d702cf329a1c92cf531a8a6018fcceb2350%2Ffreshchat-setup-form-filled.png?alt=media" alt="The Freshchat setup form with the API token, the webhook URL and the authentication key all filled in, the token and key masked"><figcaption><p>The form with all three steps filled in.</p></figcaption></figure>
{% endstep %}

{% step %}

### Check what it can read

**Integrations > Freshdesk** now shows the connection as **Connected**, with your Freshdesk account name. Below that are its skills and the **Sources** it can read, each source with its own toggle and document count. The **Automations** section on the same page lists the live chat automation.

<figure><img src="https://3732419023-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2xXO0947TYoPIhGoBgSE%2Fuploads%2Fgit-blob-71652f4112ab76b09a7af798ce50d2a0d6431af5%2Ffreshdesk-integration-page.png?alt=media" alt="The connected Freshdesk integration page listing Help Center, Canned Responses and Tickets as sources, each with a doc count and its toggle on"><figcaption><p>The connected Freshdesk page, with each source's toggle and document count.</p></figcaption></figure>
{% endstep %}

{% step %}

### Write the automation and turn it on

Connecting alone does not start your agent. It needs an automation first. Setting up Freshchat creates one, switched off, called **A customer sends a live chat message**. Open it from the **Automations** page in the sidebar.

The automation has one text box, **Instructions**. What you write there does two jobs at once: it decides which chats wake your agent, and it tells the agent what to do in them. There is no special syntax. eesel reads the whole text, checks each new chat against it, and only joins when the chat fits; once in, it follows the rest of the text. A chat that does not fit is never seen by the agent. Leave the box empty and the agent joins every chat.

A typical set of instructions:

```
Only join chats on the "Applicant Support" topic.
Stop replying once a teammate has replied in the chat.
Answer from the help center and keep replies short.
```

The first line keeps it to one Freshchat topic. The second makes it step back once a person replies. The wording is up to you; these are examples, not commands to copy exactly. Your agent's core Instructions (on its Instructions page) always apply underneath whatever you write here.

Save, then switch the automation on. Your agent can also do this from the dashboard chat.

<figure><img src="https://3732419023-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2xXO0947TYoPIhGoBgSE%2Fuploads%2Fgit-blob-e6c886e10b33aa736767d7bc917427f4e36d99c9%2Ffreshchat-automation-on.png?alt=media" alt="The Automations page with the live chat message automation switched on, and the dashboard chat about the setup open beside it"><figcaption><p>The live chat automation, switched on.</p></figcaption></figure>

The trigger event is fixed when the automation is created. So a new automation is required for each different trigger event.

**Check it worked.** The Automations page shows the live chat automation with its toggle on. From a terminal, `eesel automations` lists it as on.
{% endstep %}

{% step %}

### Check automation work in Freshchat

Open the widget on your site, or the live chat preview in your Freshchat admin. Ask a question a customer would ask. If you scoped the automation to a topic, start the chat on that topic. A test chat in the widget is a real chat. The reply arrives under the name of one of your Freshchat agents, not an eesel name. The **Replies as** setting on your Freshdesk integration page in eesel, under **Replies as in Fresh Chat** decides which one. By default it is the first active agent in your Freshchat account.

<figure><img src="https://3732419023-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2xXO0947TYoPIhGoBgSE%2Fuploads%2Fgit-blob-6648e78067f4de1ad71fe64c5f19777158ac382e%2Ffreshchat-widget-reply.png?alt=media" alt="A live chat widget on a website where a customer asks a shipping question and a reply arrives under the name of a Freshchat agent"><figcaption><p>The reply in the widget, posted under a Freshchat agent's name.</p></figcaption></figure>

You set the widget's look, its welcome message and your business hours in your Freshchat admin, not in eesel.
{% endstep %}
{% endstepper %}

## How it's different from Freshdesk tickets

The standard [Freshdesk](/integrations/helpdesks/freshdesk.md) integration handles email tickets. Those are answered over hours or days, with the full set of reply, tag, assign and close actions. Freshchat handles live chat from the widget on your website. Those are answered in the moment, with the single Chat reply action. Same agent, same knowledge.

## Sources, triggers and actions

### Sources

Freshchat adds no sources of its own. It uses the ones on your [Freshdesk](/integrations/helpdesks/freshdesk.md) integration: your help center, your canned responses and your past tickets. Your agent also remembers what was said earlier in the same conversation, so a customer does not repeat themselves.

### Triggers

Triggers are the events an automation can run on:

| Trigger                                  | Fires when                                             | Key         |
| ---------------------------------------- | ------------------------------------------------------ | ----------- |
| **A customer sends a live chat message** | A customer sends a message in a Freshchat conversation | `freshchat` |

The automation's Instructions decide which of those messages wake your agent. Along with the message itself, the automation is told which topic the chat is on, whether a teammate has already replied, and the custom contact and conversation fields you created in Freshchat, so instructions about any of those work. Your agent sees those fields too. A chat that does not match is never seen by the agent. With the box empty, every message wakes it.

### Actions

Actions are what it can do in the widget:

| Action                     | What it does                                                                                                                             |
| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| **Chat reply**             | Sends a message in the Freshchat conversation                                                                                            |
| **Update chat properties** | Assigns the chat to a group or an agent, or changes its status, priority, type or custom fields. This is how it hands a chat to a person |
| **Update chat contact**    | Saves the visitor's name, email or phone on their Freshchat contact when they share it                                                   |
| **Read chat**              | Reads the conversation's current properties                                                                                              |

You stay in control the whole way. Adjust your AI agent's access to knowledge and its action permissions to your liking. See [Actions and Approvals](/instructions-and-memory/actions-and-approvals.md).

{% hint style="warning" %}
**Replies go out live.** A customer in live chat is waiting, so **Chat reply** sends straight into the conversation. Keep a teammate watching the Freshchat inbox while you get started. They see every reply as it goes out and can take a conversation over. To hand a chat over, tell your agent in its instructions when to assign it to a group or a person, and add "Stop replying once a teammate has replied in the chat" to the automation so eesel steps back once they reply. Assigning a chat does not stop Freshchat sending the customer's later messages to eesel.
{% endhint %}

{% hint style="info" %}
**From Claude Code, Cursor or a terminal.** Freshchat needs a token and a key pasted into a form, so there is no connect command for it. Use the dashboard chat for that step. Filling the form is a human step: name what to fetch and where the form is, wait for the connection status to change, and do not try to open the form yourself. Around it, `eesel login`, then `eesel status` shows the Freshdesk integration and its source counts, `eesel integrations download start` copies your sources in, and `eesel automations` lists the automations and whether they are on. Switching the automation on is also a dashboard chat step. The trigger key for this page is in the Triggers table above. Full command reference: [The eesel CLI](/apis-and-developer-resources/cli.md). Step by step: [Set up from Claude Code or the terminal](/getting-started/set-up-from-a-coding-agent.md). From an MCP client: [Claude Code and MCP clients](/apis-and-developer-resources/claude-code-and-mcp-clients.md).
{% endhint %}

## Limitations

* **No draft mode in live chat.** **Chat reply** sends straight to the customer, so watch the first chats in your Freshchat inbox.
* **No skipping by visitor email or domain.** Scope by topic, or by what the customer wrote, instead.
* **Freshdesk comes first.** Freshchat is a channel on the Freshdesk integration, so Freshdesk must be connected.
* **Freddy can answer too.** If Freshchat's own AI is on for the same topic, both reply. Turn one of them off for that topic.
* **Widget look and hours live in Freshchat.** eesel does not change your widget, welcome message or business hours.
* **One webhook per Freshchat account.** Each Freshchat account can send its messages to one eesel workspace.
* **Topics are matched by their full name.** Write each topic's name exactly as it appears in your Freshchat admin, and name every topic you want covered. Scope by topic, not by widget, because one widget can serve several topics.
* **Replies post under a Freshchat agent's name.** To tell eesel's replies apart, create a seat no person logs into, such as "eesel AI", and pick it under **Replies as in Fresh Chat** on your Freshdesk integration page.

## Troubleshooting

<details>

<summary>Freshchat not showing under Freshdesk?</summary>

The Freshchat setup only appears once the Freshdesk integration is connected. Connect Freshdesk first.

</details>

<details>

<summary>Setup form showing again after connecting?</summary>

All three steps must be saved: the API token, the webhook URL in Freshchat, and the webhook authentication key. If any one is missing, the form comes back. Walk the three steps again.

</details>

<details>

<summary>Agent not replying to chats?</summary>

Check the live chat automation is on, on the **Automations** page. Then read its Instructions: a chat that does not match them is skipped and never shows up as a task, so a topic name with a typo, or a test chat started on the wrong topic, looks exactly like the agent being off. Then check the Freshchat side. The webhook URL must be saved in your Freshchat admin. The authentication key you pasted must match the one Freshchat shows, because a mismatch means every message is rejected. The API token must still be valid under **API Settings > API Details for Chat**. If billing on your workspace has lapsed, incoming chats are dropped without a reply.

</details>

<details>

<summary>Connection rejected when saving the API token?</summary>

eesel finds your Freshchat region by testing the token against each region. If no region accepts it, the token is wrong or came from the wrong place. Take it from **API Details for Chat**, not from the Freshdesk ticket API key.

</details>

<details>

<summary>Two replies to every chat, one from eesel and one from Freddy?</summary>

Freddy, Freshchat's own AI, is switched on for the same topic eesel handles. Turn it off on that topic in your Freshchat admin, or move eesel to a topic of its own.

</details>

<details>

<summary>Agent keeps replying after a teammate joined the chat?</summary>

The automation's Instructions need to say so. Add "Stop replying once a teammate has replied in the chat." If eesel and your teammates share the same agent seat and replies are still mixed up, pick a dedicated seat under **Replies as in Fresh Chat** on your Freshdesk integration page in eesel.

</details>

<details>

<summary>Replies showing under the wrong person's name?</summary>

Replies post under the Freshchat agent set in **Replies as in Fresh Chat** on your Freshdesk integration page in eesel. By default that is the first active agent in your Freshchat account. Change the setting to put a different name on the replies.

</details>

## FAQ

<details>

<summary>How do I add an AI agent to Freshchat?</summary>

Connect Freshdesk in eesel, fill in the Freshchat form under **Integrations > Freshdesk**, then switch on the live chat automation. Your AI agent answers in your existing Freshchat widget, so there is no new chatbot to add to your site. Connecting alone does not reply to anyone: nothing goes out until you switch on the live chat automation, so you can test first.

</details>

<details>

<summary>How long does it take to set up an AI agent in Freshchat?</summary>

Once Freshdesk is connected, it is one form: copy an API token from your Freshworks admin, save eesel's webhook URL in Freshchat, and paste back the key Freshchat shows you. Then write the automation's instructions and switch it on. The steps are in [Set up eesel in Freshchat](#set-up-eesel-in-freshchat).

</details>

<details>

<summary>Does the Freshchat AI agent send replies or draft them?</summary>

It sends. A customer in live chat is waiting, so **Chat reply** posts straight into the conversation. There is no draft mode in live chat.

To keep a human in the loop, have a teammate watch the Freshchat inbox. They read every reply as it goes out and take over any conversation that needs a person. You can also tell your agent when to assign a chat to a group or a person. Add "Stop replying once a teammate has replied in the chat" to the automation's Instructions and eesel leaves the chat to them once they do.

</details>

<details>

<summary>Can I limit which chats the Freshchat AI agent joins?</summary>

Yes, in the automation's Instructions. Name a topic to keep it to one queue, tell it to stop once a teammate has replied, or describe the kinds of questions it should take, judged from what the customer wrote. A chat that does not match is skipped. It cannot skip chats by the visitor's email address. To limit the hours, set business hours in your Freshchat admin so the widget only appears then. To pause it, switch the automation off.

</details>

<details>

<summary>Can the Freshchat AI agent hand a chat to a person?</summary>

Yes. It can assign the chat to a group or an agent, and change its status, priority or type. Tell it in the automation's Instructions when to do that.

</details>

<details>

<summary>Can I connect Freshchat to Claude or ChatGPT?</summary>

Yes, through eesel. Once Freshdesk and Freshchat are connected, you can talk to your eesel agent from Claude, ChatGPT or Cursor. See [Use eesel from Claude and other assistants](/apis-and-developer-resources/use-eesel-from-claude-and-other-assistants.md), [Use eesel from ChatGPT](/apis-and-developer-resources/use-eesel-from-chatgpt.md) and [Claude Code and MCP clients](/apis-and-developer-resources/claude-code-and-mcp-clients.md).

</details>

<details>

<summary>What reporting do I get for the Freshchat AI agent?</summary>

The Activity page lists every chat your agent handled, with what it searched, each reply it sent and its reasoning. The [Reports](/reports/reports.md) page shows volume and triggers over time. You can also ask your agent for a written report, or put one on a schedule.

</details>

## Related pages

* [Helpdesk](/use-cases/helpdesk.md) for the job your agent takes on across your support apps
* [Freshdesk](/integrations/helpdesks/freshdesk.md) for the ticket side of the same integration
* [Actions and Approvals](/instructions-and-memory/actions-and-approvals.md) for choosing what your agent may do
* [Integrations overview](/integrations/overview.md) for how sources, triggers and actions fit together
* [Set up from Claude Code or the terminal](/getting-started/set-up-from-a-coding-agent.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

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

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.eesel.ai/integrations/helpdesks/freshdesk/freshchat.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

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