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

324 lines
13 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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