Маршрутизация в Asterisk через API теле2, куда копать?
Чтобы не запрашивать каждый раз стоит держать свою базу номеров, тогда алгоритм примерно такой:
1. Запрашиваем из базы данные по номеру, если они не старше N дней (ODBC или MYSQL)
2. Если данных в базе нет (или они старые), то делаем запрос к сайту (CURL)
3. Если данные с сайта получены, разбираем строку, заносим данные в базу с указанием времени запроса
4. Если данных нет - отрабатываем стандартный план звонка или пытаемся определить по префиксам
Дополнительно можно сделать внешний скрипт, который будет периодически небольшими порциями обновлять данные в таблице.
По какой-то причине последнее время часто подглючивает. Пришлось использовать альтернативный вариант с мегафоном.
mnp.sh:
#!/bin/bash
curl -s -X POST "moscow.shop.megafon.ru/get_ajax_page.php?action=ge..." |sed -e :a -e 's/<[^>]*>//g;/;//ba' |iconv -c -f cp1251 -t utf8 |sed 's/\"/\n/g' |awk '{if($0 ~ /tele2/) print "Tele2"; if($0 ~ /МТС/) print "MTS"; if($0 ~ /Билайн/) print "Beeline"; if($0 ~ /МегаФон/) print "Megafon"; }'
На всякий случай напишу как использовать (увы не все знают): 
./mnp.sh 79111111111
А в диалплане примерно так (соль и перец по вкусу):
...
same =>    n(L_check_mnp),NoOP(${ARG1} "Определение оператора по базе MNP - скрипт whois.sh")
same =>    n,Set(operator_${ARG1}=${SHELL(/my_scripts/mnp.sh 7${ARG1:1:10})})
...
same =>    n,NoOP(Operator is ${operator_${EXTEN}})
same =>    n(L_choice),GotoIf($[${operator_${EXTEN}} = Mts]?dial_to_mts,${EXTEN},1)
same =>    n,GotoIf($[${operator_${EXTEN}} = Other]?dial_to_other_channels,${EXTEN},1)
same =>    n,GotoIf($[Other${operator_${EXTEN}} = Other]?dial_to_other_channels,${EXTEN},1)
same =>    n,Set(GLOBAL(D_N_for_h1)=${EXTEN})
same =>    n,Set(GLOBAL(F_N_for_h1)=${CALLERID(num)})
same =>    n,GotoIf($[${operator_${EXTEN}} = Megafon]?dial_to_megafon,${EXTEN},1)
same =>    n,HangUp()