Hava / Developer docs

Client events

Hava's standard website runtime emits privacy-safe lifecycle events on the host page. Analytics products such as Intellign Growth can listen without Hava depending on them.

Listen

window.addEventListener('hava:event', (event) => {
  console.log(event.detail.event, event.detail.properties)
})

Events

EventMeaning
hava_openedThe customer-facing Hava interface actually opened.
hava_conversation_startedThe first user turn in a new runtime conversation. Emitted once per conversation.
hava_messageA user turn was successfully submitted. Message contents are never included.
hava_actionA recognized Hava action or navigation was invoked.
hava_closedThe customer-facing Hava interface closed.

Event shape

{
  event: 'hava_conversation_started',
  properties: { surface: 'concierge', conversationStage: 'started' }
}

Only these optional property names are emitted: surface, actionType, destinationType, and conversationStage.

Privacy contract. Client events never contain prompts, Hava responses, conversation contents, business knowledge, names, email addresses, phone numbers, tokens, deployment credentials, or private identifiers.

Actions

The standard Hava runtime emits hava_action only for actions it recognizes. Custom/headless interfaces can report a recognized Hava action with window.Hava.emitAction({ actionType: 'navigate', destinationType: 'product', surface: 'concierge' }). Do not put destination URLs, product names, customer identifiers, or conversation content in event properties.

Loose coupling

No Growth installation is required. Hava dispatches browser events whether or not a listener exists. If Growth or another analytics listener is absent, nothing happens.