324 lines
13 KiB
PHP
324 lines
13 KiB
PHP
|
|
<?php
|
|||
|
|
/*********************************************************************************
|
|||
|
|
* Набор методов для работы с Контур.Толк через родное API
|
|||
|
|
* All Rights Reserved.
|
|||
|
|
* Contributor(s): Илья Руденко itsaturn@yandex.ru
|
|||
|
|
********************************************************************************/
|
|||
|
|
require_once 'include/utils/utils.php';
|
|||
|
|
|
|||
|
|
function CreateMeeting($roomName, $startdate, $starttime, $enddate, $endtime, $subject, $description) {
|
|||
|
|
$output = 'YES';
|
|||
|
|
// ХЗ почему, но с сегодняшнего дня контур стал сам добавлять 3 часа - поэтому нам надо уменьшить на 3 часа время начала и окочания
|
|||
|
|
$starttime = date('H:i:s', strtotime($starttime) - 10800);
|
|||
|
|
$endtime = date('H:i:s', strtotime($endtime) - 10800);
|
|||
|
|
|
|||
|
|
$start = $startdate.'T'.$starttime;
|
|||
|
|
$end = $enddate.'T'.$endtime;
|
|||
|
|
$params = array(
|
|||
|
|
"start" => $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;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
?>
|