Tutorial Asterisk VIII
24/07/08 10:51
Extension khusus dan Macro
Extension khusus
Karena semua logika pemograman harus tampak melalui extension, kita perlu 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 KONEKSI setiap ada koneksi dan mengurangi satu setiap koneksi putus. Berikut ini contoh penerapan dalam dialplan:
[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, extension 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() ;tidak ada input => hang up
Extension T
Extension T dipanggil setelah batas waktu absolut (pasti) habis. Anda dapat mengatur batas waktu ini dengan Set(TIMEOUT=xx)
Penghitungan berjalan ketika nilai timeout ditentukan (dengan kata lain, tidak otomatis dijalankan, tetapi harus diberikan secara jelas dengan perintah Set()). Set(TIMEOUT=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 atau 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. Biasanya digunakan juga pada penulisan macro, dijelaskan dibawah.
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})
dikirim oleh: M. Zudha Ghofur
Artikel Terkait
Tutorial Asterisk VIIInstall Asterisk 1.2 + oh323 pada server 64 Bit untuk interkoneksi dengan PBX Siemen
Tutorial Asterisk IX