Talk to EAM in plain English.
The widget speaks the EAM REST surface natively. Ask a question, paste a raw call, or pick a saved prompt — same backend.
Look up records
"What's the status of work order 10000?" → GET /workorders/10000#ORG1 → status, assignee, due date.
Run grid queries
"Show me open alerts" → POST /grids with the right GRID_NAME and a paged result set.
Pull child tabs in one shot
"What parts are on WO-10000?" → GET /workorders/10000#ORG1/parts, summarised.
Raw REST passthrough
Type GET /assets/<ASSET-CODE>#* or POST /grids {…} and see the response inline.
Catalog-scoped
Ships with an endpoint catalog; the LLM is told never to invent paths outside it.
Auto context
Tenant / role / organization headers stamped on every call from the widget config.
One Extensibility Framework record. Every screen.
EAM's UI is a single-page app — once mounted on document.body
the widget follows the user across every screen they navigate to.
Install on the Start Center; you're done.
Find your Start Center mnemonic
Administration → Security → Roles → open the default role → note First Screen. Common values: BSHOM (EAM 12.x), OSCHOM, OSOBJA.
Generate an API key for the widget
Administration → Integration → API Keys → New. Pick (or create) a service-account user and a role whose Interface Permissions tab grants Query / Insert / Update / Delete for every web service the widget should reach (work orders, assets, parts, grids, etc. — at minimum the entities listed in the endpoint catalog). Save and copy the generated key; EAM only shows the full value once.
The same screen returns a license / customer code that some tenants embed in the API
header. Note it down too — you'll paste it into TCH_LKEY below.
Create the install parameters on BSINST
Administration → Install Parameters (mnemonic BSINST) → New
Record for each row below. The launcher reads these at boot via GRIDDATA and hands
them to the widget — no source-code edit needed.
| Install Parameter | Description | Value to paste |
|---|---|---|
TCH_AKEY |
Attune chat API key | The API key generated in the previous step. Sent to the EAM REST API as the X-API-Key header on every call the widget makes. |
TCH_LKEY |
Attune chat license / customer code | The license / customer code from the API Keys screen. Reserved for licensing checks; safe to paste a placeholder if your tenant doesn't issue one. |
APPURL |
Application server URL (usually already set on every tenant) | Standard EAM parameter, e.g. https://b-cafmeam.neom.com/web/base/logindisp?tenant=NEOMUAT. The launcher parses ?tenant=… out of it. If yours doesn't carry the tenant in the query string, edit extractTenantFromUrl in the launcher source or add a dedicated CHATTER_TENANT parameter. |
TCHAURL (optional) |
BYO LLM chat-completions root | OpenAI-compatible base URL of your own LLM endpoint, e.g. https://api.openai.com/v1 or https://api.groq.com/openai/v1. Only used when all three TCHA* rows are set; otherwise the relay uses its admin-configured provider chain. |
TCHAKEY (optional) |
BYO LLM bearer token / API key | Sent as Authorization: Bearer … to TCHAURL. Read in the browser and forwarded to the relay on every chat turn — it's never persisted server-side, but it is visible in the page source and the browser network tab. Rotate it if you suspect leakage. |
TCHAMDL (optional) |
BYO LLM model id | The model name the endpoint expects, e.g. gpt-4o-mini, llama-3.1-70b-versatile, claude-sonnet-4-6-via-proxy. Sent verbatim in the model field of the chat-completions request. |
Each row needs its Install Parameter code (the values in the first column above) and the value pasted into the Value column. Description is free-form — the launcher only matches on the code. Re-pasting the same code overwrites the prior value.
Create the framework record
Administration → Screen Configuration → Extensible Framework → New Record.
- Name
ATTUNE_CHAT- Screen
- your Start Center mnemonic
- Active
- checked
Paste this into Source code
No edits required. The launcher reads tenant, the API key, and the
license key from the install parameters you created in step 3 — just paste, save, and log back in.
Source is also at
/extensions/eam-chatter.js.
Loading /extensions/eam-chatter.js…
Save, log out, log back in
The chat launcher appears in the lower-right of every screen.
It's installed but the chat didn't appear — what now?
Open DevTools Console. The launcher logs [EAMChatter] warnings when an install-parameter read fails, and ExtJS reports class-resolution errors directly. Common signatures:
| What you see in Console / Network | What it means |
|---|---|
No requests for chatter.js / chatter.css at all | The framework record didn't fire on this screen. Try a different screen mnemonic — BSHOM, OSCHOM, or OSOBJA. |
chatter.js 200s but no widget | The __attuneChatLoaded guard already fired in this session. Hard-reload (Ctrl-Shift-R) to clear. |
chatter.js blocked / refused | Open Network — most likely a Content-Security-Policy on the EAM page restricting external scripts. |
Errors mentioning AbstractExtensibilityFramework or Ext.define | An older copy of the launcher is still pasted in. Replace it with the snippet above — this one has no Ext.define, no parent class, no 404. |
[EAMChatter] install param … read failed | The launcher couldn't read TCH_AKEY / TCH_LKEY off BSINST. Confirm both rows exist in Administration → Install Parameters and that the signed-in user's role allows reading /installationcodes. |
REST calls return 401 / 403 | The X-API-Key the widget is sending isn't valid for the role attached to the API Key. Re-issue the key under Administration → Integration → API Keys and paste the new value into TCH_AKEY. |
[EAMChatter] GRIDDATA read failed | The INSTALL_PARAM_GRID values don't match this tenant's Install Parameter screen. Open DevTools → Network on that screen and copy GRID_NAME + the column aliases from the live request. |
The chat runs in your browser, not on our server.
We host only the widget code. When the page loads, your browser fetches it from us — and from that point on the widget talks directly to your own EAM tenant. We never see your records, credentials, or queries.