Langsung aja ya...
Jika kita menggunakan asterisk versi 1.2, maka function SPY nya belum berfungsi, dan jika tidak memungkinkan untuk upgrade pada server yg digunakan ini, mungkin karena kendala hardware versi lama yg belum support asterisk versi terbaru atau apapun kendalanya.
Kita bisa memanfaatkan server asterisk lain yg sudah support asterisk versi terbaru, dan dijadikan server kedua, dalam kasus saya adalah sebagai server recording, dan server tadi sebagai server penunjang saja.
Jadi kita akan memanfaatkan function SPY pada server yang kedua, dengan terlebih dahulu kita akan get channel call nya.
Mohon maaf klo penjelasan nya bikin ga mudeng ya...! klo ada pertanyaan silahkan tulis dikolom komentar aja.
Kebetulan saya menggunakan database Postgresql.
Pertama buat database untuk menyimpan temporary informasi:
=============================================
-- DROP TABLE phone.asterisk_channels_verbose;
CREATE TABLE phone.asterisk_channels_verbose
(
sid bigserial NOT NULL,
vchannel character varying(100),
vcontext character varying(100),
vextension character varying(100),
nprio numeric,
vstate character varying(100),
vapplication character varying(100),
vdata character varying(100),
vcallerid character varying(100),
vduration character varying(100),
vaccount_code character varying(100),
vpeer_account character varying(100),
vbridge_id character varying(100),
tdate_insert timestamp without time zone NOT NULL DEFAULT (to_char(now(), 'YYYY-MM-DD HH24:MI:SS'::text))::timestamp without time zone,
CONSTRAINT asterisk_channels_verbose_pkey PRIMARY KEY (sid)
)
WITH (
OIDS=FALSE
);
ALTER TABLE phone.asterisk_channels_verbose
OWNER TO postgres;
Nah step berikut nya kita buat 1 file php yang diletakan pada directory "/var/lib/asterisk/agi-bin/"
=====================================================================
kita kasih nama aja "asterisk_channels.php". berikut script nya:
#!/usr/bin/php -q
<?php
ob_implicit_flush(false);
set_time_limit(5);
error_reporting(0);
$stdin = fopen('php://stdin', 'r');
$stdout = fopen('php://stdout', 'w');
$stdlog = fopen('/root/php_agi.log', 'w');
$xCallerId = $argv[1];
$xVariable = $argv[2];
$connection = pg_connect("host=X.X.X.X dbname=namadatabase user=postgres password=passworddatabase") or die (pg_last_error());
if($xVariable==1)
{
exec('asterisk -x "core show channels concise"',$out);
for($i=0;$i<(count($out));$i++)
{
$output = explode("!",$out[$i]);
if($output[7]==$xCallerId)
{
$query = "
DELETE FROM phone.asterisk_channels_concise WHERE vcallerid='".$output[7]."';
INSERT INTO
phone.asterisk_channels_concise
(
vchannel,
vcontext,
vextension,
nprio,
vstate,
vapplication,
vdata,
vcallerid,
vduration,
vaccount_code,
vpeer_account,
vbridge_id
)
values
(
'".$output[0]."',
'".$output[1]."',
'".$output[2]."',
'".$output[3]."',
'".$output[4]."',
'".$output[5]."',
'".$output[6]."',
'".$output[7]."',
'".$output[8]."',
'".$output[9]."',
'".$output[10]."',
'".$output[11]."'
)";
$query=str_replace("'',","NULL,",$query);
pg_query($connection,$query) or die (pg_last_error());
break;
}
}
}
else if($xVariable==2)
{
$queQuery = "SELECT vchannel FROM phone.asterisk_channels_concise WHERE vcallerid='$xCallerId'";
$exeQuery = pg_query($connection,$queQuery) or die (pg_last_error());
$resQuery = pg_fetch_result($exeQuery,0,0);
$spyXpin=$resQuery;
fputs($stdout,"SET VARIABLE spyXpin $spyXpin");
fflush($stdout);
}
pg_close($connection);
exit;
?>
Pada dialplan asterisk nya kira2 konfigurasi nya seperti ini:
==========================================
[outgoing]
exten => i,1,Hangup
exten => t,1,Hangup
exten => h,1,Hangup
;================================================================================================
;FROM SERVER 1 (OUTGOING CONTEXT)
;================================================================================================
exten => _9X.,1,Goto(server-outgoing,${EXTEN:1},1)
exten => _8X.,1,Goto(spy-silent,1553${EXTEN:1},1)
exten => _7X.,1,Goto(spy-whisper,1554${EXTEN:1},1)
;================================================================================================
;FROM OUTGOING CONTEXT
;================================================================================================
[server-outgoing]
exten => _X.,1,NoOp(CallTime=>${STRFTIME(${EPOCH},,%C%y%m%d%H%M%S)})
exten => _X.,n,Set(mvar=1)
exten => _X.,n,NoOp(CHANNEL :${CHANNEL})
exten => _X.,n,set(CALLTIME=${STRFTIME(${EPOCH},,%C%y%m%d%H%M%S)})
exten => _X.,n,Set(FILENAME="/var/spool/asterisk/monitor/${UNIQUEID}_${CALLTIME}_${EXTEN}")
;exten => _X.,n,Monitor(gsm,${FILENAME},m) //for "in" and "out" file
exten => _X.,n,MixMonitor(${FILENAME}.gsm,b) //for mix record
exten => _X.,n,AGI(asterisk_channel.php,${CALLERID(num)},${mvar})
exten => _X.,n,Dial(SIP/intra-car-out/2090${EXTEN},${OUTTIMEOUT})
exten => _X.,n,Hangup
;================================================================================================
;SPYING CHANNEL
;================================================================================================
[spy-silent]
exten => _1553XXXX,1,NoOp(==================== Begin Spying - Silent ====================)
exten => _1553XXXX,n,Set(mvar=2)
exten => _1553XXXX,n,Set(mpin=${EXTEN:4})
exten => _1553XXXX,n,Set(xpin=${mpin:0:4})
exten => _1553XXXX,n,NoOp(xpin = ${xpin})
exten => _1553XXXX,n,AGI(asterisk_channel.php,${xpin},${mvar})
exten => _1553XXXX,n,NoOp(${spyXpin})
exten => _1553XXXX,n,ChanSpy(${spyXpin},qo)
exten => _1553XXXX,n,Hangup()
[spy-whisper]
exten => _1554XXXX,1,NoOp(==================== Begin Spying - Whisper ====================)
exten => _1554XXXX,n,Set(mvar=2)
exten => _1554XXXX,n,Set(mpin=${EXTEN:4})
exten => _1554XXXX,n,Set(xpin=${mpin:0:4})
exten => _1554XXXX,n,NoOp(xpin = ${xpin})
exten => _1554XXXX,n,AGI(asterisk_channel.php,${xpin},${mvar})
exten => _1554XXXX,n,NoOp(${spyXpin})
exten => _1554XXXX,n,ChanSpy(${spyXpin},qw)
exten => _1554XXXX,n,Hangup()
Sekian dulu dan terima kasih.
No comments:
Post a Comment