Platform
JavaScript API
Once meeton.js has booted it exposes window.Meeton. Use it to open the chat, a calendar or a document from your own buttons, to pass hidden values into forms, and to debug the loader. Most sites never need any of this; it is here for the ones that do.
Configuration
The only required configuration is the global the snippet sets before the loader runs.
window.DynaMeetConfig = {
teamId: "YOUR_TEAM_ID", // required · UUID from Settings → Setup
mode: "embed" // optional · only on the inline-chat host page
};| Key | Type | Meaning |
|---|---|---|
teamId | string (UUID) | Your team. Anything that is not a UUID makes the loader log a message and do nothing. If the object is missing when the script runs, the loader polls for it and boots once it appears. |
mode | "embed" | Renders the chat inline instead of as a launcher, and suppresses marketing popups and ads. You normally get this via the inline-chat iframe rather than setting it yourself. |
Methods on window.Meeton
All methods are safe to call at any time; before boot they either queue or no-op, as noted. Pair them with your own buttons, links or analytics triggers.
Meeton.openChat()
Opens the chat window exactly as a click on the launcher would. No-op before boot, on a page whose rules hide the launcher, and in embed mode, where the chat is always open.
<button onclick="window.Meeton && window.Meeton.openChat()">Ask us anything</button>Meeton.openCalendar(options?)
Opens a booking calendar in the widget overlay. Without options it opens your default calendar.
openCalendar(options?: {
calendarId?: string; // a specific bookable calendar
source?: "emailLink" | "otherLink" | "thankYouPage"; // how the booking is attributed
embedded?: boolean; // full-screen with a solid backdrop
}): void;Use source: "thankYouPage" on a form thank-you page to offer a slot the instant someone converts. The same thing is available with no code at all: a link to any page on your site with ?calendarId=… in the URL opens that calendar on arrival, which is how calendar links in emails and QR codes work.
Meeton.openLibrary(options?)
Opens the Library viewer, optionally on a specific document and page. openDownloadCenter() is the older name for the same method and still works.
openLibrary(options?: {
docId?: string; // open straight to this document
pageNumber?: number; // and this page
src?: string; // free-text attribution, e.g. "pricing-cta"
}): void;Meeton.openInquiryPanel(marketingOfferId)
Opens the inquiry panel of one marketing offer, so a static link on the page can do what an ad click does.
Meeton.setHiddenValues(values)
Lead forms can include hidden fields configured as From your page. This method supplies their values, keyed by the field's property name. It merges into the current bag, so call it again whenever a value changes. Safe to call before boot.
// Declare values before the loader runs…
window.meetonHiddenValues = { plan: "enterprise", campaign: "spring-webinar" };
// …or update them at any time afterwards.
window.Meeton.setHiddenValues({ plan: "pro" });The values reach every open frame at once: the chat, any ad or marketing popup, the calendar form and the Library.
Meeton.recordLead(fields) deprecated
Kept so older integrations do not break, but it is now a no-op: the form watcher identifies visitors from your forms automatically, so there is nothing left for this call to do. You can leave it in place or remove it.
Lifecycle: boot(), bootEngagedVisitor(), tearDown()
The loader boots itself on page load. These exist for single-page apps that mount and unmount the whole page, and for tests. tearDown() removes the widget frame, closes the live connection and detaches the form and navigation watchers; boot() brings it all back. You will not normally call them.
Forms the tag already understands
You do not need the API to identify visitors from your forms. The loader watches the forms already on your pages for the recognised contact fields above. A value is staged when the visitor leaves the field, and becomes a contact only once the submission is confirmed: a HubSpot form's success message or redirect, a thank-you page, or your CRM receiving it. Unrecognised fields are ignored, passwords and payment fields are never read, and watching stops once the visitor is known.
HubSpot forms get special handling. Both the legacy inline embed and the v4 forms embed are detected, including the redirect URL they announce on success, and the identity is forwarded to HubSpot's own tracking queue (_hsq) when the HubSpot script is present, so the HubSpot contact and the Meeton visitor line up.
Links from Meeton Email
Links in emails that Meeton sends carry a contact reference, dmContactId, in the query string. When the visitor lands, the loader ties the click to the visit that follows, so the chat already knows who it is talking to. Nothing is required on your side; keep the parameter if you rewrite URLs on arrival.
Debugging
The loader logs through the debug library under the dynameet:meeton namespace. Turn it on in the browser console and reload:
localStorage.debug = "dynameet:*"; // then reload the page
// Expect lines like: "Generated new visitorId: …", "Set cookie dynameetVisitorId …"
// A silent console with the tag present usually means: bot detected, domain not allowed, or plain HTTP.
localStorage.removeItem("debug"); // turn it off again| Symptom | Likely cause | Check |
|---|---|---|
| Nothing renders, no log lines | Page is plain HTTP, or an ad blocker blocks app.dynameet.ai | The Network tab: is meeton.js loaded at all? |
| "teamId is not a valid UUID" | Wrong or truncated ID in the snippet | Copy the snippet again from Settings → Setup |
| Config request returns 403 | Hostname is not on the allow-list | Settings → Setup → Domains; add the host or a wildcard |
| Widget loads, chat replies never arrive live | A corporate proxy blocks WebSockets | Allow wss://api-ws.dynameet.ai; chat still works over HTTPS meanwhile |
| Same person counted as two visitors | Safari cleared storage after 7 days without interaction, or a private window | See Browser behaviour |