Chương 7: Các dịch vụ thực hiện dựa trên AG
7.2.3 Lập trình cho AGI script
Code dưới đây được sử dụng cho dịch vụ báo thức này:
#!/usr/bin/php5 -q <?php
require 'phpagịphp'; $agi = new AGI();
// Nơi file wakeup call tạm thời được tạo $parm_temp_dir = '/tmp';
// Nơi file wakeup call sau khi tạo xong được sử dụng để gọi lại $parm_call_dir = '/var/spool/asterisk/outgoing';
// Số lần gọi lại
$parm_maxretries = 3;
// thời gian rung cho mỗi lần gọi $parm_waittime = 60;
// Thời gian giữa các lần gọi $parm_retrytime = 60;
// Caller ID hiển thị trên máy được báo thức $parm_wakeupcallerid = 'bao thuc';
//Sử dụng playback để phát file nhạc báo thức $parm_application = 'playback';
//file nhạc báo thức $parm_data = 'baothuc0'; $agi->answer();
$agi->stream_file("baothuc0");
// Nhập số điện thoại cần được báo thức Do { $sdt = $agi->get_datắbeep',3000, 4); $cidn=$sdt['result']; } While($cidn==0); // Nhập giờ báo thức $agi->stream_file("baothuc1"); $rc = $agi->get_datắbeep',3000, 4); $wtime = $rc['result']; while($wtime<=0 || $wtime >=2359) { $agi->stream_file("baothuc2"); $rc = $agi->get_datắbeep',3000, 4); $wtime = $rc['result'];
}
//phát lại thông tin: số điện thoại và giờ báo thức $agi->stream_file("baothuc3"); $agi->say_digits($cidn); $agi->stream_file("baothuc4"); $h = substr( $wtime, 0, 2 ); $h1 = substr( $wtime, 0, 1 ); $h2 = substr( $wtime, 1, 1 ); $m = substr( $wtime, 2, 2 ); $m1 = substr( $wtime, 2, 1); $m2 = substr( $wtime, 3, 1); if ( $h1 == 0 ) $agi->say_number($h2); else $agi->say_number($h); $agi->stream_file("baothuc5"); if ( $m1 == 0 ) $agi->say_number($m2); else $agi->say_number($m); $agi->stream_file("baothuc6"); $agi->stream_file("baothuc7");
// Tạo file wakeup và thêm thông tin vào
$wakefile = "$parm_temp_dir/$wtimẹext.$cidn.call"; $callfile = "$parm_call_dir/$wtimẹext.$cidn.call";
$wuc = fopen( $wakefile, 'w');
fputs( $wuc, "channel: Local/$cidn@local\n" ); fputs( $wuc, "maxretries: $parm_maxretries\n"); fputs( $wuc, "retrytime: $parm_retrytime\n"); fputs( $wuc, "waittime: $parm_waittime\n"); fputs( $wuc, "callerid: $parm_wakeupcallerid\n"); fputs( $wuc, "application: $parm_application\n"); fputs( $wuc, "data: $parm_data\n");
// Gán thời gian báo thức vào biến $time_wakeup $w = getdate();
$w['hours'] = substr( $wtime, 0, 2 ); $w['minutes'] = substr( $wtime, 2, 2 );
$time_wakeup = mktime( substr( $wtime, 0, 2 ), substr( $wtime, 2, 2 ), 0, $w['mon'], $w['mdaý], $w['year'] );
//Xác định thời gian hiện tại, nếu lớn hơn thời gian báo thức thì cộng thêm 1 ngày vào $time_wakeup
$time_now = time( );
if ( $time_wakeup <= $time_now ) $time_wakeup += 86400;
touch( $wakefile, $time_wakeup, $time_wakeup ); rename( $wakefile, $callfile );
?>