Files
crm.clientright.ru/include/utils/Kontur.php

324 lines
13 KiB
PHP
Raw Normal View History

<?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;
}
?>