Денис Пестрецов
25.06.2019
1074

Восстановление работоспособности CID Prefix URL в модуле CID Superfecta

В этой статье рассмотрим правки исходного кода модуля CID Superfecta, а именно восстановление работоспособности поля CID Prefix URL. Вообще говоря, функция CID Prefix URL должна работать, что называется, «из коробки». Однако выясняется, что это не всегда так. Коротко о CID Superfecta. Если Вам уже известен принцип работы CID Superfecta, то смело можете переходить к следующему […]

В этой статье рассмотрим правки исходного кода модуля CID Superfecta, а именно восстановление работоспособности поля CID Prefix URL. Вообще говоря, функция CID Prefix URL должна работать, что называется, «из коробки». Однако выясняется, что это не всегда так.

Данные правки актуальны для модуля CID Superfecta версии 13.0.4.1 и FreePBX версии 13.

Коротко о CID Superfecta.

Общий вид модуля CID Superfecta

Если Вам уже известен принцип работы CID Superfecta, то смело можете переходить к следующему разделу — вряд ли Вы узнаете здесь что-то новое. Модуль CID Superfecta предназначен для подмены значения Caller ID (то есть имени звонящего), на заранее определённое. То есть при поступлении звонка, автоматически вызывается модуль CID Superfecta, который проверяет наличие номера звонящего по списку включённых источников. Если данный номер там имеется, то вместо «реального» Caller ID, подставляется найденный Caller ID источника. Подробности о функциях данного модуля можно найти в статье: Обзор, установка и настройка модуля CID Superfecta во FreePBX 13.

В поле CID Prefix URL указывается URL внешнего источника, на котором следует искать Caller ID.

Перейдём к рассмотрению того, как именно должно быть заполнено данное поле и как вернуть его работоспособность.

Принцип заполнения поля CID Prefix URL

Для правильной работы данной функции необходимо указывать URL в следующем формате: https://IP_адрес_вашего_сервера/Путь_к_скрипту/superfecta.php?phone_number=[thenumber].

В данном примере, в качестве [thenumber] будет подставляться входящий 10-тизначный номер телефона. Таким образом, в скрипт передаётся в качестве параметра номер телефона.

Функция CID Prefix URL настроена таким образом, что будет перехватывать весь вывод, который будет в superfecta.php. Такой вывод и будет считаться необходимым к постановке Caller ID. Иными словами, в скрипте достаточно будет сделать:

echo “Test_Superfecta”;

для того чтобы в качестве Caller ID подставилось Test_Superfecta. Данный скрипт мы рассмотрим позднее в этой статье.

Пример заполнения поля CID Prefix URL

Перейдём к правкам скриптов и паралелльно рассмотрим, что же не работает в текущем функционале.

Правки скриптов

Перед началом тестирования необходимо создать файл, к которому будем обращаться из поля CID Prefix URL. Я воспользуюсь файлом, указанным на рис. 2, то есть файлом superfecta.php. Создать его необходимо на сервере, с которого будем получать информацию о CallerID.

Выведем в качестве CallerID, используя наш скрипт фразу “abra-kadabra”. Для этого в созданном файле superfecta.php я пропишу следующий код:

<?php
echo “abra-kadabra”;
?>

На этом файл сохраняем закрываем. Также не забываем установить в качестве владельца asterisk (чтобы модуль CID Superfecta мог без проблем получить к нему доступ). Делается это командой:

chown asterisk:asterisk superfecta.php

Теперь, когда файл создан, вернёмся к веб-интерфейсу модуля.

Для удобства дебага в модуле CID Superfecta имеется собственный встроенный функционал тестового запуска схемы. Находится он в разделе редактирования схемы.
Тестовый запуск схемы

Для того, чтобы вывод ни с чем не конфликтовал при дебаге, рекомендуется на этапе текущей разработки отключить все использующиеся источники данных CallerID. На основной странице схемы они находятся в блоке Data Source.

Итак, тестовый запуск провели, но, как видим, ничего не произошло. То есть “abra-kadabra” нигде не фигурирует. Переходим к правкам исходного кода.

Открываем для редактирования файл Superfecta.class.php.

В нём находим функцию execute(…).

В данной функции находим строку:

if ((isset($scheme_param['Prefix_URL'])) && (trim($scheme_param['Prefix_URL']) != '')) {

В данном условии разработчиками допущена ошибка. Дело в том, что массива $scheme_param не существует в коде, поэтому данное условие никогда не выполнится. Вместо этого необходимо было использовать другой массив: $options. Строку, описанную выше можно закомментировать, а после неё вставить исправленное условие:

if ((isset($options['scheme_settings']['Prefix_URL'])) && (trim($options['scheme_settings']['Prefix_URL'])) != '') {

Сохраняем файл, возвращаемся в web-интерфейс, запускаем тест и смотрим, что получилось:

Проверяем промежуточные значения

Если вывод при тестовом запуске сменился на тот, что указан на скриншоте, то это хорошо. Значит мы на верном пути и скрипт начал получать значение поля CID Prefix URL. Теперь размерёмся что же выдаёт нам тестовый запуск. Во-первых, это предупреждение об отсутствии сертификата (его отключим впоследствии). А также ошибка следующего вида: Cannot access protected property superfecta_single::$prefix», «file» : «\/var\/www\/html\/admin\/modules\/superfecta\/Superfecta.class.php», «line»:170. Это означает, что функция  не смогла получить доступ к защищённому свойству класса $superfecta->prefix.

Для исправления данной ошибки открываем файл …/includes/superfecta_base.php. В нём описан класс superfecta_base, в котором и описано данное свойство.

Расширим область видимости свойства $prefix. Для этого строку:

protected $prefix = '';

изменим на следующую:

public $prefix = '';

Вновь переходим в веб-интерфейс и запускаем тест. Если видим, что ошибка сменилась на ту, что указана в скриншоте – значит мы на верном пути.

Продолжение исправления ошибок

Следующая ошибка которая появилась означает, что происходит обращение к необъявленной функции mctime_float. Всё дело в том, что была допущена ошибка при вызове метода класса. Исправим её. Для этого открываем файл Superfecta.class.php. Находим уже знакомую функцию execute(…). В ней находим строку:

$this->out(sprintf(_("Prefix Url result took %s seconds."),number_format((mctime_float() - $start_time), 4)));

И заменяем её на

$this->out(sprintf(_("Prefix Url result took %s seconds."),number_format(($superfecta->mctime_float() - $start_time), 4)));

Тем самым определили, что функция mctime_float, на самом деле является методом класса superfcta_base.

Сохраняем, запускаем проверку:

Проверка исправлений

Если всё выполнено верно, то ошибок в коде больше не будет обнаружено. Останется последняя – ошибка сертификата.

Для отключенияпроверки сертификата открываем в режиме редактирования файл …/includes/superfecta_base.php и находим в нём функцию get_url_contents. Она отвечает за отправку curl-запроса с параметрами на URL, в поле CID Prefix URL.

Находим строку:

$ret = trim(curl_exec($crl)); 

И перед ней вставляем опцию отключения проверки сертификата:

curl_setopt($crl, CURLOPT_SSL_VERIFYPEER, FALSE);

Сохраняем, проверяем:

Конечный результат

Если всё было выполнено верно и по инструкции – увидим волшебное «abra-kadabra» в результате нашего теста.Соответственно, подключение к URL было выполнено успешно. Теперь можно переходить к написанию «полезного» скрипта, вместо нашего тестового superfecta.php.

На этом восстановление работоспособности CID Prefix URL в модуле CID Superfecta завершено.

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Першин Артём, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

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

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.