Saltearse al contenido

Creando un hash de autenticación

Con Corporate User V3, migraremos a endpoints basados en autenticación con tokens en lugar de las tradicionales claves de cifrado de la versión V2.
A continuación, se presentan los endpoints de V3 que puedes utilizar después de obtener el token de autenticación.

Cómo obtener el token de autenticación

Para utilizar la API Corporate User V3, primero es necesario autenticarse mediante el endpoint GetToken.
El token que se encuentra dentro de la propiedad data debe utilizarse en el encabezado de autorización con el prefijo "Bearer ".

Endpoint: REST/Credentials/GetToken

Cuerpo de la solicitud:

{
"hash": "COMPANY_HASH",
"user": "USER_LOGIN",
"pass": "USER_PASSWORD"
}

Respuesta:

{
"success": true,
"message": "",
"data": {
"Token": "JWT_TOKEN",
"ExpiresIn": "EXPIRATION_TIME"
}
}

Generar Hash de Usuario

Genera un hash de autenticación para el usuario especificado (USER_ID).

Endpoint: REST/AnnACorporate/User/UserHash

Cuerpo de la solicitud:

{
"hash": "YOUR_COMPANY_HASH",
"userId": "USER_ID",
"startService": "START_SERVICE"
}

Respuesta (éxito):

{
"success": true,
"message": "User Hash generado exitosamente",
"accessData": {
"Hash": "USER_HASH",
"ChatURL": "CHAT_URL_WITH_USER_HASH",
"EmbeddedURL": "EMBEDDED_URL_WITH_USER_HASH",
"Expires": "EXPIRATION_DATETIME" // YYYYMMDDhhmmss
}
}

Respuesta (fallo):

{
"success": false,
"message": "El usuario COMPANY_HASH@USER_ID está inactivo."
}

Forzar Generación de Hash de Usuario

Crea o actualiza un usuario con los valores de USER_ID y USER_NAME, y genera un hash de autenticación.

Endpoint: REST/AnnACorporate/User/UserHashForced

Cuerpo de la solicitud:

{
"hash": "YOUR_COMPANY_HASH",
"userId": "USER_ID",
"userName": "USER_NAME",
"startService": "START_SERVICE"
}

Respuesta (éxito):

{
"success": true,
"message": "User Hash generado exitosamente",
"accessData": {
"Hash": "USER_HASH",
"ChatURL": "CHAT_URL_WITH_USER_HASH",
"EmbeddedURL": "EMBEDDED_URL_WITH_USER_HASH",
"Expires": "EXPIRATION_DATETIME" // YYYYMMDDhhmmss
}
}

Inactivar Usuario

Inactiva el usuario especificado (USER_ID).

Endpoint: REST/AnnACorporate/User/Inactivate

Cuerpo de la solicitud:

{
"hash": "COMPANY_HASH",
"userId": "USER_ID"
}

Respuesta:

{
"success": true,
"message": "Usuario COMPANY_HASH@USER_ID inactivado exitosamente"
}

Estructura del Messenger

Devuelve un JSON con la lista de departamentos (alias y nombre) y la lista de canales de cada departamento de la empresa.

Endpoint: REST/AnnACorporate/Messenger/Structure

Cuerpo de la solicitud:

{
"hash": "COMPANY_HASH"
}

Respuesta:

{
"success": true,
"message": "",
"structure": {
"CompaniesHash": "",
"CompaniesName": "",
"Departments": []
}
}

Contador de Alertas del Messenger

Devuelve un JSON con el número de solicitudes con estado “Abierto” que están pendientes de respuesta para el usuario especificado en la variable USER_ID o por el conjunto de valores en MESSENGER_UNIQUE_DOC_TYPE y MESSENGER_UNIQUE_DOC_VALUE.

También puedes filtrar los resultados por departamento, canal, fecha inicial y fecha final usando la variable MESSENGER_FILTER.

Endpoint: REST/AnnACorporate/Messenger/AlertCounter

Cuerpo de la solicitud:

{
"hash": "COMPANY_HASH",
"userId": "USER_ID",
"userDocType": "UNIQUE_DOC_TYPE",
"userDocValue": "UNIQUE_DOC_VALUE",
"messengerFilters": {
"departmentAlias": "",
"channelAlias": "",
"dataIni": "",
"dataFim": "",
"status": "",
"pendentes": ""
}
}

Respuesta:

{
"success": true,
"message": "",
"alertCounter": 1
}

Solicitudes del Messenger

Devuelve un JSON con una colección de solicitudes del usuario especificado en la variable USER_ID o por el conjunto de valores en MESSENGER_UNIQUE_DOC_TYPE y MESSENGER_UNIQUE_DOC_VALUE, que contiene los siguientes datos:
departamento, canal, descripción de la solicitud, fecha de apertura, número de protocolo, estado (abierto/cerrado), un indicador de si está pendiente de respuesta del usuario y un enlace para ver la solicitud específica.

También puedes filtrar los resultados por departamento, canal, fecha de inicio, fecha de fin, estado (A-abierto, E-cerrado) y pendientes (S/N - pendiente de respuesta del usuario o no) usando la variable MESSENGER_FILTER.

Endpoint: REST/AnnACorporate/Messenger/Requests

Cuerpo de la solicitud:

{
"hash": "",
"userId": "",
"userDocType": "",
"userDocValue": "",
"messengerFilters": {
"departmentAlias": "",
"channelAlias": "",
"dataIni": "",
"dataFim": "",
"status": "",
"pendentes": ""
}
}

Respuesta:

{
"success": true,
"message": "",
"userRequests": []
}

Enlace del Messenger

Devuelve un JSON con el enlace para visualizar el contenido completo de la solicitud en el sistema de mensajería para el usuario especificado en la variable USER_ID o por el conjunto de valores en MESSENGER_UNIQUE_DOC_TYPE y MESSENGER_UNIQUE_DOC_VALUE.

Endpoint: REST/AnnACorporate/Messenger/Link

Cuerpo de la solicitud:

{
"hash": "",
"userId": "",
"userDocType": "",
"userDocValue": ""
}

Respuesta:

{
"success": true,
"message": "",
"messengerLink": ""
}

Ejemplos

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