MMeeton aiDocs
EN日本語

Platform

Installation

Two lines of HTML, pasted once. The loader is asynchronous, draws the widget in its own frame, and does nothing at all if it cannot run. This page covers the snippet, where to put it, the domain allow-list, and the inline embeds.

The snippet

Copy this from Settings → Meeton AI → Setup, where your real teamId is already filled in. The teamId is a UUID; the loader ignores anything else.

HTML · before </body>
<!-- Start DynaMeet -->
<script type="text/javascript">
window.DynaMeetConfig = { teamId: "YOUR_TEAM_ID" };
</script>
<script type="text/javascript" async defer src="https://app.dynameet.ai/meeton.js"></script>
<!-- End DynaMeet -->
Placement
Just before </body> is the default; anywhere in the page works. The config object must be defined before the loader runs, and the loader will wait for it if it is not.
Google Tag Manager
A Custom HTML tag on the All Pages trigger, containing the whole snippet. No GTM template is needed.
Platforms
Step-by-step guides exist in the dashboard for WordPress, Webflow, Shopify, Squarespace, Wix, BASE, STORES, Hatena Blog and Google Tag Manager. Plain HTML covers everything else.
Page speed
One script, loaded async defer: it never blocks rendering and starts after your content. The widget UI lives in a separate frame, so its CSS and JavaScript cannot collide with yours.
Updates
We update the hosted script. You never re-install or change the snippet.
HTTPS
Required. The loader stays silent on a plain-HTTP page, with localhost as the one development exception.

What happens on each page view

The loader runs after your content, checks the visitor and the domain, then draws the widget in its own frame.
Your page loadsas it does today
→
meeton.js runsasync · after content
→
Checksbot? allowed domain?
→
Widget appearsin its own frame

Typically well under a second. A failed step stops here, and the page never knows.

In a little more detail, the loader:

  1. Exits immediately for bots and crawlers (Googlebot, headless browsers), so they never see the widget and never count as visitors.
  2. Reads window.DynaMeetConfig.teamId and validates it as a UUID.
  3. Gets or creates the visitor ID: a random UUID kept in localStorage and a first-party cookie. See Cookies & storage.
  4. Fetches your team's configuration from api.dynameet.ai. The request carries the page's origin, and the API refuses it if the hostname is not on your allow-list. A team that is paused, cancelled or over its plan limit is refused the same way.
  5. Creates the widget iframe from app.dynameet.ai, opens the live WebSocket connection, and starts watching the page: navigation inside single-page apps, your existing forms, scroll depth and dwell time.

The domain allow-list

The tag only works on hostnames you list under Settings → Meeton AI → Setup → Domains. The check runs on every request, including the live connection, so a teamId copied from your page source does nothing on anyone else's site.

Exact hostnames and wildcards, per team. Anything else is refused before it reaches your data.
www.example.co.jpon your list · ✓ served
go.example.co.jpmatches *.example.co.jp · ✓ served
copycat-site.comyour teamId, pasted elsewhere · ✗ refused

Exact hostnames and wildcards, per team.

  • Staging and previews. Add the staging hostname, or a wildcard such as *.example.co.jp for preview environments whose names change.
  • Local development. localhost is always allowed, so you can test the tag on a local build before you add any domain.
  • Confirming it works. Each domain is marked Installed the moment the widget first loads on it. An iframe embed on a page you do not control (a Notion page, for instance) cannot report back, so it shows as not detected even when it works.

Inline embeds

The floating widget is the default, but the chat, the booking calendar and the lead form can also sit inline, exactly where the page wants them. Each is an iframe from app.dynameet.ai, so the same CSP rules cover them, and the embed declares the page it sits in so the allow-list check still applies.

Inline chat

The chat window rendered in the page flow instead of as a launcher. Marketing popups and ads are suppressed in embed mode, since the page is already a conversation.

HTML
<!-- DynaMeet inline chat -->
<iframe
  src="https://app.dynameet.ai/iframe-embed.html?teamId=YOUR_TEAM_ID"
  title="DynaMeet"
  style="width: 100%; height: 600px; border: 0;"
  allow="fullscreen; camera; microphone; autoplay"
></iframe>

Inline booking calendar

One bookable calendar, full-page. The calendarId comes from Settings → Meeton AI → Calendars, where each calendar also has its own URL and QR code.

HTML
<!-- DynaMeet booking calendar -->
<iframe
  src="https://app.dynameet.ai/iframe-calendar.html?teamId=YOUR_TEAM_ID&calendarId=CALENDAR_ID"
  title="Book a meeting"
  style="width: 100%; height: 700px; border: 0;"
  allow="fullscreen; camera; microphone; autoplay"
></iframe>

Inline lead form

The lead form you configured under Lead form, as a transparent, unchromed frame sized by the height you give it. Submissions behave exactly as they do in the widget: the visitor is identified and the CRM is filled.

HTML
<!-- DynaMeet form -->
<iframe
  src="https://app.dynameet.ai/embed/form/YOUR_TEAM_ID"
  title="Contact us"
  style="width: 100%; height: 420px; border: 0;"
  loading="lazy"
></iframe>
Note

Inline embeds do not replace the tag. Keep meeton.js on the page as well, so the visitor is recognised, the form watcher runs, and a booking made in the inline calendar lands on the same visitor record as their chat.

If they ask

Will it slow our site down?

No. The script is a single file loaded asynchronously after your content, and the widget renders inside its own frame. Your pages do not wait on it, and if it fails to load nothing on the page changes.

Can we try it on staging first?

Yes. Add the staging hostname to your allowed domains; a wildcard such as *.example.co.jp covers preview environments whose names change.

Who can see the widget?

Only visitors to domains you have allow-listed. On any other site the request is refused and nothing renders.

Do we need to do anything when you release updates?

No. Updates ship to the hosted script and take effect on the next page load.

Does a blocked visitor break anything on our page?

No. Every failure path ends with the tag doing nothing. Your page, your forms and your other scripts behave as if the snippet were not there.

© DynaMeet, Inc.Trust & securityContact