Динамические конференции на Asterisk 16 + FreePBX 14
В порядке рабочей необходимости поставилась задача по реализации динамических конференций на FreePBX. Из функционала должна быть возможность перевода активного разговора в конференцию, возможность приглашать новых участников в созданную динамическую конференцию находясь в ней, а так же возможность самостоятельному подключения к активной динамической конференции.
В интернете есть несколько примеров реализации подобного рода задачи, но я решил реализовать по своему и так как мне нужно. Итак все ниже описанные действия производились на Asterisk 16 + FreePBX 14 + phpAGI.
JUQwJUEyJUQwJUI1JUQxJTg1JUQwJUJEJUQwJUI4JUQxJTg3JUQwJUI1JUQxJTgxJUQwJUJBJUQwJUJFJUQwJUI1JTIwJUQwJUI3JUQwJUIwJUQwJUI0JUQwJUIwJUQwJUJEJUQwJUI4JUQwJUI1JTNB
- В активном разговоре нажать
*7
— создание и перевод участников разговора в конференцию. - В конференции нажать
*7
— после гудка набрать номер кого хотим пригласить в конференцию и нажимаем#
. - Набрать внутренний номер с префиксом
*7
(прим.*71100
) — если конференция с набранным номером (прим.1100
) существует, то будет присоединение к ней, в противном случае будет создана новая конференция.
Создаем скрипт /var/lib/asterisk/agi-bin/conference.php
со следующим содержанием.
JTIzISUyRnVzciUyRmJpbiUyRnBocCUyMC1x
<?php require('phpagi.php');
// ------------------------------------------------//
// Dymanic Conf module by Jakonda© 2020 //
// web - https://jakondo.ru //
JTJGJTJGJTIwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJTJGJTJG
JTJGJTJGJTIwJUQwJTlGJUQwJUJFJUQwJUI0JUQwJUJBJUQwJUJCJUQxJThFJUQxJTg3JUQwJUI1JUQwJUJEJUQwJUI4JUQwJUI1JTIwcGhwQUdJJTIwJTJGJTIwQUdJX0FzdGVyaXNrTWFuYWdlcg==
$agi = new AGI();
$asm = new AGI_AsteriskManager();
JTI0YXNtLSUzRWNvbm5lY3QoKSUzQg==
debug(".::: Starting scrypt (/var/lib/asterisk/agi-bin/cenference.php) :::.");
JTI0YWN0aW9uJTIwJTNEJTIwJTI0YXJndiU1QjElNUQlM0I=
JTI0Y29uZm51bSUyMCUzRCUyMCUyNGFyZ3YlNUIyJTVEJTNC
switch ($action) {
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY2FzZSUyMCUyMk5FVyUyMiUzQQ==
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbmV3Y29uZigpJTNC
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYnJlYWslM0I=
case "ADD":
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaW52aXRlY29uZigpJTNC
break;
case "MANUAL":
manualconf();
break;
default:
}
JTJGJTJGJTIwJUQwJUE0JUQxJTgzJUQwJUJEJUQwJUJBJUQxJTg2JUQwJUI4JUQxJThGJTIwJUQxJTgxJUQwJUJFJUQwJUI3JUQwJUI0JUQwJUIwJUQwJUJEJUQwJUI4JUQxJThGJTIwJUQwJUI0JUQwJUI4JUQwJUJEJUQwJUIwJUQwJUJDJUQwJUI4JUQxJTg3JUQwJUI1JUQxJTgxJUQwJUJBJUQwJUJFJUQwJUI5JTIwJUQwJUJBJUQwJUJFJUQwJUJEJUQxJTg0JUQwJUI1JUQxJTgwJUQwJUI1JUQwJUJEJUQxJTg2JUQwJUI4JUQwJUI4JTIwJUQwJUI4JUQwJUI3JTIwJUQwJUIwJUQwJUJBJUQxJTgyJUQwJUI4JUQwJUIyJUQwJUJEJUQwJUJFJUQwJUIzJUQwJUJFJTIwJUQxJTgwJUQwJUIwJUQwJUI3JUQwJUIzJUQwJUJFJUQwJUIyJUQwJUJFJUQxJTgwJUQwJUIw
function newconf()
{
global $agi,$asm,$debug;
$CL = $agi->get_variable('CHANNEL');
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTI0QlAlMjAlM0QlMjAlMjRhZ2ktJTNFZ2V0X3ZhcmlhYmxlKCdCUklER0VQRUVSJyklM0I=
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTI0Q04lMjAlM0QlMjAlMjRhZ2ktJTNFZ2V0X3ZhcmlhYmxlKCdEWU5BTUlDX1dIT19BQ1RJVkFURUQnKSUzQg==
$CL = $CL['data'];
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTI0QlAlMjAlM0QlMjAlMjRCUCU1QidkYXRhJyU1RCUzQg==
$CN = $CN['data'];
// Получение информации кто активировал DTMF код
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTI0Q04lMjAlM0QlMjBzdWJzdHIoJTI0Q04lMkMlMjBzdHJwb3MoJTI0Q04lMkMlMjAlMjIlMkYlMjIpJTIwJTJCJTIwMSUyQyUyMHN0cnBvcyglMjRDTiUyQyUyMCUyMi0lMjIpJTIwLSUyMDQpJTNC
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTI0YXNtLSUzRXNlbmRfcmVxdWVzdCgnU2V0dmFyJyUyQ2FycmF5KCdDaGFubmVsJyUzRCUzRSUyMiUyNENMJTIyJTJDJ1ZhcmlhYmxlJyUzRCUzRSUyMkNPTkZOVU0lMjIlMkMnVmFsdWUnJTNEJTNFJTIyJTI0Q04lMjIpKSUzQg==
$asm->send_request('Setvar',array('Channel'=>"$BP",'Variable'=>"CONFNUM",'Value'=>"$CN"));
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZGVidWcoJTIyTnVtYmVyJTIwJTVCJTI0Q04lNUQlMjBhY3RpdmF0ZWQlMjBEVE1GJTIyKSUzQg==
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZGVidWcoJTIyU291cmNlJTIwY2hhbm5lbCUyMCU1QiUyNENMJTVEJTIyKSUzQg==
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZGVidWcoJTIyQnJpZGdlZCUyMGNoYW5uZWwlMjAlNUIlMjRCUCU1RCUyMiklM0I=
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTJGJTJGJTIwJUQwJTlGJUQxJTgwJUQwJUJFJUQwJUIyJUQwJUI1JUQxJTgwJUQxJThGJUQwJUI1JUQwJUJDJTIwJUQwJUI1JUQxJTgxJUQwJUJCJUQwJUI4JTIwJUQwJUJEJUQwJUJFJUQwJUJDJUQwJUI1JUQxJTgwJTIwJUQwJUIyJUQwJUJEJUQxJTgzJUQxJTgyJUQxJTgwJUQwJUI1JUQwJUJEJUQwJUJEJUQwJUI4JUQwJUI5JTJDJTIwJUQxJTgyJUQwJUJFJTIwJUQxJTgwJUQwJUIwJUQwJUI3JUQxJTgwJUQwJUI1JUQxJTg4JUQwJUIwJUQwJUI1JUQwJUJDJTIwJUQxJTgxJUQwJUJFJUQwJUI3JUQwJUI0JUQwJUIwJUQxJTgyJUQxJThDJTIwJUQwJUI0JUQwJUI4JUQwJUJEJUQwJUIwJUQwJUJDJUQwJUI4JUQxJTg3JUQwJUI1JUQxJTgxJUQwJUJBJUQxJTgzJUQxJThF
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTJGJTJGJTIwJUQwJUJBJUQwJUJFJUQwJUJEJUQxJTg0JUQwJUI1JUQxJTgwJUQwJUI1JUQwJUJEJUQxJTg2JUQwJUI4JUQxJThFJTIwJUQwJUI4JUQwJUI3JTIwJUQxJTgyJUQwJUI1JUQwJUJBJUQxJTgzJUQxJTg5JUQwJUI1JUQwJUIzJUQwJUJFJTIwJUQxJTgwJUQwJUIwJUQwJUI3JUQwJUIzJUQwJUJFJUQwJUIyJUQwJUJFJUQxJTgwJUQwJUIw
if (strlen($CN) == 4) {
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZGVidWcoJTIyQWxsb3clMjIpJTNC
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTIwZWxzZSUyMCU3Qg==
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZGVidWcoJTIyRGVueSUyMiklM0I=
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYnJlYWslM0I=
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdE
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTJGJTJGJTIwJUQwJTlGJUQwJUI1JUQxJTgwJUQwJUI1JUQwJUIxJUQxJTgwJUQwJUIwJUQxJTgxJUQxJThCJUQwJUIyJUQwJUIwJUQwJUI1JUQwJUJDJTIwJUQxJTgxJUQwJUJFJUQwJUIxJUQwJUI1JUQxJTgxJUQwJUI1JUQwJUI0JUQwJUJEJUQwJUI4JUQwJUJBJUQwJUJFJUQwJUIyJTIwJUQwJUIyJTIwJUQwJUJBJUQwJUJFJUQwJUJEJUQxJTg0JUQwJUI1JUQxJTgwJUQwJUI1JUQwJUJEJUQxJTg2JUQwJUI4JUQxJThF
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTI0YXNtLSUzRXNlbmRfcmVxdWVzdCgnUmVkaXJlY3QnJTJDYXJyYXkoJ0NoYW5uZWwnJTNEJTNFJTIyJTI0Q0wlMjIlMkMnRXh0cmFDaGFubmVsJyUzRCUzRSUyMiUyNEJQJTIyJTJDJ0NvbnRleHQnJTNEJTNFJTIyZHluYW1pYy1jb25mZXJlbmNlJTIyJTJDJ0V4dGVuJyUzRCUzRSUyMkNPTkYlMjIlMkMnUHJpb3JpdHknJTNEJTNFJTIyMSUyMikpJTNC
JTdE
// Функция добавления новых участник в динамически созданную активную конференцию
ZnVuY3Rpb24lMjBpbnZpdGVjb25mKCk=
JTdC
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZ2xvYmFsJTIwJTI0YWdpJTJDJTI0YXNtJTJDJTI0Y29uZm51bSUyQyUyNGRlYnVnJTNC
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTJGJTJGJTIwJUQwJTlFJUQwJUI2JUQwJUI4JUQwJUI0JUQwJUIwJUQwJUI1JUQwJUJDJTIwJUQwJUIyJUQwJUIyJUQwJUJFJUQwJUI0JUQwJUIwJTIwJUQwJUJEJUQwJUJFJUQwJUJDJUQwJUI1JUQxJTgwJUQwJUIwJTIwJUQwJUI0JUQwJUJCJUQxJThGJTIwJUQwJUI0JUQwJUJFJUQwJUIxJUQwJUIwJUQwJUIyJUQwJUJCJUQwJUI1JUQwJUJEJUQwJUI4JUQxJThGJTIwJUQwJUIyJTIwJUQwJUJBJUQwJUJFJUQwJUJEJUQxJTg0JUQwJUI1JUQxJTgwJUQwJUI1JUQwJUJEJUQxJTg2JUQwJUI4JUQxJThF
$result = $agi->get_data('beep', 4000, 11);
$res = $result['result'];
debug("Invite [$res] to dynamic conference [$confnum]");
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTJGJTJGJTIwJUQwJTlGJUQxJTgwJUQwJUI4JUQwJUIzJUQwJUJCJUQwJUIwJUQxJTg4JUQwJUIwJUQwJUI1JUQwJUJDJTIwJUQwJUJEJUQwJUIwJUQwJUIxJUQxJTgwJUQwJUIwJUQwJUJEJUQwJUJEJUQxJThCJUQwJUI5JTIwJUQwJUJEJUQwJUJFJUQwJUJDJUQwJUI1JUQxJTgwJTIwJUQwJUIyJTIwJUQwJUJBJUQwJUJFJUQwJUJEJUQxJTg0JUQwJUI1JUQxJTgwJUQwJUI1JUQwJUJEJUQxJTg2JUQwJUI4JUQxJThF
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjAoc3RybGVuKCUyNHJlcyklMjAlM0QlM0QlMjA0KSUyMCU3Qg==
$asm->send_request('Originate',array('Channel'=>"SIP/$res",'Context'=>"dynamic-conference",'Exten'=>"CONF",'Priority'=>"1",'CallerID'=>"PBX Conference $confbum <$confnum>",'Variable'=>"CONFNUM=$confnum"));
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTIwZWxzZSUyMCU3Qg==
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTI0YXNtLSUzRXNlbmRfcmVxdWVzdCgnT3JpZ2luYXRlJyUyQ2FycmF5KCdDaGFubmVsJyUzRCUzRSUyMkxvY2FsJTJGJTI0cmVzJTQwZnJvbS1pbnRlcm5hbC1hZGRpdGlvbmFsJTIyJTJDJ0NvbnRleHQnJTNEJTNFJTIyZHluYW1pYy1jb25mZXJlbmNlJTIyJTJDJ0V4dGVuJyUzRCUzRSUyMkNPTkYlMjIlMkMnUHJpb3JpdHknJTNEJTNFJTIyMSUyMiUyQydWYXJpYWJsZSclM0QlM0UlMjJDT05GTlVNJTNEJTI0Y29uZm51bSUyMikpJTNC
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdE
JTdE
JTJGJTJGJTIwJUQwJUE0JUQxJTgzJUQwJUJEJUQwJUJBJUQxJTg2JUQwJUI4JUQxJThGJTIwJUQxJTgwJUQxJTgzJUQxJTg3JUQwJUJEJUQwJUJFJUQwJUIzJUQwJUJFJTIwJUQxJTgzJUQwJUJGJUQxJTgwJUQwJUIwJUQwJUIyJUQwJUJCJUQwJUI1JUQwJUJEJUQwJUI4JUQxJThGLiUyMCVEMCVBMSVEMCVCRSVEMCVCNyVEMCVCNCVEMCVCMCVEMCVCRCVEMCVCOCVEMCVCNSUyMCVEMCVCNCVEMCVCOCVEMCVCRCVEMCVCMCVEMCVCQyVEMCVCOCVEMSU4NyVEMCVCNSVEMSU4MSVEMCVCQSVEMCVCRSVEMCVCOSUyMCVEMCVCQSVEMCVCRSVEMCVCRCVEMSU4NCVEMCVCNSVEMSU4MCVEMCVCNSVEMCVCRCVEMSU4NiVEMCVCOCVEMCVCOCUyMCVEMCVCOCUyMCVEMCVCRiVEMCVCRSVEMCVCNCVEMCVCQSVEMCVCQiVEMSU4RSVEMSU4NyVEMCVCNSVEMCVCRCVEMCVCOCVEMSU4RiUyMCVEMCVCQSUyMCVEMCVCMCVEMCVCQSVEMSU4MiVEMCVCOCVEMCVCMiVEMCVCRCVEMCVCRSVEMCVCOSUyMCVEMCVCNCVEMCVCOCVEMCVCRCVEMCVCMCVEMCVCQyVEMCVCOCVEMSU4NyVEMCVCNSVEMSU4MSVEMCVCQSVEMCVCRSVEMCVCOSUyMCVEMCVCQSVEMCVCRSVEMCVCRCVEMSU4NCVEMCVCNSVEMSU4MCVEMCVCNSVEMCVCRCVEMSU4NiVEMCVCOCVEMCVCOA==
ZnVuY3Rpb24lMjBtYW51YWxjb25mKCk=
{
global $agi,$asm,$debug;
$CL = $agi->get_variable('CHANNEL');
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTI0RVglMjAlM0QlMjAlMjRhZ2ktJTNFZ2V0X3ZhcmlhYmxlKCdFWFRFTicpJTNC
$CL = $CL['data'];
$EX = substr($EX['data'],2);
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZGVidWcoJTIyJTI0Q0wlMjIpJTNC
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZGVidWcoJTIyJTI0RVglMjIpJTNC
$asm->send_request('Setvar',array('Channel'=>"$CL",'Variable'=>"CONFNUM",'Value'=>"$EX"));
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTI0YXNtLSUzRXNlbmRfcmVxdWVzdCgnUmVkaXJlY3QnJTJDYXJyYXkoJ0NoYW5uZWwnJTNEJTNFJTIyJTI0Q0wlMjIlMkMnQ29udGV4dCclM0QlM0UlMjJkeW5hbWljLWNvbmZlcmVuY2UlMjIlMkMnRXh0ZW4nJTNEJTNFJTIyQ09ORiUyMiUyQydQcmlvcml0eSclM0QlM0UlMjIxJTIyKSklM0I=
JTdE
JTJGJTJGJTIwJUQwJUE0JUQxJTgzJUQwJUJEJUQwJUJBJUQxJTg2JUQwJUI4JUQxJThGJTIwJUQwJUIyJUQxJThCJUQwJUIyJUQwJUJFJUQwJUI0JUQwJUIwJTIwREVCVUclMjAlRDAlQjglRDAlQkQlRDElODQlRDAlQkUlRDElODAlRDAlQkMlRDAlQjAlRDElODYlRDAlQjglRDAlQjglMjAlRDAlQjIlMjAlRDAlQkElRDAlQkUlRDAlQkQlRDElODElRDAlQkUlRDAlQkIlRDElOEM=
JTJGJTJGJTIwLS0lMjAlRDAlQkYlRDAlQkUlRDAlQkIlRDAlQjUlRDAlQjclRDAlQkQlRDAlQkUlMjAlRDAlQjQlRDAlQkIlRDElOEYlMjAlRDAlQkUlRDElODIlRDAlQkIlRDAlQjAlRDAlQjQlRDAlQkElRDAlQjglMjAlRDElODAlRDAlQjAlRDAlQjElRDAlQkUlRDElODIlRDElOEIlMjAlRDElODElRDAlQkElRDElODAlRDAlQjglRDAlQkYlRDElODIlRDAlQjA=
function debug($string) {
global $agi;
JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTI0YWdpLSUzRXZlcmJvc2UoJTIyJTI0c3RyaW5nJTIyKSUzQg==
}
JTNGJTNF
Выдаем права на чтение и запуск для asterisk.
Y2hvd24lMjBhc3RlcmlzayUzQWFzdGVyaXNrJTIwJTJGdmFyJTJGbGliJTJGYXN0ZXJpc2slMkZhZ2ktYmluJTJGY29uZmVyZW5jZS5waHA=
Y2htb2QlMjA3NTUlMjAlMkZ2YXIlMkZsaWIlMkZhc3RlcmlzayUyRmFnaS1iaW4lMkZjb25mZXJlbmNlLnBocA==
JUQwJTlGJUQxJTgwJUQwJUJFJUQwJUJGJUQwJUI4JUQxJTgxJUQxJThCJUQwJUIyJUQwJUIwJUQwJUI1JUQwJUJDJTIwJUQwJUI0JUQwJUI4JUQwJUJEJUQwJUIwJUQwJUJDJUQwJUI4JUQxJTg3JUQwJUI1JUQxJTgxJUQwJUJBJUQxJTgzJUQxJThFJTIwJUQxJTg0JUQxJTgzJUQwJUJEJUQwJUJBJUQxJTg2JUQwJUI4JUQxJThFJTIwJUQwJUI3JUQwJUIwJUQwJUJGJUQxJTgzJUQxJTgxJUQwJUJBJUQwJUIwJTIwJUQxJTgxJUQwJUJBJUQxJTgwJUQwJUI4JUQwJUJGJUQxJTgyJUQwJUIwJTJDJTIwJUQwJUJGJUQwJUJFJTIwJUQwJUJEJUQwJUIwJUQwJUI2JUQwJUIwJUQxJTgyJUQwJUI4JUQxJThFJTIwJUQwJUJBJUQwJUJFJUQwJUJDJUQwJUIxJUQwJUI4JUQwJUJEJUQwJUIwJUQxJTg2JUQwJUI4JUQwJUI4JTIwKjclMjAlRDAlQjglRDAlQjclMjAlRDAlQjAlRDAlQkElRDElODIlRDAlQjglRDAlQjIlRDAlQkQlRDAlQkUlRDAlQjMlRDAlQkUlMjAlRDElODAlRDAlQjAlRDAlQjclRDAlQjMlRDAlQkUlRDAlQjIlRDAlQkUlRDElODAlRDAlQjAuJTIwJUQwJTkyJTIwJUQxJTg0JUQwJUIwJUQwJUI5JUQwJUJCJTIwJTJGZXRjJTJGYXN0ZXJpc2slMkZmZWF0dXJlc19hcHBsaWNhdGlvbm1hcF9jdXN0b20uY29uZiVDMiVBMCVEMCVCNCVEMCVCRSVEMCVCMSVEMCVCMCVEMCVCMiVEMCVCQiVEMSU4RiVEMCVCNSVEMCVCQyUzQQ==
conference=>*7,self,AGI(/var/lib/asterisk/agi-bin/conference.php,NEW)
JUQwJTlFJUQwJUIxJUQxJThBJUQxJThGJUQwJUIyJUQwJUJCJUQxJThGJUQwJUI1JUQwJUJDJTIwJUQwJUJGJUQxJTgwJUQwJUJFJUQwJUJGJUQwJUI4JUQxJTgxJUQwJUIwJUQwJUJEJUQwJUJEJUQxJTgzJUQxJThFJTIwJUQwJUI0JUQwJUI4JUQwJUJEJUQwJUIwJUQwJUJDJUQwJUI4JUQxJTg3JUQwJUI1JUQxJTgxJUQwJUJBJUQxJTgzJUQxJThFJTIwJUQxJTg0JUQxJTgzJUQwJUJEJUQwJUJBJUQxJTg2JUQwJUI4JUQxJThFJTIwJUQwJUIyJTIwJUQwJUIzJUQwJUJCJUQwJUJFJUQwJUIxJUQwJUIwJUQwJUJCJUQxJThDJUQwJUJEJUQxJThCJUQwJUI1JTIwJUQwJUJGJUQwJUI1JUQxJTgwJUQwJUI1JUQwJUJDJUQwJUI1JUQwJUJEJUQwJUJEJUQxJThCJUQwJUI1LiUyMCVEMCU5MiUyMCVEMSU4NCVEMCVCMCVEMCVCOSVEMCVCQiUyMCUyRmV0YyUyRmFzdGVyaXNrJTJGZ2xvYmFsc19jdXN0b20uY29uZiVDMiVBMCVEMCVCNCVEMCVCRSVEMCVCMSVEMCVCMCVEMCVCMiVEMCVCQiVEMSU4RiVEMCVCNSVEMCVCQy4=
DYNAMIC_FEATURES=conference
Модифицируем параметры конференции, добавим возможность приглашать новых участников, по нажатию комбинации *7
в активной конференции. В файл /etc/asterisk/confbridge_custom.conf
добавляем.
JTVCZHluYW1pY191c2VyJTVE
dHlwZSUyMCUzRCUyMHVzZXI=
talk_detection_events=yes
dsp_drop_silence=yes
YW5ub3VuY2Vfb25seV91c2VyJTNEbm8=
JTVCZHluYW1pY19tZW51JTVE
dHlwZSUyMCUzRCUyMG1lbnUlMjAqNyUzRGRpYWxwbGFuX2V4ZWMoZHluYW1pYy1jb25mZXJlbmNlJTJDSU5WSVRFJTJDMSk=
JUQwJTlFJUQwJUJGJUQwJUI4JUQxJTgxJUQxJThCJUQwJUIyJUQwJUIwJUQwJUI1JUQwJUJDJTIwJUQxJTgwJUQwJUIwJUQwJUIxJUQwJUJFJUQxJTgyJUQxJTgzJTIwJUQwJUI0JUQwJUI4JUQwJUJEJUQwJUIwJUQwJUJDJUQwJUI4JUQxJTg3JUQwJUI1JUQxJTgxJUQwJUJBJUQwJUI4JUQxJTg1JTIwJUQwJUJBJUQwJUJFJUQwJUJEJUQxJTg0JUQwJUI1JUQxJTgwJUQwJUI1JUQwJUJEJUQxJTg2JUQwJUI4JUQwJUI5JTIwJUQwJUIyJTIwJUQwJUI0JUQwJUI4JUQwJUIwJUQwJUJCJUQwJUJGJUQwJUJCJUQwJUIwJUQwJUJEJUQwJUI1LiUyMCVEMCU5MiUyMCVEMSU4NCVEMCVCMCVEMCVCOSVEMCVCQiUyMCUyRmV0YyUyRmFzdGVyaXNrJTJGZXh0ZW5zaW9uc19jdXN0b20uY29uZiVDMiVBMCVEMCVCNCVEMCVCRSVEMCVCMSVEMCVCMCVEMCVCMiVEMCVCQiVEMSU4RiVEMCVCNSVEMCVCQy4=
JTVCZnJvbS1pbnRlcm5hbC1jdXN0b20lNUQ=
include => dynamic-conference
JTVCZHluYW1pYy1jb25mZXJlbmNlJTVE
; -----------------------------------------------------------------------------------------------------------------
; Динамические конференции. При активном разговоре, сотрудник может перевести разговор в конференцию, которая будет
JTNCJTIwJUQxJTgxJUQwJUJFJUQwJUI3JUQwJUI0JUQwJUIwJUQwJUJEJUQwJUIwJTIwJUQwJUI0JUQwJUI4JUQwJUJEJUQwJUIwJUQwJUJDJUQwJUI4JUQxJTg3JUQwJUI1JUQxJTgxJUQwJUJBJUQwJUI4KCVEMCVCRCVEMCVCRSVEMCVCQyVEMCVCNSVEMSU4MCUyMCVEMCVCQSVEMCVCRSVEMCVCRCVEMSU4NCVEMCVCNSVEMSU4MCVEMCVCNSVEMCVCRCVEMSU4NiVEMCVCOCVEMCVCOCUyMCVEMCVCMSVEMSU4MyVEMCVCNCVEMCVCNSVEMSU4MiUyMCVEMCVCRiVEMSU4MCVEMCVCOCVEMSU4MSVEMCVCMiVEMCVCRSVEMCVCNSVEMCVCRCUyMCVEMSU4MiVEMCVCMCVEMCVCQSVEMCVCRSVEMCVCOSUyMCVEMCVCNiVEMCVCNSUyMCVEMCVCQSVEMCVCMCVEMCVCQSUyMCVEMCVCOCUyMCVEMCVCMiVEMCVCRCVEMSU4MyVEMSU4MiVEMSU4MCVEMCVCNSVEMCVCRCVEMCVCRCVEMCVCOCVEMCVCOSUyMCVEMCVCRCVEMCVCRSVEMCVCQyVEMCVCNSVEMSU4MCUyMCVEMSU4MSVEMCVCRSVEMSU4MiVEMSU4MCVEMSU4MyVEMCVCNCVEMCVCRCVEMCVCOCVEMCVCQSVEMCVCMCkuJTIwJUQwJUExJUQwJUJFJUQxJTgyJUQxJTgwJUQxJTgzJUQwJUI0JUQwJUJEJUQwJUI4JUQwJUJBJTIwJUQwJUJDJUQwJUJFJUQwJUI2JUQwJUI1JUQxJTgy
JTNCJTIwJUQwJUI0JUQwJUJFJUQwJUIxJUQwJUIwJUQwJUIyJUQwJUI4JUQxJTgyJUQxJThDJTIwJUQxJTgzJUQxJTg3JUQwJUIwJUQxJTgxJUQxJTgyJUQwJUJEJUQwJUI4JUQwJUJBJUQwJUJFJUQwJUIyJTIwJUQwJUIyJTIwJUQxJTgxJUQwJUJFJUQwJUI3JUQwJUI0JUQwJUIwJUQwJUJEJUQwJUJEJUQxJTgzJUQxJThFJTIwJUQwJUJBJUQwJUJFJUQwJUJEJUQxJTg0JUQwJUI1JUQxJTgwJUQwJUI1JUQwJUJEJUQxJTg2JUQwJUI4JUQxJThFLiUyMCVEMCVBMSVEMCVCRSVEMSU4MiVEMSU4MCVEMSU4MyVEMCVCNCVEMCVCRCVEMCVCOCVEMCVCQSVEMCVCOCUyMCVEMCVCQyVEMCVCRSVEMCVCMyVEMSU4MyVEMSU4MiUyMCVEMCVCRiVEMCVCRSVEMCVCNCVEMCVCQSVEMCVCQiVEMSU4RSVEMSU4NyVEMCVCOCVEMSU4MiVEMSU4QyVEMSU4MSVEMSU4RiUyMCVEMCVCQSUyMCVEMCVCNCVEMCVCOCVEMCVCRCVEMCVCMCVEMCVCQyVEMCVCOCVEMSU4NyVEMCVCNSVEMSU4MSVEMCVCQSVEMCVCRSVEMCVCOSUyMCVEMCVCQSVEMCVCRSVEMCVCRCVEMSU4NCVEMCVCNSVEMSU4MCVEMCVCNSVEMCVCRCVEMSU4NiVEMCVCOCVEMCVCOCUyMCVEMCVCMSVEMCVCNSVEMCVCNyUyMA==
JTNCJTIwJUQwJUJGJUQxJTgwJUQwJUI4JUQwJUIzJUQwJUJCJUQwJUIwJUQxJTg4JUQwJUI1JUQwJUJEJUQwJUI4JUQxJThGJTJDJTIwJUQwJUIwJTIwJUQxJTgyJUQwJUIwJUQwJUJBJTIwJUQwJUI2JUQwJUI1JTIwJUQxJTgxJUQwJUJFJUQwJUI3JUQwJUI0JUQwJUIwJUQxJTgyJUQxJThDJTIwJUQxJTgxJUQwJUIyJUQwJUJFJUQxJThFJTIwJUQwJUJEJUQwJUJFJUQwJUIyJUQxJTgzJUQxJThFJTIwJUQwJUI0JUQwJUI4JUQwJUJEJUQwJUIwJUQwJUJDJUQwJUI4JUQxJTg3JUQwJUI1JUQxJTgxJUQwJUJBJUQxJTgzJUQxJThFJTIwJUQwJUJBJUQwJUJFJUQwJUJEJUQxJTg0JUQwJUI1JUQxJTgwJUQwJUI1JUQwJUJEJUQxJTg2JUQwJUI4JUQxJThFLg==
JTNC
; -- Инструкция:
; - В активном разговоре нажать *7 - создание и перевод участников разговора в конференцию
; - В конференции нажать *7 - после гудка набрать номер кого хотим пригласить в конференцию и нажимаем #
JTNCJTIwJTIwLSUyMCVEMCU5RCVEMCVCMCVEMCVCMSVEMSU4MCVEMCVCMCVEMSU4MiVEMSU4QyUyMCVEMCVCMiVEMCVCRCVEMSU4MyVEMSU4MiVEMSU4MCVEMCVCNSVEMCVCRCVEMCVCRCVEMCVCOCVEMCVCOSUyMCVEMCVCRCVEMCVCRSVEMCVCQyVEMCVCNSVEMSU4MCUyMCVEMSU4MSUyMCVEMCVCRiVEMSU4MCVEMCVCNSVEMSU4NCVEMCVCOCVEMCVCQSVEMSU4MSVEMCVCRSVEMCVCQyUyMCo3JTIwKCVEMCVCRiVEMSU4MCVEMCVCOCVEMCVCQy4lMjAqNzExMDApJTIwLSUyMCVEMCVCNSVEMSU4MSVEMCVCQiVEMCVCOCUyMCVEMCVCQSVEMCVCRSVEMCVCRCVEMSU4NCVEMCVCNSVEMSU4MCVEMCVCNSVEMCVCRCVEMSU4NiVEMCVCOCVEMSU4RiUyMCVEMSU4MSUyMCVEMCVCRCVEMCVCMCVEMCVCMSVEMSU4MCVEMCVCMCVEMCVCRCVEMCVCRCVEMSU4QiVEMCVCQyUyMCVEMCVCRCVEMCVCRSVEMCVCQyVEMCVCNSVEMSU4MCVEMCVCRSVEMCVCQyUyMCglRDAlQkYlRDElODAlRDAlQjglRDAlQkMuJTIwMTEwMCklMjA=
JTNCJTIwJTIwJTIwJTIwJUQxJTgxJUQxJTgzJUQxJTg5JUQwJUI1JUQxJTgxJUQxJTgyJUQwJUIyJUQxJTgzJUQwJUI1JUQxJTgyJTJDJTIwJUQxJTgyJUQwJUJFJTIwJUQwJUIxJUQxJTgzJUQwJUI0JUQwJUI1JUQxJTgyJTIwJUQwJUJGJUQxJTgwJUQwJUI4JUQxJTgxJUQwJUJFJUQwJUI1JUQwJUI0JUQwJUI4JUQwJUJEJUQwJUI1JUQwJUJEJUQwJUI4JUQwJUI1JTIwJUQwJUJBJTIwJUQwJUJEJUQwJUI1JUQwJUI5JTJDJTIwJUQwJUIyJTIwJUQwJUJGJUQxJTgwJUQwJUJFJUQxJTgyJUQwJUI4JUQwJUIyJUQwJUJEJUQwJUJFJUQwJUJDJTIwJUQxJTgxJUQwJUJCJUQxJTgzJUQxJTg3JUQwJUIwJUQwJUI1JTIwJUQwJUIxJUQxJTgzJUQwJUI0JUQwJUI1JUQxJTgyJTIwJUQxJTgxJUQwJUJFJUQwJUI3JUQwJUI0JUQwJUIwJUQwJUJEJUQwJUIwJTIwJUQwJUJEJUQwJUJFJUQwJUIyJUQwJUIwJUQxJThGJTIwJUQwJUJBJUQwJUJFJUQwJUJEJUQxJTg0JUQwJUI1JUQxJTgwJUQwJUI1JUQwJUJEJUQxJTg2JUQwJUI4JUQxJThGLg==
; -----------------------------------------------------------------------------------------------------------------
;
exten => CONF,1,NoOp(Dynamic Conference)
exten => CONF,n,ConfBridge(${CONFNUM},,dynamic_user,dynamic_menu)
exten => INVITE,1,NoOp(Conference Invite ${CONFNUM})
exten => INVITE,n,AGI(/var/lib/asterisk/agi-bin/conference.php,ADD,${CONFNUM})
ZXh0ZW4lMjAlM0QlM0UlMjBfKjdYWFhYJTJDMSUyQ05vT3AoQ3JlYXRlJTJGQ29ubmVjdCUyMER5bmFtaWMlMjBDb25mZXJlbmNlKQ==
exten => _*7XXXX,n,AGI(/var/lib/asterisk/agi-bin/conference.php,MANUAL)
Перечитываем диалплан и можно проверять работу динамических конференций.
asterisk -rx 'dialplan reload'
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ
А как можно запустить это скрипт на FreePBX 17 asterisk 21 ну и конечно же PJsip
модернизировав его под актуальные версии..
Добрый день!
Не удается запустить скрипт на голом астериск.
Получаю ошибку:
AGI Tx >> agi_request: /var/lib/asterisk/agi-bin/conference1.php
AGI Tx >> agi_channel: PJSIP/111001-00000002
AGI Tx >> agi_language: ru
AGI Tx >> agi_type: PJSIP
AGI Tx >> agi_uniqueid: 1658495905.2
AGI Tx >> agi_version: 16.2.1~dfsg-2ubuntu1
AGI Tx >> agi_callerid: 111001
AGI Tx >> agi_calleridname: 111001
AGI Tx >> agi_callingpres: 0
AGI Tx >> agi_callingani2: 0
AGI Tx >> agi_callington: 0
AGI Tx >> agi_callingtns: 0
AGI Tx >> agi_dnid: *7000
AGI Tx >> agi_rdnis: unknown
AGI Tx >> agi_context: from-internal
AGI Tx >> agi_extension: *7000
AGI Tx >> agi_priority: 2
AGI Tx >> agi_enhanced: 0.0
AGI Tx >> agi_accountcode:
AGI Tx >> agi_threadid: 140293074446080
AGI Tx >> agi_arg_1: MANUAL
AGI Tx >>
— AGI Script /var/lib/asterisk/agi-bin/conference1.php completed, returning 0
в чем может быть проблема?
У вас используется PJSIP, а на момент написания статьи я использовал ChanSIP.