Pular para o conteúdo

Criando um hash de autenticação

Variáveis POST

  • HASH: Hash da empresa
  • ANNAEXEC: O IV que foi gerado, esse deve ser utilizado para encriptação dos valores de outras variáveis
  • ACTION: Ação a ser executada
    • GENERATE_USER_HASH: Gera um hash de autenticação para o usuário especificado (USER_ID)
    • GENERATE_USER_HASH_FORCE_USER: Cria ou atualiza um usuário com os valores de USER_ID e USER_NAME, e gera um hash de autenticação
    • INACTIVATE_USER: Inativa o usuário informado (USER_ID)
    • MESSENGER_STRUCTURE: Retorna um json informando uma lista de departamento (alias e nome) e a lista de canais de cada departamento (alias e nome) da empresa solicitante.
    • MESSENGER_ALERT_COUNTER:
      • Retorna um json informando a quantidade de requisições com status “Aberta” que estão com a situação pendente de resposta para o usuário informado na variável USER_ID ou pelo conjunto dos valores informados nas variáveis MESSENGER_UNIQUE_DOC_TYPE e MESSENGER_UNIQUE_DOC_VALUE
      • Pode-se ainda informar um filtro para a consulta na variável MESSENGER_FILTER informando os campos de departamento, canal, data inicial e data final
    • MESSENGER_REQUESTS:
      • Retorna um json com uma coleção das requisições do usuário informado na variável USER_ID ou pelo conjunto dos valores informados nas variáveis MESSENGER_UNIQUE_DOC_TYPE e MESSENGER_UNIQUE_DOC_VALUE contendo as seguintes informações: Departamento, canal, descrição da requisição, data da abertura, protocolo, status (aberta/encerrada), um flag indicando se está pendente de resposta por parte do usuário e um link para visualização da requisição em questão
      • Pode-se ainda informar um filtro para a consulta na variável MESSENGER_FILTER informando os campos de departamento, canal, data inicial e data final, Status (A-abertas, E-encerradas) e Pendentes (S/N - pendente de resposta pelo usuário ou não)
    • MESSENGER_LINK:
      • Retorna um json informando o link para a visualização completa da mensageria do usuário informado na variável USER_ID ou pelo conjunto dos valores informados nas variáveis MESSENGER_UNIQUE_DOC_TYPE e MESSENGER_UNIQUE_DOC_VALUE
  • USER_ID: ID do usuário corporativo
  • USER_NAME: Nome do usuário corporativo
  • MESSENGER_UNIQUE_DOC_TYPE: Contém o tipo de documento para identificação única do usuário na mensageria. Ex.: CPF, RG, RA, etc… Deve ser encriptado usando a chave de encriptação e o IV gerado.
  • MESSENGER_UNIQUE_DOC_VALUE: Contém o valor do documento para identificação única do usuário na mensageria. Ex.: 715.037.620-76. Deve ser encriptado usando a chave de encriptação e o IV gerado.
  • MESSENGER_FILTER: (OPCIONAL) Contém filtros a serem aplicados para as actions MESSENGER_ALERT_COUNTER e MESSENGER_REQUESTS. Deve ser encriptado usando a chave de encriptação e o IV gerado.
    • Deve ser informado o json no formato abaixo:
      {
      "DepartmentAlias":"CENTRALATEND",
      "ChannelAlias": "ATENDINICIAL",
      "DataIni": "01/01/2024",
      "DataFim": "01/05/2024",
      "Status": "A",
      "Pendentes": "S"
      }
  • START_SERVICE: (Opcional) Define o serviço que irá iniciar ao abrir o AnnA Chat

Exemplos

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;
}
}
}