Scripter V5: Reproducir una alerta sonora cada vez que el agente recibe un mensaje de chat

De Vocalcom.latam Wiki
Saltar a: navegación, buscar

Para que cada vez que el agente reciba un mensaje de chat enviado por el websurfer se reproduzca una alerta sonora debemos, desde el script asignado a la campaña del chat, redefinir la función OnWebchatMessage encargada de manejar dichos mensajes.

Para obtener la definición original de esta función debemos iniciar la interfaz del agente y abrir la consola del navegador (F12). Luego en la consola escribimos el nombre de la función y presionamos enter. La definición de la misma (al parche del 20/12/2016) es la siguiente:

function OnWebchatMessage(messCode, sender, senderType, mess, isPrivateMessage, senderName, timeMessage)
{
    if ((typeof (__activeChats[sender]) != "undefined") && (__activeChats[sender] != null)) {
        var chatBox = __activeChats[sender];

        if (!chatBox.webserviceLoaded) {
            
	        var obj = new Object({ Code: messCode, SenderUid: sender, SenderType: senderType, Msg: mess, Private: isPrivateMessage, SenderName: senderName, Timer: timeMessage });
	        chatBox.MessagesBuffer.push(obj);
	        return;
	    }

		senderType = parseInt(senderType, 0);

		if (senderType == 1)
		{
			if (isPrivateMessage) senderName = RM.getString("Private message from") + " " + senderName;
		}
		else if (senderType == 2)
		{
			senderName = __activeChats[sender].senderName;
		}
		else if (senderType == 0)
		{
			senderName = RM.getString("Agent") + " " + senderName;
		}

        var divRead = document.getElementById(wchatFrame.ID + "_READ");
        var autoScroll = (divRead.scrollTop == divRead.scrollHeight - divRead.clientHeight);

        chatBox.addMessage(messCode, senderName, mess, senderType, timeMessage);

		if (__currentRoom == sender)
		{			
			SetDivReadScroll(divRead, autoScroll);
		}
		else
		{
		    NotifyMessageOnRoom(sender, mess);
		}
	}
}

Una vez obtenida la definición original de la función, editamos el script asignado a la campaña de chat y agregamos al evento OnLoad una acción que contenga una función de usuario con nuestra nueva definición de OnWebchatMessage. Notas a tener en cuenta:

  • Cada referencia a una variable global del frameset del agente se debe llamar anteponiendo parent.window., esto se debe a que el script de la campaňa de chat se ejecuta desde un iFrame y que no tiene acceso directo a las variables del frameset. Del mismo modo para acceder a OnWebchatMessage la debemos llamar como parent.window.OnWebchatMessage.
  • La función que reproduce la alerta sonora por defecto cuando se recibe el mensaje original es PlayAlertSoundChat.
  • El senderType correspondiente a los mensajes enviados por el websurfer es 2.

Entonces nuestra función de usuario debería contener un código como el siguiente:

parent.window.OnWebchatMessage = function (messCode, sender, senderType, mess, isPrivateMessage, senderName, timeMessage)
{
    if ((typeof (parent.window.__activeChats[sender]) != "undefined") && (parent.window.__activeChats[sender] != null)) {
        var chatBox = parent.window.__activeChats[sender];

        if (!chatBox.webserviceLoaded) {
            
	        var obj = new Object({ Code: messCode, SenderUid: sender, SenderType: senderType, Msg: mess, Private: isPrivateMessage, SenderName: senderName, Timer: timeMessage });
	        chatBox.MessagesBuffer.push(obj);
	        return;
	    }

		senderType = parseInt(senderType, 0);

		if (senderType == 1)
		{
			if (isPrivateMessage) senderName = RM.getString("Private message from") + " " + senderName;
		}
		else if (senderType == 2)
		{
			senderName = parent.window.__activeChats[sender].senderName;
			// Invocamos la función para reproducir una alerta sonora.
			parent.window.PlayAlertSoundChat();
		}
		else if (senderType == 0)
		{
			senderName = RM.getString("Agent") + " " + senderName;
		}

		var divRead = parent.window.document.getElementById(parent.window.wchatFrame.ID + "_READ");
        var autoScroll = (divRead.scrollTop == divRead.scrollHeight - divRead.clientHeight);

        chatBox.addMessage(messCode, senderName, mess, senderType, timeMessage);

		if (parent.window.__currentRoom == sender)
		{			
			parent.window.SetDivReadScroll(divRead, autoScroll);
		}
		else
		{
		    parent.window.NotifyMessageOnRoom(sender, mess);
		}
	}
}

Versión para Hermes.net V5

Al igual que en V4, debemos redefinir la nueva versión de la función OnWebchatMessage, pero para reproducir una alerta en V5 debemos llamar a la función PlayAlertSound y especificar el nombre del audio a reproducir. Por defecto existen los audios newcall.wav, newchat.wav, newemail.wav, y sus versiones en mp3, pero podemos agregar más audios en \hermes_net_v5\PlateformPublication\Frameset_Includes y así tener un mensaje de alerta de chat personalizado. En el ejemplo siguiente hemos agregado el audio newmessage.wav y newmessage.mp3.

parent.window.OnWebchatMessage = function (messCode, senderUid, senderType, mess, isPrivateMessage, senderName, timeMessage, secureHTML) {
   var chatBox = parent.window._coreManager.chatManager.activeChats[senderUid];
   if (!chatBox.webserviceLoaded) {
      parent.window._logManager.Info("CHAT", "Receive CHAT message for " + senderUid + " before webservice answer. Add it to queue");
      var obj = new Object({ Code: messCode, SenderUid: senderUid, SenderType: senderType, Msg: mess, Private: isPrivateMessage, SenderName: senderName, Timer: timeMessage });
      chatBox.MessagesBuffer.push(obj);
      return;
   }
   var session = parent.window._coreManager.chatManager.GetSessionForChatroom(senderUid);
   var isCurrentSession = ((parent.window._coreManager.chatManager.currentId == session.MediaServerUID) || (parent.window._coreManager.chatManager.currentId == null))
   parent.window._logManager.Debug("CHAT", "Receive message " + mess + " Type :" + messCode + " for session " + senderUid);
   if ((typeof (chatBox) != "undefined") && (chatBox != null) && (session != null)) {
      senderType = parseInt(senderType, 0);
      if (senderType == 1) {
         if (isPrivateMessage) senderName = parent.window.RM.getString("Private message from") + " " + senderName;
      }
      else if (senderType == 2) {
         senderName = session.ChatterName;
		 parent.window.PlayAlertSound("newmessage.wav");
      }
      else if (senderType == 0) {
         senderName = parent.window.RM.getString("Agent") + " " + senderName;
      }
      switch (messCode) {
         case parent.window.ChatMessageTypes.TextMessage:
         var divRead = parent.window.document.getElementById("CHAT_UI_MAIN_READ");
         var autoScroll = (divRead.scrollTop == divRead.scrollHeight - divRead.clientHeight);
         chatBox.addMessage(messCode, senderName, mess, senderType, timeMessage, secureHTML);
         if (isCurrentSession) {
            parent.window.SetDivReadScroll(divRead, autoScroll);
            if (parent.window.layoutContext != "CHAT") {
               parent.window.StartBottomOngletWizz("chat", session.MediaServerUID);
            }
         }
         else {
            parent.window.NotifyMessageOnRoom(senderUid);
         }
         break;
         case parent.window.ChatMessageTypes.ChatterIdentification:
         //ignore
         break;
         case parent.window.ChatMessageTypes.DesktopSharingACK:
         parent.window.OnChatDesktopShareAckChange(session, mess);
         break;
         case parent.window.ChatMessageTypes.DesktopSharingStarted:
         parent.window.OnChatDesktopShareStarted(session);
         break;
         case parent.window.ChatMessageTypes.ChatClose:
         var mess = '{"type" : "TEXT", text:"*** ' + parent.window.RM.getString("End of chat") + ' ***"}';
         parent.window.OnWebchatMessage(parent.window.ChatMessageTypes.TextMessage, session.MediaServerUID, 3, mess, false, "SYSTEM", -1, false);
         break;
         case parent.window.ChatMessageTypes.NavigationMessage:
         try {
            var navigObj = null;
            eval("navigObj = " + mess);
            if (navigObj != null) {
               var navig_mess = '{"type" : "TEXT", text:"' + parent.window.RM.getString("The surfer browse") + '"}';
               if ((chatBox.lastNavigObj != null) && (chatBox.lastNavigObj.PageName == navigObj.PageName)) {
                  navig_mess = '{"type" : "TEXT", text:"' + parent.window.RM.getString("The user has reload the page") + '"}';
               }
               chatBox.addNavigation(navigObj);
               parent.window.OnWebchatMessage(parent.window.ChatMessageTypes.TextMessage, session.MediaServerUID, 3, navig_mess, false, "SYSTEM", -1, false);
            }
         } catch (e) {
            parent.window._logManager.Warn("CHAT", "Invalid navigation received for chat");
         }
         break;
         case parent.window.ChatMessageTypes.BlackListError:
         try {
            var blackList = null;
            eval("blackList = " + mess);
            if (blackList != null) {
               var str = blackList.text.replace(/\[u\]/gi, "<u>");
               str = str.replace(/\[\/u\]/gi, "</u>");
               var msgLocalized = parent.window.RM.getString("Your answer - %0 - contains forbidden words");
               msgLocalized = msgLocalized.replace("%0", str);
               var agentMessage = '{"type" : "TEXT", text:"' + msgLocalized + '"}';
               parent.window.OnWebchatMessage(parent.window.ChatMessageTypes.TextMessage, session.MediaServerUID, 3, agentMessage, false, "SYSTEM", -1, false);
            }
         } catch (e) {
            parent.window._logManager.Warn("CHAT", "Invalid navigation received for chat");
         }
         break;
         case parent.window.ChatMessageTypes.NaturalLangageList:
         parent.window.alert("TODO. ChatManagement.js. NaturalLangageList");
         break;
         case parent.window.ChatMessageTypes.WindowResize:
         parent.window.CobrowsingResizeOnRoom(senderUid, mess);
         break;
         case parent.window.ChatMessageTypes.Swap:
         parent.window.ManageVisioConf_Consult(session, parseInt(mess, 10));
         break;
         case "011": //history message
         var divRead = parent.window.document.getElementById("CHAT_UI_MAIN_READ");
         var autoScroll = (divRead.scrollTop == divRead.scrollHeight - divRead.clientHeight);
         chatBox.addMessage(messCode, senderName, mess, senderType, timeMessage, secureHTML);
         if (session.MediaServerUID == senderUid) {
            parent.window.SetDivReadScroll(divRead, autoScroll);
            if (isCurrentSession) {
               parent.window.StartBottomOngletWizz("chat", session.MediaServerUID);
            }
         }
         break;
         default:
         break;
      }
   }
}