Web chat widget

Guest chat,
on your own site.

One script tag puts a chat bubble on your website. Guests write to you from there, and every conversation lands in the same Prohost inbox as your Airbnb and Vrbo threads โ€” with your AI answering first.

One script tag
Replies in your inbox
your-site.com
Chat with us
Usually replies in a few minutes
Is a late checkout possible on Sunday?
Yes โ€” we can hold the place until 2pm.

What the widget does

It is the same guest chat that runs on your Prohost direct-booking site, packaged for any website you control.

Lives on your website

Paste one script tag into your site footer or custom-code area. No plugin, no build step, nothing for you to host.

One inbox for everything

Web chat conversations arrive in the Prohost inbox alongside your OTA threads, so your team answers everything in one place.

Your AI answers first

The same AI that handles your guest messaging replies here too, using your property knowledge โ€” and hands over to a human when it should.

Install it in three steps

Copy the snippet from your widget settings, paste it into your site, publish.

  1. Create your widget

    Open the AI Chat Widget app in Prohost and set the name, greeting and launcher style your visitors will see.

  2. Copy your snippet

    In the Add to another website section, copy the snippet. It already carries your widget id, embed key and launcher settings.

  3. Paste it before the closing body tag

    Drop it into your site-wide footer or custom-code area and publish. The launcher appears in the corner on the next page load.

html
<script
  src="https://app.prohost.ai/webchat.js"
  data-widget="WIDGET_ID"
  data-api-key="WIDGET_API_KEY"
  data-position="bottom-right"
  data-launcher-color="#4F46E5"
  data-launcher-icon="chat"
  data-sound="on"
  async></script>

Replace WIDGET_ID and WIDGET_API_KEY with the values from your widget settings โ€” or simply copy the ready-made snippet from the app, which fills them in for you. The embed key is public and scoped to that one widget: it carries no access to your account. Prohost hides the key after it is first shown, so use Rotate key if you need a fresh copyable snippet.

The shortest version that works

Only the widget id and the embed key are required. Leave the launcher attributes out and the launcher falls back to its own defaults โ€” the indigo bubble and the chat glyph โ€” whatever you picked in the app. The panel itself still follows your settings.

html
<script
  src="https://app.prohost.ai/webchat.js"
  data-widget="WIDGET_ID"
  data-api-key="WIDGET_API_KEY"
  async></script>

Works on most site builders โ€” Webflow, WordPress, Squarespace and Wix all have a place for custom code in the site footer.

Attribute reference

Every data-* attribute the loader reads. Anything else on the script tag is ignored.

AttributeValuesDefaultWhat it does
data-widgetYour widget idRequiredWhich widget the conversation belongs to.
data-api-keyYour public embed keyRequiredThe public embed key for that widget. It is scoped to the widget and carries no account access.
data-positionbottom-right ยท bottom-leftbottom-rightWhich corner the launcher and the chat panel sit in.
data-launcher-colorHex colour#4F46E5Fill colour of the launcher bubble.
data-accentHex colourNoneOlder name for data-launcher-color. Used only when data-launcher-color is absent.
data-launcher-iconchat ยท lettermarkchatThe glyph on the launcher: a chat bubble, or the white Prohost lettermark.
data-hide-mobilePresence onlyOffHides the launcher below 768px. The panel can still be opened from a button of your own โ€” see below.
data-soundonWidget settingSwitches the reply sound on for this embed, whatever the widget setting says. See below.

data-hide-mobile is presence-only: any value, including an empty string, switches it on. Every other attribute is matched on its value โ€” data-sound in particular reacts only to the exact lowercase value on.

How the reply sound works

A short, quiet chime plays in the chat panel when a reply arrives and the visitor is looking somewhere else.

Setting

Play sound for guests

The toggle in your widget settings, and the source of truth. It covers this widget everywhere it runs, including your Prohost-hosted direct-booking site. Change it whenever you like โ€” no code edit needed.

Attribute

data-sound="on"

An explicit override on the script tag you pasted. It can only ever switch the chime on: there is no off value. It exists so that snippets pasted before the setting shipped keep working, and so you can force the chime on for one specific site.

Either one is enough

The chime plays if the setting is on, or if the attribute carries the exact value on. The snippet the app generates keeps the two in step: it includes the attribute while the setting is on and leaves it out when the setting is off.

To silence the chime everywhere, switch the setting off and re-copy the snippet into your site. An attribute you already pasted keeps overriding the setting โ€” that is deliberate.

  • The visitor has to interact with the page first

    Browsers block audio until someone clicks, taps or types. Opening the launcher counts, and so does typing in the panel โ€” so a visitor who sent the message that produced the reply will hear it. If the browser blocks playback anyway, nothing breaks: the unread badge on the launcher is the main signal and the chime is a bonus.

  • It never plays while they are reading

    No chime while the panel is open and the tab is in the foreground โ€” the reply is already on screen. It plays when the panel is closed, or when the tab is in the background. The unread badge follows a slightly narrower rule: it only ever appears while the panel is closed.

  • A burst of replies is one chime

    Several messages arriving together produce a single cue, not one per message.

Drive it from your own page

The loader exposes a small event bus on window.ProhostWebchat, so your site can open the panel and react to what happens inside it.

javascript
function wireUpWebchat() {
  window.ProhostWebchat.on('webchat_host_message', (event) => {
    console.log(event.type);
  });

  document.querySelector('#my-chat-button')?.addEventListener('click', () => {
    window.ProhostWebchat.open();
    // window.ProhostWebchat.close() collapses it again.
  });
}

if (window.ProhostWebchat) {
  wireUpWebchat();
} else {
  // src*= rather than src$= โ€” the tag may carry a cache-busting query string.
  document
    .querySelector('script[src*="/webchat.js"]')
    ?.addEventListener('load', wireUpWebchat);
}
webchat_session_startedThe conversation now exists โ€” the visitor sent their first message. Its payload carries the conversationId.
webchat_message_sentThe visitor sent a message.
webchat_host_messageA reply from your team or your AI arrived. This drives the unread badge and, when enabled, the chime.

Useful together with data-hide-mobile: hide the default launcher on phones and open the panel from a button of your own instead. Events are relayed only when they come from the Prohost embed, never from any other origin.

Manage it from the app

Name, greeting, panel accent and the reply sound live in the AI Chat Widget app, and every site running your widget picks up changes to them on its own. Launcher colour and icon are different: they sit in the snippet, so re-copy it after changing those โ€” same as after rotating your embed key.