Freeswitch curl capture
Получим данные с html страницы и отобразим нужную часть на дисплее телефона.
Данные в примере: Баланс сим карты из базы данных.
Ключевые приложения диалплана: ''curl'' и ''capture''.
см. также Regular Expression
Freeswitch XML Dialplan
Наберем кодовый номер "0007XX" и получим баланс сим карты,
где "000777" id
сим карты в базе данных.
<extension name="000.a.curl"> <condition field="destination_number" expression="^(000[7]\d{2})$"> <action application="set" data="ignore_display_updates=false"/> <action application="curl" data="http://192.168.0.2/ussd_curl.php headers post val=$1"/> <action application="info"/> <action application="capture" data="bal|${curl_response_data}|(balance:)(.*)"/> <action application="set" data="sip_callee_id_name=${bal[2]} "/> <action application="Answer"/> <action application="sleep" data="50000"/> </condition> </extension>
<action application="capture" data="bal|${curl_response_data}|(balance:)(.*)"/>
- bal - массив в который будут помещены полученные значения
- ${curl_response_data} - ответ, из которого будет производиться выборка значений (в нашем случае http header)
- (balance:)(.*) - собственно regex
Возможно в sip_profile потребуется установить параметр:
<param name="send-display-update" value="true"/>
но по идее это дефолтное значение
ussd_curl.php
В данном примере данные мы получаем из БД смс сервера Goip.
Т.е. php получает POST запрос с id симки и делает запрос к базе данных.
Это частный пример, как использовать это, зависит только от вашей фантазии и нужд бизнеса.
<?php $mysqli = new mysqli("localhost", "goip", "goip", "goip"); $mysqli->set_charset('utf8'); $res = $mysqli->query("select TERMID, USSD_RETURN, max(INSERTTIME) as ltime from USSD where INSERTTIME >= DATE_SUB( NOW(), interval 24 hour) group by TERMID"); foreach( $res as $row) { if ($row['USSD_RETURN'] == NULL) { $ussdreturn = "timeout"; } else { $ussdreturn = preg_replace('/[\s]+/', '_', $row['USSD_RETURN']); $ussdreturn = preg_replace('/(.*r._|.*_p.|.*_р\.|\dр.).*/i','$1',$ussdreturn); } if ($_POST['val'] == $row['TERMID']) { echo header('balance:'.urlencode($ussdreturn)); } } $mysqli->close(); $res->free();
- выхлоп INFO
EXECUTE sofia/internal/2828@192.168.0.231 set(ignore_display_updates=false) 2018-10-17 11:00:14.658372 [DEBUG] mod_dptools.c:1548 SET sofia/internal/2828@192.168.0.231 [ignore_display_updates]=[false] EXECUTE sofia/internal/2828@192.168.0.231 curl(http://192.168.20.2/ussd_curl.php headers post val=000754) 2018-10-17 11:00:14.658372 [DEBUG] mod_curl.c:182 method: post, url: http://192.168.0.2/ussd_curl.php, content-type: (null) 2018-10-17 11:00:14.658372 [DEBUG] mod_curl.c:211 Post data: val=000754 EXECUTE sofia/internal/2828@192.168.0.231 info() 2018-10-17 11:00:15.198373 [INFO] mod_dptools.c:1761 CHANNEL_DATA: ... variable_ignore_display_updates: [false] variable_curl_response_data: [HTTP/1.1 200 OK Date: Wed, 17 Oct 2018 08:00:13 GMT Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips PHP/5.4.16 X-Powered-By: PHP/5.4.16 balance: OCTATOK_53.00_p. Content-Length: 0 Content-Type: text/html; charset=UTF-8 ] variable_curl_response_code: [200] variable_curl_method: [post] variable_current_application: [info] ... EXECUTE sofia/internal/2828@192.168.0.231 capture(bal|HTTP/1.1 200 OK Date: Wed, 17 Oct 2018 08:00:13 GMT Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips PHP/5.4.16 X-Powered-By: PHP/5.4.16 balance: OCTATOK_53.00_p. Content-Length: 0 Content-Type: text/html; charset=UTF-8 |(balance:)(.*)) )ECUTE sofia/internal/2828@192.168.0.231 set(sip_callee_id_name= OCTATOK_53.00_p. ]18-10-17 11:00:15.198373 [DEBUG] mod_dptools.c:1548 SET sofia/internal/2828@192.168.0.231 [sip_callee_id_name]=[ OCTATOK_53.00_p. EXECUTE sofia/internal/2828@192.168.0.231 answer() ... EXECUTE sofia/internal/2828@192.168.0.231 sleep(50000) ...