[Tips] Dialplan Untuk Pak Boss

Latar Belakang

Ceritanya, di sebuah instansi, terdapat 5 orang direktur yang masing-masing memiliki sekretaris sendiri. Para direktur ini tidak mau nomer bisa didial langsung dari IVR maupun dari ekstensi selain ekstensi masing-masing sekretarisnya. Jika ada yang mendial nomer ekstensi salah satu direktur, jika bukan dari ekstensi sekretarisnya, maka panggilan akan terlebih dahulu diarahkan ke nomer ekstensi sekretarisnya, baru kemudian bisa ditransfer ke nomer direktur tersebut.

Caranya?

Berikut ini adalah cara yang sudah saya coba di distro Asterisk. Di dalam distro tersebut, secara default semua ekstensi masuk ke context from-internal. Untuk nomer ekstensi sekretaris dan direktur, saya masukkan semua sebagai context tersebut. Selain itu, saya buatkan context khusus supaya tidak bisa melakukan panggilan langsung ke nomer ekstensi direktur. Sebelumnya saya pernah membuat script untuk memblokir panggilan keluar dengan nama context from-internal-restricted yang bisa dibaca di http://www.otakudang.org/?p=300 . Kali ini saya akan mengembangkan context tersebut untuk memblokir panggilan langsung ke ekstensi tertentu dan membelokkan ke ekstensi lain.

Dalam contoh ini, nomer ekstensi direktur (misal) 6666 dan nomer sekretaris adalah (misal) 6015. Edit context from-internal-restricted (yang sudah include dengan script restricted.sh) menjadi seperti berikut:

[from-internal-restricted]
 #exec /var/lib/asterisk/bin/restricted.sh
 exten => 6666,1,NoOp()
 same => n,GotoIf($[${CALLERID(num)} = 6015]?dial1:dial2)
 same => n(dial1),Dial(SIP/6666)
 same => n,Hangup()
 same => n(dial2),Dial(SIP/6105)
 same => n,Hangup()

Arti dari dialplan di atas adalah, jika caller id penelpon adalah 6015 (nomer ekstensi sekretaris), maka rule dial1 yang akan dieksekusi, yaitu mendial SIP/6666 nomer ekstensi direktur). Jika nomer penelpon bukan nomer ekstensi sekretaris (6015), maka rule dial2 yang akan dieksekusi, yaitu mendial SIP/6015 (nomer ekstensi sekretaris).

Selamat mencoba!

[tips] Problem DTMF Cisco SPA8800 Ke Asterisk

Ada beberapa kejadian, ketika Asterisk menerima panggilan dari VoIP gateway seperti SPA8800 yang diarahkan ke IVR, sering kali tidak bisa menekan menu IVR (menekan digit menu IVR). Ini biasanya disebabkan oleh DTMF method antara VoIP gateway dengan Asterisk yang berbeda. Untuk mengatasinya, ubah DTMF TX method dari Auto (setting default) ke INFO

 

[tips] Install Google Chrome di Ubuntu

Default browse Google di Ubuntu adalah Google Chromium. Jika search di apt repos, kita tidak akan menemukan Google Chrome. Dan ternyata caranya harus seperti beikut:

  • menambahkan key:

wget -q -O - \
https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -

  • menambahkan repository:

sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ \
stable main" >> /etc/apt/sources.list.d/google-chrome.list'

  • menginstall Chrome:

sudo apt-get update

sudo apt-get install google-chrome-stable

[tips] Membersihkan Queue Printer di Ubuntu

Hanya karena salah milih driver printer di Ubuntu, malah mengakibatkan queue stuck di icon tray, dan prosesnya tidak bisa dikill begitu saja dari shell console. Setiap kali melakukan kill, proses queue baru akan muncul lagi. Untuk menghapus queue ini caranya masuk ke shell console dan jalankan perintah:

godril@sinanju:~$ lpstat -o
iP2700-series-2         godril          215040   Rab 23 Nov 2016 12:41:47  WIB
godril@sinanju:~$ cancel -a iP2700-series-2

Setelah itu queue langsung bersih.

Menyambungkan Panggilan Dengan cmd Originate()

Jadi intinya ada request begini:

Operator diminta menyambungkan sebuah ekstensi ke nomer PSTN/GSM. Hanya saja, pada saat penyambungan panggilan, si operator tidak perlu harus menunggu sampe panggilan ke PSTN/GSM tersambung dulu lalu transfer call ke ekstensi. Maunya dial, nomer PSTN/GSM, lalu dial ekstensi yang melakukan request, setelah itu operator mengerjakan yang lain lagi.

Saya ngebayangin akan ada dua input, yaitu nomer PSTN/GSM, lalu nomer ekstensi, yang didial sekaligus. Untuk membedakan mana yang nomer PSTN/GSM dan mana nomer ekstensi, perlu dibuat delimiter, dalam hal ini saya memilih dua buah tanda pagar. Jadi jika ingin melakukan dial dengan hasil di atas, cukup dengan (misal): 08123456789##2002.

Karena kebetulan yang panjang digitnya tetap adalah nomer ekstensi (4 digit), ditambah delimiter dua tanda pagar, sementara nomer PSTN/GSM panjangnya bisa berbeda-beda, maka perlu dibagi seperti di dialplan berikut, lalu masing-masing nomer PSTN/GSM dan nomer ekstensi dimasukkan ke variabel terpisah, untuk bisa dijadikan input perintah Originate().

exten =>_XXXXX.##ZXXX,1,NoOp()
same => n,Set(Tujuan=${EXTEN::-6})
same => n,Set(Ekstensi=${EXTEN:-4:4})
same => n,Originate(DAHDI/g0/${Tujuan},exten,from-internal,${Ekstensi},1)
same => n,Hangup()

di baris Set(Tujuan=${EXTEN::-6}) jika diterapkan ke 08123456789##2002, akan menghilangkan 6 karakter terakhir, yang sisanya adalah nomer PSTN/GSM 08123456789 (karakter ##2002 dihilangkan), lalu dimasukkan ke variale Tujuan.

Set(Ekstensi=${EXTEN:-4:4}) jika diterapkan ke 08123456789##2002, akan menghitung 4 digit dari belakang, dan menghilangkan selain 4 digit tersebut. Selanjutnya 4 digit ini dimasukkan ke variabel Extensi.

Setelah mendapatkan dua variable Tujuan dan Ekstensi, kita bisa menjalankan perintah Originate() di baris:

same =>n,Originate(DAHDI/g0/${Tujuan},exten,from-internal,${Ekstensi},1)

perintah tersebut jika dinterpolasi akan seperti:

same =>n,Originate(DAHDI/g0/08123456789,exten,from-internal,2002,1)

Untuk contoh manipulasi variable bisa dibaca di:

https://wiki.asterisk.org/wiki/display/AST/Manipulating+Variables+Basics

Tips

Untuk membuat dialplan seperti di atas, ada baiknya jika dibuat context khusus, karena dialplan tersebut sangat rentan fraud jika kita tidak berhati-hati. Misal, kita bisa memasukkan dialplan tersebut ke dalam context yang hanya bisa diakses oleh ekstensi khusus operator, atau bisa dengan menambahkan auth password dialplan.

Berikut ini cuplikan dari buku Asterisk™ : The Definitive Guide mengenai contoh digit manipulation:

More Advanced Digit Manipulation
The ${EXTEN} variable properly has the syntax ${EXTEN:x:y}, where x is the starting
position and y is the number of digits to return. Given the following dial string:
94169671111
we can extract the following digit strings using the ${EXTEN:x:y} construct:
• ${EXTEN:1:3} would contain 416
• ${EXTEN:4:7} would contain 9671111
• ${EXTEN:-4:4} would start four digits from the end and return four digits, giving
us 1111
• ${EXTEN:2:-4} would start two digits in and exclude the last four digits, giving us
16967
• ${EXTEN:-6:-4} would start six digits from the end and exclude the last four digits,
giving us 67
• ${EXTEN:1} would give us everything after the first digit, or 4169671111 (if the
number of digits to return is left blank, it will return the entire remaining string)

This is a very powerful construct, but most of these variations are not very common in
normal use. For the most part, you will be using ${EXTEN} (or perhaps ${EXTEN:1} if
you need to strip off an external access code, such as a prepended 9).

Menambahkan IP Phone CISCO 3911 Ke Elastix IP PBX

Latar belakangnya adalah, seorang teman membeli ip phone Cisco 3911 dengan harga murah di toko online, dengan harapan bisa dipasang di kantor dan tersambung dengan IP PBX Asterisk based. Sayangnya, ip phone tersebut sebenarnya IPT untuk Cisco Unified Communication versi 6 atau 5. Halaman web ui ip phone tersebut hanya mencantumkan status network dan tidak ada entry untuk memasukkan informasi user/password maupun alamat registrar.

0900aecd806a2b07_null_null_null_08_02_07-1

Berikut ini cara menambahkan ekstensi 8047 ke Elastix yang memiliki ip address 172.16.1.16:

  • install tftp-server, tftp dan xinetd di Elastix jika belum ada. Tapi selama ini di instalasi Elastix otomatis sudah menyertakan tftpserver dan xinetd.
  • Upload file BOOT3951.0-0-0-9.zzDSP3951.0-0-0-2.zzSIP3951.8-1-4a.loadsSIP3951.8-1-4a.zz, dan XMLDefault.cnf.xml ke direktori /tftpboot.
  • Edit file sipdefault.cnf di baris berikut lalu upload ke direktori /tftpboot.

 

proxy1_address: 172.16.1.16

outbound_proxy: 172.16.1.16 ;

  • Edit file SEP<macaddress>.cnf.xml di baris berikut dan juga upload ke /tftpboot. Karena mac address ip phone Cisco 3911 adalah 001AA11B512A, maka nama filenya adalah SEP001AA11B512A.cnf.xml.

 

<device xsi:type=”axl:XIPPhone” ctiid=”1566023366″>
<deviceProtocol>SIP</deviceProtocol>

<devicePool>
<dateTimeSetting>
<dateTemplate>D-M-YA</dateTemplate>
<timeZone>Arabian Standard Time</timeZone>
<ntps>
<ntp>
<name>172.16.1.16</name>
<ntpMode>Unicast</ntpMode>
</ntp>
</ntps>
</dateTimeSetting>

<callManagerGroup>
<members>
<member priority=”0″>
<callManager>
<ports>
<ethernetPhonePort>2000</ethernetPhonePort>
<sipPort>5060</sipPort>
<securedSipPort>5061</securedSipPort>
</ports>
<processNodeName>172.16.1.16</processNodeName>
</callManager>
</member>
</members>
</callManagerGroup>
</devicePool>

<sipProfile>
<sipProxies>
<backupProxy></backupProxy>
<backupProxyPort></backupProxyPort>
<emergencyProxy></emergencyProxy>
<emergencyProxyPort></emergencyProxyPort>
<outboundProxy></outboundProxy>
<outboundProxyPort></outboundProxyPort>
<registerWithProxy>true</registerWithProxy>
</sipProxies>

<sipCallFeatures>
<cnfJoinEnabled>true</cnfJoinEnabled>
<callForwardURI>x-cisco-serviceuri-cfwdall</callForwardURI>
<callPickupURI>x-cisco-serviceuri-pickup</callPickupURI>
<callPickupListURI>x-cisco-serviceuri-opickup</callPickupListURI>
<callPickupGroupURI>x-cisco-serviceuri-gpickup</callPickupGroupURI>
<meetMeServiceURI>x-cisco-serviceuri-meetme</meetMeServiceURI>
<abbreviatedDialURI>x-cisco-serviceuri-abbrdial</abbreviatedDialURI>
<rfc2543Hold>false</rfc2543Hold>
<callHoldRingback>2</callHoldRingback>
<localCfwdEnable>true</localCfwdEnable>
<semiAttendedTransfer>true</semiAttendedTransfer>
<anonymousCallBlock>2</anonymousCallBlock>
<callerIdBlocking>2</callerIdBlocking>
<dndControl>0</dndControl>
<remoteCcEnable>true</remoteCcEnable>
</sipCallFeatures>

<sipStack>
<sipInviteRetx>6</sipInviteRetx>
<sipRetx>10</sipRetx>
<timerInviteExpires>180</timerInviteExpires>
<timerRegisterExpires>3600</timerRegisterExpires>
<timerRegisterDelta>5</timerRegisterDelta>
<timerKeepAliveExpires>120</timerKeepAliveExpires>
<timerSubscribeExpires>120</timerSubscribeExpires>
<timerSubscribeDelta>5</timerSubscribeDelta>
<timerT1>500</timerT1>
<timerT2>4000</timerT2>
<maxRedirects>70</maxRedirects>
<remotePartyID>false</remotePartyID>
<userInfo>None</userInfo>
</sipStack>

<autoAnswerTimer>1</autoAnswerTimer>
<autoAnswerAltBehavior>false</autoAnswerAltBehavior>
<autoAnswerOverride>true</autoAnswerOverride>
<transferOnhookEnabled>false</transferOnhookEnabled>
<enableVad>false</enableVad>

<stutterMsgWaiting>1</stutterMsgWaiting>
<callStats>false</callStats>
<silentPeriodBetweenCallWaitingBursts>10</silentPeriodBetweenCallWaitingBursts>
<disableLocalSpeedDialConfig>false</disableLocalSpeedDialConfig>
<startMediaPort>16384</startMediaPort>
<stopMediaPort>32766</stopMediaPort>

<sipLines>
<line button=”1″>
<featureID>9</featureID>
<featureLabel>0011</featureLabel>
<proxy>172.16.1.16</proxy>
<port>5060</port>
<name>8047</name>
<displayName>8047</displayName>
<autoAnswer>
<autoAnswerEnabled>2</autoAnswerEnabled>
</autoAnswer>
<callWaiting>3</callWaiting>
<authName></authName>
<AuthUserName></AuthUserName>
<authPassword></authPassword>
<sharedLine>false</sharedLine>
<messageWaitingLampPolicy>1</messageWaitingLampPolicy>
<messagesNumber>*97</messagesNumber>
<ringSettingIdle>4</ringSettingIdle>
<ringSettingActive>5</ringSettingActive>
<contact>0011</contact>
<forwardCallInfoDisplay>
<callerName>true</callerName>
<callerNumber>false</callerNumber>
<redirectedNumber>false</redirectedNumber>
<dialedNumber>true</dialedNumber>
</forwardCallInfoDisplay>
</line>

</sipLines>

<voipControlPort>5060</voipControlPort>
<dscpForAudio>184</dscpForAudio>
<ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy>

</sipProfile>

<webAccess>1</webAccess>

<loadInformation>SIP3951.8-1-4a</loadInformation>

<capfAuthMode>0</capfAuthMode>
<capfList>
<capf>
<phonePort>3804</phonePort>
</capf>
</capfList>

<certHash></certHash>
<encrConfig>false</encrConfig>

</device>

  • Set DHCP server dengan opsi 150 dan diarahkan ke server IP PBX untuk tftpserver.
  • Karena IP phone Cisco 3911 tidak bisa menggunakan username dan password, tambahkan ekstensi 8047 langsung ke sip_custom.conf:

 

;Cisco IP PHone 3911
[8047]
deny=0.0.0.0/0.0.0.0
secret=
canreinvite=no
context=from-internal
host=dynamic
type=friend
nat=yes
port=5060
qualify=yes
transport=udp
pickupgroup=
dial=SIP/8047
mailbox=8047@device
permit=0.0.0.0/0.0.0.0

  • Edit extensions_custom.conf di bawah context [from-internal-custom] tambahkan baris:

 

;cisco 3911
exten => 8047,1,Dial(SIP/8047,30)

  • Setelah klik Save dan Reload Asterisk, cabut dan nyalakan perangkat ip phone Cisco 3911. Jika berhasil, maka ip phone bisa digunakan untuk menelpon dan juga ditelpon.

photo_2016-11-07_15-59-51

 

Link Download:

Line/Trunk BLF di Grandstream GXP2200/GXP2200EXT & Elastix

Kadang memigrasikan sebuah PBX lama ke Asterisk based IP PBX gampang-gampang susah. Malah yang lebih membuat tidak mudah adalah user yang ingin mempertahankan “kebiasaan” dalam berkomunikasi melalui PBX lama. Salah satunya, yang sedang saya kerjakan adalah request operator untuk memunculkan indikator line/trunk mana yang kosong seperti di telepon keytel lamanya.

panasonic-digital-proprietary-telepon-kx-dt321-7524-765028-1

Sedangkan perangkat penggantinya adalah sebuah ip phone keluaran Grandstream seri GXP2200 + GXP2200EXT yang memiliki tambahan board dengan 20 tombol/lampu BLF (karena layar bisa digeser, bisa memuat 40 tombol cepat ekstensi yang bisa dihubungi).

gxp2200ext2_822f7560f300417004402e44dc5c486a

Akhirnya diputuskan memanfaatkan lampu indikator BLF tersebut untuk keperluan indikator line/trunk. Yang dilakukan adalah sebagai berikut:

Setting Elastix

Dengan asumsi IP PBX yang digunakan adalah Elastix dengan 10 line PSTN , maka edit file extensions_custom.conf melalui web (menu PBX -> Tools -> Asterisk File Editor -> Show Filter) dan tambahkan baris di bawah [from-internal-custom] seperti berikut:

[from-internal-custom]

exten => LINE01,1,Dial(DAHDI/1)
exten => LINE01,hint,DAHDI/1
exten => LINE02,1,Dial(DAHDI/2)
exten => LINE02,hint,DAHDI/2
exten => LINE03,1,Dial(DAHDI/3)
exten => LINE03,hint,DAHDI/3
exten => LINE04,1,Dial(DAHDI/4)
exten => LINE04,hint,DAHDI/4
exten => LINE05,1,Dial(DAHDI/5)
exten => LINE05,hint,DAHDI/5
exten => LINE06,1,Dial(DAHDI/6)
exten => LINE06,hint,DAHDI/6
exten => LINE07,1,Dial(DAHDI/7)
exten => LINE07,hint,DAHDI/7
exten => LINE08,1,Dial(DAHDI/8)
exten => LINE08,hint,DAHDI/8
exten => LINE09,1,Dial(DAHDI/9)
exten => LINE09,hint,DAHDI/9
exten => LINE10,1,Dial(DAHDI/10)
exten => LINE10,hint,DAHDI/10

Klik Save dan Reload Asterisk. Setelah itu, edit sip_custom.conf dari web juga dan tambahkan baris:

[LINE01]
subscribecontext=from-internal-custom
[LINE02]
subscribecontext=from-internal-custom
[LINE03]
subscribecontext=from-internal-custom
[LINE04]
subscribecontext=from-internal-custom
[LINE05]
subscribecontext=from-internal-custom
[LINE06]
subscribecontext=from-internal-custom
[LINE07]
subscribecontext=from-internal-custom
[LINE08]
subscribecontext=from-internal-custom
[LINE09]
subscribecontext=from-internal-custom
[LINE10]
subscribecontext=from-internal-custom 

Atau kalau mau lebih ringkes:

[trunk-blf](!)

subscribecontext=from-internal-custom

[LINE01](trunk-blf)

[LINE02](trunk-blf)

[LINE03](trunk-blf)

[LINE04](trunk-blf)

[LINE05](trunk-blf)

[LINE06](trunk-blf)

[LINE07](trunk-blf)

[LINE08](trunk-blf)

[LINE09](trunk-blf)

[LINE10](trunk-blf)

Klik Save dan Reload Asterisk.

Setting Di Grandstream GXP2200

Login di web manajemen GXP2200, pilih tab Advanced Settings -> MPK EXT1 Settings lalu pilih line MPK 1 sampai dengan 10. Untuk pengisian, misal di MPK nomer 10:

Key ModeBusy Lamp Field (BLF)

Account : <nama akun SIP>

Name: <nama line yang akan muncul di layar> LINE10

UserID: <sesuai setting di sip_custom.conf> LINE10

line-pstn-monitoring

Setting yang sama untuk line 1 – 9 seperti pada gambar. Jika berhasil, maka seluruh line/trunk akan terdeteksi di BLF GXP2200EXT.

photo_2016-11-06_00-11-37

Kalau kita melakukan panggilan keluar, maka line yang digunakan akan berwarna merah:

photo_2016-11-06_00-11-43

Selain itu kita juga bisa memilih hendak menelpon melalui line/trunk yang manapun dengan menekan salah satu tombol BLF line/trunk tersebut. Dan yang lebih lucu lagi, kita bisa menyusun ulang tombol-tombol BLF sesuai permintaan. Misal, LINE01 di baris BLF di atas dimulai dari sebelah kanan, lalu LINE02 di kiri, LINE03 ke kanan dst seperti zigzag. Request dari user, agar supaya semua BLF terkumpul di sebelah kiri semua. Di halaman MPK EXT1 Settings di atas, kita bisa mengurutkan dengan menekan tombol up down dengan mudah.

photo_2016-11-06_00-17-51

Selamat mencoba!

Spotify di Ubuntu

Sebenarnya di web Spotify sendiri sudah ada instruksinya. Cuma ya masih ada aja yang nanya ke sana ke sini alih-alih nyari dulu di web-nya. Jadi berikut ini saya comot apa adanya dari https://www.spotify.com/id/download/linux/

Installation

# 1. Add the Spotify repository signing key to be able to verify downloaded packages
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys BBEBDCB318AD50EC6865090613B00F1FD2C19886

# 2. Add the Spotify repository
echo deb http://repository.spotify.com stable non-free | sudo tee /etc/apt/sources.list.d/spotify.list

# 3. Update list of available packages
sudo apt-get update

# 4. Install Spotify
sudo apt-get install spotify-client

[Tips] Menghilangkan Warning “chan_iax2.c: update_registry: Restricting registration for peer ‘XXXX’ to 60 seconds”

Pernah menemui log seperti ini:

[2016-09-27 11:31:14] NOTICE[2284]: chan_iax2.c:8974 update_registry: Restricting registration for peer ‘XXXX’ to 60 seconds (requested 30 0)
[2016-09-27 11:32:09] NOTICE[2284]: chan_iax2.c:8974 update_registry: Restricting registration for peer ‘XXXX’ to 60 seconds (requested 30 0)
[2016-09-27 11:33:04] NOTICE[2278]: chan_iax2.c:8974 update_registry: Restricting registration for peer ‘XXXX’ to 60 seconds (requested 30 0)
[2016-09-27 11:33:59] NOTICE[2280]: chan_iax2.c:8974 update_registry: Restricting registration for peer ‘XXXX’ to 60 seconds (requested 30 0)
[2016-09-27 11:34:54] NOTICE[2278]: chan_iax2.c:8974 update_registry: Restricting registration for peer ‘XXXX’ to 60 seconds (requested 30 0)

contohnya kalau kita memiliki virtual FAX di Asterisk kita dengan IAX2 protocol, biasanya sering muncul log demikian. Sebenarnya ini ndak menimbulkan masalah, tapi cukup untuk memenuhi log, apalagi jika verbosity-nya tinggi. Untuk mengatasi warning tersebut,edit file /etc/iaxmodem/iaxmodem-cfg.ttyIAX1 dan ganti baris:

refresh         300

Menjadi:

refresh         60

Lalu reload iaxmodem dengan perintah:  service iaxmodem restart.

Selamat mencoba.