Saltearse al contenido

Creando un hash de autenticación

Variables POST

  • HASH: Hash de la empresa
  • ANNAEXEC: El IV que ha sido generado, debe ser utilizado para encriptar los valores de otras variables.
  • ACTION: Acción a ser ejecutada
    • GENERATE_USER_HASH: Genera un hash de autenticación para el usuario especificado (USER_ID).
    • GENERATE_USER_HASH_FORCE_USER: Crea o actualiza un usuario con los valores de USER_ID y USER_NAME, y genera un hash de autenticación.
    • INACTIVATE_USER: Inactiva el usuario proporcionado (USER_ID).
    • MESSENGER_STRUCTURE: Devuelve un JSON que proporciona una lista de departamentos (alias y nombre) y la lista de canales de cada departamento (alias y nombre) de la empresa solicitante.
    • MESSENGER_ALERT_COUNTER:
      • Retorna un JSON indicando la cantidad de solicitudes con estado “Abierta” o “Cerrada” que están en situación pendiente de respuesta para el usuario especificado en la variable USER_ID o por el conjunto de valores especificados en las variables MESSENGER_UNIQUE_DOC_TYPE y MESSENGER_UNIQUE_DOC_VALUE.
      • También se puede especificar un filtro para la consulta en la variable MESSENGER_FILTER indicando los campos de departamento, canal, fecha de inicio y fecha de finalización.
    • MESSENGER_REQUESTS:
      • Retorna un JSON con una colección de las solicitudes del usuario especificado en la variable USER_ID o por el conjunto de valores especificados en las variables MESSENGER_UNIQUE_DOC_TYPE y MESSENGER_UNIQUE_DOC_VALUE, que contiene la siguiente información: Departamento, canal, descripción de la solicitud, fecha de apertura, protocolo, estado (abierta/cerrada), una bandera indicando si está pendiente de respuesta por parte del usuario y un enlace para la visualización de la solicitud en cuestión.
      • También se puede especificar un filtro para la consulta en la variable MESSENGER_FILTER indicando los campos de departamento, canal, fecha de inicio y fecha de finalización, Estado (A-abiertas, E-cerradas) y Pendientes (S/N - pendiente de respuesta por parte del usuario o no).
    • MESSENGER_LINK:
      • Retorna un JSON indicando el enlace para la visualización completa de la mensajería del usuario especificado en la variable USER_ID o por el conjunto de valores especificados en las variables MESSENGER_UNIQUE_DOC_TYPE y MESSENGER_UNIQUE_DOC_VALUE.
  • USER_ID: ID del usuario corporativo
  • USER_NAME: Nombre del usuario corporativo
  • MESSENGER_UNIQUE_DOC_TYPE: Contiene el tipo de documento para la identificación única del usuario en la mensajería. Ej.: CPF, RG, RA, etc. Debe ser encriptado usando la clave de encriptación y el IV generado.
  • MESSENGER_UNIQUE_DOC_VALUE: Contiene el valor del documento para la identificación única del usuario en la mensajería. Ej.: 715.037.620-76. Debe ser encriptado usando la clave de encriptación y el IV generado.
  • MESSENGER_FILTER: (OPCIONAL) Contiene filtros que se aplicarán a las acciones MESSENGER_ALERT_COUNTER y MESSENGER_REQUESTS. Debe ser encriptado usando la clave de encriptación y el IV generado.
    • El JSON debe ser proporcionado en el siguiente formato:
      {
      "DepartmentAlias": "CENTRALATEND",
      "ChannelAlias": "ATENDINICIAL",
      "DataIni": "01/01/2024",
      "DataFim": "01/05/2024",
      "Status": "A",
      "Pendentes": "S"
      }
  • START_SERVICE: (Opcional) Define el servicio que se iniciará al abrir AnnA Chat.

Ejemplos

public string Post()
{
string companyHash = "YOUR_COMPANY_HASH";
string encryptionKey = "YOUR_CORPORATE_USER_ENCRYPTION_KEY";
string decryptionKey = "YOUR_CORPORATE_USER_DECRYPTION_KEY";
string iv = GenerateIV();
string action = "GENERATE_USER_HASH"; // GENERATE_USER_HASH || GENERATE_USER_HASH_FORCE_USER || INACTIVATE_USER
string userId = "USER_ID";
string username = "USERNAME";
string startService = "START_SERVICE";
// Only for MESSENGER actions and GENERATE_USER_HASH_FORCE_USER
string uniqueDocType = "UNIQUE_DOC_TYPE";
string uniqueDocValue = "UNIQUE_DOC_VALUE";
// Only for MESSENGER_ALERT_COUNTER and MESSENGER_REQUESTS actions
string messengerFilters = new
{
DepartmentAlias = "DEPARTMENT_ALIAS",
ChannelAlias = "CHANNEL_ALIAS",
DataIni = "START_DATE", // dd/MM/yyyy
DataFim = "END_DATE", // dd/MM/yyyy
Status = "STATUS", // A | E
Pendentes = "PENDENTES" // S | N
}
string url = "YOUR_ANNA_URL/aannacorporateuser.aspx";
string encryptedAction = Encrypt(action, encryptionKey, iv);
string encryptedUserId = Encrypt(userId, encryptionKey, iv);
string encryptedUserName = Encrypt(username, encryptionKey, iv);
string encryptedStartService = Encrypt(startService, encryptionKey, iv);
string encryptedUniqueDocType = Encrypt(uniqueDocType, encryptionKey, iv);
string encryptedUniqueDocValue = Encrypt(uniqueDocValue, encryptionKey, iv);
string encryptedMessengerFilters = Encrypt(JsonSerializer.Serialize(messengerFilters), encryptionKey, iv);
string dadosPost = "HASH=" + Uri.EscapeDataString(companyHash);
dadosPost += "&ANNAEXEC=" + Uri.EscapeDataString(iv);
dadosPost += "&ACTION=" + Uri.EscapeDataString(encryptedAction);
dadosPost += "&USER_ID=" + Uri.EscapeUriString(encryptedUserId);
dadosPost += "&USER_NAME=" + Uri.EscapeUriString(encryptedUserName);
dadosPost += "&MESSENGER_UNIQUE_DOC_TYPE=" + Uri.EscapeUriString(encryptedUniqueDocType);
dadosPost += "&MESSENGER_UNIQUE_DOC_VALUE=" + Uri.EscapeUriString(encryptedUniqueDocValue);
dadosPost += "&MESSENGER_FILTER=" + Uri.EscapeDataString(encryptedMessengerFilters);
dadosPost += "&START_SERVICE=" + Uri.EscapeUriString(encryptedStartService);
byte[] dados = Encoding.UTF8.GetBytes(dadosPost);
var webRequest = WebRequest.Create(url);
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.ContentLength = dados.Length;
Stream dataStream = webRequest.GetRequestStream();
dataStream.Write(dados, 0, dados.Length);
dataStream.Close();
WebResponse response = webRequest.GetResponse();
using (dataStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
if (responseFromServer.Contains(iv))
{
string novoIVEncriptado = responseFromServer.Substring(responseFromServer.IndexOf(iv));
novoIVEncriptado = novoIVEncriptado.Replace(iv, "");
string retornoEncriptado = responseFromServer.Substring(0, responseFromServer.IndexOf(iv));
string novoIV = Decrypt(novoIVEncriptado, encryptionKey, iv);
string retorno = Decrypt(retornoEncriptado, decryptionKey, novoIV);
response.Close();
return retorno;
}
else
{
response.Close();
return responseFromServer;
}
}
}