По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:

Session Border Controller (контроллер граничных сессий) - сетевое устройство, которое может обеспечить безопасность VoIP, а так же соединять несовместимые (разнородные) сигнальные протоколы и медиа потоки, поступающие от различных устройств. SBC – устройства используются в корпоративных сетях и сетях провайдеров услуг и, как правило, развертываются на границе сети (точка входа провайдера в корпоративный контур).
В основном, несмотря на способность устройств поддерживать H.323, SCCP и прочие, фокус работы SBC сделан на обеспечении безопасности SIP – протокола, а так же сопряжении различных версий SIP.
Основная идея
SBC защищает от атак сеть телефонии и соответствующие сервера, выполняя роль B2BUA (back-to-back user agent), схожую по типу работы с SIP прокси – сервером. Контроллер терминирует каждую сессию (завершает), а затем заново ее инициирует, выступая в роли агентского сервера UAS (User Agent Server) и агентским клиентом UAC (User Agent Client), работая с каждым из «плеч» вызова по отдельности.
На базе собственных мощностей SBC реализует списки контроля доступа ACL, ограничение DDOS атак, а так же анализ пакетов на предмет искажения информации с целью нанести ущерб. Анализируя SIP, SBC анализирует заголовки и поле полезной нагрузки. Особенно это актуально в SDP – сообщениях, к которым может применяться множество правил модификации.
Помимо сигнальной информации, SBC обрабатывает RTP потоки, тем самым, обеспечивает не только шифрование медиа, но и выполняет функции транскодинга (преобразования потока из одного кодека в другой) в случаях, когда две стороны SIP – коммуникации не могут согласовать параметры передачи данных в сообщениях SDP. Кстати, на SBC обычно реализуют так называемый SIP forking, который позволяет дублировать сессию на третье устройство, например, такое как система записи телефонных разговоров.
В современных версиях SBC, сигнальная информация и потоки изолированы друг от друга (с точки зрения обработки устройством) – это обеспечивает высокие параметры масштабирования.
Давайте рассмотрим на примеры схемы ниже принцип работы SBC:

Давайте для начала разберемся, что же такое Composer. Представленное программное обеспечение является менеджером пакетных зависимостей, разработанный для облегчения загрузки, а также установки различных PHP библиотек для вашего проекта. К примеру, используя менеджер пакетов, вы можете с легкостью добавить различные библиотеки к вашему проекту, разработкой которого вы занимаетесь, а также очень легко выполнять развертывание иных проектов, каковые имеют при себе документ composer.json.
Composer.json является текстовым документов, который содержит библиотеки, каковые использует проект. Кроме того, Composer используется возможно использовать для установки различных фреймворков PHP, а также CMS.
Данный менеджер пакетов представляет собой типичный PHP-скрипт, то есть программный продукт, разработанный на языке PHP.
Главной целью данного программного продукта является предоставление удобного инструмента для веб-разработчиков, с помощью какового он с легкостью может выполнять загрузку, а также установку библиотек в проект, выполнять их обновление, и, при необходимости, деинсталляцию. С помощью менеджера пакетов можно выполнять все перечисленные выше действия с помощью нескольких команд.
Composer при скачивании библиотек выполняет не только установку, но также устанавливает зависимости, от которых они уже могут зависеть. Допустим, вы загрузили некий пакет, который имеет зависимость от нескольких пакетов, и так далее. Данный менеджер пакетов автоматически выполнит установку.
Представленный PHP-скрипт создает в корне проекта специальную папку Vendor, в которую уже и выполняется установку сторонних библиотек. Помимо этого, также создается документ autoload.php с помощью которого происходит интеграция пакетов в проект.
Помимо перечисленных выше документов, при установке сторонних пакетов, также создается дополнительный документ composer.lock. Если же вышеописанный файл composer.json выполняет роль описания и требований версий библиотек, тогда composer.lock содержит в себе сами версии библиотек, каковые установились юзером.
Основной целью документа composer.lock является оставить среду, в каковой был разработан и протестирован проект без каких-либо изменений.
Работать с менеджером пакетов возможно с помощью консоли либо терминала, используя некоторые команды.
Как установить менеджер пакетов на OpenServer (Windows)
OpenServer по умолчанию содержит в себе Composer. Это будет зависеть от версии PHP.
Для того, чтобы работать с данным менеджером пакетов, потребуется его собственная консоль, которую возможно открыть с помощью нажатия ПКМ на раздел Открыть сервер, и обнаружить пункт консольного меню в списке меню.
Чтобы убедиться в том, что Composer включен, достаточно ввести команду Composer, и для вас отобразиться информация о вашей версии.
Если же вы получите уведомление, что ваша версия уже устарела, вы можете обновить ее с помощью специальной команды composer self-update.
Как установить менеджер пакетов на хостинг?
Чтобы установить Composer на хостинг-сервис, просто скачайте эту программу и загрузите ее в корневой каталог проекта, например, по FTP.
Команды на удаленном сервере обычно выполняются через SSH. По умолчанию на виртуальном хостинге этот сетевой протокол отключен. Чтобы включить его, вам нужно найти соответствующий элемент на панели управления, открыть его и нажать на кнопку Включить SSH внутри него.
Если на вашем компьютере установлена операционная система Windows 10, тогда SSH-клиент автоматически будет добавлен в систему. А это может означать, что для использования команд над управлением удаленного сервера, вам не потребуется ничего устанавливать, так как можно использовать Windows PowerShell либо командную строку.

Ищешь бесплатное решение по реализации исходящих звонков из CRM Битрикс24 в связке с Asterisk? Поздравляем, нашел. Можешь закрыть все остальные вкладки и оставить только эту – пошаговое руководство по интеграции Б24 и Астериска в статье :)
Как это работает?
Легко (на этом можно было бы закончить). Мы создаем исходящий вебхук в Битрикс, он дергает php - скрипт на Asterisk каждый раз, когда мы будем нажимать на номер телефона в лиде, сделке, контакте – где угодно. Поехали.
Попробовать Битрикс24
Подготовка
Создадим AMI (Asterisk Manager Interface)– юзера, через которого будем инициировать вызовы. Откроем файл настройки:
vim /etc/asterisk/manager.conf
Обращаем внимание на секцию [general] - параметр enabled должен быть в значении yes:
[general]
enabled = yes // вот этот параметр :)
port = 5038
bindaddr = 0.0.0.0
Проверьте, чтобы в самом конце файла manager.conf были следующие строки (если их нет, добавьте):
#include manager_custom.conf
Проверили. А теперь открываем файл /etc/asterisk/manager_custom.conf (если его нет – создайте и дайте права) и добавляем туда:
[имя]
secret = пароль
deny=0.0.0.0/0.0.0.0
permit=127.0.0.1/255.255.255.0
permit=ip_адрес_Asterisk/маска
read = all,system,call,log,verbose,command,agent,user,config,originate
write = all,system,call,log,verbose,command,agent,user,config,originate
имя - придумайте имя для юзера;
пароль - создайте устойчивый к взломам пароль, с помощью сервисов онлайн генерации, например;
ip_адрес_Asterisk/маска - укажите вашу подсеть. В указанной подсети должен находится IP – адрес, с которого скрипт будет обращаться к AMI. Пример записи - 192.168.1.0/255.255.255.0;
Переходим в Битрикс24 и создаем вебхуки.
Вебхуки
Первый вебхук мы сделаем входящим – по нему наш скрипт будет получать внутренний номер сотрудника по его идентификатору. Переходим в раздел Приложения → Вебхуки. Нажимаем кнопку Добавить вебхук и выбираем Входящий вебхук. Делаем вот что:
Название - любое название, как вам удобно;
Описание - нужный момент, чтобы не запутаться в вебхуках;
Права доступа - отметьте галочкой Пользователи (user);
Нажимаем сохранить. Должно получиться примерно вот так:
Обратите внимание: на скриншоте, красной линией подчеркнут URL параметра Пример URL для вызова REST. Скопируйте его ровно до последней части /profile/. Например, у нас получилось:
https://merionet.bitrix24.ru/rest/2/1a2b3c4d5e6f7g8h
Сохраните этот URL – он нам еще пригодится :) Перед тем, как мы сделаем исходящий вебхук, давайте обсудим будущий URL нашего скрипта. Так как он будет располагаться в веб директории, мы предлагаем вам сгенерировать последовательно 3 директории, в которых будет лежать скрипт. И вот о чем мы: представим, что ваш домен выглядит вот так:
http://ilovemerionet.ru/
Гуд. Давайте последовательно сгенерируем 3 уникальных названия директорий, например:
IpVy7ul85sz1Doi
C49BNGJW3Yf30eo
qBN0NBC56lj07yh
После чего, в директории /var/www/html/ создадим три вложенных папки, чтобы наш файл в конечно итоге размещался в директории:
/var/www/html/IpVy7ul85sz1Doi/C49BNGJW3Yf30eo/qBN0NBC56lj07yh/
Сам файл скрипта, который мы сгенерируем, будет называться index.php, тем самым, вебхук со стороны Битрикс24 будет обращаться по следующему URL:
http://ilovemerionet.ru/IpVy7ul85sz1Doi/C49BNGJW3Yf30eo/qBN0NBC56lj07yh/
Кажется, разобрались :) Теперь создаем исходящий вебхук – прыгаем в раздел Приложения → Вебхуки. Нажимаем кнопку Добавить вебхук и выбираем Исходящий вебхук. Делаем вот что:
Код авторизации - это наш проверочный код, который мы используем в скрипте;
Адрес обработчика - как мы привели пример выше, тут будет http://ilovemerionet.ru/IpVy7ul85sz1Doi/C49BNGJW3Yf30eo/qBN0NBC56lj07yh/ - у вас, само собой, свой URL :);
Название - явное название, чтобы не запутаться. Сделайте Asterisk Calls, например?;
Комментарий - можете оставить комментарий для себя, чтобы было проще разобраться;
Тип события - выбираем Инициация звонка через приложение (ONEXTERNALCALLSTART);
Великолепно. Мы выходим на финишную прямую.
Скрипт для Asterisk
Ловите скрипт, который будет принимать вебхуки от Битрикс24. Комментарии к самым важным строкам, как всегда, присутствуют:
<?php
$check_token = "Код_авторизации"; // это значение будет прилетать нам в вебхуке. А мы будем его сравнивать, чтобы быть уверенными, что это Битрикс;
$user_hook_url = "Часть_входящего_вебхука"; // нужно, для получения внутреннего номера пользователя, которые инициирует звонок;
$ami_login = "ami_логин"; // логин к AMI, который мы создавали ранее;
$ami_password = "пароль"; // пароль к AMI, который мы создавали ранее;
$strhost = "IP_адрес"; // IP - адрес вашего Asterisk;
if (strcmp($_POST['auth']['application_token'], $check_token) === 0) {
function writeToLog($data, $title = '') {
$log = "
------------------------
";
$log .= date("Y.m.d G:i:s") . "
";
$log .= (strlen($title) > 0 ?
$title : 'DEBUG') . "
";
$log .= print_r($data, 1);
$log .= "
------------------------
";
file_put_contents(getcwd() . '/hook.log', $log, FILE_APPEND);
return true; }
writeToLog($_REQUEST, 'incoming');
$UID = $_POST['data']['USER_ID'];
$bitrix_contact_url = "$user_hook_url/user.get.json?ID=$UID";
$btc = curl_init();
curl_setopt ($btc, CURLOPT_URL,$bitrix_contact_url);
curl_setopt ($btc, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($btc, CURLOPT_TIMEOUT, 60);
curl_setopt ($btc, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($btc, CURLOPT_RETURNTRANSFER, 1);
$bitrix_contact = curl_exec ($btc);
curl_close($btc);
$bitrix_contact_o = json_decode($bitrix_contact, true);
$cid = $bitrix_contact_o['result'][0]['UF_PHONE_INNER'];
$strport = "5038";
$timeout = "5";
$num = str_replace("+","",$_POST['data']['PHONE_NUMBER_INTERNATIONAL']);
$callid = $_POST['data']['CALL_ID'];
$c="from-internal";
$p="1";
$errno=0 ;
$errstr=0 ;
$sconn = fsockopen($strhost, $strport, &$errno, &$errstr, $timeout) or die("Connection to $strhost:$strport failed");
if (!$sconn) { echo "$errstr ($errno)
"; }
else {
$sconn1 = fsockopen($strhost, $strport, &$errno, &$errstr, $timeout) or die("Connection to $strhost:$strport failed");
if (!$sconn1) { echo "$errstr ($errno)
"; }
else {
fputs($sconn1, "Action: login
");
fputs($sconn1, "Username: $ami_login
");
fputs($sconn1, "Secret: $ami_password
");
fputs($sconn1, "Events: off
");
usleep(500);
fputs($sconn1, "Action: Setvar
");
fputs($sconn1, "Variable: B24ID
");
fputs($sconn1, "Value: $callid/$cid
");
fputs($sconn1, "Action: Logoff
");
usleep(500);
$wrets1=fgets($sconn1,128);
fclose($sconn1);}
fputs($sconn, "Action: login
");
fputs($sconn, "Username: $ami_login
");
fputs($sconn, "Secret: $ami_password
");
fputs($sconn, "Events: off
");
usleep(500);
fputs($sconn, "Action: Originate
");
fputs($sconn, "Channel: SIP/$cid
");
fputs($sconn, "Callerid: $cid
");
fputs($sconn, "Timeout: 20000
");
fputs($sconn, "Context: $c
");
fputs($sconn, "Exten: $num
");
fputs($sconn, "Priority: $p
");
fputs($sconn, "Async: yes
" );
usleep(500);
$wrets=fgets($sconn,128);
fclose($sconn);
exit;
}} else {
exit;
};
?>
Скачать скрипт интеграции
После загрузки файла, сохраните его с расширением .php
В нем вам нужно поменять 5 переменных:
$check_token - код авторизации, который вы получили на этапе создания исходящего вебхука;
$user_hook_url - та часть входящего вебхука, которая подчеркнута на скриншоте до слов /profile/;
$ami_login - логин в AMI, создавали ранее;
$ami_password - пароль в AMI;
$strhost - IP - адрес вашего Asterisk;
Чтобы скрипт заработал, нужно, как мы говорили ранее, загрузить его в директорию /var/www/html/IpVy7ul85sz1Doi/C49BNGJW3Yf30eo/qBN0NBC56lj07yh/ (после генерации директорий у вас будет свой путь!) и дать следующие команды:
dos2unix /var/www/html/IpVy7ul85sz1Doi/C49BNGJW3Yf30eo/qBN0NBC56lj07yh/index.php
chown asterisk:asterisk /var/www/html/IpVy7ul85sz1Doi/C49BNGJW3Yf30eo/qBN0NBC56lj07yh/index.php
chmod 775 /var/www/html/IpVy7ul85sz1Doi/C49BNGJW3Yf30eo/qBN0NBC56lj07yh/index.php
Кстати, профит этого скрипта в том, что он ведет логирование в файле hook.log, который будет располагаться в той же директории. Если кто – то из ваших менеджеров скажет, что не смог позвонить клиенту – это будет легко проверить :)
Почти готово. Остался только один штрих. Снова открываем CRM Битрикс24, переходим в сегмент Телефония → Настройки и в параметре Настройка номеров по-умолчанию выбираем созданный нами вебхук (у нас он называется Приложения: Asterisk Calls:
А вот теперь готово. Звоним
Звонит :) Но! Не закрывает карточку и не добавляет отметку об исходящем звонке в сущность CRM (запись разговора). Внимательные пользователи обратят внимание – в AMI сегменте скрипта, который обсуждали ранее, мы кинули команду Setvar (присвоение переменной) к B24ID = $callid. Тем самым, на всем протяжении звонка у нас будет идентификатор этой телефонной транзакции.
Фактически, чтобы получить отметку о звонке, запись разговора и прочее, по факту окончания разговора нужно методом telephony.externalcall.finish кинуть массив данных, где будет отметка об идентификаторе вызова (которую передаем через диалплан), телефон инициатора вызова, длительность и ссылка на запись разговора.
Если данная статья вызовет интерес, мы покажем, как это сделать. Удачи с настройкой :)