Для удобства работы колл-центра потребовалось при поднятии трубки оператором передавать из Asterisk во внешнюю CRM HTTP-запрос, содержащий три номера — внутренний номер оператора (CCC), номер звонящего (AAA) и номер, на который позвонили (BBB). CRM принимает запросы в таком виде:
http://10.20.30.40/cgi-bin/phoneID/CCC/AAA/BBB
Сначала в диалплане присвоим значения переменным ARG1 и ARG2 — передадим им значения номера звонящего и номера, на который позвонили, соответственно. Для передачи данных в контекст, который осуществит http-запрос, будем использовать опцию U команды Dial() (опция U передает указанные аргументы в контекст httpreq именно при поднятии трубки одним из операторов). Внутренний номер оператора не нужно передавать в виде отдельного аргумента, т.к. он подтянется автоматически из предустановленной переменной DIALEDPEERNUMBER.
[incoming]
exten => 4951000000,1,Set(ARG1=${CALLERID(num):-10})
exten => 4951000000,n,Set(ARG2=4951000000)
exten => 4951000000,n,Dial(SIP/201&SIP/202,10,U(httpreq,${ARG1},${ARG2}))
[httpreq]
exten => s,1,System(wget http://10.20.30.40/cgi-bin/phoneID/${DIALEDPEERNUMBER}/${ARG1}/${ARG2})
Сохраняем, перезапускаем диалплан и проверяем:
SIP/201-000662f1 answered SIP/4951000000-000662ee
-- SIP/201-000662f1 Internal Gosub(httpreq,s,1(9991234567,4951000000)) start
-- Executing [s@httpreq:1] System("SIP/201-000662f1", "wget http://10.20.30.40/cgi-bin/phoneID/201/9991234567/4951000000") in new stack