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