Want to build your own 24/7 FAQ knowledge base?
 
    LibraryH3lp subscriptions
    include unlimited independent internal or public-facing
    
    knowledge bases.
5905 views | Last updated on Mar 14, 2025 API chat widget customize appearance presence
Guests see your chat service's presence status in two main ways:
Chat service snippets (and most of our example code) only handle online and offline status by default (no in-between states) since essentially chat is either available or not available from the guest's point of view. But in some circumstances it is useful to show an Away/Busy appearance distinct from your Offline appearance.

Example view of service in online, away, and offline states.
You can extend your current chat service snippet to include a custom away and/or busy appearance by modifying the offline appearance area in the edit page for your chat service snippet to use some custom JavaScript. Example code is below.
NOTE: the "chat widget type" must be pop-up.
The example code below requires two changes to work with your chat snippet:
<div id="lh3-online" style="display:none">
 Chat is online.
</div>
<div id="lh3-offline" style="display:none">
 Chat is offline.
</div>
<div id="lh3-away" style="display: none;">
 Chat is away.
</div>
<div id="lh3-busy" style="display: none;">
 Chat is busy.
</div>
<script type="application/javascript">
  var lh3CheckPresence = function() {
    var url = 'https://libraryh3lp.com/presence/jid/YOUR_QUEUE_NAME/chat.libraryh3lp.com/js',
        script = document.createElement('script');
    script.async = true;
    script.src = url + '?cb=lh3UpdatePresence';
    document.getElementsByTagName('head')[0].appendChild(script);
  }
  var lh3UpdatePresence = function () {
    for (var i = 0; i < jabber_resources.length; ++i) {
      var resource = jabber_resources[i];
      if (resource.show === 'available' || resource.show === 'chat') {
        document.getElementById('lh3-online').style.display = '';
        document.getElementById('lh3-away').style.display = 'none';
        document.getElementById('lh3-busy').style.display = 'none';
        document.getElementById('lh3-offline').style.display = 'none';
      } else if (resource.show === 'away') {
        document.getElementById('lh3-online').style.display = 'none';
        document.getElementById('lh3-away').style.display = '';
        document.getElementById('lh3-busy').style.display = 'none';
        document.getElementById('lh3-offline').style.display = 'none';
      } else if (resource.show === 'dnd') {
        document.getElementById('lh3-online').style.display = 'none';
        document.getElementById('lh3-away').style.display = 'none';
        document.getElementById('lh3-busy').style.display = '';
        document.getElementById('lh3-offline').style.display = 'none';
      } else if (resource.show === 'unavailable' || resource.show==='xa') {
        document.getElementById('lh3-online').style.display = 'none';
        document.getElementById('lh3-away').style.display = 'none';
        document.getElementById('lh3-busy').style.display = 'none';
        document.getElementById('lh3-offline').style.display = '';
      }
    }
  }
  lh3CheckPresence();
  setInterval(lh3CheckPresence, 10000);
</script>
  
  
  FAQ URL: