Criando um hash de autenticação
Com o Corporate User V3, estaremos migrando para endpoints baseados em autenticação por token, em vez das tradicionais chaves de criptografia do V2.
Como obter o token de autenticação
Para utilizar a API Corporate User V3, é necessário autenticar-se primeiro usando o endpoint GetToken.
O token dentro da propriedade data
deve ser utilizado no cabeçalho de autorização com o prefixo "Bearer "
.
Endpoint: REST/Credentials/GetToken
Corpo da requisição:
{ "hash": "COMPANY_HASH", "user": "USER_LOGIN", "pass": "USER_PASSWORD"}
Resposta:
{ "success": true, "message": "…", "data": { "Token": "JWT_TOKEN", "ExpiresIn": "EXPIRATION_TIME" }}
Abaixo estão os endpoints do V3 que você pode chamar após obter o token de autenticação.
Gerar Hash do Usuário
Gera um hash de autenticação para o usuário informado (USER_ID).
Endpoint: REST/AnnACorporate/User/UserHash
Corpo da requisição:
{ "hash": "YOUR_COMPANY_HASH", "userId": "USER_ID", "startService": "START_SERVICE"}
Resposta (sucesso):
{ "success": true, "message": "User Hash gerado com sucesso", "accessData": { "Hash": "USER_HASH", "ChatURL": "CHAT_URL_WITH_USER_HASH", "EmbeddedURL": "EMBEDDED_URL_WITH_USER_HASH", "Expires": "EXPIRATION_DATETIME" // YYYYMMDDhhmmss }}
Resposta (falha):
{ "success": false, "message": "Usuário COMPANY_HASH@USER_ID está inativo."}
Forçar Geração do Hash do Usuário
Cria ou atualiza um usuário com os valores de USER_ID e USER_NAME e gera um hash de autenticação.
Endpoint: REST/AnnACorporate/User/UserHashForced
Corpo da requisição:
{ "hash": "YOUR_COMPANY_HASH", "userId": "USER_ID", "userName": "USER_NAME", "startService": "START_SERVICE"}
Resposta (sucesso):
{ "success": true, "message": "User Hash gerado com sucesso", "accessData": { "Hash": "USER_HASH", "ChatURL": "CHAT_URL_WITH_USER_HASH", "EmbeddedURL": "EMBEDDED_URL_WITH_USER_HASH", "Expires": "EXPIRATION_DATETIME" // YYYYMMDDhhmmss }}
Inativar Usuário
Inativa o usuário informado (USER_ID).
Endpoint: REST/AnnACorporate/User/Inactivate
Corpo da requisição:
{ "hash": "COMPANY_HASH", "userId": "USER_ID"}
Resposta:
{ "success": true, "message": "Usuário COMPANY_HASH@USER_ID inativado com sucesso"}
Estrutura do Messenger
Retorna um JSON com a lista de departamentos (apelido e nome) e a lista de canais de cada departamento da empresa.
Endpoint: REST/AnnACorporate/Messenger/Structure
Corpo da requisição:
{ "hash": "COMPANY_HASH"}
Resposta:
{ "success": true, "message": "…", "structure": { "CompaniesHash": "…", "CompaniesName": "…", "Departments": [] }}
Contador de Alertas do Messenger
Retorna um JSON indicando o número de solicitações com status “Aberto” que estão pendentes de resposta para o usuário especificado na variável USER_ID ou pelo conjunto de valores em MESSENGER_UNIQUE_DOC_TYPE e MESSENGER_UNIQUE_DOC_VALUE.
Também é possível filtrar os resultados por departamento, canal, data inicial e data final usando a variável MESSENGER_FILTER.
Endpoint: REST/AnnACorporate/Messenger/AlertCounter
Corpo da requisição:
{ "hash": "COMPANY_HASH", "userId": "USER_ID", "userDocType": "UNIQUE_DOC_TYPE", "userDocValue": "UNIQUE_DOC_VALUE", "messengerFilters": { "departmentAlias": "", "channelAlias": "", "dataIni": "", "dataFim": "", "status": "", "pendentes": "" }}
Resposta:
{ "success": true, "message": "…", "alertCounter": 1}
Solicitações do Messenger
Retorna um JSON com uma coleção de solicitações do usuário especificado na variável USER_ID ou pelo conjunto de valores em MESSENGER_UNIQUE_DOC_TYPE e MESSENGER_UNIQUE_DOC_VALUE, contendo os seguintes dados: departamento, canal, descrição da solicitação, data de abertura, protocolo, status (aberto/fechado), um indicador se está pendente de resposta do usuário e um link para visualizar a solicitação específica.
Também é possível filtrar os resultados por departamento, canal, data inicial, data final, status (A-aberto, E-fechado) e pendências (S/N - pendente de resposta do usuário ou não) usando a variável MESSENGER_FILTER.
Endpoint: REST/AnnACorporate/Messenger/Requests
Corpo da requisição:
{ "hash": "", "userId": "", "userDocType": "", "userDocValue": "", "messengerFilters": { "departmentAlias": "", "channelAlias": "", "dataIni": "", "dataFim": "", "status": "", "pendentes": "" }}
Resposta:
{ "success": true, "message": "…", "userRequests": []}
Link do Messenger
Retorna um JSON com o link para visualizar o conteúdo completo da solicitação no sistema de mensagens para o usuário especificado na variável USER_ID ou pelo conjunto de valores em MESSENGER_UNIQUE_DOC_TYPE e MESSENGER_UNIQUE_DOC_VALUE.
Endpoint: REST/AnnACorporate/Messenger/Link
Corpo da requisição:
{ "hash": "", "userId": "", "userDocType": "", "userDocValue": ""}
Resposta:
{ "success": true, "message": "…", "messengerLink": "…"}
Exemplos
var httpClient = new HttpClient{ BaseAddress = new Uri("YOUR_ANNA_BASE_URL")};
var result = await httpClient.PostAsJsonAsync("REST/Credentials/GetToken", new{ hash = "COMPANY_HASH", user = "USER_LOGIN", pass = "USER_PASSWORD"});
var tokenResponse = await result.Content.ReadFromJsonAsync<GetTokenResponse>();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenResponse?.Data.Token);
var corporateApi = new CorporateUserApi(httpClient);
// Sample purposes onlyvar userHashResponse = await corporateApi.GenerateUserHash();var fUserHashResponse = await corporateApi.ForceGenerateUserHash();var inactivateUserResponse = await corporateApi.InactivateUser();var messengerAlertCounterResponse = await corporateApi.MessengerAlertCounter();var messengerRequestsResponse = await corporateApi.MessengerRequests();var messengerLinkResponse = await corporateApi.MessengerLink();
Models/GetTokenResponse.cs
public class GetTokenResponse { [JsonPropertyName("success")] public bool Success { get; set; }
[JsonPropertyName("message")] public string Message { get; set; } = string.Empty;
[JsonPropertyName("data")] public TokenData Data { get; set; } = new(); }
public class TokenData { [JsonPropertyName("Token")] public string Token { get; set; } = string.Empty;
[JsonPropertyName("ExpiresIn")] public string ExpiresIn { get; set; } = string.Empty; }
CorporateUserApi.cs
public class CorporateUserApi(HttpClient httpClient){ public async Task<string> GenerateUserHash() { var result = await httpClient.PostAsJsonAsync("REST/AnnACorporate/User/UserHash", new { hash = "COMPANY_HASH", userId = "USER_ID", startService = "START_SERVICE" });
return await result.Content.ReadAsStringAsync(); }
public async Task<string> ForceGenerateUserHash() { var result = await httpClient.PostAsJsonAsync("REST/AnnACorporate/User/UserHashForced", new { hash = "COMPANY_HASH", userId = "USER_ID", userName = "USER_NAME", startService = "START_SERVICE" });
return await result.Content.ReadAsStringAsync(); }
public async Task<string> InactivateUser() { var result = await httpClient.PostAsJsonAsync("REST/AnnACorporate/User/Inactivate", new { hash = "COMPANY_HASH", userId = "USER_ID", });
return await result.Content.ReadAsStringAsync(); }
public async Task<string> MessengerStructure() { var result = await httpClient.PostAsJsonAsync("REST/AnnACorporate/Messenger/Structure", new { hash = "COMPANY_HASH", });
return await result.Content.ReadAsStringAsync(); }
public async Task<string> MessengerAlertCounter() { var result = await httpClient.PostAsJsonAsync("REST/AnnACorporate/Messenger/AlertCounter", new { hash = "COMPANY_HASH", userId = "USER_ID", userDocType = "", userDocValue = "", messengerFilters = new { departmentAlias = "", channelAlias = "", dataIni = "01/01/2024", dataFim = "31/12/2024", status = "", pendentes = "" } });
return await result.Content.ReadAsStringAsync(); }
public async Task<string> MessengerRequests() { var result = await httpClient.PostAsJsonAsync("REST/AnnACorporate/Messenger/Requests", new { hash = "COMPANY_HASH", userId = "WSGIU5555", userDocType = "", userDocValue = "", messengerFilters = new { departmentAlias = "", channelAlias = "", dataIni = "01/01/2024", dataFim = "31/12/2024", status = "", pendentes = "" } });
return await result.Content.ReadAsStringAsync(); }
public async Task<string> MessengerLink() { var result = await httpClient.PostAsJsonAsync("REST/AnnACorporate/Messenger/Link", new { hash = "COMPANY_HASH", userId = "USER_ID", userDocType = "UNIQUE_DOC_TYPE", userDocValue = "UNIQUE_DOC_VALUE" });
return await result.Content.ReadAsStringAsync(); }
}