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 симки и делает запрос к базе данных.
Это частный пример, как использовать это, зависит только от вашей фантазии и нужд бизнеса.

Нажмите, чтобы отобразить

Нажмите, чтобы скрыть

MariaDB [goip]> describe USSD;
+-------------+------------------+------+-----+---------------------+-----------------------------+
| Field       | Type             | Null | Key | Default             | Extra                       |
+-------------+------------------+------+-----+---------------------+-----------------------------+
| id          | int(10) unsigned | NO   | PRI | NULL                | auto_increment              |
| TERMID      | varchar(64)      | NO   |     |                     |                             |
| USSD_MSG    | varchar(255)     | NO   |     |                     |                             |
| USSD_RETURN | varchar(255)     | NO   |     |                     |                             |
| ERROR_MSG   | varchar(64)      | NO   |     |                     |                             |
| INSERTTIME  | timestamp        | NO   |     | 0000-00-00 00:00:00 | on update CURRENT_TIMESTAMP |
| type        | int(11)          | NO   |     | 0                   |                             |
| card        | varchar(64)      | NO   |     | NULL                |                             |
| recharge_ok | tinyint(1)       | NO   |     | NULL                |                             |
+-------------+------------------+------+-----+---------------------+-----------------------------+

<?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)
...

Только авторизованные участники могут оставлять комментарии.
  • freeswitch/dp/fs_capture.txt
  • Последние изменения: 2018/10/17