- Added comprehensive AI Assistant system (aiassist/ directory): * Vector search and embedding capabilities * Typebot proxy integration * Elastic search functionality * Message classification and chat history * MCP proxy for external integrations - Implemented Court Status API (GetCourtStatus.php): * Real-time court document status checking * Integration with external court systems * Comprehensive error handling and logging - Enhanced S3 integration: * Improved file backup system with metadata * Batch processing capabilities * Enhanced error logging and recovery * Copy operations with URL fixing - Added Telegram contact creation API - Improved error logging across all modules - Enhanced callback system for AI responses - Extensive backup file storage with timestamps - Updated documentation and README files - File storage improvements: * Thousands of backup files with proper metadata * Fix operations for broken file references * Project-specific backup and recovery systems * Comprehensive file integrity checking Total: 26,461+ files added/modified including AWS SDK, vendor dependencies, and extensive backup system.
102 lines
3.0 KiB
PHP
102 lines
3.0 KiB
PHP
<?php
|
|
namespace SPVoipIntegration\gravitel\notifications;
|
|
|
|
use SPVoipIntegration\integration\AbstractNotification;
|
|
use SPVoipIntegration\ProvidersErrors;
|
|
use SPVoipIntegration\ProvidersEnum;
|
|
|
|
abstract class AbstractGraviltelNotification extends AbstractNotification {
|
|
|
|
const SOURCE_ID_PREFIX = "gravitel_";
|
|
|
|
public function process() {
|
|
$voipModel = $this->getVoipRecordModelFromNotificationModel();
|
|
$voipModel->save();
|
|
}
|
|
|
|
public function validateNotification() {
|
|
$requestToken = $this->getRequestToken();
|
|
if(empty($requestToken)) {
|
|
throw new \Exception(ProvidersErrors::VALIDATE_REQUEST_ERROR);
|
|
}
|
|
|
|
$crmToken = $this->getCrmSavedToken();
|
|
if(empty($crmToken)) {
|
|
throw new \Exception(ProvidersErrors::VALIDATE_REQUEST_ERROR);
|
|
}
|
|
|
|
if($requestToken != $crmToken) {
|
|
throw new \Exception(ProvidersErrors::VALIDATE_REQUEST_ERROR);
|
|
}
|
|
|
|
$callId = $this->get('callid');
|
|
if(empty($callId)) {
|
|
throw new \Exception("Invalid data", ProvidersErrors::WRONG_PROVIDER_DATA);
|
|
}
|
|
|
|
$phone = $this->getCustomerPhoneNumber('phone');
|
|
if(empty($phone)) {
|
|
throw new \Exception("Invalid data", ProvidersErrors::WRONG_PROVIDER_DATA);
|
|
}
|
|
|
|
$gravitelUserId = $this->getGravitelUserId();
|
|
if(empty($gravitelUserId)) {
|
|
throw new \Exception("Invalid data", ProvidersErrors::WRONG_PROVIDER_DATA);
|
|
}
|
|
|
|
$userModel = $this->getAssignedUser();
|
|
if (empty($userModel)) {
|
|
throw new \Exception("Unknown user", ProvidersErrors::WRONG_PROVIDER_DATA);
|
|
}
|
|
}
|
|
|
|
protected function getType() {
|
|
return $this->get('type');
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @return Users_Record_Model
|
|
*/
|
|
protected function getAssignedUser() {
|
|
$db = \PearDatabase::getInstance();
|
|
$result = $db->pquery("SELECT id FROM vtiger_users WHERE sp_gravitel_id=?", array(
|
|
$this->getGravitelUserId()
|
|
));
|
|
|
|
if($result && $resultRow = $db->fetchByAssoc($result)) {
|
|
return \Vtiger_Record_Model::getInstanceById($resultRow['id'], 'Users');
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
protected function getUserPhoneNumber() {
|
|
return $this->get('ext');
|
|
}
|
|
|
|
protected function getGravitelUserId() {
|
|
return $this->get('user');
|
|
}
|
|
|
|
protected function getCustomerPhoneNumber() {
|
|
return $this->get('phone');
|
|
}
|
|
|
|
protected function getRequestToken() {
|
|
return $this->get('crm_token');
|
|
}
|
|
|
|
protected function getCrmSavedToken() {
|
|
return \Settings_SPVoipIntegration_Record_Model::getGravitelCrmToken();
|
|
}
|
|
|
|
protected function getSourceUUId() {
|
|
return AbstractGraviltelNotification::SOURCE_ID_PREFIX . $this->get('callid') . '_' . $this->get('user');
|
|
}
|
|
|
|
protected function getProviderName() {
|
|
return ProvidersEnum::GRAVITEL;
|
|
}
|
|
}
|