SautiDesk

Web chat

See what visitors do in the chat, in your own analytics

The chat widget on your site reports what happens in it to your page. You decide where that goes: Google Tag Manager, Google Analytics, or nowhere. We add no tracking script and set no cookie of our own for this.

Two ways to receive them

Every event is pushed to window.dataLayer when your page has one, and also sent as a browser event named sautidesk:widget on window. A page with neither is fine: the widget checks, and a missing or broken data layer never reaches the chat.

// Google Tag Manager: create a Custom Event trigger named
// widget_opened (or a regular expression such as ^widget_), then read
// widget_key_hash, theme, corner, has_attachment, answered and reason
// as Data Layer Variables.
window.dataLayer.push({
  event: "widget_message_sent",
  widget_key_hash: "d108dc302ec8",
  theme: "system",
  corner: "bottom-right",
  has_attachment: false,
});
// No tag manager? Listen on window and send to Google Analytics yourself.
window.addEventListener("sautidesk:widget", function (e) {
  var d = e.detail;           // { event: "widget_opened", widget_key_hash: "...", ... }
  var name = d.event;         // widget_loaded, widget_opened, ...
  delete d.event;
  gtag("event", name, d);     // GA4
});

The events

EventWhen it firesExtra field
widget_loadedThe widget has loaded on the page. Fires once per page.None
widget_openedThe visitor opened the chat box.None
widget_closedThe visitor closed it.None
widget_details_submittedThe visitor answered the card that asks how to reach them. The details themselves are never in the event.None
widget_message_sentA message was delivered to your team.has_attachment
widget_attachment_sentA message that carried at least one file was delivered.None
widget_call_offeredThe chat showed a call button. Fires once per page. Calling needs a voice number and an agent online with the SautiDesk phone open; without both there is no button, so the event does not fire.None
widget_call_startedThe visitor pressed Call and the call began to connect.None
widget_call_failedThe call could not connect.reason
widget_call_endedA call ended, by either side.answered
widget_away_shownThe chat told the visitor that nobody is on right now. Fires once per page.None

The fields

Every event carries widget_key_hash, theme and corner. Some carry one more, as listed above.

  • widget_key_hash: A short fingerprint of your widget key, so you can tell widgets apart. It is the first 12 characters of the SHA-256 of sautidesk-widget: followed by your key. The key itself is never sent.
  • theme: light, dark or system.
  • corner: bottom-right or bottom-left.
  • has_attachment: true or false. On widget_message_sent only.
  • answered: true if the call was picked up before it ended. On widget_call_ended only.
  • reason: A short code such as mic_denied, register_timeout, answer_timeout, ice_failed, declined or error. On widget_call_failed only.

What is never in an event

No name, email address or phone number. No message text and no file name. No token, and not your widget key. An event says that something happened and never what was said. The widget enforces this with a fixed list of fields, so nothing else can be added by mistake.

Consent and switching it off

The events are not behind a cookie banner of ours because they carry nothing about a person. What your analytics does with them is governed by your own consent settings: if your tag manager waits for consent before sending, the chat events wait too.

To turn the events off, add data-desk-events="off" to the widget script tag. The chat works the same without them.

Looking for numbers inside SautiDesk instead? The Web chat report in Reports shows chats opened, conversations, first reply time, attachments and calls for any date range.

Five channels. Zero customers lost.

Get started now. Pay only for the calls and messages you use.