Cambios para quitar la hora de los mensajes que se envían a los clientes, corrección en la función getVaultCredentials para poder enviar el mensaje con la contraseña al instalador

This commit is contained in:
server 2025-06-02 17:45:28 -06:00
parent e899945ca3
commit 5374054289
6 changed files with 2841 additions and 1118 deletions

View File

@ -4,6 +4,16 @@ Este plugin sincroniza los clientes del sitema UISP CRM con los contactos de Wha
## REGISTRO DE CAMBIOS
# VERSIÓN 2.8.5
## 🔵 Mejoras
1⃣ Se modificó la información para el envío de notificaciones a los clientes para su visita técnica: ahora ya no se envían las horas en que serán las visitas, SOLO LA FECHA.
2⃣ Se crearon nuevas plantillas de tipo utilidad y se adaptaron al flujo de trabajo en el código.
## 🟡 Bugs Resueltos
1⃣ Se soluciono el bug que impedía enviar notificaciones a los instaladores para nuevas tareas.
## 🟡 Bugs Resueltos
# VERSIÓN 2.8.2
## 🟡 Bugs Resueltos

File diff suppressed because it is too large Load Diff

View File

@ -5,7 +5,7 @@
"displayName": "SIIP - Procesador de Pagos en línea con Stripe, Oxxo y Transferencia, Sincronizador de CallBell y Envío de Notificaciones y comprobantes vía WhatsApp",
"description": "Este plugin sincroniza los clientes del sistema UISP CRM con los contactos de WhatsApp en CallBell, además procesa pagos de Stripe como las trasferencias bancarias y genera referencias de pago vía OXXO, además envía comprobantes de pago en formato imagen PNG o texto vía Whatsapp a los clientes",
"url": "https://siip.mx/",
"version": "2.8.2",
"version": "2.8.5",
"unmsVersionCompliancy": {
"min": "2.1.0",
"max": null

View File

@ -256,47 +256,48 @@ abstract class AbstractMessageNotifierFacade
$hour = $date->format('h');
$clockEmoji = "🕐"; // Emoji por defecto
// Determinar el emoji del reloj según la hora
switch ($hour) {
case '01':
$clockEmoji = "🕐";
break;
case '02':
$clockEmoji = "🕑";
break;
case '03':
$clockEmoji = "🕒";
break;
case '04':
$clockEmoji = "🕓";
break;
case '05':
$clockEmoji = "🕔";
break;
case '06':
$clockEmoji = "🕕";
break;
case '07':
$clockEmoji = "🕖";
break;
case '08':
$clockEmoji = "🕗";
break;
case '09':
$clockEmoji = "🕘";
break;
case '10':
$clockEmoji = "🕙";
break;
case '11':
$clockEmoji = "🕚";
break;
case '12':
$clockEmoji = "🕛";
break;
}
// switch ($hour) {
// case '01':
// $clockEmoji = "🕐";
// break;
// case '02':
// $clockEmoji = "🕑";
// break;
// case '03':
// $clockEmoji = "🕒";
// break;
// case '04':
// $clockEmoji = "🕓";
// break;
// case '05':
// $clockEmoji = "🕔";
// break;
// case '06':
// $clockEmoji = "🕕";
// break;
// case '07':
// $clockEmoji = "🕖";
// break;
// case '08':
// $clockEmoji = "🕗";
// break;
// case '09':
// $clockEmoji = "🕘";
// break;
// case '10':
// $clockEmoji = "🕙";
// break;
// case '11':
// $clockEmoji = "🕚";
// break;
// case '12':
// $clockEmoji = "🕛";
// break;
// }
// Formatear la fecha al formato deseado: día/mes/año a las hora:minuto am/pm aproximadamente
$formattedDate = "*" . $date->format('d/m/Y') . "* a las $clockEmoji *" . $date->format('h:i A') . "* aproximadamente";
// $formattedDate = "*" . $date->format('d/m/Y') . "* a las $clockEmoji *" . $date->format('h:i A') . "* aproximadamente";
$formattedDate = sprintf("*%s*", $date->format('d/m/Y'));
// $this->logger->debug('Valor de $formattedDate en verifyJobActionToDo: ' . $formattedDate . PHP_EOL);
@ -586,7 +587,7 @@ abstract class AbstractMessageNotifierFacade
// Construir el array asociativo con los datos de la notificación para el instalador nuevo
$jsonInstallerJobNotificationData = [
"installerName" => $installerFullName,
"clientFullName" => sprintf("[%s] %s", $arrayClientCRM['id'], $clientFullName),
"clientFullName" => sprintf("%s [ID:%s]", $clientFullName, $arrayClientCRM['id']),
"jobId" => $jobId,
"clientAddress" => $safeAddress,
"clientWhatsApp" => $resultadoFinalNumerosCliente,
@ -609,7 +610,7 @@ abstract class AbstractMessageNotifierFacade
$jsonInstallerJobNotificationData,
false,
false,
$this->getVaultCredentials($arrayClientCRM['id'])
$this->getVaultCredentialsByClientId($arrayClientCRM['id'])
);
if ($result === false) {
@ -624,7 +625,7 @@ abstract class AbstractMessageNotifierFacade
// Construir el array asociativo con los datos de la notificación
$jsonInstallerJobNotificationData = [
"installerName" => $installerFullName,
"clientFullName" => sprintf("[%s] %s", $arrayClientCRM['id'], $clientFullName),
"clientFullName" => sprintf("%s [ID:%s]", $clientFullName, $arrayClientCRM['id']),
"jobId" => $jobId,
"clientAddress" => $safeAddress,
"clientWhatsApp" => $resultadoFinalNumerosCliente,
@ -646,7 +647,7 @@ abstract class AbstractMessageNotifierFacade
$jsonInstallerJobNotificationData,
$reprogramming,
$changeInstaller,
$this->getVaultCredentials($arrayClientCRM['id'])
$this->getVaultCredentialsByClientId($arrayClientCRM['id'])
);
if ($result === false) {
@ -1175,7 +1176,7 @@ abstract class AbstractMessageNotifierFacade
}
function getVaultCredentials($dataToSearch): string
{
$logger = \Ubnt\UcrmPluginSdk\Service\PluginLogManager::create();
$configManager = \Ubnt\UcrmPluginSdk\Service\PluginConfigManager::create();
$config = $configManager->loadConfig();
$ucrmBaseUri = $config['ipserver'];
@ -1202,9 +1203,15 @@ abstract class AbstractMessageNotifierFacade
//validar si dataToSearch es una dirección IP o una dirección MAC
if (filter_var($dataToSearch, FILTER_VALIDATE_IP)) {
// La variable es una dirección IP válida
//$logger->appendLog('Consulta por dirección IP: ' . $dataToSearch);
print ('Consulta por dirección IP: ' . $dataToSearch . PHP_EOL);
$this->logger->info('Consulta por dirección IP: ' . $dataToSearch . PHP_EOL);
if ($ucrmBaseUri === '172.16.5.134') { //opción solo para el servidor de pruebas
return 'gYAIEK:Be}SK*01z5+/V';
}
$IpAddressClientId = filter_var($dataToSearch, FILTER_VALIDATE_IP);
@ -1225,15 +1232,14 @@ abstract class AbstractMessageNotifierFacade
$siteId = $datasSitesByIP[0]['id'];
// print_r('ID DEL SITIO: ' . $siteId . PHP_EOL); // ID del sitio
} else {
// $logger->appendLog('No se encontró ningún sitio para la IP proporcionada: ' . $dataToSearch);
print_r('No se encontró ningún sitio para la IP proporcionada: ' . $dataToSearch . PHP_EOL);
$this->logger->error('No se encontró ningún sitio para la IP proporcionada: ' . $dataToSearch . PHP_EOL);
return 'Error: No se encontró ningún sitio para la IP proporcionada: ' . $dataToSearch; // Return early if no site is found
}
} else {
//echo "Error en la solicitud. Código de estado HTTP: " . $responseSitesByIP->getStatusCode() . PHP_EOL;
// $logger->appendLog('Error en la solicitud. Código de estado HTTP: ' . $responseSitesByIP->getStatusCode());
print_r('Error en la solicitud. Código de estado HTTP: ' . $responseSitesByIP->getStatusCode() . PHP_EOL);
$this->logger->error('Falla en la solicitud. Código de estado HTTP: ' . $responseSitesByIP->getStatusCode() . PHP_EOL);
return 'Error: Falla en la solicitud. Código de estado HTTP: ' . $responseSitesByIP->getStatusCode(); // Return early if the request fails
}
@ -1257,23 +1263,18 @@ abstract class AbstractMessageNotifierFacade
break; // Salir del ciclo si se encuentra la IP
}
} else {
// $logger->appendLog('No se encontró la IP del dispositivo en la respuesta de la API.');
print_r('No se encontró la IP del dispositivo en la respuesta de la API.' . PHP_EOL);
$this->logger->error('No se encontró la IP del dispositivo en la respuesta de la API.' . PHP_EOL);
return 'Error: No se encontró la IP del dispositivo en la respuesta de la API.'; // Return early if the IP is not found
}
}
if ($deviceID == null) {
//echo "No se encontró el dispositivo con la IP proporcionada." . PHP_EOL;
// $logger->appendLog('No se encontró el dispositivo con la IP proporcionada: ' . $IpAddressClientId);
print_r('No se encontró el dispositivo con la IP proporcionada: ' . $IpAddressClientId . PHP_EOL);
$this->logger->error('No se encontró el dispositivo con la IP proporcionada: ' . $IpAddressClientId . PHP_EOL);
return 'Error: No se encontró el dispositivo con la IP proporcionada: ' . $IpAddressClientId; // Return early if no device is found
}
} else {
// echo "Error en la solicitud. Código de estado HTTP: " . $devicesBySiteId->getStatusCode() . PHP_EOL;
// $logger->appendLog('Error en la solicitud. Código de estado HTTP: ' . $devicesBySiteId->getStatusCode());
print_r('Error en la solicitud. Código de estado HTTP: ' . $devicesBySiteId->getStatusCode() . PHP_EOL);
$this->logger->error('Falla en la solicitud. Código de estado HTTP: ' . $devicesBySiteId->getStatusCode() . PHP_EOL);
return 'Error: Falla en la solicitud. Código de estado HTTP: ' . $devicesBySiteId->getStatusCode(); // Return early if the request fails
}
@ -1291,17 +1292,13 @@ abstract class AbstractMessageNotifierFacade
if (isset($dataPasswordVault['credentials']['password'])) {
$dataPasswordVault = $dataPasswordVault['credentials']['password'];
} else {
// echo "No se encontró la contraseña en la respuesta de la API." . PHP_EOL;
// $logger->appendLog('No se encontró una contraseña en la bóveda para la antena de este cliente, es altamente probable que conserve una contraseña conocida.');
print_r('No se encontró una contraseña en la bóveda para la antena de este cliente, es altamente probable que conserve una contraseña conocida.' . PHP_EOL);
$this->logger->error('No se encontró una contraseña en la bóveda para la antena de este cliente, es altamente probable que conserve una contraseña conocida.' . PHP_EOL);
return "Error: No se encontró una contraseña en la bóveda para la antena de este cliente, es altamente probable que conserve una contraseña conocida."; // Return early if the password is not found
}
return $dataPasswordVault;
} else {
// echo "Error en la solicitud. Código de estado HTTP: " . $responsePasswordVault->getStatusCode() . PHP_EOL;
// $logger->appendLog('Error en la solicitud. Código de estado HTTP: ' . $responsePasswordVault->getStatusCode());
print_r('Error en la solicitud. Código de estado HTTP: ' . $responsePasswordVault->getStatusCode() . PHP_EOL);
$this->logger->error('Falla en la solicitud. Código de estado HTTP: ' . $responsePasswordVault->getStatusCode() . PHP_EOL);
return 'Error: Falla en la solicitud. Código de estado HTTP: ' . $responsePasswordVault->getStatusCode(); // Return early if the request fails
}
@ -1311,19 +1308,14 @@ abstract class AbstractMessageNotifierFacade
$response = $requestException->getResponse();
$statusCode = $response->getStatusCode();
$reason = $response->getReasonPhrase();
// echo "Error: {$statusCode} - {$reason}" . PHP_EOL;
// echo $response->getBody();
if ($statusCode == 404) {
// echo "No se encontró el cliente con la dirección IP proporcionada." . PHP_EOL;
// $logger->appendLog('No se encontró el cliente con la dirección IP proporcionada: ' . $IpAddressClientId);
print_r('No se encontró el cliente con la dirección IP proporcionada: ' . $IpAddressClientId . PHP_EOL);
$this->logger->error('No se encontró el cliente con la dirección IP proporcionada: ' . $IpAddressClientId . PHP_EOL);
return 'Error: No se encontró el cliente con la dirección IP proporcionada: ' . $IpAddressClientId; // Return early if the client is not found
}
return 'Error: ' . $reason; // Return early if the request fails
} else {
// echo "Error: " . $requestException->getMessage() . PHP_EOL;
// $logger->appendLog('Error: ' . $requestException->getMessage());
print_r('Error: ' . $requestException->getMessage() . PHP_EOL);
$this->logger->error('Error al realizar la solicitud: ' . $requestException->getMessage() . PHP_EOL);
return 'Error: ' . $requestException->getMessage(); // Return early if the request fails
}
@ -1331,8 +1323,12 @@ abstract class AbstractMessageNotifierFacade
} else if (preg_match('/^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/', $dataToSearch)) {
// La variable es una dirección MAC válida
// $logger->appendLog('Consulta por dirección MAC: ' . $dataToSearch);
print ('Consulta por dirección MAC: ' . $dataToSearch . PHP_EOL);
$this->logger->info('Consulta por dirección MAC: ' . $dataToSearch . PHP_EOL);
if ($ucrmBaseUri === '172.16.5.134') { //opción solo para el servidor de pruebas
return 'gYAIEK:Be}SK*01z5+/V';
}
try {
// //para mandarla al endpoint de dispositivos por MAC se necesita convertir la cadena de la direccion mac en un formato como el siguiente ejemplo: para la dirección mac 60:22:32:c8:b2:c3 quedaría como 60%3A22%3A32%3Ac8%3Ab2%3Ac3
@ -1357,9 +1353,7 @@ abstract class AbstractMessageNotifierFacade
$deviceId = $dataDeviceByMAC['id'];
// print_r('ID DEL DISPOSITIVO: ' . $deviceId . PHP_EOL); // ID del dispositivo
} else {
// echo "No se encontró el dispositivo con la dirección MAC proporcionada." . PHP_EOL;
// $logger->appendLog('No se encontró el dispositivo con la dirección MAC proporcionada: ' . $dataToSearch);
print_r('No se encontró el dispositivo con la dirección MAC proporcionada: ' . $dataToSearch . PHP_EOL);
$this->logger->error('No se encontró el dispositivo con la dirección MAC proporcionada: ' . $dataToSearch . PHP_EOL);
return 'Error: No se encontró el dispositivo con la dirección MAC proporcionada: ' . $dataToSearch; // Return early if no device is found
}
@ -1373,23 +1367,17 @@ abstract class AbstractMessageNotifierFacade
if ($responsePasswordVault->getStatusCode() === 200) {
$dataPasswordVault = json_decode((string) $responsePasswordVault->getBody(), true);
// $jsonPasswordVault = json_encode($dataPasswordVault, JSON_PRETTY_PRINT);
//print_r($jsonPasswordVault . PHP_EOL); //Credenciales del dispositivo
if (isset($dataPasswordVault['credentials']['password'])) {
$dataPasswordVault = $dataPasswordVault['credentials']['password'];
} else {
// echo "No se encontró la contraseña en la respuesta de la API." . PHP_EOL;
// $logger->appendLog('No se encontró una contraseña en la bóveda para la antena de este cliente, es altamente probable que conserve una contraseña conocida.');
print_r('No se encontró una contraseña en la bóveda para la antena de este cliente, es altamente probable que conserve una contraseña conocida.' . PHP_EOL);
$this->logger->error('No se encontró una contraseña en la bóveda para la antena de este cliente, es altamente probable que conserve una contraseña conocida.' . PHP_EOL);
return "Error: No se encontró una contraseña en la bóveda para la antena de este cliente, es altamente probable que conserve una contraseña conocida."; // Return early if the password is not found
}
return $dataPasswordVault;
} else {
// echo "Error en la solicitud. Código de estado HTTP: " . $responsePasswordVault->getStatusCode() . PHP_EOL;
// $logger->appendLog('Error en la solicitud. Código de estado HTTP: ' . $responsePasswordVault->getStatusCode());
print_r('Error en la solicitud. Código de estado HTTP: ' . $responsePasswordVault->getStatusCode() . PHP_EOL);
$this->logger->error('Falla en la solicitud. Código de estado HTTP: ' . $responsePasswordVault->getStatusCode() . PHP_EOL);
return 'Error: Falla en la solicitud. Código de estado HTTP: ' . $responsePasswordVault->getStatusCode(); // Return early if the request fails
}
@ -1399,19 +1387,15 @@ abstract class AbstractMessageNotifierFacade
$response = $requestException->getResponse();
$statusCode = $response->getStatusCode();
$reason = $response->getReasonPhrase();
// echo "Error: {$statusCode} - {$reason}" . PHP_EOL;
// echo $response->getBody();
if ($statusCode == 404) {
// echo "No se encontró el cliente con la dirección MAC proporcionada." . PHP_EOL;
// $logger->appendLog('No se encontró ninguna antena de cliente o dispositivo en la red con la dirección MAC proporcionada: ' . $dataToSearch);
print_r('No se encontró ninguna antena de cliente o dispositivo en la red con la dirección MAC proporcionada: ' . $dataToSearch . PHP_EOL);
$this->logger->error('No se encontró ninguna antena de cliente o dispositivo en la red con la dirección MAC proporcionada: ' . $dataToSearch . PHP_EOL);
return 'Error: No se encontró ninguna antena de cliente o dispositivo en la red con la dirección MAC proporcionada: ' . $dataToSearch; // Return early if the client is not found
}
$this->logger->error('Error: ' . $reason . PHP_EOL);
return 'Error: ' . $reason; // Return early if the request fails
} else {
// echo "Error: " . $requestException->getMessage() . PHP_EOL;
// $logger->appendLog('Error: ' . $requestException->getMessage());
print_r('Error: ' . $requestException->getMessage() . PHP_EOL);
$this->logger->error('Error al realizar la solicitud: ' . $requestException->getMessage() . PHP_EOL);
return 'Error: ' . $requestException->getMessage(); // Return early if the request fails
}
@ -1421,6 +1405,8 @@ abstract class AbstractMessageNotifierFacade
// La variable no es una dirección IP válida, se asume que es un ID
$IpAddressClientId = filter_var($dataToSearch, FILTER_SANITIZE_NUMBER_INT);
//print ('Consulta por ID: ' . $dataToSearch . PHP_EOL);
$this->logger->info('Consulta por ID: ' . $dataToSearch . PHP_EOL);
try {
//Obtener id del sitio por medio del servicio
@ -1439,17 +1425,13 @@ abstract class AbstractMessageNotifierFacade
$reason = $response->getReasonPhrase();
//si el statusCode es 404 significa que no se encontró el cliente
if ($statusCode == 404) {
echo "No se encontró el cliente con el ID proporcionado." . PHP_EOL;
$logger->appendLog('No se encontró el cliente con el ID proporcionado: ' . $IpAddressClientId);
// print_r('No se encontró el cliente con el ID proporcionado: ' . $IpAddressClientId . PHP_EOL);
$this->logger->error('No se encontró el cliente con el ID proporcionado: ' . $IpAddressClientId . PHP_EOL);
return 'Error: No se encontró el cliente con el ID proporcionado: ' . $IpAddressClientId; // Return early if the client is not found
}
return 'Error: ' . $reason; // Return early if the request fails
} else {
// echo "Error: " . $requestException->getMessage() . PHP_EOL;
$logger->appendLog('Error: ' . $requestException->getMessage());
// print_r('Error: ' . $requestException->getMessage() . PHP_EOL);
$this->logger->error('Error: ' . $requestException->getMessage() . PHP_EOL);
return 'Error: ' . $requestException->getMessage(); // Return early if the request fails
}
@ -1458,21 +1440,16 @@ abstract class AbstractMessageNotifierFacade
if ($responseServices->getStatusCode() === 200) {
$dataServices = json_decode($responseServices->getBody()->getContents(), true);
// $jsonServices = json_encode($dataServices, JSON_PRETTY_PRINT);
// print_r($jsonServices . PHP_EOL);
if (isset($dataServices[0])) {
$unmsSiteID = $dataServices[0]['unmsClientSiteId']; // Example: 9c6798f3-0254-4e5b-bc3b-9da82fe16e46
} else {
// echo "No se encontraron servicios para el cliente proporcionado." . PHP_EOL;
$logger->appendLog('No se encontraron servicios para el cliente proporcionado: ' . $IpAddressClientId);
// print_r('No se encontraron servicios para el cliente proporcionado: ' . $IpAddressClientId . PHP_EOL);
$this->logger->error('No se encontraron servicios para el cliente proporcionado: ' . $IpAddressClientId . PHP_EOL);
return "Error: No se encontraron servicios para el cliente proporcionado: " . $IpAddressClientId; // Return early if no services are found
}
} else {
// echo "Error en la solicitud. Código de estado HTTP: " . $responseServices->getStatusCode() . PHP_EOL;
$logger->appendLog('Error en la solicitud. Código de estado HTTP: ' . $responseServices->getStatusCode());
// print_r('Error en la solicitud. Código de estado HTTP: ' . $responseServices->getStatusCode() . PHP_EOL);
$this->logger->error('Falla en la solicitud. Código de estado HTTP: ' . $responseServices->getStatusCode() . PHP_EOL);
return "Error: En la solicitud. Código de estado HTTP: " . $responseServices->getStatusCode();
}
@ -1490,17 +1467,14 @@ abstract class AbstractMessageNotifierFacade
$reason = $response->getReasonPhrase();
//si el statusCode es 404 significa que no se encontró el cliente
if ($statusCode == 404) {
// echo "No se encontró el cliente con el ID proporcionado." . PHP_EOL;
$logger->appendLog('No se encontró el cliente con el ID proporcionado: ' . $IpAddressClientId);
// print_r('No se encontró el devicie con el ID proporcionado: ' . $IpAddressClientId . PHP_EOL);
$this->logger->error('No se encontró el devicie con el ID proporcionado: ' . $IpAddressClientId . PHP_EOL);
return 'Error: No se encontró el devicie con el ID proporcionado: ' . $IpAddressClientId; // Return early if the client is not found
}
$this->logger->error('Error: ' . $reason . PHP_EOL);
return 'Error: ' . $reason; // Return early if the request fails
} else {
// echo "Error: " . $requestException->getMessage() . PHP_EOL;
$logger->appendLog('Error: ' . $requestException->getMessage());
// print_r('Error: ' . $requestException->getMessage() . PHP_EOL);
$this->logger->error('Error: ' . $requestException->getMessage() . PHP_EOL);
return 'Error: ' . $requestException->getMessage(); // Return early if the request fails
}
@ -1519,23 +1493,17 @@ abstract class AbstractMessageNotifierFacade
$idClientDevice = $dataDevicesBySite[0]['identification']['id'];
$deviceID = $dataDevicesBySite[0]['attributes']['apDevice']['id'];
} else {
// echo "No se encontró la clave 'identification' o 'apDevice' en la respuesta." . PHP_EOL;
$logger->appendLog('No se encontró la clave \'identification\' o \'apDevice\' en la respuesta.');
// print_r('Este cliente es un repetidor.' . PHP_EOL);
$this->logger->error('No se encontró el dispositivo con el ID proporcionado: ' . $IpAddressClientId . PHP_EOL);
return "Este cliente es un repetidor."; // Return early if the key is not found
}
} else {
// echo "No se encontraron dispositivos para el sitio proporcionado." . PHP_EOL;
$logger->appendLog('No se encontraron dispositivos para el sitio proporcionado: ' . $unmsSiteID);
// print_r('No se encontraron dispositivos para el sitio proporcionado: ' . $unmsSiteID . PHP_EOL);
$this->logger->error('No se encontraron dispositivos para el sitio proporcionado: ' . $unmsSiteID . PHP_EOL);
return "Error: No se encontraron dispositivos para el sitio proporcionado."; // Return early if no devices are found
}
} else {
// echo "Error en la solicitud. Código de estado HTTP: " . $responseDevicesBySite->getStatusCode() . PHP_EOL;
$logger->appendLog('Error en la solicitud. Código de estado HTTP: ' . $responseDevicesBySite->getStatusCode());
// print_r('Error en la solicitud. Código de estado HTTP: ' . $responseDevicesBySite->getStatusCode() . PHP_EOL);
$this->logger->error('Falla en la solicitud. Código de estado HTTP: ' . $responseDevicesBySite->getStatusCode() . PHP_EOL);
return "Error: Falla en la solicitud. Código de estado HTTP: " . $responseDevicesBySite->getStatusCode();
}
@ -1553,17 +1521,13 @@ abstract class AbstractMessageNotifierFacade
$reason = $response->getReasonPhrase();
//si el statusCode es 404 significa que no se encontró el cliente
if ($statusCode == 404) {
// echo "No se encontró el cliente con el ID proporcionado." . PHP_EOL;
$logger->appendLog('No se encontró el cliente con el ID proporcionado: ' . $IpAddressClientId);
// print_r('No se encontró el device con el ID proporcionado: ' . $IpAddressClientId . PHP_EOL);
$this->logger->error('No se encontró el device con el ID proporcionado: ' . $IpAddressClientId . PHP_EOL);
return 'Error: No se encontró el device con el ID proporcionado: ' . $IpAddressClientId; // Return early if the client is not found
}
return 'Error: ' . $reason; // Return early if the request fails
} else {
// echo "Error: " . $requestException->getMessage() . PHP_EOL;
$logger->appendLog('Error: ' . $requestException->getMessage());
// print_r('Error: ' . $requestException->getMessage() . PHP_EOL);
$this->logger->error('Error: ' . $requestException->getMessage() . PHP_EOL);
return 'Error: ' . $requestException->getMessage(); // Return early if the request fails
}
@ -1590,17 +1554,14 @@ abstract class AbstractMessageNotifierFacade
$reason = $response->getReasonPhrase();
//si el statusCode es 404 significa que no se encontró el cliente
if ($statusCode == 404) {
// echo "No se encontró el cliente con el ID proporcionado." . PHP_EOL;
$logger->appendLog('No se encontró el cliente con el ID proporcionado: ' . $IpAddressClientId);
// print_r('No se encontró el device con el ID proporcionado: ' . $IpAddressClientId . PHP_EOL);
$this->logger->error('No se encontró el device con el ID proporcionado: ' . $IpAddressClientId . PHP_EOL);
return 'Error: No se encontró el device con el ID proporcionado: ' . $IpAddressClientId; // Return early if the client is not found
}
$this->logger->error('Error: ' . $reason . PHP_EOL);
return 'Error: ' . $reason; // Return early if the request fails
} else {
// echo "Error: " . $requestException->getMessage() . PHP_EOL;
$logger->appendLog('Error: ' . $requestException->getMessage());
// print_r('Error: ' . $requestException->getMessage() . PHP_EOL);
$this->logger->error('Error: ' . $requestException->getMessage() . PHP_EOL);
return 'Error: ' . $requestException->getMessage(); // Return early if the request fails
}
}
@ -1612,28 +1573,237 @@ abstract class AbstractMessageNotifierFacade
$passwordVault = $dataPasswordVault['credentials']['password'];
return $passwordVault;
} else {
// echo "No se encontró la contraseña en la respuesta de la API." . PHP_EOL;
$logger->appendLog('No se encontró una contraseña en la bóveda para la antena de este cliente, es altamente probable que conserve una contraseña conocida.');
// print_r('No se encontró una contraseña en la bóveda para la antena de este cliente, es altamente probable que conserve una contraseña conocida.' . PHP_EOL);
$this->logger->error('No se encontró una contraseña en la bóveda para la antena de este cliente, es altamente probable que conserve una contraseña conocida.' . PHP_EOL);
return "Error: No se encontró una contraseña en la bóveda para la antena de este cliente, es altamente probable que conserve una contraseña conocida."; // Return early if the password is not found
}
} else {
// echo "Error en la solicitud. Código de estado HTTP: " . $responsePasswordVault->getStatusCode() . PHP_EOL;
$logger->appendLog('Error en la solicitud. Código de estado HTTP: ' . $responsePasswordVault->getStatusCode());
// print_r('Error en la solicitud. Código de estado HTTP: ' . $responsePasswordVault->getStatusCode() . PHP_EOL);
$this->logger->error('Falla en la solicitud. Código de estado HTTP: ' . $responsePasswordVault->getStatusCode() . PHP_EOL);
return 'Error: Falla en la solicitud. Código de estado HTTP: ' . $responsePasswordVault->getStatusCode(); // Return early if the request fails
}
} else {
// echo "Error en la solicitud. Código de estado HTTP: " . $responseDevicesBySite->getStatusCode() . PHP_EOL;
$logger->appendLog('Error en la solicitud. Código de estado HTTP: ' . $responseDevicesBySite->getStatusCode());
// print_r('Error en la solicitud. Código de estado HTTP: ' . $responseDevicesBySite->getStatusCode() . PHP_EOL);
$this->logger->error('Falla en la solicitud. Código de estado HTTP: ' . $responseDevicesBySite->getStatusCode() . PHP_EOL);
return 'Error: Falla en la solicitud. Código de estado HTTP: ' . $responseDevicesBySite->getStatusCode(); // Return early if the request fails
}
}
}
function getVaultCredentialsByClientId($clientId): string
{
$configManager = \Ubnt\UcrmPluginSdk\Service\PluginConfigManager::create();
$config = $configManager->loadConfig();
$ucrmBaseUri = $config['ipserver'];
$authToken = $config['apitoken'];
if ($ucrmBaseUri === '172.16.5.134') { //opción solo para el servidor de pruebas
return 'gYAIEK:Be}SK*01z5+/V';
}
$unmsBaseUri = 'https://' . $ucrmBaseUri . '/nms/api/v2.1/';
$ucrmBaseUri = 'https://' . $ucrmBaseUri . '/crm/api/v1.0/';
//$authToken = '7adc9198-50b1-41d0-9bfa-d4946902ed89';
// Crear una instancia del cliente Guzzle
$clientUnms = new Client([
'base_uri' => $unmsBaseUri,
'verify' => false, // Deshabilitar la verificación del certificado SSL
]);
$clientUcrm = new Client([
'base_uri' => $ucrmBaseUri,
'verify' => false, // Deshabilitar la verificación del certificado SSL
]);
$this->logger->info('Consulta por ID: ' . $clientId . PHP_EOL);
try {
//Obtener id del sitio por medio del servicio
$responseServices = $clientUcrm->get('clients/services?clientId=' . $clientId, [
'headers' => [
'X-Auth-Token' => $authToken,
'Content-Type: application/json',
],
]);
} catch (RequestException $requestException) {
// Manejar errores de la solicitud
if ($requestException->hasResponse()) {
$response = $requestException->getResponse();
$statusCode = $response->getStatusCode();
$reason = $response->getReasonPhrase();
//si el statusCode es 404 significa que no se encontró el cliente
if ($statusCode == 404) {
$this->logger->error('No se encontró el cliente con el ID proporcionado: ' . $clientId . PHP_EOL);
return 'Error: No se encontró el cliente con el ID proporcionado: ' . $clientId; // Return early if the client is not found
}
return 'Error: ' . $reason; // Return early if the request fails
} else {
$this->logger->error('Error: ' . $requestException->getMessage() . PHP_EOL);
return 'Error: ' . $requestException->getMessage(); // Return early if the request fails
}
}
if ($responseServices->getStatusCode() === 200) {
$dataServices = json_decode($responseServices->getBody()->getContents(), true);
if (isset($dataServices[0])) {
$unmsSiteID = $dataServices[0]['unmsClientSiteId']; // Example: 9c6798f3-0254-4e5b-bc3b-9da82fe16e46
} else {
$this->logger->error('No se encontraron servicios para el cliente proporcionado: ' . $clientId . PHP_EOL);
return "Error: No se encontraron servicios para el cliente proporcionado: " . $clientId; // Return early if no services are found
}
} else {
$this->logger->error('Falla en la solicitud. Código de estado HTTP: ' . $responseServices->getStatusCode() . PHP_EOL);
return "Error: En la solicitud. Código de estado HTTP: " . $responseServices->getStatusCode();
}
try {
$responseDevicesBySite = $clientUnms->request('GET', 'devices?siteId=' . $unmsSiteID, [
'headers' => [
'X-Auth-Token' => $authToken,
],
]);
} catch (RequestException $requestException) {
// Manejar errores de la solicitud
if ($requestException->hasResponse()) {
$response = $requestException->getResponse();
$statusCode = $response->getStatusCode();
$reason = $response->getReasonPhrase();
//si el statusCode es 404 significa que no se encontró el cliente
if ($statusCode == 404) {
$this->logger->error('No se encontró el devicie con el ID proporcionado: ' . $clientId . PHP_EOL);
return 'Error: No se encontró el devicie con el ID proporcionado: ' . $clientId; // Return early if the client is not found
}
$this->logger->error('Error: ' . $reason . PHP_EOL);
return 'Error: ' . $reason; // Return early if the request fails
} else {
$this->logger->error('Error: ' . $requestException->getMessage() . PHP_EOL);
return 'Error: ' . $requestException->getMessage(); // Return early if the request fails
}
}
if ($responseDevicesBySite->getStatusCode() === 200) {
$dataDevicesBySite = json_decode($responseDevicesBySite->getBody()->getContents(), true);
$jsonDevicesBySite = json_encode($dataDevicesBySite, JSON_PRETTY_PRINT);
//print_r($jsonDevicesBySite . PHP_EOL); //Devices por ID del sitio
//id del device al que está conectado el cliente
if (isset($dataDevicesBySite[0])) {
//verificar con iiset si existe la clave 'identification' y 'apDevice' en el primer elemento del array
if (isset($dataDevicesBySite[0]['identification']) && isset($dataDevicesBySite[0]['attributes']['apDevice'])) {
$idClientDevice = $dataDevicesBySite[0]['identification']['id'];
$deviceID = $dataDevicesBySite[0]['attributes']['apDevice']['id'];
} else {
$this->logger->error('No se encontró el dispositivo con el ID proporcionado: ' . $clientId . PHP_EOL);
return "Este cliente es un repetidor."; // Return early if the key is not found
}
} else {
$this->logger->error('No se encontraron dispositivos para el sitio proporcionado: ' . $unmsSiteID . PHP_EOL);
return "Error: No se encontraron dispositivos para el sitio proporcionado."; // Return early if no devices are found
}
} else {
$this->logger->error('Falla en la solicitud. Código de estado HTTP: ' . $responseDevicesBySite->getStatusCode() . PHP_EOL);
return "Error: Falla en la solicitud. Código de estado HTTP: " . $responseDevicesBySite->getStatusCode();
}
try {
$responseDevicesBySite = $clientUnms->request('GET', 'devices/' . $deviceID, [
'headers' => [
'X-Auth-Token' => $authToken,
],
]);
} catch (RequestException $requestException) {
// Manejar errores de la solicitud
if ($requestException->hasResponse()) {
$response = $requestException->getResponse();
$statusCode = $response->getStatusCode();
$reason = $response->getReasonPhrase();
//si el statusCode es 404 significa que no se encontró el cliente
if ($statusCode == 404) {
$this->logger->error('No se encontró el device con el ID proporcionado: ' . $clientId . PHP_EOL);
return 'Error: No se encontró el device con el ID proporcionado: ' . $clientId; // Return early if the client is not found
}
return 'Error: ' . $reason; // Return early if the request fails
} else {
$this->logger->error('Error: ' . $requestException->getMessage() . PHP_EOL);
return 'Error: ' . $requestException->getMessage(); // Return early if the request fails
}
}
if ($responseDevicesBySite->getStatusCode() === 200) {
$dataDevices = json_decode($responseDevicesBySite->getBody()->getContents(), true);
$jsonDevices = json_encode($dataDevices, JSON_PRETTY_PRINT);
//print_r($jsonDevices . PHP_EOL);
try {
//print_r('ID del device al que está conectado el cliente: ' . $idDevice . PHP_EOL);
$responsePasswordVault = $clientUnms->request('GET', 'vault/' . $idClientDevice . '/credentials', [
'headers' => [
'X-Auth-Token' => $authToken,
],
]);
} catch (RequestException $requestException) {
// Manejar errores de la solicitud
if ($requestException->hasResponse()) {
$response = $requestException->getResponse();
$statusCode = $response->getStatusCode();
$reason = $response->getReasonPhrase();
//si el statusCode es 404 significa que no se encontró el cliente
if ($statusCode == 404) {
$this->logger->error('No se encontró el device con el ID proporcionado: ' . $clientId . PHP_EOL);
return 'Error: No se encontró el device con el ID proporcionado: ' . $clientId; // Return early if the client is not found
}
$this->logger->error('Error: ' . $reason . PHP_EOL);
return 'Error: ' . $reason; // Return early if the request fails
} else {
$this->logger->error('Error: ' . $requestException->getMessage() . PHP_EOL);
return 'Error: ' . $requestException->getMessage(); // Return early if the request fails
}
}
if ($responsePasswordVault->getStatusCode() === 200) {
$dataPasswordVault = json_decode($responsePasswordVault->getBody()->getContents(), true);
$jsonPasswordVault = json_encode($dataPasswordVault, JSON_PRETTY_PRINT);
if (isset($dataPasswordVault['credentials']['password'])) {
$passwordVault = $dataPasswordVault['credentials']['password'];
return $passwordVault;
} else {
$this->logger->error('No se encontró una contraseña en la bóveda para la antena de este cliente, es altamente probable que conserve una contraseña conocida.' . PHP_EOL);
return "Error: No se encontró una contraseña en la bóveda para la antena de este cliente, es altamente probable que conserve una contraseña conocida."; // Return early if the password is not found
}
} else {
$this->logger->error('Falla en la solicitud. Código de estado HTTP: ' . $responsePasswordVault->getStatusCode() . PHP_EOL);
return 'Error: Falla en la solicitud. Código de estado HTTP: ' . $responsePasswordVault->getStatusCode(); // Return early if the request fails
}
} else {
$this->logger->error('Falla en la solicitud. Código de estado HTTP: ' . $responseDevicesBySite->getStatusCode() . PHP_EOL);
return 'Error: Falla en la solicitud. Código de estado HTTP: ' . $responseDevicesBySite->getStatusCode(); // Return early if the request fails
}
}
}

View File

@ -247,7 +247,7 @@ class ClientCallBellAPI
if (!$reprogramming && $changeInstaller) {
$campo2 = $jobInstallerNotificationData['subjectOfChange'];
$campo3 = sprintf("#️⃣%s", $jobInstallerNotificationData['jobId']);
$campo4 = '👤 *Cliente:* ' . $jobInstallerNotificationData['clientFullName'];
$campo4 = sprintf('*👤%s* ', $jobInstallerNotificationData['clientFullName']);
$campo5 = $jobInstallerNotificationData['additionalChangeData'];
} else {
$campo2 = sprintf("#️⃣%s", $jobInstallerNotificationData['jobId']);
@ -255,9 +255,9 @@ class ClientCallBellAPI
// $campo4 = $jobInstallerNotificationData['clientAddress'];
$campo4 = '☎️ ' . $jobInstallerNotificationData['clientWhatsApp'];
$campo5 = '🗓️ ' . $jobInstallerNotificationData['date'];
$campo6 = '🛠️ ' . $jobInstallerNotificationData['jobDescription'];
$campo7 = '📌 ' . $jobInstallerNotificationData['gmapsLocation'];
$campo8 = '🔐 ' . $passwordAntenaCliente;
// $campo6 = '🛠️ ' . $jobInstallerNotificationData['jobDescription'];
// $campo7 = '📌 ' . $jobInstallerNotificationData['gmapsLocation'];
// $campo8 = '🔐 ' . $passwordAntenaCliente;
}
if ($reprogramming && !$changeInstaller) {
@ -276,7 +276,7 @@ class ClientCallBellAPI
$curl_string = "{\n \"to\": \"$installerWhatsAppNumber\",\n \"from\": \"whatsapp\",\n \"type\": \"text\",\n \"content\": {\n \"text\": \"S/M\"\n },\n \"template_values\": [\"$campo1_combinado\", \"$campo2\", \"$campo3\", \"$campo4\"],\n \"template_uuid\": \"88eeb6420a214fd8870dd28d741021c4\",\n \"optin_contact\": true\n }";
} else if (!$reprogramming && $changeInstaller) {
//Enviar notificación de cambio de instalador
$log->appendLog("Enviando notificación de cambio de instalador al instalador anterior, valor de reprogramming $reprogramming y valor de changeInstaller $changeInstaller " . PHP_EOL);
$log->appendLog("Enviando notificación de cambio de instalador al instalador anterior (desasignación), valor de reprogramming $reprogramming y valor de changeInstaller $changeInstaller " . PHP_EOL);
$curl_string = "{\n \"to\": \"$installerWhatsAppNumber\",\n \"from\": \"whatsapp\",\n \"type\": \"text\",\n \"content\": {\n \"text\": \"S/M\"\n },\n \"template_values\": [\"$campo1\", \"$campo2\", \"$campo3\", \"$campo4\", \"$campo5\"],\n \"template_uuid\": \"e1aa2b0fd3884595918f4ac2676acd29\",\n \"optin_contact\": true\n }";
} else if ($reprogramming && $changeInstaller) {
//Enviar notificación de cambio de instalador
@ -290,7 +290,7 @@ class ClientCallBellAPI
$date = sprintf("🗓️ %s", $jobInstallerNotificationData['date']);
$installerName = sprintf("👷🏻‍♂️ *%s*", $jobInstallerNotificationData['installerName']);
$campo1_combinado = "$installerName se te ha asignado una tarea con folio $jobId para el cliente $clientFullName, para el $date";
$campo1_combinado = "$installerName se te ha asignado una tarea con folio $jobId, del cliente $clientFullName, para el $date";
$campo2 = $jobInstallerNotificationData['clientWhatsApp'];
$campo3 = $jobInstallerNotificationData['gmapsLocation'];
$campo4 = $passwordAntenaCliente;

View File

@ -5,7 +5,7 @@
'type' => 'library',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'reference' => 'e34b3ec0f84e1274c6c6bbed67f8aacd933f0807',
'reference' => 'e899945ca3c057b898046cd8f2c8c6ccc2aa7c82',
'name' => 'ucrm-plugins/sms-twilio',
'dev' => false,
),
@ -307,7 +307,7 @@
'type' => 'library',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'reference' => 'e34b3ec0f84e1274c6c6bbed67f8aacd933f0807',
'reference' => 'e899945ca3c057b898046cd8f2c8c6ccc2aa7c82',
'dev_requirement' => false,
),
),