Docs

Ship a bot in an afternoon.

Elennai turns your own content into a support agent that answers on your website, in Slack or through the REST API - and then completes the steps on the page for the visitor. Sign up, connect your content, paste a script tag, you're live. This page is the operator manual - skim the bits you need.

tl;dr - the embed snippet
HTML
<script
  src="https://app.elenn.ai/widget/embed.js"
  data-bot-key="el_pub_your_bot_key_here"
  data-server="https://app.elenn.ai"
  async
></script>

Paste before </body> on your site. The exact data-bot-key is shown in your dashboard once you've created a bot.

Getting started

Four steps from sign-up to live bot.

These are the only steps that matter. Everything below this section is optional polish.

1

Sign up and create a bot

Sign up free - no card required. From the dashboard, click 'New bot', give it a name and accept the prefilled system prompt (you can tune it later).

2

Add data

Paste FAQ text, drop in .md / .json files, or connect Notion or Google Drive. Every answer the bot gives is grounded in this corpus.

3

Paste the embed snippet

Copy the <script> tag from the Embed tab and drop it before </body> on your site. The chat bubble appears in the bottom-right corner.

4

Test and iterate

Open the Test tab and chat with the bot. Tweak the system prompt, upload more docs, or refine suggested questions until the answers look right.

Guided actions

Let it finish the job on the page.

Answering is the half a visitor can already do themselves. A guided action is the other half: the agent opens the right page and completes the steps on it, with a visible cursor, stopping wherever you told it to stop. The full walkthrough is on the guided actions page.

Record a flow by doing it once

Start the recorder, click through the flow on your own site the way a customer would, and stop. Every step is captured from the real HTML you touched - the element, the field, the order. This is also the answer for anything behind a login: the recorder runs in your browser, in your own session.

Or scan the site and pick from what it finds

Point a scan at your site and it walks the pages it is allowed to reach, collects the forms and controls that are really there, and proposes them grouped into named flows. You review the proposals and save the ones you want. Nothing enters your catalogue on its own.

Decide how far it may go

Guided actions are off until you turn them on, and then on per flow. A flow can be gated so the agent asks before it starts, and any step can be marked sensitive so the run stops there and the visitor makes the last click. A flow you never saved is not something the agent can reach for.

Where a run stops

The agent navigates to the right page and completes the steps on that page. A full page reload ends the run. In a single-page app it can keep going across views if you register your router with the widget. And if no element matches with confidence, the run stops instead of clicking something else.

Configure

Everything you can tune per bot.

Each card below maps to a real surface in the dashboard. Open the bot editor and follow the path.

System prompt

Defines tone, persona, and what the bot is allowed to say. The default tells it to ground answers in your documents and refuse questions outside the corpus.

Where to find itBot editor → Settings → System prompt

Widget design

Colours, fonts, header copy, bubble icon, logo. Toggle header_logo_full if the logo gets cropped to a small avatar - the full image then renders edge-to-edge.

Where to find itBot editor → Widget design

Auto-design from URL

Paste a URL and the widget picks colours, fonts, and header text that match the host site. Useful for getting a passable design in one click.

Where to find itWidget design → 'Auto-design from URL'

Suggested questions

Three to five starter prompts shown above the input field. Lowers the cold-start friction for new visitors who don't know what to ask.

Where to find itWidget design → Content section

Embed allowlist

The widget only loads on origins you list explicitly. No wildcards - each subdomain and each local dev port has to be added separately.

Where to find itBot editor → Embed → Allowed domains

CSAT feedback

Optional thumbs-up / thumbs-down on every bot reply, with an optional free-text follow-up. Surfaces in the conversation history so you can review what's working. A live-chat conversation can also end with a short survey once it is resolved.

Where to find itWidget design → CSAT section

Attachments

Visitors can attach a file to a message - the screenshot of the error, the invoice they are asking about. It is on unless you turn it off; you pick the size cap and which formats you accept. The file arrives in the conversation, where your team can preview or download it.

Where to find itBot editor → Widget design → Attachments

Data sources

Plug in the corpus the bot answers from.

8 ways to feed a bot today. Mix and match - one bot can have your crawled site + manual docs + Notion + Drive + a Postgres connection + your own REST API as a tool all at once.

Website crawler

Give Elennai the address of your site and it reads the pages it is allowed to read - your robots.txt and your sitemap draw the boundary - then indexes what it finds. Re-crawl when the site changes, and read the report: it names the pages that failed, so a dead link in your own documentation is something you can go and fix.

Manual paste, Markdown & JSON

Paste FAQ pairs or full articles, or drop in .md / .json files. The fastest way to seed a brand new bot - no integration setup required.

URL ingest

Submit a URL and Elennai fetches and indexes the page. Good for pulling in a help-centre article or marketing page without copy-paste.

Notion sync

Connect Notion in one click, pick the pages or databases you want, and the bot stays in sync. Daily refresh plus secure real-time sync when you edit a page.

Google Drive sync

Connect a Google account and pick the Docs, Sheets, Slides, PDFs, DOCX, or Markdown files you want. We handle the conversion. Re-sync on demand or wait for the periodic refresh.

HubSpot, in both directions

Ingest your HubSpot knowledge base as a source, and let the bot look a contact up in the middle of a conversation so it knows who it is talking to. Going the other way, a conversation can write a contact, a note or a ticket back to HubSpot, so a chat that mattered does not stay stuck in the widget.

Connect your database

Point the bot at a read-only database. You decide which tables and columns it can see, and which questions it's allowed to ask. The bot never writes raw SQL.

Your REST API as a tool

Plug the bot into your own REST endpoints (e.g. 'look up an order in our CRM'). You describe the endpoint and its parameters; credentials are encrypted at rest, and the bot calls it automatically when a question matches. Included on Pro and Scale, or add it to Starter and Growth with the REST API + database connections add-on.

Channels

Where visitors actually talk to the bot.

Same bot, multiple surfaces. The embed widget covers most cases; the REST API and backoffice tester cover the rest. Slack is live too.

Embed widget on your site

One script tag. The widget is isolated from your site's design so neither interferes with the other. Works on any framework - we ship setup tips for Next.js, Astro, Remix, Nuxt, SvelteKit, plain HTML, and most CMSes.

Public REST API

Talk to your bot from your own code with a per-account API key. Same answers, same persona, fully isolated from other customers. Useful when you want the bot in a mobile app or internal tool.

Backoffice chat tester

Every bot has a Test tab in the dashboard where you can chat with the bot directly. It shows the exact passages it pulled, so you can spot-check what it's learning before customers see it.

Slack

Install your bot in any Slack workspace and your team can @-mention it in channels or DMs - same knowledge as on your website. Replies are threaded, and a Slack message counts against your plan exactly like a message from the widget.

Team and account

The people, the second factor, and the way out.

Everything above is about the bot. This is about the account it lives in: who can touch it, how you prove it is you, and how you leave with your data if you ever want to.

Invite your team and pick roles

Invite colleagues by email from your workspace settings. A role decides what a member can open and change, and permissions are per surface - the person working the live-chat inbox does not need the keys to billing. How many seats you get is a plan question; the pricing page has the table.

Two-factor sign in

Enrol an authenticator app from your profile and keep the single-use recovery codes you are given. From then on the second factor is asked for at every sign-in. One honest detail: resetting your password does not clear the factor, so the recovery codes are the way back in if you lose the phone.

Export the whole workspace

A workspace owner can request a full export - conversations, documents, contacts and settings. It is prepared in the background rather than blocking on a click, and you get a download link when it is ready. The link expires, so fetch it when the mail arrives.

Identity

Tie chats to logged-in users.

Anonymous visitors and identified users share one conversation. The agent only treats someone as a known person when your own server has vouched for them, so nobody reads another customer's history by claiming to be them.

One route, and what still works

  1. 1. Verified, recommended - build GET /api/elennai/identify on your own site. It reads your session and returns { "token": "…" }, a JWT signed HS256 with the agent's identity secret, carrying sub, optional name and email, plus iat and an exp about four hours out. Answer 401 when nobody is signed in. Same origin, so an HTTP-only session cookie rides along, and the widget probes it on every page load with nothing to configure in Elennai. The dashboard carries ready-made examples for Node, Next.js, PHP, Python, Rails and .NET.
  2. 2. The same token, handed to the page - if that route is impossible, render <meta name="elennai:identity-token" content="…">, set window.ElennaiUser = { token }, or call window.Elennai?.identify({ token }). Mint it server-side the same way, and call window.Elennai?.reset() on logout.
  3. 3. Legacy, still accepted - a user_hash (HMAC-SHA256 of the id with the same secret) sent next to external_id keeps verifying, so existing installs do not break. It never expires, so move to the token when you can. Reading the id straight off the page (DOM selector, localStorage key, cookie, window global) also still works, but a visitor can edit all of those: we show the name and nothing else, with no personal history, no orders and no CRM attribution.
Troubleshooting

Things that trip people up.

Honest limits

Where the edges are.

Knowing the edges matters. We'd rather be clear up front than oversell and disappoint.

Doesn't browse the live web

The bot only answers from the documents, Notion pages, Drive files, databases, and REST APIs you've configured. It won't go fetch a page on the open web mid-conversation.

Acts inside flows you approved, nothing else

The agent can complete the steps of a flow you recorded or accepted from a scan, on the page that flow lives on. It cannot invent a new flow, and steps you marked sensitive stop and hand the click back to the visitor. There is no e-signature integration and no payment pass-through: the transaction happens on your side, on your page.

A page reload ends a guided run

A run lives in the page it started on. If a step reloads the page the run ends there, and the conversation carries on without it. Single-page apps are the exception: register your router with the widget and a run can continue across views.

Doesn't run untrusted code

Postgres data connections execute parameterised SQL you've pre-defined - the model picks a query by name and supplies parameters. It never writes or runs arbitrary SQL or shell commands.

Doesn't train on your data

We run no ML pipeline that trains on your content. Answers come from Google Cloud (Vertex AI) in europe-west4 (Eemshaven, NL), and what Google may do with what we send is governed by its terms for that service; we will publish the applicable clause on our sub-processor page.

Ready to ship?

Start on the permanent Free tier for small projects. Upgrade when traffic justifies it. No card to start, no contract.