Jump to content
SpravkaCRM.ru - Ваш справочник по CRM
Тарас

Продолжительность разговора в списке звонков

Recommended Posts

Доброго времени суток. Только начал знакомиться с замечательным произведением программерского исскусства - SuiteCRM.

Приходится работать с уже готовыми системами, опыта мало. 

Вопрос:

Есть список звонков. Есть колонка - продолжительность разговора. У клиента в заголовке колонки указано время продолжительности в секундах. Но в строках эти значения уже в минутах.

Список звонков - это стандартный модуль Calls.

Есть менее стандартный модуль Asterisk, со своим скриптом asteriskLogger.php. В этом Логгере ведется вычисление продолжительности разговора.

Далее совсем мне непонятным способом эти значения продолжительности попадают в журнал звонков и выводятся на экран монитора. 

Вопрос к опытным специалистам - какова цепочка передачи данных продолжительности звонка в список звонков?

Чтобы отследить ошибку и установить верное значение продолжительности уже в секундах, как и положено.

Спасибо.

 

Share this post


Link to post
Share on other sites

Добрый день! Буквально на той неделе был клиент с секундами в логах. Правда разговоры были тоже секундными. Даже добавляли поле с длительностью в секундах. Сейчас специалист по Астериску подойдет может ))) расскажет поточнее....

Share this post


Link to post
Share on other sites

Здравствуйте.

В файле asteriskLogger.php есть два места где происходит рассчёт времени разговора. В моей версии это переменная

$callDurationRaw = 0; // call duration in seconds, only matters if timestampLink != NULL

Строка 572.

В этой переменной содержится время разговора в секундах.

Т.е. из $callDurationRaw получили $callDurationHours и $callDurationMinutes и записываем в звонок.

Далее по коду, как оно преобразуется в часы-минуты и записывается в звонок:

// Recalculate call direction in minutes
$callDuration        = (int) ($callDurationRaw / 60);
$callDurationHours   = (int) ($callDuration / 60);
//$callDurationMinutes = ceil($callDuration / 60); //voor afronden naar boven.
$callDurationMinutes = ($callDuration % 60);
$soapResult = $soapClient->call('set_entry', array(
   'session' => $soapSessionId,
   'module_name' => 'Calls',
   'name_value_list' => array(
      array(
         'name' => 'id',
         'value' => $callRecord['sweet']['id']
      ),
      array(
         'name' => 'name',
         'value' => $callName
      ),
      array(
         'name' => 'duration_hours',
         'value' => $callDurationHours
      ),
      array(
         'name' => 'duration_minutes',
         'value' => $callDurationMinutes
      ),

 

Загвоздка в том что стандартное поле с продолжительностью звонка в модуле Звонки - это выпадающий список в интервалом в 15 минут. Необходимо найти этот список с интервалами и исправить его на список с интервалом в минуту, для более точного отображения.

У меня он называется duration_intervals (у Вас скорее всего так же)

Я это тсписок переписал в файле custom/include/language/ru_RU.lang.php

$GLOBALS['app_list_strings']['duration_intervals']=array (
    '0' => '0',
    '1' => '1',
    '2' => '2',
    '3' => '3',
    '4' => '4',
    '5' => '5',
    '6' => '6',
    '7' => '7',
    '8' => '8',
    '9' => '9',

 

 

Или как я делал: создавал новое поле в модуле Звонков и записывал время в секундах в него, дописав это поле в файле  asteriskLogger.php в массив который я указал выше.

Т.е. запись данных по продолжительности звонка происходит в asteriskLogger.php в 2-х местах, они практически идентичны. Если то что я перечислил выше у Вас уже реализовано тем или иным способом, то по крайней мере я описал место где этот процесс происходит, проверяйте переменную $callDurationRaw и преобразование её значения в часы-минуты.

Share this post


Link to post
Share on other sites

Да, забыл указать второе место - строка 758, но всё легко находится по названию переменной $callDurationRaw

Share this post


Link to post
Share on other sites

 

13 минуты назад, iwealth сказал:

Загвоздка в том что стандартное поле с продолжительностью звонка в модуле Звонки - это выпадающий список в интервалом в 15 минут. Необходимо найти этот список с интервалами и исправить его на список с интервалом в минуту, для более точного отображения.

Интересно, тайм-линия в звонках от таких преобразований не ломается? там же заточено на 15 минут...

Share this post


Link to post
Share on other sites
16 минут назад, SpravkaCRM.ru сказал:

 

Интересно, тайм-линия в звонках от таких преобразований не ломается? там же заточено на 15 минут...

В хелпе модуля астериска для CRM описан этот момент.

https://github.com/blak3r/yaai/wiki/User-Manual#Step_6_Optional_Call_Durations

 

Share this post


Link to post
Share on other sites

Копнул чуть глубжее :

 - в студии в модули Calls поле все-таки есть, зовется talk_time_c

 - некто до меня в "макете списка" модуля Calls разместил поле продолжительности в минутах, но назвал "в секундах", замена на правильное поле (talk_time_c) показала интересный результат - колонка продолжительности исчезла. Т.е. стандартное поле "продолжительность в минутах" на странице списка есть, кастомное уже не хочет. Становится понятно решение одного неизвестного предшественника просто переименовать рабочую колонку (поле) из минут в секунды и разместить её.

Вопрос первый - как установить причину такого поведения?

 

Далее. В asteriskLogger.php переменные длительности уже прописаны, аналогично примеру из ответа выше. 

// Recalculate call direction in minutes
$callDuration        = (int) ($callDurationRaw / 60);
$callDurationHours   = (int) ($callDuration / 60);
//$callDurationMinutes = ceil($callDuration / 60); //voor afronden naar boven.
$callDurationMinutes = ($callDuration % 60);

Вопрос второй. Просьба от совсем новичка в SuiteCRM по буквам описать цепочку - как из asteriskLogger.php значения переменных "duration" оказываются в БазеДанных.

Есть подозрение, что где-то по дороге есть ошибка. Поскольку значения в секундах в БД, talk_time_c модуля Calls, у многих записей ошибочные или просто пустые.

Спасибо.

Share this post


Link to post
Share on other sites
2 часа назад, Тарас сказал:

Копнул чуть глубжее :

 - в студии в модули Calls поле все-таки есть, зовется talk_time_c

 - некто до меня в "макете списка" модуля Calls разместил поле продолжительности в минутах, но назвал "в секундах", замена на правильное поле (talk_time_c) показала интересный результат - колонка продолжительности исчезла. Т.е. стандартное поле "продолжительность в минутах" на странице списка есть, кастомное уже не хочет. Становится понятно решение одного неизвестного предшественника просто переименовать рабочую колонку (поле) из минут в секунды и разместить её.

Вопрос первый - как установить причину такого поведения?

Если я правильно понял ваши действия, то вы в студии добавили в список звонков кастомное поле, но в модуле в списке это поле не появилось. Предполагаю, что это поле находится в скрытых полях списка. Вот скрин https://yadi.sk/i/q_KtzajD3SRdMh

Если же этого поля нет и в скрытых, тогда вам надо смотреть файл custom/modules/Calls/metadata/listviewdefs.php, там искать это поле, если его нет, то добавлять аналогично существующим (и после добавления если не появится проверить в скрытых)

 

2 часа назад, Тарас сказал:

Далее. В asteriskLogger.php переменные длительности уже прописаны, аналогично примеру из ответа выше. 


// Recalculate call direction in minutes
$callDuration        = (int) ($callDurationRaw / 60);
$callDurationHours   = (int) ($callDuration / 60);
//$callDurationMinutes = ceil($callDuration / 60); //voor afronden naar boven.
$callDurationMinutes = ($callDuration % 60);

Вопрос второй. Просьба от совсем новичка в SuiteCRM по буквам описать цепочку - как из asteriskLogger.php значения переменных "duration" оказываются в БазеДанных.

Есть подозрение, что где-то по дороге есть ошибка. Поскольку значения в секундах в БД, talk_time_c модуля Calls, у многих записей ошибочные или просто пустые.

Как из asteriskLogger.php попадет в БД CRM я написал в предыдущем сообщении. В этом файле есть функция $soapClient->call в ней происходит сохранение звонка с параметрами.

Вам же надо посмотреть в этой функции наличие кастомного поля talk_time_c и посмотреть что именно передаётся в это поле.

Share this post


Link to post
Share on other sites

Таки появилась колонка длительности разговора, в секундах, как и ожидал. Сама, спустя какое-то время. Кеш, наверное. Правда количество секунд отличается от длительности звуковых файлов.

И теперь забавное:

$soapResult = $soapClient->call('set_entry', array(

Подобный текст в файле встречается несколько раз, в разных вариациях. И всегда в комментариях. 

Буду искать его в других файлах, может перенесли куда. Или есть другой способ передачи этих данных в БД?

Share this post


Link to post
Share on other sites

На сколько я помню там где то в конфиге можно определить способ обращения к БД SuiteCRM: напрямую, или через SOAP.

В логгере. Там прям сверху где то было.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...