Mengetahui Nomer Telp PSTN di Elastix

Salah satu kebiasaan saya dalam setup Elastix adalah memasukkan konfigurasi DAHDI Chanel DIDs seusai dengan nomer telepon analog yang tersambung ke FXO. Walaupun jika semua line disetup sebagai hunting, masing-masing line pasti memiliki nomer PSTN yang berbeda dari Telkom. Selain untuk kemudahan routing inbound/outbound, juga untuk kemudahan dokumentasi jika kelak terjadi masalah di salah satu line.

Caranya?

Yang dibutuhkan adalah extension yang aktif dan sebuah handphone untuk mengetahui nomer PSTN yang muncul. Lalu jalankan langkah berikut:

  • Aktifkan extension di SIP phone/Softphone (misal extension yang akan digunakan adalah 2015).
  • Masuk ke box Elastix melalui SSH. Lalu ketikkan perintah: asterisk -vr untuk masuk ke console Asterisk.
  • Jalankan perintah:  originate DAHDI/1/0811223344 extension 2015 (artinya, sambungkan extension 2015 ke nomer handphone 0811223344 melalui channel DAHDI/1). Periksa nomer telepon PSTN yang muncul di layar handphone, dan catat di DAHDI Channel DIDs sesuai dengan channelnya (dalam contoh ini Channel 1).
  • Jika channel DAHDI lebih dari satu, ganti angka channel dengan angka/urutan lainnya (misal originate DAHDI/2/0811223344 extension 2015, originate DAHDI/3/0811223344 extension 2015originate DAHDI/4/0811223344 extension 2015, dst).
  • Jumlah channel DAHDI yang ada bisa dilihat dengan perintah dahdi show channels dari console Asterisk. Contoh output seperti berikut:

dahdi channels

 

Setting Log File di Elastix untuk troubleshoot

Salah satu file yang membantu saya dalam melakukan troubleshoot IP PBX Elastix adalah /var/log/asterisk/full. Output file ini tergantung dari setting yang ada di dalam file logger_logfiles_custom.conf . Setelah upgrade dari Elastix 2.4 ke 2.5, saya menemukan setup default file logger menjadi:

full => notice,warning,error,debug,verbose

Setting ini tidak terlalu membantu dalam troubleshoot, sehingga harus diubah menjadi:

full => notice,warning,error,debug,verbose(3),dtmf,fax

[stextbox id=”alert”]Untuk mengedit file ini tidak bisa dilakukan dari console shell. Editing harus dilakukan dari webGUI Elastix yang dapat diakses melalui menu PBX -> Tools -> Asterisk File Editor. Jika tidak, maka setiap kali reload config, Elastix akan meng-override semua perubahan yang sudah kita buat.[/stextbox]

Jika ingin menampilkan isi dari SIP packet ke dalam log /var/log/asterisk/full, masuk ke CLI Asterisk (asterisk -vvvr), lalu ketik:

*CLI> sip set debug on

Keluar dari CLI dengan mengetik quit, lalu periksa file log dengan tail -f /var/log/asterisk/full. Kali ini SIP packet akan dimunculkan juga. Untuk mematikan, masuk ke CLI lagi seperti di atas, lalu jalankan perintah:

*CLI> sip set debug off

[Elastix] Akses CDR dan Call Recording Untuk User Tertentu

Untuk keperluan monitoring penggunaan telepon dan rekaman panggilan, sebuah perusahaan memerlukan menambah user tertentu untuk login di WebGUI Elastix. Tapi karena user ini tidak masuk ke group administrator, maka CDR (Call Detail Record) dan call recording yang bisa diakses adalah untuk nomer ekstensi yang terkait dengan user tersebut. Agar supaya user tersebut tetap bisa melihat seluruh CDR dan call recording, yang perlu dilakukan adalah mengedit file /var/www/html/libs/paloSantoACL.class.php, terutama di blok:

[stextbox id=”grey” shadow=”false” image=”null”]function isUserAdministratorGroup($username)
{
$is=false;
$idUser = $this->getIdUser($username);
if($idUser){
$arrGroup = $this->getMembership($idUser);
//$is = array_key_exists(‘administrator’,$arrGroup);
$is = array_search(‘1’, $arrGroup);
}
return $is;
}[/stextbox]

Misalkan user yang kita tambahkan adalah user HRD, maka, tambahkan pada blok tersebut menjadi seperti:

[stextbox id=”grey” shadow=”false” image=”null”]function isUserAdministratorGroup($username)
{
$is=false;
$idUser = $this->getIdUser($username);
if($idUser){
$arrGroup = $this->getMembership($idUser);
//$is = array_key_exists(‘administrator’,$arrGroup);
$is = array_search(‘1’, $arrGroup);

     if(isset($arrGroup[‘HRD’]))
     $is=true;

}
return $is;
}[/stextbox]

Save file dan restart HTTPD untuk memastikan perubahan. Setelah itu login sebagai HRD (dengan asumsi, user HRD sudah disetup memiliki akses ke halaman CDR dan call recording – untuk cara setup tidak akan dibahas di sini), dan seluruh CDR dan call recording sudah bisa dilihat dari user tersebut.

[Elastix] Problem PIN Sets Ditanyakan 2 Kali

Problem ini muncul dalam instalasi Elastix 2.5 dengan Asterisk versi 11.14.1. Jika ditelusuri, maka problem ini berawal dari generate otomatis [macro-pinsets] oleh file /var/www/html/admin/modules/pinsets/functions.inc.php, terutama di baris:

[code language=”bash”]// write out a macro that handles the authenticate
$ext->add(‘macro-pinsets’, ‘s’, ”, new ext_gotoif(‘${ARG2} = 1′,’cdr,1’));
$ext->add(‘macro-pinsets’, ‘s’, ”, new ext_execif(‘$["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]’, ‘Authenticate’,$asterisk_conf[‘astetcdir’].’/pinset_${ARG1}’));
$ext->add(‘macro-pinsets’, ‘s’, ”, new ext_execif(‘$["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]’, ‘ResetCDR’));
// authenticate with the CDR option (a)
$ext->add(‘macro-pinsets’, ‘cdr’, ”, new ext_execif(‘$["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]’, ‘Authenticate’,$asterisk_conf[‘astetcdir’].’/pinset_${ARG1},a’));
$ext->add(‘macro-pinsets’, ‘cdr’, ”, new ext_execif(‘$["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]’, ‘ResetCDR’));
[/code]

Entah kenapa, baris di atas akan menambahkan rule PIN Set dua kali ke dalam extensions_additional.conf. Sehingga yang perlu dilakukan adalah meremark di semua baris tersebut (dengan //). Setelah itu edit file extensions_custom.conf, tambahkan baris berikut (edit dari menu file editor Elastix GUI):

[code language=”bash”][macro-pinsets]
exten => s,1,GotoIf(${ARG2} = 1?cdr,1)
exten => s,n,ExecIf($["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]?Authenticate(/etc/asterisk/pinset_${ARG1}))
exten => s,n,ExecIf($["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]?ResetCDR())

exten => cdr,1,ExecIf($["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]?Authenticate(/etc/asterisk/pinset_${ARG1},a))
exten => cdr,n,ExecIf($["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]?ResetCDR())

[/code]

setelah itu klik Save dan Reload Asterisk. Dan terakhir, aktifkan module PIN Sets di call route (tidak akan dibahas di sini, bisa search di internet untuk langkah-langkahnya). Lakukan test, maka IP PBX hanya akan menanyakan PIN satu kali.

Solusi di atas bukan solusi permanen. Hanya sekedar workaround supaya “nampak” normal. Untuk selanjutnya, Elastix perlu diupdate dengan versi FreePBX atau Asterisk yang sudah memperbaiki bug ini. Sudah beberapa orang yang submit bug tersebut. Tapi sampai dengan penulisan ini, bug tersebut belum hilang. Kita tunggu saja patch dari mereka.

“Empty configuration — no spans”

Biasanya, kalau kita menginstall Elastix dengan card analog terpasang sejak awal, secara otomatis system akan mendeteksi keberadaan card dan sekaligus menginstall driver yang diperlukan. Tapi ada kalanya (entah kenapa) card analog tidak terdeteksi. Biasanya, ketika kita menjalankan perintah dahdi_genconf -v akan menunjukkan seperti ini:

[root@ippbx ~]# dahdi_genconf -v
Default parameters from /etc/dahdi/genconf_parameters
Empty configuration — no spans
Generating /etc/dahdi/assigned-spans.conf
Empty configuration — no spans
Generating /etc/dahdi/system.conf
Empty configuration — no spans
Generating /etc/asterisk/dahdi-channels.conf
Empty configuration — no spans
Generating /etc/asterisk/extra-channels.conf
Empty configuration — no spans
Generating /etc/asterisk/allogsm-channels.conf

Problem di atas biasanya terjadi karena kita belum memiliki module opvxa1200.ko (untuk card analog) atau opvxg4xx.ko (untuk card gsm). Untuk mengatasi problem tersebut, yang perlu dilakukan adalah sebagai berikut (pada contoh ini, saya mengalami problem loading driver untuk kartu OpenVox A400p 2 FXS & 2 FXO) :

1. Jalankan perintah lspci -v dan pastikan memiliki output seperti:

03:00.0 Communication controller: Tiger Jet Network Inc. Tiger3XX Modem/ISDN interface
Subsystem: OpenVox Communication Co. Ltd. OpenVox A400P 4-port analog card
Flags: bus master, medium devsel, latency 32, IRQ 58
I/O ports at d000 [size=256]
Memory at e2100000 (32-bit, non-prefetchable) [size=4K]
Capabilities: [40] Power Management version 2
Kernel driver in use: wctdm
Kernel modules: wctdm, wcopenpci, hisax

2. Jalankan perintah : dahdi_hardware  yang harusnya memiliki output:

pci:0000:03:00.0 wctdm+ e159:0001 Wildcard TDM400P REV E/F

Jika setelah kata wctdmi memiliki tanda minus (‘”-“) misal seperti:

pci:0000:03:00.0 wctdm- e159:0001 Wildcard TDM400P REV E/F

hal tersebut disebabkan mod wctdm belum diload. Jalankan perintah: modprobe wctdm dan kembali lihat output dahdi_hardware. 

3. Jalankan perintah modprobe opvxa1200 debug=1, lalu generate config dengan perintah: dahdi_genconf -v. Jika berhasil seharusnya akan muncul output seperti :

[root@ippbx ~]# dahdi_cfg -v
DAHDI Tools Version – 2.9.2

DAHDI Version: 2.9.2
Echo Canceller(s):
Configuration
======================
4 channels to configure.

Setting echocan for channel 1 to oslec
Setting echocan for channel 2 to oslec
Setting echocan for channel 3 to oslec
Setting echocan for channel 4 to oslec

Sampai di sini, kita siap melakukan konfigurasi card analog selanjutnya.

VoIP Extension

Beberapa kali saya mengalami diskusi rancu mengenai extensioni VoIP. Dan sepertinya saya perlu membuat sebuah postingan mengenai perbedaan extension di opensource telephony IP PBX, dengan extension di legacy PABX/IP-PABX.

Penyebab utama kerancuan dalam pembahasan extension dikarenakan memang kebanyakan kita berangkat belajar sistem telepon dari Analog PBX, yang membedakan sambungan trunk dan extension dengan jelas. Sedangkan di open source IP PBX, tidak ada pembedaan demikian karena semua channel dianggap sama. Yang membedakan adalah  call context , berfungsi untuk memisah panggilan dari luar dengan panggilan dari dalam network IP PBX. 

Kerancuan juga disumbangkan oleh FreePBX yang menggabungkan pembuatan nomer extension yang sama dengan username. Dan FreePBX digunakan dalam beberapa bundle IP PBX opensource seperti trixbox CE, Elastix, FreePBX distro, AsteriskNOW, dan Briker. Hal ini menyebabkan rancu dalam membedakan endpoint username id dan extension. Hal ini tidak bisa disalahkan karena FreePBX memang dibuat untuk menirukan cara kerja PBX analog/legacy.

Awalnya, extension adalah sebuah perangkat telepon tambahan yang tersambung ke pesawat telepon utama (disebut Main Station) yang tersambung langsung ke PSTN. Yang sering kita temui adalah model sambungan telepon paralel yang memungkinkan kita melakukan panggilan ke PSTN dari ruang yang berbeda di dalam rumah. Ada juga model sambungan telepon seperti ini yang memiliki fasilitas intercom, yang memungkinkan komunikasi antar perangkat. Dalam perkembangannya di dunia bisnis, extension menjadi sebuah perangkat telepon yang tersambung ke PBX, bukan lagi ke main station. Extension yang tersambung ke  board PBX kemudian bisa dihubungi dengan menekan nomer id channel yang disebut sebaga nomer extension (jika ada masukan untuk koreksi keterangan di atas, saya akan sangat berterima kasih).

Extension di opensource telephony IP PBX jauh lebih bersifat fleksibel. Extension di sini tidak mengacu ke sebuah perangat telepon sama sekali atau id di board PBX, melainkan mengacu ke sebuah urutan eksekusi yang mirip seperti sub routine dalam sebuah script atau program. Perangkat telepon  software (softphone) maupun hardware (ip phone) yang tersambung di IP PBX, biasanya disebut sebagai endpoint. Ilustrasi untuk membayangkan cara kerja extension di IP PBX adalah sebagai berikut:

Ketika mendial sebuah nomer extension, misal 1000, maka IP PBX akan menerima/mendengar dial tone tersebut dan mencari baris urutan proses yang berhubungan dengan extension tersebut. Ketika menemukan baris yang diacu sebagai extension 1000, maka IP PBX akan mengeksekusi urutan yang sudah didefinisikan dalam baris tersebut. Eksekusinya bermacam-macam. Yang paling umum adalah menghubungi perangkat yang terasosiasi ke penomoran extension. Perangat tersebut tentu saja harus sudah teregistrasi dengan IP PBX melalui autentikasi user/password, atau autentikasi ip address. Atau bisa saja, extension tersebut kemudian malah mengeksekusi sebuah script/program otomatisasi lain (reboot remote server, check link internet, program assembler yang menggerakan peralatan mekanis, dan lain sebagainya).

Jika extension IP PBX digunakan untuk menghubungi sebuah perangkat, seperti yang disebutkan di atas, bahwa perangkat tersebut harus diketahui oleh IP PBX melalui autentikasi user/password atau berdasarkan autentikasi ip address (jika ip address perangkat tersebut tetap). Bila ada, misal, 5 perangkat teregistrasi ke IP PBX sebagai perangkat A, B, C, D, dan E, maka sebuah extension (misal ext. 1000), bisa diasosiasikan dengan salah satu perangkat tersebut. Jadi extension tidak terikat dengan sebuah perangkat telepon atau terikat dalam fungsi untuk mengontak sebuah perangkat.

Setelah penjelasan sedikit mengenai extension tersebut, semoga bisa sedikit memberikan gambaran konsepnya.