Как воспроизвести анонс используя API Originate?

День добрый!
В данный момент я работаю над реализацией сервиса "обратный звонок с сайта" средствами PHP и Asterisk.
Самое распространенное решение - это использование AMI и команды Originate.

В принципе задача реализована командой Originate через API с указание необходимых значений

Ссылка на описание команды:
asterisk.ru/knowledgebase/Asterisk+Manager+API+Act...

Но в функционале нет возможности проиграть АНОНС (звуковое сообщение перед соединением абонентов) перед тем как будет выполнять вызов клиента. Такую возможность имеет приложение Dial.

Подскажите, как можно проще и правильнее реализовать воспроизведение анонса в данном случае?
Я склоняюсь к использованию переменной в виде номера клиента и приложению Dial c опцией A()
  • Вопрос задан
  • 2711 просмотров
Решения вопроса 1
Bug87
@Bug87 Автор вопроса
Ваше решение не подошло.
Вот правильное решение!

В PHP файле:
$strChannel = "SIP/xxx"; // внутренний номер менеджера с которым будет происходить соединение

$strContext = "directoutbound"; //контекст исходящих звонков (у вас может быть и другой)

$strWaitTime = "30";
$strPriority = "1";
$strMaxRetry = "2";

$strExtenNonCanonical = $_POST['txtphonenumber']; //формирование номера из переменных
$trash = array("(", ")", "-", "");
$strreplace = array("", "", "", "");

$strExten = "10".str_replace($trash, $strreplace, $strExtenNonCanonical); //важный момент! Я добавил префикс 10 для корректной обработки в диалплане. Так как мой контекст обрабатывает все варианты исходящих звонков.

$length = strlen($strExten);
$strCallerId = preg_replace('/^10/', '', $strExten); //для корректного отображения callerid, я убрал префикс 10 из $strExten


if ($length >= 7 && is_numeric($strExten))
                              {
                              $oSocket = fsockopen($strHost, 12234, $errnum, $errdesc) or die("Connection to host failed");
                              fputs($oSocket, "Action: login\r\n");
                              fputs($oSocket, "Events: off\r\n");
                              fputs($oSocket, "Username: $strUser\r\n");
                              fputs($oSocket, "Secret: $strSecret\r\n\r\n");
                              fputs($oSocket, "Action: originate\r\n");
                              fputs($oSocket, "Channel: $strChannel\r\n");
                              fputs($oSocket, "WaitTime: $strWaitTime\r\n");
                              fputs($oSocket, "CallerId: $strCallerId\r\n");
                              fputs($oSocket, "Exten: $strExten\r\n");
                              fputs($oSocket, "Context: $strContext\r\n");
                              fputs($oSocket, "Priority: $strPriority\r\n\r\n");
                              fputs($oSocket, "Action: Logoff\r\n\r\n");
                              sleep (1);
                              fclose($oSocket);
                              ?>
                              <p>
                              </p>
                              <?


В диалплане:
;##### Обработка звонков с сайта #####
exten => _10ZXXXXXXXXXX,1,NoOp(webCalling)
 same => n,Playback(webcall)
 same => n,Dial(SIP/TR/${EXTEN:2},,T)
 same => n,Hangup()


Данное решение позволяет использовать обратный звонок с нескольких сайтов используя разные префиксы и гибко управлять звонком в диалплане.

HTML всплывающего окна описывать не буду. Тут уже сами.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Фразу задаете в параметре Variable

Примерно так:
Action: Originate
Channel: SIP/prov/89123456789
Context: test
Exten: anons
Priority: 1
Variable: anons=beep

В диалплане:
[test]
exten => anons,1,Dial(SIP/100,15,A(${anons}))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы