Scripter V4: 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);
		}
	}
}