PRODUCTION

travel-ai-chat Widget — Production

This page loads the deployed bundle from the same host it is served from, so it shows exactly what an agency's visitors get.

What this points at

Widget: ./embed.js — the bundle deployed next to this page
Backend: https://chat-ai.waavo.com
Tenant: waavodemolt.waavo.com

How an agency embeds it

<script
  id="waavo-chat-embed"
  src="https://chat-widget.waavo.com/embed.js"
  data-host="waavodemolt.waavo.com"
  data-language="lt"
  async
></script>
id * Must be waavo-chat-embed — it is how the script finds itself when a tag manager injects it.
data-host * The agency's API host, without a protocol — the same value the other waavo widgets take. Our backend reads destinations, airports and offers from it on the widget's behalf (sent as X-Meta-Base). The agency identifier sent as X-Agency is derived from its first label, so waavodemolt.waavo.com yields waavodemolt.
data-language lt, en, ru, lv or ee. Defaults to lt, and is independent of the host page's language — which is why this page reads in English while the widget speaks Lithuanian.

* required — without it embed.js throws and does nothing.

data-api, data-meta-base and data-agency still override the derived values. They are for pointing the widget at a local backend or a tenant whose host does not follow the convention — an agency never needs them.

What the customer fills in

Fifteen questions, answered by tapping. Free text is typed in four places only: extra wishes, name, email and phone. Naming a specific hotel skips three steps, and the progress bar reflects that straight away.

The language switcher shows only what the agency has enabled in its own system — this tenant has Lithuanian alone.

Which build is this?

The hash in embed.js tells you which build is serving:

curl -s https://chat-widget.waavo.com/embed.js \
  | grep -oE "widget\.[A-Za-z0-9_-]+\.js"

npm run build && ls dist/widget.*.js

Matching hashes mean production has the code you have locally. This page is serving .