$start, "end" => $end, "subject" => $subject, "description" => $description, "roomName" => $roomName, "allowAnonymous" => true, "enableSip" => false, "enableAutoRecording" => true ); $account = 'kfv.advokat@gmail.com'; //$account = 'ilya@rudenko.expert'; $logstring = date('Y-m-d H:i:s', 'Подготовили массив для создания встречи: '.json_encode($params).PHP_EOL); file_put_contents('logs/Kontur.log', $logstring, FILE_APPEND); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => 'https://clientright.ktalk.ru/api/emailCalendar/'.$account, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => json_encode($params), CURLOPT_HTTPHEADER => array( 'x-auth-token: pV5b1OcpXk7WOqVYFLDQJkfqWsdv2HDE', 'Content-Type: application/json' ), )); $output = curl_exec($curl); if (curl_errno($curl)) { $logstring = date('Y-m-d H:i:s').' Что-то пошло не так при создании встречи: '.curl_error($curl).PHP_EOL; } else { $logstring = date('Y-m-d H:i:s', 'Ответ от Контура при созданиии митинга: '.$output.PHP_EOL); $output = 'YES'; } file_put_contents('logs/Kontur.log', $logstring, FILE_APPEND); curl_close($curl); return $output; } function GetMeetingKey($roomName) { $key = 'none'; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => 'https://clientright.ktalk.ru/api/domain/recordings', CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_HTTPHEADER => array( 'x-auth-token: pV5b1OcpXk7WOqVYFLDQJkfqWsdv2HDE', 'Content-Type: application/json' ), )); $output = curl_exec($curl); $data = json_decode($output, true); if (curl_errno($curl)) { $logstring = date('Y-m-d H:i:s').' Что-то пошло не так при получении списка встреч: '.curl_error($curl).PHP_EOL; } else { $logstring = date('Y-m-d H:i:s', 'Ответ от Контура при получении списка встреч: '.$output.PHP_EOL); foreach ($data['recordings'] as $recording) { // перебираем все записи if ($recording['roomName'] == $roomName) { // если ключ соответствует нужному значению $key = $recording['key']; // выводим значение ключа break; // прерываем цикл, так как значение найдено } } } file_put_contents('logs/Kontur.log', $logstring, FILE_APPEND); curl_close($curl); return $key; } function GetTranscription($key) { $result = array(); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => 'https://clientright.ktalk.ru/api/recordings/'.$key.'/transcript', CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_HTTPHEADER => array( 'x-auth-token: pV5b1OcpXk7WOqVYFLDQJkfqWsdv2HDE' ), )); $output = curl_exec($curl); $data = json_decode($output, true); if (curl_errno($curl)) { $logstring = date('Y-m-d H:i:s').' Что-то пошло не так при получении транскрибации встреч: '.curl_error($curl).PHP_EOL; } else { $logstring = date('Y-m-d H:i:s', 'Ответ от Контура при получении транскрибации встречи: '.$output.PHP_EOL); foreach ($data['tracks'] as $track) { // перебираем всех участников встречи if ($track['speaker']['isAnonymous']) { // Незарегистрированный пользователь $name = $track['speaker']['anonymousName']; } else { // Зарегистрированный пользователь $name = $track['speaker']['userInfo']['firstname'].' '.$track['speaker']['userInfo']['surname']; } foreach ($track['chunks'] as $chunk) { // перебираем всереплики участника $text = $chunk['text']; $time = $chunk['startTimeOffsetInMillis']; $str = date('H:i:s', $time / 1000); // Получили время, причем почему-то на 3 часа больше $str = strtotime($str) - 10800; // Перевели обратно в число и вычли 3 часа $str = date('H:i:s', $str); // И конвертнули обратно в строку $result[$time] = array('name' => $name, 'text' => $text, 'start' => $str); } } ksort($result); } file_put_contents('logs/Kontur.log', $logstring, FILE_APPEND); curl_close($curl); return $result; } function NewMeeting($crmid) { require_once 'include/Webservices/Utils.php'; require_once 'include/utils/Telegram.php'; require_once 'include/utils/WhatsApp.php'; include_once 'modules/Users/Users.php'; require_once 'include/Webservices/Create.php'; require_once 'includes/Loader.php'; vimport ('includes.runtime.Globals'); vimport ('includes.runtime.BaseModel'); vimport ('includes.runtime.LanguageHandler'); global $adb; $user = Users::getActiveAdminUser(); // Получаем пользователя, под которым будем создавать записи $ws_id = '33x'.$crmid; $link = ''; $query = 'select p.projectname, cf.cf_1843 as startdate, cf.cf_1845 as starttime, p.linktoaccountscontacts as contactid, c.mobile, c.phone, c.firstname, e.smownerid as userid from vtiger_project p left join vtiger_projectcf cf on cf.projectid = p.projectid left join vtiger_contactdetails c on c.contactid = p.linktoaccountscontacts left join vtiger_crmentity e on e.crmid = p.projectid where p.projectid = '.$crmid; $result = $adb->pquery($query); if ($adb->num_rows($result) == 0) { $logstring = date('Y-m-d H:i:s').' - очень странно, но проекта с там ID нет...'.PHP_EOL; file_put_contents('logs/CreateKonturMeeting.log', $logstring, FILE_APPEND); } else { $name = $adb->query_result($result, 0, "projectname"); $startdate = $adb->query_result($result, 0, "startdate"); $starttime = $adb->query_result($result, 0, "starttime"); $contactid = $adb->query_result($result, 0, "contactid"); $tgid = $adb->query_result($result, 0, "phone"); $mobile = $adb->query_result($result, 0, "mobile"); $firstname = $adb->query_result($result, 0, "firstname"); $projectowner = $adb->query_result($result, 0, "userid"); if (empty($startdate) or empty($starttime)) { $logstring = date('Y-m-d H:i:s').' - Найден проект: '.$name.'; но в нем не указана дата/время начала митинга'.PHP_EOL; file_put_contents('logs/CreateKonturMeeting.log', $logstring, FILE_APPEND); } else { $enddate = $startdate; $endtime= date('H:i:s', strtotime($starttime) + 3600); //$logstring = date('Y-m-d H:i:s').' - Найден проект: '.$name.'; время начала митинга: '.$startdate.' '.$starttime.'; время окончания: '.$enddate.' '.$endtime.PHP_EOL; //file_put_contents('logs/CreateKonturMeeting.log', $logstring, FILE_APPEND); $result = CreateMeeting($crmid, $startdate, $starttime, $enddate, $endtime, $name, 'Рабочая встреча'); if ($result == 'YES') { //$logstring = date('Y-m-d H:i:s').' - Встреча успешно создана'.PHP_EOL; //file_put_contents('logs/CreateKonturMeeting.log', $logstring, FILE_APPEND); $link = 'https://clientright.ktalk.ru/'.$crmid; $query = 'update vtiger_projectcf set cf_1847 = "'.$link.'" where projectid = '.$crmid; $result = $adb->pquery($query); $message = $firstname.', добрый день. Мы запланировали видеовстречу '.date('d.m.Y', strtotime($startdate)).' в '.$starttime.', ссылку на подключение пришлем за 15 минут до начала'; if (!empty($tgid)) { try { $params = array ( 'commentcontent' => $message, 'related_to' => $ws_id, 'channel' => 'Telegram', 'assigned_user_id' => $user ); //$logstring = date('Y-m-d H:i:s').' - массив для телеги: '.json_encode($params).PHP_EOL; //file_put_contents('logs/CreateKonturMeeting.log', $logstring, FILE_APPEND); $comment = vtws_create('ModComments', $params, $user); //$logstring = date('Y-m-d H:i:s').' - создание коммента: '.json_encode($comment).PHP_EOL; //file_put_contents('logs/CreateKonturMeeting.log', $logstring, FILE_APPEND); $commentid = substr($comment['id'], 3); } catch (WebServiceException $ex) { $output = $ex->getMessage(); $logstring = date('Y-m-d H:i:s').' - Коммент не создался. Ошибка: '.$output.PHP_EOL; file_put_contents('logs/CreateKonturMeeting.log', $logstring, FILE_APPEND); } if ($commentid > 0) { $result = TelegramSendComment($commentid, $message); //$logstring = date('Y-m-d H:i:s').' - Отправка уведомления в телегу: '.$result.PHP_EOL; //file_put_contents('logs/CreateKonturMeeting.log', $logstring, FILE_APPEND); } } if (!empty($mobile)) { try { $params = array ( 'commentcontent' => $message, 'related_to' => $ws_id, 'channel' => 'WhatsApp', 'assigned_user_id' => $user ); //$logstring = date('Y-m-d H:i:s').' - массив для WhatsApp: '.json_encode($params).PHP_EOL; //file_put_contents('logs/CreateKonturMeeting.log', $logstring, FILE_APPEND); $comment = vtws_create('ModComments', $params, $user); $commentid = substr($comment['id'], 3); } catch (WebServiceException $ex) { $output = $ex->getMessage(); $logstring = date('Y-m-d H:i:s').' - Коммент не создался. Ошибка: '.$output.PHP_EOL; file_put_contents('logs/CreateKonturMeeting.log', $logstring, FILE_APPEND); } if ($commentid > 0) { $result = WhatsAppSendComment($commentid, $message); //$logstring = date('Y-m-d H:i:s').' - Отправка уведомления в WhatsApp: '.$result.PHP_EOL; //file_put_contents('logs/CreateKonturMeeting.log', $logstring, FILE_APPEND); } } // Создатим событие в Календаре try { $params = array ( 'subject' => 'Видеовстреча по проекту '.$name, 'activitytype' => 'Видеовстреча', 'date_start' => $startdate, 'due_date' => $startdate, 'time_start' => $starttime, 'time_end' => $endtime, 'sendnotification' => 0, 'duration_hours' => 1, 'duration_minutes' => 0, 'notime' => 0, 'recurringtype' => '--None--', 'taskstatus' => 'Planned', 'assigned_user_id' => '19x'.$projectowner ); $logstring = date('Y-m-d H:i:s').' - массив для Календаря: '.json_encode($params).PHP_EOL; file_put_contents('logs/CreateKonturMeeting.log', $logstring, FILE_APPEND); $activity = vtws_create('Calendar', $params, $user); $logstring = date('Y-m-d H:i:s').' - создание Календаря: '.json_encode($comment).PHP_EOL; file_put_contents('logs/CreateKonturMeeting.log', $logstring, FILE_APPEND); $activityid = substr($activity['id'], 2); } catch (WebServiceException $ex) { $output = $ex->getMessage(); $logstring = date('Y-m-d H:i:s').' - Событие не создалось. Ошибка: '.$output.PHP_EOL; file_put_contents('logs/CreateKonturMeeting.log', $logstring, FILE_APPEND); $activityid = 0; } if ($activityid > 0) { $query = 'insert into vtiger_cntactivityrel (contactid, activityid) values(?, ?)'; $result = $adb->pquery($query, array($contactid, $activityid)); } } else { $logstring = date('Y-m-d H:i:s').' - Что-то пошло не так. Ответ от Контура при создании встречи: '.$result.PHP_EOL; file_put_contents('logs/CreateKonturMeeting.log', $logstring, FILE_APPEND); } } } return $link; } ?>