GET returns {"configured": false} before the channel exists, rather than a
404 — on this API a 404 means “that tenant is not yours”, and reusing it for
“not set up yet” would make the two indistinguishable.
Pin the SDK version
/sdk/impel-chat.js is one file that always serves the current release. It is
convenient and it is also a moving target: a storefront embedding it gets a
different widget the next time the SDK is published, without the merchant
having changed anything and with no way to tell that it happened.
Every release is also served at a path of its own, and that path is never
rewritten:
src in embed_snippet to a versioned path before handing it to a
merchant, and change it deliberately when you have tested the next release.
Everything else in the snippet stays as returned.
current is what the unversioned path serves. supported is what is served
and will keep being served; deprecated still works but is no longer getting
fixes. Nothing is removed without the pinned storefronts being checked first —
a src that stops resolving is a blank corner on a merchant’s site, and the
browser reports nothing anybody is watching.
Appearance — colour, font, corners, placement — is fetched from
/chat/status at runtime and outranks the data- attributes, so changing a
merchant’s branding does not require touching a pasted tag. The pinned version
governs the widget’s code, not its look.allowed_origins is required
Include every host the storefront serves from, includingwww. if used.
Requests from anywhere else get a 403 with a named reason.
Nothing answers until the assistant is live
A configured widget on a merchant with no active assistant returns 503 withreason: "no_agent". That is the activate call, not a
misconfiguration.
