User Tools

Site Tools


panduan:panduan_instalasi_dan_konfigurasi_asterisk

Panduan Instalasi dan Konfigurasi Asterisk

Sebuah sistem PBX yang sederhana

Seperti apa sistem pbx yang sederhana? sistem pbx yang sederhana yaitu sistem yang hanya memerlukan dua telepon dan sebuah “kotak hitam” yang menghubungkan keduanya. Dalam kasus ini, ”kotak hitam adalah sebuah PC konvensional yang akan kita install Asterisk; dan dua telepon itu kita sebut “softphone”, dinamakan seperti itu karena memang hanya diimplementasikan dalam software. Kita akan menginstall softphone pada sebuah PC. Sebagai contoh, persyaratan untuk kasus ini cukup sederhana: kita cukup memakai PC pada umumnya yang dapat kita install distribusi linux saat ini.

Tujuan

  • Mengubah sebuah PC dengan sebuah distribusi linux yang baru terinstall menjadi sebuah mini PBX.
  • Install dan mengkonfigurasi dua telepon VoIP dan memberi nomor extension 2000 dan 2001
  • Panggil extension 2001 dari 2000 dan sebaliknya

Persyaratan
Anda akan membutuhkan sebuah PC modern dengan memory yang cukup. Meskipun memungkinkan untuk meninstall pada sebuah hardware yang lebih tua, prosesnya akan lebih lama dan30 menit tidak akan cukup. (Bekerja pada harware yang cukup tua juga membuat frustasi). Sebagai syarat minimal, anda harus mempunyai sebuah pentium 500 Mhz dengan miniaml 512 MB RAM dan minimal 20GB hardisk. Asterisk akan jalan pada semua distribusi linux terkini. Pastikan distribusi yang anda pakai adalah yang terbaru. Pada contoh berikut, kami asumsikan anda menggunakan distro linux debian atau turunannya. Instruksi konfigurasi individu dimasukkan pada bari perintah.

Versi asterisk yang mana?
Asterisk Version 1.4 telah direlease pada akhir 2006 dan dianggap telah stable. Pembahasan ini akan fokus pada versi 1.4; kecuali dengan catatan lain, penjelasan perintah disini juga bisa digunakan untuk Asterisk 1.2.

Distro linux yang mana yang bagus untuk Asterisk?
Diskusi tentang distro linux yang paling cocok untuk Asterisk adalah terserah pengguna. Kalau disini menggunakan Debian atau RedHat bukan berarti distro itu paling cocok. Tapi contoh yang ada disini hanya cocok untuk distro Debian.

Mengapa kita tidak memakai paket asterisk dengan aptget atau rpm?
Alasan sederhana untuk ini adalah: yang berlaku saat ini.Sampai saat tulisan ini dibuat, tidak ada distro linux yang memiliki versi asterisk yang stable. Proyek Asterisk aktif secara ekstrim dan selalu berubah. Tidak akan ada artinya untuk menginstall versi 1 ketika versi 1.4 telah direlease dalam waktu setahun dan lebih baik. Kembali untuk bekerja dengan mengkompile paket sumber, anda akan mendapatkan pengetahuan sistem Asterisk anda adalah yang terbaru dan anda tidak perlu berharap dari pemelihara paket untuk distro spesifik anda.

Menginstall dari sumber Asterisk terbaru
Anda dapat mencari cara menginstall Asterisk untuk berbagai distro linux di Internet. Setelah dapat menginstall kembali ke petunjuk sini.

Mengkonfigurasi Asterisk Server
Anda dapat mencari semua file konfigurasi Asterisk untuk instalasi standar dalam directory /etc/asterisk:

debian:/usr/src# cd /etc/asterisk
debian:/etc/asterisk# ls 
adsi.conf cdr_tds.conf indications.conf 
privacy.conf 
adtranvofr.conf codecs.conf logger.conf queues.conf 
agents.conf dnsmgr.conf manager.conf res_odbc.conf 
alarmreceiver.conf dundi.conf meetme.conf rpt.conf 
alsa.conf enum.conf mgcp.conf rtp.conf 
asterisk.adsi extconfig.conf misdn.conf sip.conf 
asterisk.conf extensions.ael modem.conf 
sip_notify.conf 
cdr.conf extensions.conf modules.conf skinny.conf 
cdr_custom.conf features.conf musiconhold.conf 
telcordia1. 
adsi 
cdr_manager.conf festival.conf osp.conf 
voicemail.conf 
cdr_odbc.conf iax.conf oss.conf vpb.conf 
cdr_pgsql.conf iaxprov.conf phone.conf zapata.conf 
debian:/etc/asterisk# 

Untuk miniPBX kita, kita hanya perlu dua buah file. pertama, kita perlu menyalin file yang dibuat dengan make samples ke /etc/asterisk/backup/ (Kita dapat mengambilnya untuk keperluan nanti; secara umum, tindakan yang bagus untuk menyalin file asli ke directory backup ketika anda melakukan perubahan)

debian:/etc/asterisk# mkdir backup 
debian:/etc/asterisk# mv sip.conf backup/ 
debian:/etc/asterisk# mv extensions.conf backup/ 
debian:/etc/asterisk# 

Dengan menggunakan favorite editor anda, buat sebuah file baru / etc/asterisk/sip.conf dan masukkan berikut ini:

[general]
port = 5060 
bindaddr = 0.0.0.0 
context = others 
[2000] 
type=friend 
context=myphones 
secret=1234 
host=dynamic 
[2001] 
type=friend 
context=myphones 
secret=1234 
host=dynamic 

Kita menulis sebuah dialplan sederhana pada /etc/asterisk/extensions.conf:

[others] 
[myphones] 
exten => 2000,1,Dial(SIP/2000) 
exten => 2001,1,Dial(SIP/2001) 

Apakah beberapa baris tersebut cukup untuk mengkonfigurasi PBX? Mari kita coba! Jalankan Asterisk dengan perintah shell

asterisk c: 
debian:/etc/asterisk# asterisk c 
Asterisk 1.4.2, Copyright (C) 1999 2005 
Digium. 
Written by Mark Spencer 
* CLI> 

Setelah Asterisk dijalankan, kita akan mendapatkan sebuah konsol yang memungkinkan kita untuk berkomunikasi dengan proses asterisk yang berjalan. Apa yang kita lihat sekarang adalah Asterisk CLI (command line interface) yang memperbolehkan kita untuk mengendalikan Asterisk secara interacktif. Aksi pertama kita adalah untuk menghentikan asterisk secara langsung dengan perintah stop now:

*CLI> stop now 
debian:/etc/asterisk# 

Kemudian, kita harus menghubungkan dua SIP phone ke miniPBX.Jika anda tidak memiliki ip phone, anda dapat menggunakan software phone (”softphones”) yang dapat diunduh dari Internet. Untuk konfigurasi pengguna pada telepon, gunakan informasi extension yang telah kita set di /etc/asterisk/sip.conf. Extension Sip 2000 harus dikonfigurasi untun ini:

  • User: 2000
  • Password: 1234
  • SIPRegistrar: IP address server asterisk kita
  • SIPProxy: IP address server asterisk kita

Jika anda tidak mengetahui alamat IP dari server astersik, anda dapat mencari dengan perintah berikut:

ifconfig | grep Bcast | sed s/Bcast.*// 

Sekarang kita jalankan Asterisk kembali, untuk kali ini dengan konsole verbose yang lebih banyak, sehingga kita dapat melihat apa yang sedang terjadi ketika kita mencoba melakukan panggilan. Kita lakukan dengan menambahkan parameter vvvvvc setelah perintah (5 v artinya “verbosity level 5”). Dengan ini kita dapat melihat kapan SIP phone terdaftar pada PBX:

debian:/etc/asterisk# asterisk vvvvvc 
[…] 
Asterisk Ready. 
*CLI> 

Sekali anda mengkonfigurasi SIP telepon, saatnya untuk mendaftarkannya ke server. Untuk meyakinkannya, matikan telepon dan hidupkan kembali (atau jika menggunakan softphone, tutup dan buka kembali aplikasinya). Ini memerlukan kesabaran, beberapa SIP phone sangat lambat dan membutuhkan beberapa menit untuk selesai rebooting. Jika semua berjalan baik, kita akan melihat telepon terdaftar dengan Asterisk:

*CLI> — Registered SIP ‘2000 at 87.143.3.144 port 
5060 
expires 120 — Unregistered SIP ‘2000 
*CLI> — Registered SIP ‘2001 at 87.143.3.145 port 
5060 
expires 120 — Unregistered SIP ‘2001 

Setelah telephone terdaftar, kita dapat melakukan beberapa panggilan. Bagian ini cukup mudah gunakan extension 2000, tekan 2001. Jika anda berhasil melakukan percakapan, anda telah berhasil! miniPBX pertama anda dengan Asterisk telah bekerja. Anda dapat menghentikan Asterisk kapan saja dengan menuliskan stop now pada CLI Asterisk.

Sebuah mesin penjawab
Asterisk dilengkapi dengan modul voicemail, tetapi perlu dikonfigurasi terlebih dahulu di /etc/asterisk/voicemail.conf sebelum kita dapat menggunakannya. Sebagai langkah awal (seharusnya dijadikan kebiasaan) Kita salin file default ke dalam directory backup yang pernah kita buat:

debian:/# cd /etc/asterisk
debian:/etc/asterisk# mv voicemail.conf backup/

Sekarang kita dapat membuat sebuah file baru /etc/asterisk/voicemail.conf dan ketikkan konfigurasi berikut:

[general]
format = wav
[default]
2000 => 4711,Coba voicemail,coba@ugm.ac.id
2001 => 0815,Coba lagi,mail@ugm.ac.id

Kita telah mengkonfigurasi dua mailbox default (ya, memang sederhana). Kita belum selesai. Kita perlu menambahkan beberapa baris dalam / etc/asterisk/extensions.conf untuk menghubungkan mailbox tersebut ke telephone kita dan membuatnya dapat diakses. Pastikan untuk menambah “,20 p ada akhir perintah Dial():

[others]
[myphones]
exten => 2000,1,Dial(SIP/2000,20)
exten => 2000,2,VoiceMail(2000,u)
exten => 2001,1,Dial(SIP/2001,20)
exten => 2001,2,VoiceMail(2001,u)
exten => 2999,1,VoiceMailMain(${CALLERID(num)},s)

Selesai! Sekarang jalankan asterisk dengan perintah asterisk vvvvvc dan buat panggilan ke extension 2000. Setelah 20 detik (”20 pada akhir perintah Dial()), panggilan akan dialihkan ke voicemail. Jika extension 2000 sibuk, panggilan langsung menuju voicemail. Anda dapat mengecek pesan pada extension 2000 dengan menekan 2999, yang akan mengarahkan anda ke menu untuk mendapatkan voicemail. Untuk lebih rinci tentang konfigurasi email (seperti menambahkan password atau penjelasan pada menu voicemail) akan dijelaskan kemudian.

Apa yang baru saja kita lakukan?
Setelah berhasil menjalankan perintah di atas, sekarang mari kita lihat file konfigurasi baris demi baris, dimulai dari /etc/asterisk/sip.conf. Ini akan membantu kita memahami apa yang dilakukan Asterisk dan mengapa.

[general]
port = 5060
bindaddr = 0.0.0.0
context = others

Pada seksi pertama, disebut [general], kita mengatur nilai variabel global. Port standard untuk koneksi SIP connections adalah 5060. Nilai bindaddr = 0.0.0.0 memberitahukan Asterisk untuk mendengarkan koneksi pada semua alamat IP yang terkonfirugasi pada sistem. Kebanyakan sistem hanya mempunyai sebuah alamat IP. Jika kita memiliki beberapa konfigurasi antarmuka fisik atau virtual, atau mungkin beberapa instance dari Asterisk yang berjalan, dan anda ingin menentukan alamat IP mana Asterisk akan menerima koneksi, anda dapat menentukan alamat address tersebut dengan mengisi bindaddr. Nilai context adalah spesial dan perlu penjelasan lebih, maka akan dijelaskan lebih detail kemudian. Selama anda mengikuti perintah dan contoh, anda akan menjadi lebih nyaman dan memahami dengan ide dari “context” yang diterapkan pada Asterisk dan belajar bagaimana untuk memakainya.

[2001]
type=friend
context=myphones
secret=1234
host=dynamic

Bagian [2001] memberikan parameter untuk extension SIP 2001. Kita menggunakan nomor sebagai ketentuan; meskipun kebanyakan orang menginginkan extensions memiliki nomor, extension SIP dapat juga dibuat dengan sebuah alphanumeric — sebagai contoh, [Operator1]. Parameter type=friend menunjukkan bahwa extension SIP dapat menerima dan membuat panggilan Selanjutnya, context. Kita memanggil context myphones pada /etc/asterisk/extensions.conf; Ketika kira melihat pada file bagian berikutnya, aplikasi dari kontek akan lebih jelas. isi dari secret adalah sebuah password untuk extension SIP. Kita menggunakannya untuk menghindari alat yang tak diijinkan mendaftar sebagai extension 2001. Lebih baik menggunakan angka disini, karena lebih mudah memasukkan angka pada kebanyakan telepon. Istilah host=dynamic memberitahukan Asterisk bahwa alamat IP dari extension SIP dapat berupa apa saja.
extensions.conf Asterisk dialplan
/etc/asterisk/extensions.conf — dikenal sebagai “dialplan” — adalah jantung dari setiap konfigurasi Asterisk (Kita akan membahas pada pemrograman dalam dialplan). Sebagai gambaran, anda dapat menyamakannya dengan sebuah switchboard yang digunakan oleh sistem telepon dahulu. Dialplan menentukan telepon mana dapat menelepon telepon lain, dan bagaimana. Dialplan dibagi dalam contexts.

[others]

Pada bagian pertama pada konfigurasi ini adalah context [others]. Karena kita tidak memakai dalam contoh ini, maka bisa dikosongkan.

[myphones]
exten => 2000,1,Dial(SIP/2000,20)
exten => 2000,2,VoiceMail(2000,u)

Asterisk selalu menggunakan context ketika menangani sebuah panggilan telepon satu ke lainnya. Nama context name hanya dibatasi dari imajinasi kita, tetapi harus selalu konsisten antar file konfigurasi. Ini artinya bahwa jika anda menyukai sebuah context myphones dalam /etc/asterisk/sip.conf, anda harus menggunakan nama yang sama pada bagian yang sesuai di /etc/asterisk/extensions.conf. context sangat penting pada beroperasinya telepon! Karena menentukan nomor extension apa dapat dipanggil dan aksi apa yang diperbolehkan.
Penulisan dialplan selalu mengikuti peraturan berikut:

exten => Nomor,Prioritas,Aplikasi

Ketika sebuah nomor dipanggil, Asterisk akan mengecek untuk mengetahui apakah sesuai dengan dialplan. Jika ditemukan kesesuaian, makan masukan itu akan dibaca dan dijalankan. Jika terdapat lebih dari sebuah masukan untuk nomor yang dipanggil, Asterisk akan menjalankan isi dengan prioritas 1 lebih dahulu. Parameter ketiga (”Application”) menentukan apa yang akan dilakukan Asterisk dengan panggilan itu. Berdasarkan pada konfigurasi contoh kita, yang terjadi ketika sebuah panggilan dari 2001 ke 2000 adalah:

  • Asterisk melihat context dari extesion yang memanggil (2001) dalam /etc/asterisk/sip.conf. Pada contoh kita, Contextnya adalah [myphones]. Asterisk menggunakan context ini untuk menentukan kelompak mana yang digunakan dalam /etc/asterisk/extensions.conf.
  • Setelah menemukan context [myphones] dalam /etc/asterisk/extensions.conf, Asterisk menjalankan isi yang sesuai dengan nomor yang dipanggil, 2000, dengan prioritasnya. Kita memiliki dua baris yang sesuai pada contoh kita.
  • Isi yang sesuai dengan prioritas 1 akan dijalankan terlebih dahulu, Tidak pedulu urutan secara fisik dalam isian. Disini, isian dengan prioritas 1 memiliki aplikasi Dial(SIP/2000,20). Aplikasi Dial() dijalankan dengan paramater yang telah diberikan; seperti pada isian nomor 2000 dalam /etc/asterisk/sip.conf dan bunyikan dalam 20

detik(angka “,20 s etelah SIP/2000).

  • Jika extension SIP 2000 tidak menjawab dalam 20 detik, Dial()selesai dan prioritas ditambah 1.
  • Isi yang sesuai selanjutnya — exten ⇒ 2000,2,VoiceMail(2000,u)— dijalankan. Asterisk menjalankan aplikasi VoiceMail() dengan parameter “2000 dan “u”. “2000 adalah untuk nomor mailbox seperti yang dikonfigurasi dalam /etc/asterisk/voicemail.conf; “u” memberitahukan Asterisk untuk menggunakan pesan standar “unavailable”.

tentu saja, voicemail tidak ada gunanya kecuali anda dapat mengambil pesan yang ditinggalkan kepada anda. Kita dapat memberi akses dengan mengisi:

exten => 2999,1,VoiceMailMain(${CALLERID(num)},s)

terdapat fungsi dialplan pertama kita di Asterisk! kita memanggil aplikasi VoiceMailMain() dengan fungsi ${CALLERID(num)} sebagai parameter. fungsi ${CALLERID(num)} mengembalikan nomor dari pihak yang memanggil. Dengan cara ini, VoiceMailMain() selalu tahu untuk mengambil pesan untuk telepon yang memanggilnya. Jika parameter tidak diisi, kita akan ditanya nomor mailbox. parameter “,s” memberitahu VoiceMailMain() untuk tidak meminta password untuk pemanggil.

Memanggil jaringan telepon umum (PSTN)
Sekarang, anda mungkin berpikir “Memang bagus kalau memilik sistem telepon yang sudah bekerja, tetapi bagaimana kalau tidak bisa memanggil ke dunia luar yang lainnya?” Dengan sedikit konfigurasi dan koneksi internet, kita akan mengatasi permasalahan tersebut. Anda perlu sebuah akun dengan sebuah penyedia jasa telepon SIP. Contoh berikut memberikan contoh konfiguras untuk sebuah koneksi ke sebuah penyedia telepon SIP. Ada tersedia banyak sekali penyedia SIP. Gunakan Google™ untuk mencari penyedia SIP yang akan anda coba. Sekali terkonfigurasi, anda akan dapat memanggil ke PSTN atau penyedia SIP laindari extensi Asterisk anda. Pertama, informasi akun penyedia SIP harus dimasukkan dalam /etc/asterisk/sip.conf:

[general]
port = 5060
bindaddr = 0.0.0.0
context = others
register => 5587572:UHDZJD@penyediaSIP.
com/5587572
; ^ ^ ^ ^
; | | | |
; User Password Provider User
[2000]
type=friend
context=myphones
secret=1234
host=dynamic
[2001]
type=friend
context=myphones
secret=1234
host=dynamic
[extsipaccount]
type=friend
context=darivoipprovider
username=5587572
fromuser=5587572
secret=UHDZJD
host=penyediaSIP.
com
fromdomain=penyediaSIP.
com
qualify=yes
insecure=very
nat=yes

Ketika kita membuka sebuah akun, penyedia SIP akan memberikan sebuah username (dalam contoh ini adalah 5587572) dan password (dalam contoh ini adalah UHDZJD). Sekali akun SIP terkonfigurasi, kita masih harus menambahkan beberapa baris dalam /etc/asterisk/extensions.conf untuk memakai panggilan keluar:

[others]
[myphones]
exten => 2000,1,Dial(SIP/2000,20)
exten => 2000,2,VoiceMail(2000,u)
exten => 2001,1,Dial(SIP/2001,20)
exten => 2001,2,VoiceMail(2001,u)
exten => 2999,1,VoiceMailMain(${CALLERID(num)},s)
exten => _0[19].,
1,Dial(SIP/${EXTEN}@extsipaccount)

Sesudah kita memasukkan baris baru, simpan file dan jalankan asterisk seperti sebelumnya, dengan asterisk -vvvvvc dan kita akan mendapatkan CLI. Tunggu beberapa detik telepon SIP akan terdaftar. Sekarang tekan nomor keluar. Jike segala sesuatu berjalan sesuai yang diharapkan, anda akan mendengar saluran tujuan berbunyi dan dapat melihat proses panggilan melalui CLI.

Menerima panggilan dari PSTN
Langkah terakhir cukup singkat: kita menginginkan untuk dapat menerima panggilan dari penyedia SIP kita pada extensi 2000. Untuk melakukan ini, kita perlu untuk menambahkan kontek lain pada /etc/asterisk/extensions.conf:

[others]
[myphones]
exten => 2000,1,Dial(SIP/2000,20)
exten => 2000,2,VoiceMail(2000,u)
exten => 2001,1,Dial(SIP/2001,20)
exten => 2001,2,VoiceMail(2001,u)
exten => 2999,1,VoiceMailMain(${CALLERID(num)},s)
exten => _0[19].,
1,Dial(SIP/${EXTEN}@extsipaccount)
[darivoipprovider]
exten => 18885556266,1,Dial(SIP/2000)

Selesai!!
Pada contoh kita, nomor 18885556266 adalah nomor PSTN number (juga disebut sebagai DID;) diberikan ke akun anda oleh penyedia SIP. Tentu saja anda juga dapat menambahkan voicemail untuk menerima panggilan dari PSTN:

[others]
[myphones]
exten => 2000,1,Dial(SIP/2000,20)
exten => 2000,2,VoiceMail(2000,u)
exten => 2001,1,Dial(SIP/2001,20)
exten => 2001,2,VoiceMail(2001,u)
exten => 2999,1,VoiceMailMain(${CALLERID(num)},s)
exten => _0[19].,
1,Dial(SIP/${EXTEN}@extsipaccount)
[darivoipprovider]
exten => 18885556266,1,Dial(SIP/2000,20)
exten => 18885556266,2,VoiceMail(2000,u)

Pada bahasan ini hanya menunjukkan bagaimana anda dapat secara cepat membuat sebuah sistem asterisk bekerja. Pada bahasan selanjutnya, kita akan menambahkan sedikitsedikit dan menunjukkan kepada anda seberapa banyak anda dapat melakukannya dengan Asterisk.

Dasar-dasar Dialplan

Dialplan adalah jantung dari Asterisk, dan segala sesuatu bermula disini. Untuk membuat dialplan dibutuhkan dua file penting di /etc/asterisk. Pertama adalah extensions.conf, masih menggunakan model asli dan prioritas; yang kedua adalah extensions.ael, yang menggunakan bahasa ekstensi Asterisk yang baru; kita akan melihat lebih detail pada bahasan berikut. Untuk saat ini, kita akan menggunakan model prioritas tradisional, meskipun pada versi 1.4, extension.ael telah diubah dalam format prioritas dan ditambahkan ke extensions.conf ketika Asterisk dijalankan.

Context
Asterisk dialplan dibagi dalam dua bagian, dan masing-masing bagian disebut sebagai context. Setiap dialplan harus dimulai dari sebuah context [general] tempat untuk memasukkan konfigurasi global, tetapi context selanjutnya dapat memiliki nama apa saja. Contexts dapat berarti peralatan fisik (biasanya telephone, tetapi tidak selalu; sebagai contoh, SIP atau ZAP) yang dikatikan terhadapnya. Konfigurasi untuk setiap peralatan, bisa softphone, hardphone atau outgoing trunk, harus ditentukan context defaultnya. Berikut contoh dari sip.conf:

[2000]
type=friend
context=internalphones
secret=1234
host=dynamic

Peralatan SIP yaitu 2000 selalu memulai panggilan dalam context internalphones. Maksudnya bahwa jika penelepon menggunakan telepon ini untuk melakukan panggilan, Asterisk akan melihat pada context internal phones untuk sebuah extensi yang cocok dengan nomor panggilan. Jika tidak ada yang cocok, tidak akan dilakukan apaapa.

Syntax
Contexts dibuat dengan sebuah nama dalam kurung siku (”[” dan “]”). Idealnya, namanya harus sesuai dan membantu penggunaan dari context itu. Nama ini juga akan digunakan untuk mengacu pada context lainnya, mungkin dalam context lain atau di file konfigurasi Asterisk lain. Semua baris sesudah nama context adalah bagian dari context itu, sampai terdapat context berikutnya:

[general]
[internalphones]
Aturan, perintah, dsb.
[widgets]
Aturan, perintah, dsb.

Extension
Setiap masukan di extensions.conf disebut extensions. Extensions diterjemahkan oleh Asterisk setiap panggilan dibuat, tetapi extensions.conf hanya dibaca oleh Asterisk pada waktu pertama dijalankan. Anda juga dapat memperbarui dialplan selama beroperasi melalui CLI (Command Line Interface) dengan memasukkan perintah reload now (yang akan memanggil kembali semua konfigurasi) atau extensions reload (yang hanya akan memanggil kembali dialplan)

Syntax
Sebuah extension terdiri dari beberapa bagian:

  • Extension (Nama atau nomor)
  • Prioritas (semacam nomor baris program)
  • Applikasi sebuah aplikasi yang memberitahukan Asterisk apa yang harus dilakukan dengan panggilan.
exten => Extension,Prioritas,Aplikasi
contoh:
exten => 123,1,Answer()

Aplikasi-aplikasi Penting
Untuk membuat contoh dialplan pada bahasan ini, kita perlu aplikasi-aplikasi dasar berikut:

  • Answer()

Aplikasi Answer() bertugas untuk menjawab sebuah panggilan. Ketika sebuah kanal berbunyi, Answer() memberitahu Asterisk untuk “menerima secara maya.”

  • Hangup()

Hangup() kebalikan dari Answer(). Sebuah koneksi aktif dihentikan, dan Asterisk “menutup” penerimaan maya.

  • Playback(Filesuara)

Aplikasi ini memberitahu Asterisk untuk memainkan file suara tertentu. Secara default, akan memainkan file suara yang terdapat dalam /var/lib/asterisk/sounds/, tetapi anda dapat juga menentukan directory lainnya. Tidak ada extension file yang diberikan karena directory mungkin berisi suara yang sama dalam format yang berbeda. Asterisk akan memilih format yang paling sesuai.

  • Wait(angka)

Wait() bisa diartikan sebagai jeda/pause; Angka mengindikasikan berapa detik untuk jeda.

  • NoOp(string)

Aplikasi ini tidak melakukan apa-apa. “NoOp” berarti “no operation.” Aplikasi ini berguna ketika anda mencoba mengatasi permasalahan dengan dialplan anda. Ketika NoOp(string) dijalankan, Asterisk mencetak string pada CLI, hanya kelihatan jika tingkat verbosity diatur ke 3 (anda dapat melakukan dengan mudah dengan memasukkan perintah set verbose 3 pada CLI).

  • VoiceMail(mailbox,u) ; Memungkinkan pemanggil meninggalkan pesan suara dalam mailbox yang dibuat.
  • VoiceMailMain() ; Menyediakan akses ke sistem voicemail. Pemilik mailbox akan menggunakannya untuk mengambil pesannya.

Prioritas
Ekstensi pada umumnya terbentuk dari beberapa baris. Masing-masing baris mempunyai prioritas, jadi Asterisk tahu urutan dalam menjalankan perintah-perintah itu. Jika anda pernah mengenal versi pertama dari BASIC, Anda mungkin sudah biasa dengan nomor baris; prioritas bekerja dengan cara yang sama, tetapi dengan satu perbedaan penting. Aplikasi dijalankan dengan urut nomor dari yang kecil ke besar, tetapi tidak ada selisih! Jika Asterisk menjalankan isian dengan prioritas n, maka akan dilihat isi selanjutnya pada n+1. Jika tidak dapat menemukan pada n+1, maka akan berhenti menjalankan tanpa menampilkan kesalahan pada CLI.

Sebuah contoh “Hello World!”
Extension berikut akan dijalankan ketika sebuah telephone dengan context default widgets menelpon 8888. Asterisk akan mengangkat saluran, memainkan file suara helloworld (yang telah tersintall dengan Asterisk) dan kemudian memutuskan.

[widgets]
exten => 8888,1,Answer()
exten => 8888,2,Playback(helloworld)
exten => 8888,3,Hangup()

n priority
Untuk membuat kerja dengan prioritas menjadi mudah, Mulai dari Asterisk versi 1.2 ke atas telah mendukung prioritas n. Prioritas n seperti penomoran otomatis; ketika Asterisk menjalankan dialplan dan mendapatkan isian dengan prioritas n, langsung saja dijalankan karena sama juga dengan prioritas sebelumnya ditambah 1. Hal ini berguna ketika anda memiliki ekstensi dengan banyak isian dan anda perlu menambah atau menghilangkan sebuah isian, karena menghemat tenaga daripada menulis ulang nomornomor pada extension. Contoh berikut mengilustrasikan apa yang kami maksud. Sebuah standar extensi akan kelihatan seperti berikut:

exten => 1234,1,Answer()
exten => 1234,2,Wait(2)
exten => 1234,3,Playback(helloworld)
exten => 1234,4,Wait(2)
exten => 1234,5,Hangup()

Anda dapat membuat extension yang sama dengan prioritas n:

exten => 1234,1,Answer()
exten => 1234,n,Wait(2)
exten => 1234,n,Play(helloworld)
exten => 1234,n,Wait(2)
exten => 1234,n,Hangup()

Anda dapat memulai menggunakan prioritas n di sembarang baris pada ekstensi, selama semua isian menggunakannya:

exten => 1234,1,Answer()
exten => 1234,2,Wait(2)
exten => 1234,3,Play(helloworld)
exten => 1234,n,Wait(2)
exten => 1234,n,Hangup()

Pattern Matching
Dengan pengetahuan kita sejauh ini, kita perlu menulis extension terpisah untuk setiap telepon. Karena sistem terus bertambah, maka penulisan extension akan semakin besar dan pencarian kesalahan akan lebih sulit. Untuk contoh, misalkan kita memerlukan nomor 100 sampai 109 untuk memainkan file suara “hello world”. Extensions.conf kita akan tampak seperti berikut:

[general]
[widgets]
exten => 100,1,Answer()
exten => 100,2,Playback(helloworld)
exten => 100,3,Hangup()
exten => 101,1,Answer()
exten => 101,2,Playback(helloworld)
exten => 101,3,Hangup()
exten => 102,1,Answer()
exten => 102,2,Playback(helloworld)
exten => 102,3,Hangup()
exten => 103,1,Answer()
exten => 103,2,Playback(helloworld)
exten => 103,3,Hangup()
exten => 104,1,Answer()
exten => 104,2,Playback(helloworld)
exten => 104,3,Hangup()
exten => 105,1,Answer()
exten => 105,2,Playback(helloworld)
exten => 105,3,Hangup()
exten => 106,1,Answer()
exten => 106,2,Playback(helloworld)
exten => 106,3,Hangup()
exten => 107,1,Answer()
exten => 107,2,Playback(helloworld)
exten => 107,3,Hangup()
exten => 108,1,Answer()
exten => 108,2,Playback(helloworld)
exten => 108,3,Hangup()
exten => 109,1,Answer()
exten => 109,2,Playback(helloworld)
exten => 109,3,Hangup()

Jika kita menggunakan sebuah pattern (pola), dialplan yang sama akan menjadi lebih ringkas dan baik:

[general]
[widgets]
exten => _10X,1,Answer()
exten => _10X,2,Playback(helloworld)
exten => _10X,3,Hangup()

Extension ‘_10X’ menjelaskan nomor antara 100 sampai 109.

Syntax
Pola Dialplan selalu dimulai dengan karakter garisbawah (_):

exten => _Pola,Prioritas,Aplikasi

[abc]
digit a, b dan c. Sebagai contoh, untuk cocok dengan 34, 37, dan 38:

exten => _3[478],1,NoOp(Test)

[ab]
Sembarang digit dalam jangkauan a sampai b. Contoh, untuk cocok dengan nomor antara 31 dan 35:

exten => _3[15],
1,NoOp(Test)

(contoh. [258] juga bisa diterima untuk digit 2,5,6,7,8)

X
Sembarang digit dari 0 sampai 9. Contoh, untuk cocok antara nomor 300 dan 399:

exten => _3XX,1,NoOp(Test)

Z
Sembarang digit dari 1 sampai 9. Contoh, untuk cocok antara nomor 31 sampai 39:

exten => _3Z,1,NoOp(Test)

N
Sembarang digit antara 2 sampai 9. Contoh, untuk cocok antara nomor 32 dan 39:

exten => _3N,1,NoOp(Test)

.
Sembarang nomor digit apa saja. Contoh, untuk cocok dengan semua angka dimulai dengan 011:

exten => _011.,1,NoOp(Test)

Peringatan!!
Jangan gunakan pola ‘_.’ ! Pola ini juga akan memasukkan ekstensi khusus seperti i, t dan h. Gunakan _X. atau _X jika anda memperluas penyamaan pola.

!
Karakter khusus ‘wildcard’ akan cocok dengan nomor yang dipanggil segera jika tidak bermakna ganda; Contoh, ketika nomor ditekan tidak dapat langsung cocok dengan extesion dalam context. Sekali terdapat kecocokan, nomor akan diambil dan dipanggil.

Mencoba pola menggunakan dialplan show
Sebuah contoh dialplan tampak seperti berikut:

[general]
[myphones]
exten => 23,1,Answer()
exten => 23,2,Playback(helloworld)
exten => 23,3,Hangup()

Kita dapat menulis dialplan show dari CLI (jalankan asterisk -r jika Asterisk telah berjalan) untuk memastikan bahwa dialplan kita telah dimuat:

*CLI> dialplan show
[ Context 'default' created by 'pbx_config' ]
[ Context 'myphones'
created by 'pbx_config' ]
'23' => 1. Answer() [pbx_config]
2. Playback(helloworld)
[pbx_config]
3. Hangup() [pbx_config]
[ Context 'parkedcalls' created by 'res_features' ]
'700' => 1. Park() [res_features]
=
2 extensions (4 priorities) in 3 contexts. =*
CLI>

Tampilan dari perintah tersebut akan memasukkan semua aturan dialplan yang Asterisk ketahui. Perhatikan bahwa disitu terdapat context ‘parkedcalls’ yang yang belum pernah kita lihat sebelumnya; ini diaktifkan secara default dalam features.conf dan kita abaikan untuk saat ini. Bagaiaman jika kita hanya ingin melihat context myphones? Kita dapat membuat lebih khusus dengan dialplan show myphones:

*CLI> dialplan show myphones
[ Context 'myphones'
created by 'pbx_config' ]
'23' => 1. Answer() [pbx_config]
2. Playback(helloworld)
[pbx_config]
3. Hangup() [pbx_config]
=
1 extension (3 priorities) in 1 context. =*
CLI>

Perintah dialplan show dapat juga digunakan untuk melihat apa yang dilakukan Asterisk jika kita menekan nomor tertentu. Misalnya kita ingin menekan nomor ‘25' dari telepon dalam context myphones. Kita dapat melihat apa yang akan terjadi dengan perintah dialplan show 25@myphones:

*CLI> dialplan show 25@myphones
There is no existence of 25@myphones
extension
*CLI>

Tidak ada yang terjadi karena memang tidak ada yang cocok dengan ‘25 dalam context tersebut. Jika kita menekan nomor ‘23 misalnya, kita akan mendapat tampilan seperti ini:

*CLI> dialplan show 23@myphones
[ Context ‘myphones’
created by ‘pbx_config’ ]
‘23 => 1. Answer() [pbx_config]
2. Playback(helloworld)
[pbx_config]
3. Hangup() [pbx_config]
=
1 extension (3 priorities) in 1 context. =*
CLI>

Jika kita ingin mengecek ‘23' dengan semua kemungkinan context, kita dapat menggunakan dialplan show 23@:

*CLI> dialplan show 23@
[ Context 'myphones'
created by 'pbx_config' ]
'23' => 1. Answer() [pbx_c
onfig]
2. Playback(helloworld)
[pbx_c
onfig]
3. Hangup() [pbx_c
onfig]
=
1 extension (3 priorities) in 1 context. =*
CLI>

Mari kita kembangkan dialplan kita dengan menambah context tambahan dengan mengubah extensions.conf seperti:

[general]
[myphones]
exten => 23,1,Answer()
exten => 23,2,Playback(helloworld)
exten => 23,3,Hangup()
[departmentq]
exten => _2X,1,Answer()
exten => _2X,2,Playback(helloworld)
exten => _2X,3,Hangup()

Sekarang kita dapat kembali ke CLI, dan setelah mereload dialplan dengan perintah reload, jalankan dialplan show 23@:

*CLI> dialplan show 23@
[ Context 'departmentq'
created by 'pbx_config' ]
'_2X' => 1. Answer() [pbx_config]
2. Playback(helloworld)
[pbx_config]
3. Hangup() [pbx_config]
[ Context 'myphones'
created by 'pbx_config' ]
'23' => 1. Answer() [pbx_config]
2. Playback(helloworld)
[pbx_config]
3. Hangup() [pbx_config]
=
2 extensions (6 priorities) in 2 contexts. =*
CLI>

Semua extesion yang cocok akan ditampilkan. Mari kita coba dengan perintah dialplan show 25@:

*CLI> dialplan show 25@
[ Context 'departmentq'
created by 'pbx_config' ]
'_2X' => 1. Answer() [pbx_config]
2. Playback(helloworld)
[pbx_config]
3. Hangup() [pbx_config]
=
1 extension (3 priorities) in 1 context. =*
CLI>

Hanya ada satu yang cocok, dalam context department-q. Dalam contoh ini, jika kita menekan ‘25 dari telepon dengan context myphones, kita tidak dapat mendengar suara ‘hello world’. Extension ‘25' hanya bekerja dengan telepon dalam context department-q.

Urutan pencocokan pola/Pattern matching order
Memanfaatkan pencocokan pola dalam dialplan Asterisk kita, disamping sangat membantu tetapi juga sedikit tricky. Sangat mudah untuk memahami Asterisk dialplan dengan urutannya; dan pada kasus umumnya, Asterisk melakukan prioritas berdasarkan pola dengan kualitas kecocokannya. Alasannya sederhana: lebih dari satu pola mungkin akan sesuai dengan nomor panggilan. Jika ada dua extension yang cocok dengan nomor yang dipanggil, Asterisk akan selalu memilih yang paling cocok. Sebelum menentukan extension mana yang paling cocok, Asterisk akan memproses semua context.
Sebagai contoh:

[sales]
exten => _12X.,1,NoOp{12X}
exten => 12345,1,NoOp(12345}
exten => _1234.,1,NoOp{1234.}

Dari contoh di atas, ketika kita menekan ‘12345', kita kurang jelas, extension mana yang akan dijalankan. Untuk mencari tahu, kita gunakan dialplan show 12345@sales:

*CLI> dialplan show 12345@sales
[ Context 'sales' created by 'pbx_config' ]
'12345' => 1. NoOp(12345}) [pbx_c
onfig]
'_1234.' => 1. NoOp{1234.}() [pbx_c
onfig]
'_12X.' => 1. NoOp{12X}() [pbx_c
onfig]
=
3 extensions (3 priorities) in 1 context. =*
CLI>

Asterisk menampilkan semua, tetapi menampilkan 12345,1,NoOP{12345} dengan prioritas pertama. Ekstension dengan prioritas tertinggi selalu ditampilkan di atas.
Mari kita coba dengan ‘12346' menggunakan perintah dialplan show 12346@sales:

*CLI> dialplan show 12346@sales
[ Context 'sales' created by 'pbx_config' ]
'_1234.' => 1. NoOp{1234.}() [pbx_config]
'_12X.' => 1. NoOp{12X}() [pbx_config]
=
2 extensions (2 priorities) in 1 context. =-
*CLI>

Lagi, pola yang cocok terbaik dengan digit yang dipanggil ditampilkan paling atas.

Pernyataan include
Include adalah alat bantu yang sangat hebat untuk menyederhanakan dan mengatur dialplan yang lebih besar. Dengan menggunakan pernyataan include, anda dapat memasukkan contexts dalam context yang ada.

Syntax
include ⇒ namadaricontextlain
Contoh:

[general]
[komunikasi]
include => internal
include => external
[internal]
exten => 2000,1,Dial(SIP/2000)
[external]
exten => 17005551212,1,Dial(SIP/5551212)

Urutan menjalankan ketika menggunakan pernyataan include
Asterisk selalu melihat kecocokan dalam context saat itu terlebih dahulu sebelum mengacu pada context yang dimasukkan dengan include. Jika isian ditemukan, isian itu akan digunakan. Jika tidak ditemukan, Asterisk akan melihat yang cocok pada context yang dimasukkan pertama, kemudian berikutnya, dan seterusnya. Dan memungkinkan juga untuk memakai include bersarang; yaitu, includes dalam includes. Jika masih ragu-ragu, anda dapat memastikan isian apa yang digunakan Asterisk untuk menangani sebuah panggilan dengan memasukkan perintah dialplan show nomor@namacontext pada Asterisk CLI. Catatan: Pengguna Asterisk 1.2 menggunakan show dialplan dan bukan dialplan show.
Beberapa contoh:

[general]
[komunikasi]
include => internal
include => external
[internal]
exten => 2000,1,Dial(SIP/2000)
[external]
exten => 17005551212,1,Dial(SIP/5551212)

Katakan kita ingin mengetahui bagaimana Asterisk menangani panggilan ke nomor 2000 dalam context komunikasi. Untuk melakukan hal tersebut, kita memasukkan dialplan show 2000@komunikasi dalam CLI:

*CLI> dialplan show 2000@komunikasi
[ Included context ‘internal’ created by
‘pbx_config’ ]
‘2000 => 1. Dial(SIP/2000) [pbx_config]
=
1 extension (1 priority) in 1 context. =*
CLI>

Jika kita memperluas context komunikasi menjadi seperti:

[general]
[komunikasi]
include => internal
include => external
exten => 2000,1,Answer()
exten => 2000,2,Playback(helloworld)
exten => 2000,3,Hangup()
[internal]
exten => 2000,1,Dial(SIP/2000)
[external]
exten => 17005551212,1,Dial(SIP/5551212)exten =>
03012345678,1,Dial(SIP/03012345678)

Kita akan melihat keluaran CLI seperti berikut:

*CLI> dialplan show 2000@komunikasi
[ Context 'komunikasi' created by 'pbx_config' ]
'2000' => 1. Answer() [pbx_config]
2. Playback(helloworld)
[pbx_config]
3. Hangup() [pbx_config]
[ Included context 'internal' created by
'pbx_config' ]
'2000' => 1. Dial(SIP/2000) [pbx_c
onfig]
=
2 extensions (4 priorities) in 2 contexts. =*
CLI>

Asterisk akan memainkan file suara helloworld sound dan tidak mengirim panggilan ke nomor 2000, meskipun include ada di atas dalam dialplan. Hal ini karena Asterisk selalu melihat kecocokan pada context yang bersangkutan terlebih dahulu sebelum mengecek context yang dimasukkan.

Pernyataan include berdasarkan waktu
Sebuah pernyataan includedapat dibuat kondisi berdasarkan waktu atau hari. Ini akan membuat lebih mudah untuk mengimplementasikan aksi yang berbeda pada waktu yang berbeda.

Syntax

include => context|<waktu>|<hari>|<haridaribulan>|<
bulan>

Hari dan bulan menggunakan tiga karakter pertama dari nama hari atau bulan. Contoh, nama hari menjadi mon, tue, wed, thu, fri, sat, sun, dan nama bulan menjadi jan, feb, mar, apr, dst. Waktu dalam format 24 jam.
Contoh:
Waktu kerja dimulai dari jam 7:00 a.m. sampai 4:00 p.m. Senin sampai Jum’at dan dari jam 7:00 a.m. sampai 12:00 p.m. pada hari sabtu. Dialplan akan menjadi seperti berikut:

include => masuk|07:0016:
00|monfri|*|*
include => masuk|07:0012:
00|sat|*|*
include => libur
[masuk]
exten => 2000,1,Dial(SIP/2000)
[libur]
exten => 2000,1,VoiceMail(2000,u)

Pemrograman Dialplan

Dengan Asterisk, fungsi atau program dapat diterapkan secara eksternal, melalui sebuah script AGI (sama dengan script CGI pada web) atau secara internal, melalui fungsi dan aplikasi dalam dialplan. Bahasan kali ini akan memfokuskan pada fungsi internal.
Dialplan ditentukan dalam file konfigurasi extensions.conf. Dialplan sendiri seperti program BASIC. Seorang admin dapat menerapkan fitur dan alur panggilan menggunakan bahasa script sederhana.

Programming “Howto”
Struktur program
Setiap nomor telepon yang dibuat dalam dialplan Asterisk (/etc/asterisk/extensions.conf) sesungguhnya adalah program kecil. Di Asterisk, program disebut “extension.” Sebuah extension tampak seperti ini:

exten => 1001,1,Answer()
exten => 1001,n,Playback(helloworld)
exten => 1001,n,Hangup()

Prioritas juga dinomori secara urut:

exten => 1001,1,Answer()
exten => 1001,2,Playback(helloworld)
exten => 1001,3,Hangup()

Dua extension di atas secara fungsi adalah sama. Jika anda menggunakan n, akan memudahkan menambah dan menghapus baris kemudian.

Variables
Gunakan aplikasi Set() untuk membuat dan merubah variable:

exten => 1002,1,Set(Favoriteanimal = "Tiger")
exten => 1002,n,Set(Favoritenumber = 23)

Gunakan syntax ${VARIABLENAME} untuk membaca dan mencetak variables. Anda dapat mencetak nilai variable dalam CLI dengan NoOp() (dengan tingkat verbosity 3 atau lebih):

exten => 1003,1,NoOp(${Favoriteanimal})
exten => 1003,n,NoOp(${Favoritenumber})

Ada beberapa macam variabel:

  • Global variables

Berlaku dalam dialplan mana saja dan dibuat atau diubah dengan Set(

  • Channel variables

Berlaku hanya pada channel saati itu (sebuah channel dapat berupa koneksi antara dua orang dengan sebuah percakapan telepon). Dibuat atau diubah dengan Set(=)(tanpa g)

exten => 1004,1,Set(READABLEANYWHERE = 23,g)
exten => 1006,1,NoOp(Dialed number: ${EXTEN})

Labels and Goto()
Goto() memungkinan untuk melompat dari satu dialplan ke yang lainnya. Jika anda menggunakan prioritas n, dapat menjadi masalah. Solusinya adalah dengan menggunakan label untuk menandai isian khusus dan kemudian panggil isian dengan label pada Goto().
Contoh:

  • Dalam sebuah extension:
exten => 1007,1,Answer()
exten => 1007,n(Start),Wait(1)
exten => 1007,n,Playback(helloworld)
exten => 1007,n,Goto(Start)
  • Antar extensions:
exten => 1008,1,Answer()
exten => 1008,n,Goto(1009,Ping)
exten => 1009,1(Ping),Playback(helloworld)
exten => 1009,n,Wait(2)
exten => 1009,n,Goto(1010,Pong)
exten => 1010,1(Pong),Playback(ttweasels)
exten => 1010,n,Wait(2)
exten => 1010,n,Goto(1009,Ping)
  • Antar contexts:
[hq]
exten => 1011,1,Answer()
exten => 1011,n,Playback(helloworld)
exten => 1011,n,Goto(sales,1012,1)
[sales]
exten => 1012,1,Playback(helloworld)
exten => 1012,n,Hangup()

While() loops
Gunakan While() untuk mengulang dalam dialplan:

exten => 1013,1,Answer()
exten => 1013,n,Set(i=1)
exten => 1013,n,While($[${i} < 10])
exten => 1013,n,SayNumber(${i})
exten => 1013,n,Wait(1)
exten => 1013,n,Set(i=$[${i} + 1])
exten => 1013,n,EndWhile()
exten => 1013,n,Hangup()

GotoIf() conditional
Anda dapat melompat ke bagian lain dari dialplan tergantung dari kondisi tertentu yang sesuai dengan GotoIf():

exten => 1014,1,Answer()
exten => 1014,n,Set(Favoritestation = 0815)
exten => 1014,n,NoOp(Check to see if
${Favoritestation} is calling.)
exten => 1014,n,GotoIf($[${CALLERID(num) =
${Favoritestation}]?yes,no)
exten => 1014,n(yes),Playback(helloworld)
exten => 1014,n,Hangup()
exten => 1014,n(no),Playback(ttmonkeys)
exten => 1014,n,Hangup()

Gosub() subroutines
Dengan Gosub() panggilan akan ditersukan ke sebuah subroutine; subrutin ini dapat mengembalikan ke prioritas asal dengan Return():

exten => 1015,1,Gosub(cidset)
exten => 1015,n,Dial(SIP/${EXTEN})
exten => 1015,n(cidset),
Set(CALLERID(all)=Apfelmus
GmbH <012345678>)
exten => 1015,n,Return()

Variables
Sebuah variabel adalah tempat untuk sebuah nilai sebenarnya. Secara tepat nilai tergantung dati jenis variabel. Pada Asterisk, variables dapat berisi nomor, huruf dan string (angka dan huruf secara berurutan). Variables sangat berguna karena dia memungkinkan kita untuk membuat aturan untuk alur panggilan berubah sesuai keadaan dan membuat mudah untuk mengakomodasi perubahan akan datang pada aplikasi atau sistem telepon. Pada Asterisk, variable memiliki jangakauan yang berbeda. Ada variabel lokal (disebut sebagai channel variables dalam Asterisk), yang hanya dapat ditentukan nialinya untuk variabel global, aktif, dan saat itu, yang akan mengubah nilai untuk seluruh channels. Kita seharusnya sudah terbiasa dengan beberapa variabel Asterisk dari konfigurasi yang telah kita bahas (misalnya sip.conf). Kita juga dapat dengan bebas membuat variabel kita sendiri dan menggunakannya pada file konfigurasi.

Memperluas variabel dalam extension
Nilai dari variabel dapat diperoleh dengan syntax ${VARIABLENAME}. Ada beberapa variables yand di isi secara otomatis oleh Asterisk. Sebagai contoh, nomor yang dipanggil selalu disimpan dalam variabel sistem Asterisk ${EXTEN}. Menggunakan patterns dan variables, dengan itu dapat mempesingkat penulisan dialplan.
Sebelum:

exten => 100,1,Dial(SIP/100)
exten => 101,1,Dial(SIP/101)
exten => 102,1,Dial(SIP/102)
exten => 103,1,Dial(SIP/103)
exten => 104,1,Dial(SIP/104)
exten => 105,1,Dial(SIP/105)
exten => 106,1,Dial(SIP/106)
exten => 107,1,Dial(SIP/107)
exten => 108,1,Dial(SIP/108)
exten => 109,1,Dial(SIP/109)

Sesudah:

exten => _10X,1,Dial(SIP/${EXTEN})

Pertimbangan Umum
nama variable tidak harus dalam huruf besar semua seperti pada contoh di atas, atau tidak casesensitive. Tetapi ide bagus untuk menggunakan nama variabel dalam huruf besar karena membudahkan untuk identifikasi dan kode dialplan lebih mudah untuk dibaca. Kekurangannya adalah anda tidak dapat membedakan nama variabel dari besar kecilnya nama.
Contoh :
${FOO} adalah sama dengan ${foo}.
[Penting]
Variabel sistem Asterisk seperti ${EXTEN} selalu menggunakan huruf besar.

Variable string
Variabel string (maksudnya variable yang berisi text dan bukan angka) harus didefinisikan menggunakan petik dua, meskipun Asterisk masih menerimanya tanpa petik duas dua contoh berikut memiliki fungsi yang sama:

exten => 1234,1,Set(FRUIT=Apple)
exten => 1234,2,Set(FRUIT=”Apple”)

Jika string berisi koma atau spasi, anda harus menggunakan petik dua:

exten => 1234,1,Set(FRUITTYPES=”Apple, Pear, etc.”)

Maka dari itu, alangkah baiknya membiasakan menuliskan petik dua untuk variabel string yang kita definisikan.

Karakter cadangan
Kadang sebuah variabel berisi karakter cadangan (karakter yang memiliki fungsi khusus dan diterjemahkan berbeda). Sebagai contoh, jika anda ingin membuat variabel dengan karakter garis bawah (”_”) anda harus menggunakan sebuah karakter “escape” untuk memberitahu Asterisk bahwa karakter tersebut bukan karakter cadangan. Karakter berikut harus di escape ketika menggunakan dalam sebuah variabel: [ ] $ ” \
Karakter escape dalam extensions.conf adalah “\” (backslash):
Contoh:

exten => 1234,1,Set(AMOUNT=”\$10.00)

Jika anda ingin menggunakan karakter backslash dalam variabel, anda juga harus melakukan escape:

exten => 1234,1,Set(ROOMNUMBER=”48\\10)

Integers
Jika variabel berisi sebuah integer, variabel itu tidak dapat memiliki angka lebih dari 18 digit. Jika lebih dari itu akan menyebabkan kesalahan yang akan disimpan dalam file log.

Mendefiniskan variabel global dalam extensions.conf
Variabel global ditentukan di awal dari extensions.conf. Anda harus menaruhnya dalam context khusus [globals], setelah [general].
Contoh:

[general]
[globals]
RINGTIME=90
[from­intern]
exten => _XXX,1,Dial(SIP/${EXTEN},${RINGTIME})
exten => _XXX,n,VoiceMail(${EXTEN})

Mendefiniskan variabel dengan Set()
Set() digunakan untuk mendefinisikan sebuah variabel pada sebuah extension.

Syntax
Set(=[,=][,]) Pengaturan opsi g membuat variabel global; tanpa g, variabel dianggap sebagai variabel channel lokal.
Contoh:

; Buat variabel global:
exten => 10,1,Set(RINGTIME=90,g)
; Buat variable channel:
exten => 10,2,Set(FAVORITEFRUIT="Apple")
; Buat dua variabel sekaligus:
exten => 10,3,Set(VAR1=10,VAR2=23)
; Cetak variabel pada CLI
exten => 10,4,NoOp(RINGTIME = ${RINGTIME})
exten => 10,5,NoOp(FAVORITEFRUIT =
${FAVORITEFRUIT})
exten => 10,6,NoOp(VAR1 = ${VAR1})
exten => 10,7,NoOp(VAR2 = ${VAR2})

Menurunkan variabel channel
Channel baru akan dibuat jika ada percakapan, dan akan memiliki variabel channel sendiri.

Turunan tingkat satu
Jika kita ingin memiliki sebuah variabel channel tetap berada pada channel yangbaru, kita dapat melakukannya dengan menambah awalan variabel dengan sebuah karakter “_” (garis bawah). Ketika variabel diturunkan oleh channel yang baru, Asterisk secara otomatis akan menghilangkan awalan.
Ini untuk memastikan bahwa variabel hanya diturunkan sekali.
Contoh:

exten => 1234,1,Set(_CAKE=”Marble cake”)

Turunan bertingkat Jika kita menginginkan penurunan variabel channel tidak terbatas, kita dapat melakukannya dengan menambahkan dua karakter “_” (garis bawah) di awal variabel. Variable yang diawali dengan cara ini selalu diturunkan oleh channel bentukan yang baru. Ketika memanggil sebuah variabel turunan, pemanggilan nama variabel tidak membedakan apakah menggunakan awalan atau tidak. Contoh berikut akan memberikan keluaran yang sama pada CLI:

exten => 1234,1,NoOp(${__CAKE})
exten => 1234,n,NoOp(${CAKE})

Variabel channel sistem
Daftar berikut menjelaskan pentingnya variabel channel sistem. Variabel berikut dapat dibaca tetapi tidak dapat diberi nilai dalam extensions.conf, karena telah didefinisikan oleh Asterisk. Beberapa variabel yang dijelaskan disini tidak benar­benar sebagai variabel tetapi adalah fungsi bawaan Asterisk. Pada prakteknya, mereka memiliki peranan yang mirip, maka variabel tersebut dimasukkan dalam daftar berikut.
${ANSWEREDTIME}
Waktu kumulatif untuk sebuah koneksi aktif (dengan kata lain adalah waktu sejak pembicaraan dimulai).
${BLINDTRANSFER}
Nama channel pada sisi lain dari blind transfer.
${CHANNEL}
Nama dari channel saat itu.
${CONTEXT}
Nama context saat itu.
${EPOCH}
Waktu unix saat ini (jumlah waktu yang dilalui sejak dimulai unix “epoch”, yang dimulai pada tengah malam UTC, January 1st, 1970)
${EXTEN}
Extensi yang dipanggil saat itu.
${ENV(VARIABLENAME)}
Variable luar VARIABLENAME
${HANGUPCAUSE}
Penyebab koneksi putus.
${INVALID_EXTEN}
Digunakan dalam extensi i dan berisi extensi yang dipanggil.
${PRIORITY}
Prioritas saat itu pada extension yang dijalankan.
${TRANSFER_CONTEXT}
Context dari panggilan yang dialihkan.
${UNIQUEID}
ID unik untuk koneksi saat itu.
${SYSTEMNAME}
Nama sistem yang didefinisikan dengan systemname dalam / etc/asterisk/asterisk.conf.

Memanipulasi variabel
Variable sangat berguna ketika kita mengganti nilainya pada waktu eksekusi, karena akan memberikan kita fleksibilitas untuk melakukan sesuatu pada program kita.

Substring
Secara umum, sebuah string terdiri dari rangkaian karakter­karakter. Ukuran string ditentukan oleh jumlah karakter yang ada didalamnya. Contoh, “pohon apel” terdiri dari 10 karakter (kita harus memasukkan spasi). Semua string dapat dipecah dalam substrings. Contoh, “apel”, “pohon”, “ape” dan “hon ap” semuanya adalah substrings dari “pohon apel”. Secara teori, sebuah string dapat berukuran berapa saja; dalam bahasan ini ada juga string tunggal, meskipun tidak diterapkan. Manipulasi string adalah teknik yang penting dalam aplikasi pemrograman. Asterisk memungkinkan kita memanipulasi string dan substrings menggunakan karakter : (titik dua). Dengan menggunakan karakter :, kita dapat mengeluarkan bagian terntentu dari variabel string yang ada.

Syntax

${VARIABLENAME[:mulai[:panjang]]}

Contoh:
Banyak sistem telepon memerlukan nomor awal untuk mendapatkan saluran luar(Biasanya “0”). Nomor tujuan tidak dapat memasukkan nomor awal ini. Jika kita menekan 0­274­1234567 , kita dapat menyimpan nomor luar sebenarnya dalam ${OUTGOINGNUMBER} menggunakan dialplan berikut.

exten => _0X.,1,Set(OUTGOINGNUMBER=${EXTEN:1})

Jika pilihan panjang dihilangkan, seluruh string akan diambil secara otomatis. Bagaimana jika kita hanya menginginkan 7 digit terakhir dari nomor yang dipanggil? Dalam kasus ini kita menggunakan nomor negatif untuk parameter mulai. Isian berikut akan menyimpan 1234567 dari contoh berikut dalam variabel ${LOCALNUMBER}.

exten => _0X.,1,Set(LOCALNUMBER=${EXTEN:­7})

Kita juga dapat mendapatkan kode area:

exten => _0X.,1,Set(AREACODE=${EXTEN:1:3})

Berikut cara untuk mendapatkan informasi yang berguna dari nomor yang dipanggil:

exten => _0X.,1,Set(AREACODE=${EXTEN:1:3})
exten => _0X.,n,Set(LOCALNUMBER=${EXTEN:4})

Extension khusus
Karena semua logika pemograman harus tampak melalui extension, kit aperlu beberapa extension tambahan yang telah didefinisikan system.

Extension h
h merupakan standar extension “hang­up”. Extension h, jika dikonfigurasi, dipanggil ketika penelpon menutup telepon. Segera setelah telepon ditutup, isi dari ${EXTEN} berubah menjadi h.
Contoh:
Katakan kita ingin variabel global KONEKSI berisi jumlah percakapan yang aktif saat itu pada waktu yang ditentukan. Artinya kita perlu menambah satu isi KONEKSIT setiap ada koneksi dan mengurangi satu setiap koneksi putus. Dialplan berikut menggambarkan ide dasarnya:

[global]
KONEKSI=0
[from­internal]
exten => _X.,1,Set(KONEKSI=$[${KONEKSI} + 1]|g)
exten => _X.,2,Dial(SIP/${EXTEN})
exten => h,1,Set(KONEKSI=$[${KONEKSI} ­ 1]|g)

Extension i
Untuk membuat sebuah context menangani berbagai keadaan dengan baik, kita menggunakan extension khusus i (”i” singkatan dari invalid) yang menangai semua panggilan yang tidak ditangani dalam context. Mirip dengan extension h, sekali extension i dikerjakan ${EXTEN} tidak akan berisi nomor yang dipanggil lagi. Untuk mendapatkan nomor yang dipanggil pada extension i, gunakan ${INVALID_EXTEN}.
Contoh:
pada sebuah perusahaan minuman, PT. Ngelak, pegawai di departemen B hanya dapat menelpon extension 100 sampai 199. Penelpon yang memanggil nomor lain akan mendengar pesan, “I’m sorry. That is not a valid extension. Please try again.”

[department­b]
exten => _1XX,1,Dial(${EXTEN})
exten => i,1,NoOp(Sebuah nomor salah
${INVALID_EXTEN} telah dipanggil.)
exten => i,2,Answer()
exten => i,3,Playback(invalid)
exten => i,4,Hangup()

Extension o dan a
Jika operator=yes dibuat dalam voicemail.conf, panggilan akan diteruskan ke extension o (o adalah untuk operator) jika penelpon menekan “0. Tekan * (bintang) akan meneruskan panggilan ke extension a (abort).

Extension t dan T
Extension t dan T untuk menangani batas waktu dalam context.

Extension t
Jika tidak ada masukan dalam sebuah menu IVR dalam batas waktu tertentu, extesnion t akan dipanggil.
Contoh:

[mainmenu]
exten => 10,1,Answer()
exten => 10,n,Background(marryme) ; “Marry me?
Press 1 for yes, 2 for no.”
exten => 1,1,Playback(thank­you­cooperation) ; 1 =>
“Thank you.”
exten => 1,n,Hangup()
exten => 2,1,Playback(hangup­try­again) ; 2 =>
“Hang up and try again.”
exten => 2,n,Hangup()
exten => t,1,Hangup() ; no input => hang up

Extension T
Extension T dipanggil setelah batas waktu absolut (pasti) habis. Anda dapat mengatur batas waktu ini dengan Set(TIMEOUT(absolute)= Penghitungan berjalan ketika nilai timeout ditentukan (dengan kata lain, tidak otomatis dijalankan, tetapi harus dijalankan secara jelas dengan perintah Set()). Set(TIMEOUT(absolute)=0) menonaktifkan batas waktu absolute.
Contoh:

exten => 20,1,Answer()
exten => 20,2,Set(TIMEOUT(absolute)=120)
exten => 20,3,Playback(hello­world)
exten => 20,4,Wait(1)
exten => 20,5,Goto(3)
exten => T,1,Wait(1)
exten => T,2,Playback(thank­you­for­calling)
exten => T,3,Wait(1)
exten => T,4,Hangup()

Extension s
Masukan pertama pada semua extension selalu nama ata nomor yang dipanggil. Ketika sebuah panggilan datang dari PSTN, Asterisk tidak mengerti apa yang dipanggil dan siapa yang memanggil. Untuk keadaan tidak dapat menentukan nomor yang dipanggil, kita menggunakan extension s.
Contoh:

exten => s,1,Answer()
exten => s,2,Wait(1)
exten => s,3,Play(tt­monkeys)
exten => s,4,Wait(1)
exten => s,5,Hangup()

Macro
Macro adalah bentuk dari subroutine. Dapat berupa rangkaian extension yang complex tetapi dipanggil melalui sebuah perintah. Dengan macro akan mengurangi pengulangan dalam dialplan dan membuat sederhana dan lebih kecil. Contoh sederhana seperti berikut:

[macro­incoming]
exten => s,1,Dial(SIP/${MACRO_EXTEN},10)
exten => s,n,VoiceMail(${MACRO_EXTEN})
[sales]
exten => _2XXX,1,Macro(incoming)
[building­mgr]
exten => _2XXX,1,Macro(incoming)

Penggunaan macro cenderung memisahkan pengguna dalam dua kelompok komunitas. Salah satu merasa macro membuat dialplan lebih mudah dipahami, dan yang lain membuat dialplan semakin membingungkan.

Dasar­dasar Macro
Ketika mendefinisikan macro, perhatikan beberapa catatan berikut:

  • Ketika mendefinisikan macro, hanya sebuah extension ­extension s ­

yang diperbolehkan.

  • ${EXTEN} yang asli dan variabel ${CONTEXT} tidak dapat digunakan

dalam macro. Kita harus menggunakan ${MACRO_EXTEN} dan ${MACRO_CONTEXT}.

  • Ketika memanggil sebuah macro, argumen dengan comma (”,”) atau

pemisah (”|”) dapat diberikan. Argument ini dipanggil dalam macro dengan ${ARGn} ( n adalah bilangan bulat positif yang mengindikasikan urutan argumen).

  • Sebuah macro ditentukan dalam kurung siku ([macro­namamacro]) dan

dipanggil dengan aplikasi Macro() dalam sebuah extension.

Contoh lain sebuah macro:

[macro­tohg1500]
exten => s,1,Answer()
exten => s,2,Dial(OOH323/${ARG1}
@192.168.0.51,30,tTr)
exten => s,3,Goto(s­${DIALSTATUS},1)
exten => s,4,Hangup()
exten => t,1,Hangup()
exten => T,1,Hangup()
exten => h,1,Hangup()
exten => s­BUSY,1,Playback(the­party­you­are­
calling)
exten => s­BUSY,2,Playback(is­curntly­busy)
exten => s­BUSY,3,Goto(s,4)
exten => s­CONGESTION,1,Playback(the­party­you­are­
calling)
exten => s­CONGESTION,2,Playback(is­curntly­
unavail)
exten => s­CONGESTION,3,Goto(s,4)
exten => _s­.,1,Goto(s­BUSY,1)
exten => _.,1,Goto(s,4)
[default]
exten => 209,1,Goto(mainmenu,s,1)
exten => _5.,1,Macro(tohg1500,${EXTEN})

Interactive Voice Response (IVR)

Sebuah sistem interactive voice response atau penjawab suara interaktif membuat sistem komputer berinteraksi dengan penelepon, yang menyediakan masukan ke sistem dengan cara menekan keypad pada pesawat telepon (DTMF,“dual­tone multi­frequency”, atau disebut Touch­ Tone®) atau mengatakan sesuatu (dengan pengenal suara alamai. Kebanyakan sistem IVR menyediakan menu pilihan untuk mengalihkan panggilan tanpa campur tangan operator, tetapi sistem IVR modern dapat juga berupa aplikasi komplek yang menangani informasi atau mengendalikan peralatan.

Prinsip dasar dari semua sistem IVR secara umum yaitu, penelepon mendengarkan sebuah menu dan memilih pilihan dari menu untuk melaksanakan perintah, atau, alternatifnya, memasukkan informasi (dalam format nomor, dengan menekan keypad). IVR dapat digunakan untuk mendapatkan infromasi saham, jadwal kereta, atau prakiraan cuaca.; juga dapat digunakan untuk sistem pembayaran otomatis, seperti tiket konser. Aplikasi IVR hanya dibatasi oleh pikiran Anda sendiri. Kompleksitas sistem bervariasi. Sistem yang lebih canggih dapat menghasilkan suara dari text secara langsung menggunakan sistem text­to­ speech dan menerima masukan suara pengguna dengan pengenal suara. Ketika diimplementasikan dengan benar, IVR dapat memberikan sebuah kenyamanan tingkat tinggi, tetapi implementasinya sangat komplek sehingga jarang digunakan kecuali dalam organisasi yang besar. Bentuk IVR paling sederhana adalah yang paling umum. Pesan direkam sebelumnya diputarkan ke penelepon; Penelepon menjawab dengan menekan keypad DTMF, dan Asterisk dapat mengenal secara mudah pada instalasi default. Pendapat umum pada IVR berbeda­beda.

Beberapa orang menganggap bentuk otomasi yang sangat membantu, dan pendapat lain menyebabkan frustasi. Biasanya karena hasil dari perancangan menu yang jelek atau pengenalan suara dengan rata­rata kesalahan yang tinggi. Sebuha IVR yang berfungsi baik dapat menyenangkan pelanggan, tetapi implementasi yang jelek dapat menyebabkan pelanggan pergi. Hati­hati ketika merencanakan sebuah sistem IVR. Beri perhatian pada rancangan menu dan beri waktu untuk pengembangan dan penerapan yang baik. Ujicoba terus menerus dan pengawasan setelah penerapan pada penutupan telepon lebih awal harus menjadi bagian dari rutinitas. Ingat bahwa sistem IVR bukan akhir segalanya, atau solusi segala masalah. Pikirkan pengguna anda!

Sebuah IVR sederhana
Asterisk menyertakan file suara standard termasuk file marryme.gsm, berisi ucapan “Will you marry me? Press 1 for yes or 2 for no.” Untuk membuat aplikasi “lamaran pernikahan”, dialplan berikut sudah cukup:

exten => 30,1,Answer()
exten => 30,2,Background(marryme)
exten => 30,3,Hangup()
exten => 1,1,Playback(thank­you­cooperation)
exten => 1,2,Hangup()
exten => 2,1,Playback(sorry)
exten => 2,2,Hangup()

Jika penelpon menekan ekstensi 30, Asterisk menjawab dan memutar file marryme.gsm. Selama penggunaan aplikasi Background(), pengguna dapat memasukkan pilihan kapanpun selama diputar. Masukan akan diterjemahkan sebagai sebuah extension dan panggilana panggilan akan diteruskan ke ekstension tersebut. Jika penelepon menekan 1, dia akan mendengar “Thank you for your cooperation,” Setelah itu Asterisk putus.

Perbedaan antara Playback() dan Background()
Playback() hanya memainkan file suara; masukkan diabaikan. Background() memainkan file suara sambil menerima masukan dari penelpon, yang diterjemahkan sebagai extension dan masukan akan dijadikan extension tersendiri.

Perbedaan antara 10 dan 1000
Untuk melihat extension yang dimulai dengan angka yang sama, mari kita perhatikan contoh berikut:

exten => 30,1,Answer()
exten => 30,2,Background(marryme)
exten => 30,3,Hangup()
exten => 1,1,Playback(thank­you­cooperation)
exten => 1,2,Hangup()
exten => 10,1,NoOp(Test mit 10)
exten => 10,2,Hangup()
exten => 100,1,NoOp(Test mit 100)
exten => 100,2,Hangup()
exten => 2,1,Playback(sorry)
exten => 2,2,Hangup()

Background() menunggu beberapa waktu setiap nomor yang dimasukkan untuk membedakan antara 1, 10 and 100. Sekali waktu (TIMEOUT) telah habis, Masukan dianggap selesai. Tip: TIMEOUT untuk mengatur batas waktu. Untuk informasi, masukkan fungsi TIMEOUT dalam Asterisk CLI
TIMEOUT ditentukan dalam satuan detik dan dapat diatur dalam dialplan.

exten => 123,1,Set(TIMEOUT(digit)=3)

“Pengaturan waktu yang pintar”
Pada dialplan di atas, Asterisk akan memproses secara langsung ketika nomor 2 ditekan, tetapi setelah waktu habis ketika 1 ditekan. Asterisk secara pintar menentukan sebuha nomor yang dimasukkan apakah cocok dengan beberapa extension atau tidak dan bertindak sesuai ada tidaknya.

Invalid input (extension i)
Masukan yang salah (sembarang masukan yang tidak terdapat kecocokan extension pada dialplan) dapat ditangani dengan extension i. Contoh:

exten => 30,1,Answer()
exten => 30,2,Background(marryme)
exten => 30,3,Hangup()
exten => 1,1,Playback(thank­you­cooperation)
exten => 1,2,Hangup()
exten => 2,1,Playback(sorry)
exten => 2,2,Hangup()
exten => i,1,Background(sorry)
exten => i,2,Hangup()

Pauses
Cara yang mudah untuk menghentikan sementara adalah dengan memainkan file kosong. Beberapa file diam antara 1 sampai 9 detik terdapat pada /var/lib/asterisk/sounds/silence/. Jika kita akan memeberikan jeda 5 detik, berikut contohnya:

exten => 30,1,Answer()
exten => 30,2,Background(marryme)
exten => 30,3,Background(silence/5)
exten => 30,4,Hangup()
exten => 1,1,Playback(thank­you­cooperation)
exten => 1,2,Hangup()
exten => 2,1,Playback(sorry)
exten => 2,2,Hangup()
exten => i,1,Background(marryme)
exten => i,2,Hangup()

Multilevel IVR systems
Masalah pada IVR multilevel adalah penelpon harus memasukkan digit tunggal beberapa kali (sering juga digit yang sama), tetapi menghasilkan jawaban yang berbeda tergantung pada tingkat menu. Karena nomor hanya bisa dipakai seklai pada context tertentu, penelpon akan terhenti pada menu tingkat pertama. Jika kita memerlukan menu bertingkat yang menyediakan jawaban berbeda untuk angka yang sama, kita harus menempatkan submenu pada context yang berbeda ([kantin] pada contoh kita). Kita melompat antar context dengan menggunakan aplikasi Goto(). Mari kita asumsikan anda memiliki file suara yang tersimpan di /var/lib/asterisk/sounds/:

  • mainmenu.gsm

“Tekan 1 untuk penjualan, 2 untuk layanan, atau 3 untuk kantin.”

  • cafeteria.gsm

“Tekan 1 untuk mendengar menu minggu ini atau 2 untuk mendengar menu minggu depan.”

  • cafeteria­menu­this­week.gsm

“Senin: Bakmi Goreng. Selasa: Ayam bakar…”

  • cafeteria­menu­next­week.gsm

“Senin: Nasi goreng, telur ceplok..”
Jika penjualan di extensi 100d an divisi layanan ada di 150, dialplan untuk IVR akan seperti berikut:

[example­ivr]
; Menu akan diulang sampai penelepon memasukkan pilihan.
;
exten => 30,1,Answer()
exten => 30,2,Background(mainmenu)
exten => 30,3,Background(silence/3)
exten => 30,4,Goto(2)
exten => 1,1,Dial(SIP/100)
exten => 2,1,Dial(SIP/150)
; Goto() pergi ke context lain ([kantin])
;
exten => 3,1,Goto(kantin,100,1)
exten => i,1,Goto(30,2)
[kantin]
exten => 100,1,Background(cafeteria)
exten => 100,2,Background(silence/3)
exten => 100,3,Goto(1)
exten => 1,1,Playback(cafeteria­menu­this­week)
exten => 1,2,Wait(2)
exten => 1,3,Goto(1)
exten => 2,1,Playback(cafeteria­menu­next­week)
exten => 2,2,Wait(2)
exten => 2,3,Goto(1)
; Invalid input kembali ke menu utama
exten => i,1,Goto(example­ivr,30,2)

Kedalaman IVR
Meskipun secara teori memungkinkan untuk mendukung tingkat menu IVR tanpa batas, pada prakteknya disarankan untuk menjaga agar maksimal tingkat menunya adalah 3. Kebanyakan penelpon menutup panggilannya setelah tingkat menu ketiga.

Rencana IVR Dinas Perijinan Pemkot Jogja

  • Menu utama

11.gsm
“Selamat datang di layanan perijinan kota Jogjakarta.
Tekan 1 untuk Informasi perijinan bangunan,
Tekan 2 untuk perijinan Usaha,
Tekan 3 untuk Perijinan Kepariwisataan,
Tekan 4 untuk informasi lainnya,
Tekan * untuk mengulang,
tekan 9 untuk operator”

  • Informasi perijinan bangunan

111.gsm (21111)
Tekan 1 untuk persyaratan imb,
tekan 2 untuk persyaratan saluran,
tekan 3 untuk persyaratan penyambungan air

  • Persyaratan imb

1111.gsm
1. membawa denah rumah
2. membawa bukti pbb

  • Persyaratan saluran

1112.gsm
1. membawa denah saluran
2. membawa ijin warga

[IVR­Perijinan]
; Menu akan diulang sampai penelepon memasukkan pilihan.
;
exten => 290274,1,Answer()
exten => 290274,2,Background(buativr/11)
exten => 290274,3,Background(silence/3)
exten => 290274,4,Goto(2)
exten => 1,1,Goto(bangunan,100,1)
exten => 2,1,Goto(usaha,200,1)
exten => 3,1,Goto(pariwisata,300,1)
exten => 4,1,Goto(lain,300,1)
exten => 9,1,Dial(SIP/222)
exten => i,1,Goto(290274,2)
[bangunan]
exten => 100,1,Background(buativr/111)
exten => 100,2,Background(silence/3)
exten => 100,3,Goto(1)
exten => 1,1Background(buativr/1111)
exten => 1,2,Wait(2)
exten => 1,3,Goto(1)
exten => 2,1,Background(buativr/1112)
exten => 2,2,Wait(2)
exten => 2,3,Goto(1)
exten => i,1,Goto(IVR­Perijinan,290274,2)
panduan/panduan_instalasi_dan_konfigurasi_asterisk.txt · Last modified: 2013/11/01 09:27 (external edit)