Pular para o conteúdo

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": []
}

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 only
var 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();
}
}