Как написать приложение астериск

Я новичок в FreePBX и Asterisk.

Мне нужно знать, как написать приложение, которое проверяет каждый исходящий вызов, чтобы узнать, есть ли у этого расширения разрешение.

например, у меня есть 2 расширения 100 200, и каждый раз, когда одно из расширений пытается сделать исходящий вызов, мне нужно проверить мою базу данных, чтобы узнать, есть ли у него это разрешение, и если не заблокировать этот вызов

извините, мой английский не так хорош


person eli chen    schedule 27.01.2017    source источник


Ответы (1)


Я предполагаю, что у вас установлен Asterisk и настроены базовые настройки с программными телефонами SIP. Возможно, вам потребуется добавить следующее в свой /etc/asterisk/extensions.conf

[internal]
exten => _XXXXXXXXXX,1,Answer()
same => n,Set(callerid=${CALLERID(num)})
same => n,Verbose(Your Callerid is ${callerid})
same => n,Saydigits(${callerid})
same => n,AGI(check_callerid.php,${callerid})
;same => n,Hangup()

[welcome]
exten => s,1,Playback(welcome)
same => n,Verbose(Allowed to call)
;same => n,Dial(SIP/trunkname/${EXTEN})

[good_bye]
exten => s,1,Playback(goodbye)
same => n,Verbose(Not Allowed to call)
same => n,Hangup()

После этого перезагрузите Астериск:

asterisk -rvvvv
reload

Загрузите библиотеку phpagi, выполните следующие команды в консоли Asterisk.

cd /var/lib/asterisk/agi-bin
git clone https://github.com/welltime/phpagi

Затем создайте скрипт check_callerid.php в /var/lib/asterisk/agi-bin и дайте ему полное разрешение. Ниже скрипт, который вы можете скопировать,

#!/usr/bin/php
<?php

    global $agi;
    require 'phpagi/phpagi.php';

    $agi = new AGI();
    $agi->answer();
    $callerid = $argv[1];

    $agi->verbose("CallerID is: $callerid");
    $check_in_db = checkDB($callerid); //check caller allowed to do call

    if($check_in_db==1){$agi->exec("Goto","welcome,s,1");} //allowed to do call, go to dial plan
    else{$agi->exec("Goto","good_bye,s,1");} //not allowed to do call, go to dial plan


    function checkDB($callerid){
    //check here callerid allowed to do call or not
    return 1;
    }

?>

Теперь попробуйте набрать с одного из ваших зарегистрированных программных телефонов любой 10-значный номер, на который ваш звонок попадет на exten => _XXXXXXXXXX,1,Answer() в вашем плане нумерации.

person Ankit Jayswal    schedule 27.01.2017
comment
Спасибо, ты спас мой день - person eli chen; 28.01.2017