Адента © Профессионал 2024
Бесплатный тест программы
mail@adenta.pro 8-800-77-53-914
Программа комфортного учета в стоматологической клинике © 2002-2024
✫ О программе ✫ Описание ✫ Новости ✫ Установить ✫ Приобрести ✫ Контакты
Славдент, Москва ❤ Программа "Адента" нравится, пользоваться удобно, спасибо за такую хорошую программу ❤ Валерий Злобин очень терпеливо и понятно помогает ответить на все вопросы ❤
АТС
Уведомления о входящих телефонных звонках, исходящие звонки.
Помощь
Уведомления о входящих телефонных звонках, исходящие звонки.
  • Автоматические уведомления в программе о входящих телефонных звонках.
  • Поиск пациента по номеру мобильного телефона одновременно в 2х справочниках - справочнике пациентов и в телефонном справочнике.
  • Телефонные звонки пациентам из программы через Skype или интернет-скрипт.
  • Для работы модуля "АТС (i)" потребуется дополнительный модуль "Плагины".
  • Для возможности прослушивания аудиозаписей телефонных разговоров потребуется дополнительный модуль "Звукозаписи".
  • Модуль работает без ограничений в период информационного сопровождения программы



  1. Установите плагин "АТС (i)"


  2. Для OFF-line синхронизации:

    • Подготовьте на Вашем компьютере специальный каталог для временных файлов .call и настройте для него права доступа. Пропишите этот каталог в конфигураторе "АТС (i)".

    • Настройте Вашу телефонную АТС - при каждом входящем звонке в папке CALLS она должна уметь создавать каждый раз новый текстовый файл с расширением .call, название файла произвольное. В файле должны быть указаны:

      • <CALL> - начало конструкции
      • <P1>Телефонный номер абонента в федеральном формате</P1>,
        или <PHONE>Телефонный номер абонента в федеральном формате</PHONE>
      • <P2>Телефонный номер АТС, на который поступил звонок, в федеральном формате</P2>
      • <LN>Номер телефонной линии (от 1 до 9999)</LN>,
        или <LINE>Номер телефонной линии (от 1 до 9999)</LINE>
      • <ID>Уникальный идентификатор звонка</ID> - если звонок состоит из серии записей, необязательный параметр
      • <TM>Дата-время звонка в формате ГГГГ.ММ.ДД ЧЧ:MM:CC</TM> - необязательный параметр
      • <DU>Длительность звонка в секундах</DU> - необязательный параметр
      • <RC>URL-звукозаписи разговора</RC> - необязательный параметр
      • </CALL> - закрытие конструкции

    • Пример №1:
      
      	<CALL>
      	<PHONE>89140000001</PHONE>
      	<LINE>1</LINE>
      	</CALL>
      
      	
    • Пример №2 для звонка, который состоит из серии записей.
      
      	<CALL>
      	<P1>89140000001</P1>
      	<P2>89501234567</P2>
      	<ID>qwerty-12345</ID>
      	</CALL>
      
      	<CALL>
      	<P1>89140000001</P1>
      	<LN>12</LN>
      	<DU>240</DU>
      	<ID>qwerty-12345</ID>
      	</CALL>
      
      	

  3. Для ON-line синхронизации с облачной АТС Мобилон (входящие звонки):

    • В личном кабинете "Мобилон" в разделе "ВАТС\Интеграция\Настройки":
      1. Нажмите кнопку "Добавить", затем задайте название для подключения - "Адента".
      2. Включите переключатель "Используется".
      3. Выберите Тип - "Webhook".
      4. Придумайте Ключ_синхронизации из 20 символов латиницы и цифр - чем сложнее, тем лучше.
      5. Укажите адрес "http://adenta.pro/atss.php?key=Ключ_синхронизации&act=new", где вместо текстового фрагмента "Ключ_синхронизации" укажите Ваш действительный ключ.

    • В конфигураторе программы "АТС (i)" еще раз укажите Ваш "Ключ_синхронизации".



  4. Запустите плагин "АТС (i)" на выполнение. Убедитесь, что плагин уже не был запущен ранее, т.к. несколько одновременно работающих его копий могут создавать дополнительные трафик и нагрузку на процессор. Запускайте плагин самостоятельно в начале каждого рабочего дня и отключайте его в конце. Плагин "АТС (i)" может одновременно выполнять два вида синхронизации - и OFF-line и ON-line.


  5. Синхронизация с другими облачными АТС:

    • Для логирования всех входящих звонков используйте скрипт http://adenta.pro/atss.php с параметрами. Передавать параметры скрипту допускается методами GET, POST, JSON.

    • Обязательные параметры (GET, POST):
      • key - Ключ_синхронизации
      • act = для логирования нового звонка, всегда act=new


    • Обязательные параметры (GET, POST, JSON):
      • id - уникальный идентификатор звонка
      • ut - время звонка в формате UnixTime
      • p1 - телефонный номер абонента
      • ln - номер телефонной линии, от 1 до 9999
      • st - статус звонка: START, PREANSWER, ANSWER, IVR, HANGUP, END


    • Дополнительные параметры (GET, POST, JSON):
      • p2 - телефонный номер АТС, на который поступил звонок.
      • du - длительность звонка в секундах
      • rc - URL звукозаписи телефонного разговора


    • Пример логирования телефонного звонка методом GET.
      Достаточно набрать следующую адресную строку в интернет-браузере:

      http://adenta.pro/atss.php?key=qwertyuiopasdfghjklz&act=new&id=101&ut=1582794000&p1=89140700001&ln=1


    • Пример окончательного логирования звонка в файл от оператора mobilon.ru.
      Звонок реальный, были только изменены номера телефонов и url записи разговора. Некоторые параметры I1,I2,DR,CS - не критичны и не будут учитываться программой Адента.
      
      	<CALL>
      	<UT>1641988003</UT>
      	<TM>2022-01-12 14:46:43</TM>
      	<ST>START</ST>
      	<P1>89140000001</P1>
      	<P2>89501234567</P2>
      	<DR>incoming</DR>
      	<ID>52a62fa0-03be-48f1-c869-f0b980031785</ID>
      	<I1>1641988058.6978</I1>
      	<I2>1641988058.6978</I2>
      	</CALL>
      
      	<CALL>
      	<UT>1641988004</UT>
      	<TM>2022-01-12 14:46:44</TM>
      	<ST>PREANSWER</ST>
      	<P1>89140000001</P1>
      	<P2>89501234567</P2>
      	<DR>incoming</DR>
      	<ID>52a62fa0-03be-48f1-c869-f0b980031785</ID>
      	<I1>1641988058.6978</I1>
      	<I2>1641988058.6978</I2>
      	</CALL>
      
      	<CALL>
      	<UT>1641988005</UT>
      	<TM>2022-01-12 14:46:45</TM>
      	<ST>IVR</ST>
      	<P1>89140000001</P1>
      	<P2>89501234567</P2>
      	<DR>incoming</DR>
      	<ID>52a62fa0-03be-48f1-c869-f0b980031785</ID>
      	<I1>1641988058.6978</I1>
      	<I2>1641988058.6978</I2>
      	</CALL>
      
      	<CALL>
      	<UT>1641988056</UT>
      	<TM>2022-01-12 14:47:36</TM>
      	<ST>PREANSWER</ST>
      	<P1>89140000001</P1>
      	<P2>312</P2>
      	<DR>incoming</DR>
      	<ID>52a62fa0-03be-48f1-c869-f0b980031785</ID>
      	<I1>1641988058.6978</I1>
      	<I2>1641988110.7040</I2>
      	<UK>65gtujcvevgs5ffg</UK>
      	</CALL>
      
      	<CALL>
      	<UT>1641988056</UT>
      	<TM>2022-01-12 14:47:36</TM>
      	<ST>PREANSWER</ST>
      	<P1>89140000001</P1>
      	<P2>311</P2>
      	<DR>incoming</DR>
      	<ID>52a62fa0-03be-48f1-c869-f0b980031785</ID>
      	<I1>1641988058.6978</I1>
      	<I2>1641988111.7042</I2>
      	<UK>g1a19se22sgtpurk</UK>
      	</CALL>
      
      	<CALL>
      	<UT>1641988061</UT>
      	<TM>2022-01-12 14:47:41</TM>
      	<ST>ANSWER</ST>
      	<P1>89140000001</P1>
      	<P2>312</P2>
      	<DR>incoming</DR>
      	<ID>52a62fa0-03be-48f1-c869-f0b980031785</ID>
      	<I1>1641988058.6978</I1>
      	<I2>1641988110.7040</I2>
      	<UK>65gtujcvevgs5ffg</UK>
      	</CALL>
      
      	<CALL>
      	<UT>1641988061</UT>
      	<TM>2022-01-12 14:47:41</TM>
      	<ST>HANGUP</ST>
      	<CS>ANSWER</CS>
      	<P1>89140000001</P1>
      	<P2>311</P2>
      	<DU>5</DU>
      	<RC>https://records.services.mobilon.ru/record/52a62fa0-03be-48f1-c869-f0b980031785:1641988116</RC>
      	<DR>incoming</DR>
      	<ID>52a62fa0-03be-48f1-c869-f0b980031785</ID>
      	<I1>1641988058.6978</I1>
      	<I2>1641988111.7042</I2>
      	<UK>g1a19se22sgtpurk</UK>
      	</CALL>
      
      	<CALL>
      	<UT>1641988065</UT>
      	<TM>2022-01-12 14:47:45</TM>
      	<ST>HANGUP</ST>
      	<CS>ANSWER</CS>
      	<P1>89140000001</P1>
      	<P2>89501234567</P2>
      	<DU>62</DU>
      	<RC>https://records.services.mobilon.ru/record/52a62fa0-03be-48f1-c869-f0b980031785:1641988120</RC>
      	<DR>incoming</DR>
      	<ID>52a62fa0-03be-48f1-c869-f0b980031785</ID>
      	<I1>1641988058.6978</I1>
      	<I2>1641988058.6978</I2>
      	</CALL>
      
      	<CALL>
      	<UT>1641988066</UT>
      	<TM>2022-01-12 14:47:46</TM>
      	<ST>END</ST>
      	<P1>89140000001</P1>
      	<P2>312</P2>
      	<DR>incoming</DR>
      	<ID>52a62fa0-03be-48f1-c869-f0b980031785</ID>
      	<I1>1641988058.6978</I1>
      	</CALL>
      
      	<CALL>
      	<UT>1641988066</UT>
      	<TM>2022-01-12 14:47:46</TM>
      	<ST>HANGUP</ST>
      	<CS>ANSWER</CS>
      	<P1>89140000001</P1>
      	<P2>312</P2>
      	<DU>9</DU>
      	<RC>https://records.services.mobilon.ru/record/52a62fa0-03be-48f1-c869-f0b980031785:1641988120</RC>
      	<DR>incoming</DR>
      	<ID>52a62fa0-03be-48f1-c869-f0b980031785</ID>
      	<I1>1641988058.6978</I1>
      	<I2>1641988110.7040</I2>
      	<UK>65gtujcvevgs5ffg</UK>
      	</CALL>
      
      	
    • Содержимое скрипта http://adenta.pro/atss - для полноты понимания, как реализуется прием запросов от Вашей облачной АТС. Программисты могут убедиться, что если не акцентировать внимание на общее количество допустимых параметров (многие из которых не обязательны), то все достаточно просто:
      
      
      
      <?php
      
      $key_=$_GET['key'];
      
      $act_=$_GET['act'];
      
      
      $res_=true;
      
      if ($res_ && empty($key_))
      {
      	$res_=false;
      	echo '-1';
      }
      
      if ($res_ && strlen($key_)<>20)
      {
      	$res_=false;
      	echo '-1';
      }
      
      if ($res_ && empty($act_))
      {
      	$res_=false;
      	echo '-2';
      }
      
      if ($res_ && !empty($act_) && $act_!='read' && $act_!='new')
      {
      	$res_=false;
      	echo '-2';
      }
      
      
      if ($res_)
      {
      	$file_="calls/".$key_.".call";
      	
      	if ($act_=='read' && !file_exists($file_))
      	{
      		$res_=false;
      		echo '-3';
      	}
      	
      }
      
      
      if ($res_ && $act_=='new')
      {
      	$call_ut_=''; // UnixTime
      	$call_st_=''; // State
      	$call_cs_=''; // CallStatus
      	$call_p1_=''; // From
      	$call_p2_=''; // To
      	$call_ln_=''; // Line
      	$call_dr_=''; // Direction
      	$call_du_=''; // Duration
      	$call_rc_=''; // RecordUrl
      	$call_i1_=''; // BaseId
      	$call_i2_=''; // SubId
      	$call_id_=''; // UuId
      	$call_uk_=''; // UserKey
      	$call_di_=''; // Input Digits
      
      	// ---------- GET
      	if (empty($call_ut_)) $call_ut_=$_GET['ut'];
      	if (empty($call_ut_)) $call_ut_=$_GET['dateStart'];
      
      	if (empty($call_st_)) $call_st_=$_GET['st'];
      	if (empty($call_cs_)) $call_cs_=$_GET['cs'];
      
      	if (empty($call_p1_)) $call_p1_=$_GET['p1'];
      	if (empty($call_p1_)) $call_p1_=$_GET['callerNumber'];
      
      	if (empty($call_p2_)) $call_p2_=$_GET['p2'];
      	if (empty($call_ln_)) $call_ln_=$_GET['ln'];
      	if (empty($call_dr_)) $call_dr_=$_GET['dr'];
      	if (empty($call_du_)) $call_du_=$_GET['du'];
      	if (empty($call_rc_)) $call_rc_=$_GET['rc'];
      	if (empty($call_id_)) $call_id_=$_GET['id'];
      	if (empty($call_i1_)) $call_i1_=$_GET['i1'];
      	if (empty($call_i2_)) $call_i2_=$_GET['i2'];
      	if (empty($call_uk_)) $call_uk_=$_GET['uk'];
      	if (empty($call_di_)) $call_di_=$_GET['di'];
      
      	// ---------- POST
      	if (empty($call_ut_)) $call_ut_=$_POST['ut'];
      	if (empty($call_ut_)) $call_ut_=$_POST['dateStart'];
      
      	if (empty($call_st_)) $call_st_=$_POST['st'];
      	if (empty($call_cs_)) $call_cs_=$_POST['cs'];
      
      	if (empty($call_p1_)) $call_p1_=$_POST['p1'];
      	if (empty($call_p1_)) $call_p1_=$_POST['callerNumber'];
      
      	if (empty($call_p2_)) $call_p2_=$_POST['p2'];
      	if (empty($call_ln_)) $call_ln_=$_POST['ln'];
      	if (empty($call_dr_)) $call_dr_=$_POST['dr'];
      	if (empty($call_du_)) $call_du_=$_POST['du'];
      	if (empty($call_rc_)) $call_rc_=$_POST['rc'];
      	if (empty($call_id_)) $call_id_=$_POST['id'];
      	if (empty($call_i1_)) $call_i1_=$_POST['i1'];
      	if (empty($call_i2_)) $call_i2_=$_POST['i2'];
      	if (empty($call_uk_)) $call_uk_=$_POST['uk'];
      	if (empty($call_di_)) $call_di_=$_POST['di'];
      
      	// ---------- JSON
      	$data_=json_decode(file_get_contents('php://input'),TRUE); 
      	if (!empty($data_))
      	{
      		if (empty($call_ut_)) $call_ut_=$data_['time'];
      		if (empty($call_ut_)) $call_ut_=$data_['tm'];
      		if (empty($call_ut_)) $call_ut_=$data_['dateStart'];
      
      		if (empty($call_st_)) $call_st_=$data_['state'];
      		if (empty($call_st_)) $call_st_=$data_['st'];
      
      		if (empty($call_cs_)) $call_cs_=$data_['callstatus'];
      		if (empty($call_cs_)) $call_cs_=$data_['cs'];
      
      		if (empty($call_p1_)) $call_p1_=$data_['from'];
      		if (empty($call_p1_)) $call_p1_=$data_['p1'];
      		if (empty($call_p1_)) $call_p1_=$data_['callerNumber'];
      
      		if (empty($call_p2_)) $call_p2_=$data_['to'];
      		if (empty($call_p2_)) $call_p2_=$data_['p2'];
      
      		if (empty($call_ln_)) $call_ln_=$data_['line'];
      		if (empty($call_ln_)) $call_ln_=$data_['ln'];
      
      		if (empty($call_dr_)) $call_dr_=$data_['direction'];
      		if (empty($call_dr_)) $call_dr_=$data_['dr'];
      
      		if (empty($call_du_)) $call_du_=$data_['duration'];
      		if (empty($call_du_)) $call_du_=$data_['du'];
      
      		if (empty($call_rc_)) $call_rc_=$data_['recordUrl'];
      		if (empty($call_rc_)) $call_rc_=$data_['rc'];
      
      		if (empty($call_id_)) $call_id_=$data_['uuid'];
      		if (empty($call_id_)) $call_id_=$data_['id'];
      
      		if (empty($call_i1_)) $call_i1_=$data_['baseid'];
      		if (empty($call_i1_)) $call_i1_=$data_['i1'];
      
      		if (empty($call_i2_)) $call_i2_=$data_['subid'];
      		if (empty($call_i2_)) $call_i2_=$data_['i2'];
      
      		if (empty($call_uk_)) $call_uk_=$data_['userkey'];
      		if (empty($call_uk_)) $call_uk_=$data_['uk'];
      
      		if (empty($call_di_)) $call_di_=$data_['inputDigits'];
      		if (empty($call_di_)) $call_di_=$data_['di'];
      	}
      
      	if (empty($call_ut_)) $call_ut_=time();
      }
      
      
      
      if (!empty($call_ut_))
      {
      	$text_='';
      
      	if (filesize($file_)>1000000) $f_ = fopen($file_, 'w+');
      	else  $f_ = fopen($file_, 'a');
      
      	if (!empty($f_)) 
      	{
      		$text_.='<CALL>';
      		$text_.="\r\n";					
      
      		if (!empty($call_ut_))
      		{
      			$text_.='<UT>';
      			$text_.=$call_ut_;
      			$text_.='</UT>';
      			$text_.="\r\n";					
      
      			$text_.='<TM>';
      			$text_.=date('Y-m-d G:i:s',$call_ut_);
      			$text_.='</TM>';
      			$text_.="\r\n";					
      		}
      
      		if (!empty($call_st_))
      		{
      			$text_.='<ST>';
      			$text_.=$call_st_;
      			$text_.='</ST>';
      			$text_.="\r\n";					
      		}
      
      		if (!empty($call_cs_))
      		{
      			$text_.='<CS>';
      			$text_.=$call_cs_;
      			$text_.='</CS>';
      			$text_.="\r\n";					
      		}
      
      		if (!empty($call_p1_))
      		{
      			$text_.='<P1>';
      			$text_.=$call_p1_;
      			$text_.='</P1>';
      			$text_.="\r\n";					
      		}
      
      		if (!empty($call_p2_))
      		{
      			$text_.='<P2>';
      			$text_.=$call_p2_;
      			$text_.='</P2>';
      			$text_.="\r\n";					
      		}
      			
      		if (!empty($call_ln_))
      		{
      			$text_.='<LN>';
      			$text_.=$call_ln_;
      			$text_.='</LN>';
      			$text_.="\r\n";					
      		}
      
      		if (!empty($call_du_))
      		{
      			$text_.='<DU>';
      			$text_.=$call_du_;
      			$text_.='</DU>';
      			$text_.="\r\n";					
      		}
      
      		if (!empty($call_rc_))
      		{
      			$text_.='<RC>';
      			$text_.=$call_rc_;
      			$text_.='</RC>';
      			$text_.="\r\n";					
      		}
      
      		if (!empty($call_dr_))
      		{
      			$text_.='<DR>';
      			$text_.=$call_dr_;
      			$text_.='</DR>';
      			$text_.="\r\n";					
      		}
      
      		if (!empty($call_id_))
      		{
      			$text_.='<ID>';
      			$text_.=$call_id_;
      			$text_.='</ID>';
      			$text_.="\r\n";					
      		}
      
      		if (!empty($call_i1_))
      		{
      			$text_.='<I1>';
      			$text_.=$call_i1_;
      			$text_.='</I1>';
      			$text_.="\r\n";					
      		}
      
      		if (!empty($call_i2_))
      		{
      			$text_.='<I2>';
      			$text_.=$call_i2_;
      			$text_.='</I2>';
      			$text_.="\r\n";					
      		}
      
      		if (!empty($call_uk_))
      		{
      			$text_.='<UK>';
      			$text_.=$call_uk_;
      			$text_.='</UK>';
      			$text_.="\r\n";					
      		}
      
      		if (!empty($call_di_))
      		{
      			$text_.='<DI>';
      			$text_.=$call_di_;
      			$text_.='</DI>';
      			$text_.="\r\n";					
      		}
      		$text_.='</CALL>';
      
      		$text_.="\r\n";					
      		$text_.="\r\n";					
      
      		$tr = fwrite($f_,$text_); 
      	}
      	fclose ($f_); 
      }
      
      if ($res_ && $act_=='read' && file_exists($file_))
      {
      	$lines_ = file($file_);
      	foreach ($lines_ as $line_num => $line_) 
      	{
      		echo $line_;
      	}
      	unlink($file_);
      }
      
      
      ?>
      
      
      



  6. Исходящие телефонные звонки:

    • Если Ваши звонки реализуются через локальную программу, пропишите ее имя и путь в конфигураторе "АТС (i)". Например:c:\calls\caller.bat {=phone} {=name} {=user}.

    • Если Ваши звонки реализуются через интернет-скрипт, пропишите его адрес в конфигураторе "АТС (i)". Например: http://mysite?{=phone}&{=name}&{=user}.

    • Программа автоматически заменит макросы в адресной строке
      • {=phone} - на номер телефона,
      • {=name} - на имя вызываемого абонента
      • {=user} - на имя пользователя программы, инициировавшего звонок.
      Порядок параметров произвольный, обязательный - только номер телефона.

    • Если Ваши звонки осуществляются через Skype, оставьте адрес интернет-скрипта в конфигураторе пустым.

Преимущества

Новости

Клиники

❤ Отзывы

Бесплатный звонок: 8-800-77-53-914

Полезные советы

Обмен ссылками

Партнерский сайт adenta.org


Примеры

Copyright©

Порядок приобретения

Модули

Способы оплаты

Информационное сопровождение

Яндекс.Метрика
Стоматологическая компьютерная программа Адента© Профессионал, 2002-2024 Дизайн и верстка - Казачков И.Ю.©
Отправить сообщение