Internal install & test page. The live widget is loaded at the bottom of this page exactly the way it will be on a real site — click the blue bubble in the corner to try it.
Paste this once, just before </body>, on any site that should have the assistant:
<script src="https://chat.jobaaj.com/widget.js" data-host-name="jobaaj_main" defer></script>
Nothing else is required. The widget renders inside a Shadow DOM, so it cannot collide with your
site's CSS, and it figures out the API URL from its own src.
data-host-name is what tells the helpdesk which property a ticket came from — it is sent
as host_name on every ticket. Give each site its own value:
| Site | Use |
|---|---|
| jobaaj.com | data-host-name="jobaaj_main" |
| jobaajlearnings.com | data-host-name="jobaaj_learnings" |
| watify.io | data-host-name="watify" |
| anything else | pick a short slug for it |
If your CMS won't let you add attributes to a script tag, put it in the URL instead —
widget.js?host=jobaaj_main — which works identically. Omit it entirely and tickets
file under ai_chatbot. Values must be letters, numbers, _ or -,
up to 40 characters; anything else silently falls back to the default rather than failing the ticket.
All optional, set as attributes on the same script tag:
| Attribute | Default | What it does |
|---|---|---|
data-host-name | ai_chatbot | Which site this copy is on. Travels with every ticket as host_name. |
data-api | script's origin | Point the widget at a different backend (e.g. a staging server). |
data-position | right | Set to left to dock in the bottom-left corner. |
data-greeting | standard | Override the opening line per site. |
data-fonts | on | Set to off to skip loading Google Fonts on the host page. |
<button onclick="Jobby.open()">Chat with us</button>
Jobby.open(), Jobby.close() and Jobby.reset() are available once the script has loaded.
The embedding site's origin must be listed in ALLOWED_ORIGINS on the backend,
or the browser will block every request with a CORS error. Check the browser console
on the host page if the widget loads but no messages go through.