Pull to refresh

Comments 9

Зачем по сто раз в каждой статье писать как установить Астериск? Этой информации в интернете с головой, в том числе и на официальном wiki.

По DIALPLAN зачет, только макрос — это громозкое решение, которое вскоре будет depricated.
Если на то уж пошло то можно использовать GoSub, а еще лучше Lua. Там вообще все правильно можно сделать, без вот этих костылей с макросами. И работать это будет быстрее
Ну а почему бы и не писать? Те, кто знают что к чему, просто пропустят эту информацию. Те, кто ищет описание решения от и до, скажут спасибо за развернутую информацию.

Касательно макросов вынужден согласиться, но решение легко адаптирвать под GoSub.
Более того, рекомендация по установке дана во вреднючем стиле:
make && make install

Уже есть и пост по этой проблеме и мой комментарий с предложением вместо хотя бы указывать make собирать параллельно:
make -j [количество процессов]


А костыль бережно переносится из руководство в руководство и конца этому не видно.
Для целей определения мобильного оператора корректнее использовать базу перенесенных номеров MNP.
При исходящем звонке запрашивать и кэшировать оператора и даже регион, можно с сайта мегафона moscow.shop.megafon.ru/get_ajax_page.php?action=getMsisdnInfo&msisdn=79000000000 или с теле2 mnp.tele2.ru/gateway.php?9000000000

Если нужно список кодов мобильных операторов www.rossvyaz.ru/docs/MNC_25.11.2013-1.rtf
и список кодов регионов (он не совпадает с автомобильными) www.rossvyaz.ru/docs/Identifikator_regiona.doc

У меня как-то так получается /var/lib/asterisk/agi-bin/mnp:
#!/bin/bash

declare -a array
while read -e ARG && [ "$ARG" ] ; do
        array=(` echo $ARG | sed -e 's/://'`)
        export ${array[0]}=${array[1]}
done

checkresults() {
        while read line
        do
        case ${line:0:4} in
        "200 " ) echo $line >&2
                 return;;
        "510 " ) echo $line >&2
                 return;;
        "520 " ) echo $line >&2
                 return;;
        *      ) echo $line >&2;;       #keep on reading those Invlid command
                                        #command syntax until "520 End ..."
        esac
        done
}

echo "DATABASE GET MNP $agi_extension"
read line
if [[ ${line:0:14} != "200 result=1 (" ]]; then
    MNP=$(/usr/bin/wget -q "http://mnp.tele2.ru/gateway.php?${agi_extension:1}" -O - | /usr/local/bin/jq -r '.response.geocode.code+.response.mnc.code')
    [[ -n $MNP ]] && echo DATABASE PUT MNP $agi_extension \"$MNP\" && checkresults
fi

exit 0;


и в extensions.ael
if (${DB_EXISTS(MNP/${EXTEN})} = 0)
{
        AGI(mnp);
}

if ("${DB(MNP/${EXTEN}):2}" = "02" && ${DB(balance/multifon)} > 100)
{
        if (${GROUP_COUNT(megafon)} < 5) {
                GROUP()=megafon;
                Dial(SIP/megafon/${EXTEN},90);
                if (${DIALSTATUS} = BUSY) Busy();
        };
}


для простоты результаты кэшируем в бд самого астериска: первые 2 цифры — регион, вторые 2 цифры — код оператора

(ессно если нужно только определить регион абонента, то база rossvyaz работает намного лучше, надежнее, быстрее и тд)
Привязывать такой запрос непосредственно к интернету чревато подвисанием в ситуации, когда выход в ТФОП осуществляется независимо от доступа в интернет (по E1 например), а доступ в интернет отвалился или тормозит.
С учетом возможности перехода от оператора к оператору с сохранением номера в обозримом будущем может стать не актуальным.
Думаю, что большая часть емкостей останется на месте.
Внутри региона все равно номер остается без изменения. А между регионам MNP не работает.
Мы в этой связи сделали для наших клиентов отдельный тарифный план — единая цена на звонки на мобильные ВСЕЙ России. Чтобы не было таких мучений.
На основе той же базы Россвязи есть модуль под node.js numcap для поиска региона и оператора по номеру телефона
github.com/antirek/numcap
Sign up to leave a comment.

Articles