# VoIP Menggunakan Asterisk dan PJSIP ## Update & Install Dependensi Dasar ``` sudo apt update && sudo apt upgrade -y sudo apt install -y wget curl build-essential subversion git autoconf \ automake libtool-bin libncurses5-dev libxml2-dev libsqlite3-dev \ uuid-dev libjansson-dev libssl-dev libedit-dev pkg-config ``` ## Download & Install PJSIP ``` cd /usr/src git clone https://github.com/pjsip/pjproject.git cd pjproject ./configure --prefix=/usr sudo make -j$(nproc) sudo make install sudo ldconfig ``` ## Download & Install Asterisk ``` cd /usr/src wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-current.tar.gz tar xvf asterisk-20-current.tar.gz cd asterisk-20.*/ ./configure --with-pjproject --with-jansson --with-libedit make menuselect ``` ## Pada menu yang muncul, pastikan PJSIP diaktifkan, lalu keluar dan lanjutkan: ``` sudo make -j$(nproc) sudo make install sudo make samples sudo make config sudo ldconfig ``` ## Jalankan Asterisk ``` sudo systemctl restart asterisk sudo systemctl enable asterisk sudo asterisk -vvvvvvvvc ``` ### Kalau semua berjalan lancar, Asterisk akan masuk ke CLI. Coba cek dengan: ``` pjsip show endpoints ``` ### KALAU ERROR Download Asterisk Terbaru ``` cd /usr/src sudo wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-current.tar.gz ls -l ``` Pastikan file asterisk-20-current.tar.gz ada. Ekstrak File ``` sudo tar xvf asterisk-20-current.tar.gz cd asterisk-20.*/ ``` Instalasi Dependencies (Pastikan Semua Terpasang) ``` sudo apt update sudo apt install -y build-essential libjansson-dev libxml2-dev libsqlite3-dev uuid-dev sudo apt install -y libpjproject-dev ``` ## Konfigurasi & Instalasi Asterisk ``` sudo ./configure --with-pjproject --with-jansson --with-libedit sudo make menuselect sudo make -j$(nproc) sudo make install ``` KALAU MASIH ERROR GIMANA? ** **bisa install manual** ## Install Dependencies Tambahan ``` sudo apt update sudo apt install -y git wget cmake libssl-dev libcurl4-openssl-dev libjansson-dev ``` ## Download & Compile PJProject ``` cd /usr/src sudo git clone https://github.com/pjsip/pjproject.git cd pjproject sudo ./configure CFLAGS="-DNDEBUG -DPJ_HAS_IPV6=1" --prefix=/usr sudo make -j$(nproc) sudo make install sudo ldconfig ``` ## Verifikasi Instalasi PJProject ``` pkg-config --modversion libpjproject ``` nah lanjut ## Download & Install Asterisk ``` cd /usr/src sudo wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-current.tar.gz sudo tar -xvzf asterisk-20-current.tar.gz cd asterisk-20.*/ sudo contrib/scripts/get_mp3_source.sh sudo contrib/scripts/install_prereq install sudo ./configure --with-pjproject --with-jansson --with-libxml2 sudo make -j$(nproc) sudo make install sudo make samples sudo make config sudo ldconfig ``` ## Start Asterisk ``` sudo systemctl restart asterisk sudo systemctl enable asterisk sudo asterisk -vvvr > kalau berhasil bakal masuk ke CLI ``` ## Sekarang lanjut ke konfigurasi SIP (PJSIP) di Asterisk.**** ## Buat & Edit File pjsip.conf ``` sudo nano /etc/asterisk/pjsip.conf ``` > scroll sampe paling bawah di file itu terus kasih konfigurasi di bawah ini ``` [global] type=global [transport-udp] type=transport protocol=udp bind=0.0.0.0 [transport-tls] type=transport protocol=tls bind=0.0.0.0 cert_file=/etc/asterisk/keys/asterisk.pem priv_key_file=/etc/asterisk/keys/asterisk.key ; === 4 Kontak menggunakan UDP === [13012] type=endpoint transport=transport-udp aors=13012 auth=13012-auth context=internal [13012-auth] type=auth auth_type=userpass username=13012 password=13012pass [13012-aor] type=aor max_contacts=1 [13013] type=endpoint transport=transport-udp aors=13013 auth=13013-auth context=internal [13013-auth] type=auth auth_type=userpass username=13013 password=13013pass [13013-aor] type=aor max_contacts=1 [13014] type=endpoint transport=transport-udp aors=13014 auth=13014-auth context=internal [13014-auth] type=auth auth_type=userpass username=13014 password=13014pass [13014-aor] type=aor max_contacts=1 [13015] type=endpoint transport=transport-udp aors=13015 auth=13015-auth context=internal [13015-auth] type=auth auth_type=userpass username=13015 password=13015pass [13015-aor] type=aor max_contacts=1 ; === 4 Kontak menggunakan TLS === [23012] type=endpoint transport=transport-tls aors=23012 auth=23012-auth context=internal [23012-auth] type=auth auth_type=userpass username=23012 password=23012pass [23012-aor] type=aor max_contacts=1 [23013] type=endpoint transport=transport-tls aors=23013 auth=23013-auth context=internal [23013-auth] type=auth auth_type=userpass username=23013 password=23013pass [23013-aor] type=aor max_contacts=1 [23014] type=endpoint transport=transport-tls aors=23014 auth=23014-auth context=internal [23014-auth] type=auth auth_type=userpass username=23014 password=23014pass [23014-aor] type=aor max_contacts=1 [23015] type=endpoint transport=transport-tls aors=23015 auth=23015-auth context=internal [23015-auth] type=auth auth_type=userpass username=23015 password=23015pass [23015-aor] type=aor max_contacts=1 ``` Simpan file dengan CTRL + X, lalu tekan Y dan ENTER. ## Buat & Edit File extensions.conf ``` sudo nano /etc/asterisk/extensions.conf ``` masukin konfigurasi ini ``` [internal] ; =========================== UDP USERS =========================== exten => 10320,1,NoOp(Call to Rafif - UDP) same => n,Dial(PJSIP/10320,20,m) same => n,Voicemail(10320@default,u) same => n,Hangup() exten => 10284,1,NoOp(Call to Ryden - UDP) same => n,Dial(PJSIP/10284,20,m) same => n,Voicemail(10284@default,u) same => n,Hangup() exten => 10344,1,NoOp(Call to Erza - UDP) same => n,Dial(PJSIP/10344,20,m) same => n,Voicemail(10344@default,u) same => n,Hangup() exten => 10254,1,NoOp(Call to Marsya - UDP) same => n,Dial(PJSIP/10254,20,m) same => n,Voicemail(10254@default,u) same => n,Hangup() ; =========================== TLS USERS =========================== exten => 20320,1,NoOp(Call to Rafif - TLS) same => n,Dial(PJSIP/20320,20,m) same => n,Voicemail(20320@default,u) same => n,Hangup() exten => 20284,1,NoOp(Call to Ryden - TLS) same => n,Dial(PJSIP/20284,20,m) same => n,Voicemail(20284@default,u) same => n,Hangup() exten => 20344,1,NoOp(Call to Erza - TLS) same => n,Dial(PJSIP/20344,20,m) same => n,Voicemail(20344@default,u) same => n,Hangup() exten => 20254,1,NoOp(Call to Marsya - TLS) same => n,Dial(PJSIP/20254,20,m) same => n,Voicemail(20254@default,u) same => n,Hangup() ; =========================== CALL FORWARDING =========================== ; Jika tidak terjawab, alihkan ke admin (misal 1000) exten => _10XXX,1,NoOp(Forwarding ${EXTEN}) same => n,Dial(PJSIP/${EXTEN},10) same => n,GotoIf($["${DIALSTATUS}"="NOANSWER"]?forward,1) same => n,Hangup() exten => forward,1,Dial(PJSIP/1000,20) ; Ubah 1000 sesuai nomor admin same => n,Hangup() ``` ## Simpan dan Restart Asterisk ``` sudo systemctl restart asterisk asterisk -rvv **masukin ini di cli nya** > dialplan show internal ``` ## Menambahkan MoH ke Asterisk ``` sudo apt install asterisk-moh-opsound sudo apt install asterisk-moh-opsound-wav ``` File musik MoH biasanya ada di /var/lib/asterisk/moh 🔹 Untuk melihat daftar file musik: ``` ls /var/lib/asterisk/moh ``` ## Menentukan Musik MoH di musiconhold.conf File konfigurasinya ada di /etc/asterisk/musiconhold.conf. Buka file ini untuk mengeditnya: ``` sudo nano /etc/asterisk/musiconhold.conf ``` tambahin konfigurasi ini ``` [default] mode=files directory=/var/lib/asterisk/moh random=yes ``` Penjelasan: mode=files → Menggunakan file musik dari direktori. directory=/var/lib/asterisk/moh → Tempat file musik disimpan. random=yes → Memainkan musik secara acak. Simpan (CTRL + X, lalu tekan Y dan ENTER). Kemudian, restart Asterisk agar konfigurasi diterapkan ## Menambahkan MoH ke Dialplan Di extensions.conf, pastikan Dial menggunakan opsi m untuk mengaktifkan MoH: ``` exten => 10320,1,NoOp(Call to Rafif - UDP) same => n,Dial(PJSIP/10320,20,m(default)) same => n,Voicemail(10320@default,u) same => n,Hangup() ``` ## (Opsional) Menambah Musik Sendiri Kalau mau pakai musik sendiri, cukup salin file musik ke direktori MoH: ``` sudo cp lagu-mu.wav /var/lib/asterisk/moh/ sudo systemctl restart asterisk ``` Jika MoH Tidak Berjalan ``` sudo apt install asterisk-moh-opsound sudo systemctl restart asterisk core set verbose 3 ``` Kalau sudah ada file musiknya, Music on Hold (MoH) sudah aktif dan bisa dipakai di ekstensi Asterisk Cek MoH Saat Panggilan Kalau mau pastikan MoH berjalan, bisa coba: Panggil nomor lain dan jangan diangkat. Harusnya terdengar musik. Gunakan CLI Asterisk untuk mengecek status MoH dengan: `sudo asterisk -rx "core show channels"` Kalau ada saluran aktif dengan status MoH, berarti sudah bekerja dengan baik. ## Pastikan Setiap Akun Sudah Terdaftar di Asterisk ``` sudo asterisk -rx "pjsip show endpoints" ``` **Konfigurasi Linphone di Setiap Perangkat** Di setiap softphone (Linphone), buat akun baru dengan parameter: SIP Address: sip:<nomor>@<IP Server Asterisk> Contoh untuk Rafif: sip:10320@192.168.1.100 Transport: UDP untuk nomor 10320, 10284, 10344, 10254 TLS untuk nomor 20320, 20284, 20344, 20254 Server/Proxy: sip:<IP Server Asterisk> Username: Sesuai nomor kontak (misal 10320) Password: Sesuai yang ada di pjsip.conf ## Uji Coba Panggilan Antar Kontak Panggil antar kontak menggunakan Linphone, misalnya: Dari 10320 (Rafif) ke 10284 (Ryden) Dari 20320 (Rafif TLS) ke 20284 (Ryden TLS) Pastikan suara terdengar jelas. Jika panggilan tidak terjawab, harusnya masuk ke Voicemail. Jika tidak terjawab dalam waktu tertentu, panggilan harus dialihkan ke Call Forwarding (misalnya ke admin 1000). ## Debug Jika Ada Masalah Cek apakah perangkat terdaftar di Asterisk: ``` sudo asterisk -rx "pjsip show contacts" ``` Cek apakah ada error saat panggilan: ``` sudo asterisk -rvvvvv ``` Jika ada audio tidak keluar, pastikan firewall tidak memblokir RTP port (biasanya di udp 10000-20000). **Jika status akun masih Unavail, berarti perangkat tidak berhasil terhubung ke Asterisk. Berikut langkah-langkah untuk memperbaikinya:** **Cek Apakah User Terdaftar di Asterisk** ``` sudo asterisk -rx "pjsip show endpoints" ``` Lihat bagian Status: Jika Avail, artinya akun sudah terdaftar dan aktif. Jika Unavail, artinya perangkat belum terhubung ke server Asterisk. Coba juga perintah ini untuk melihat apakah perangkat berhasil login: ``` sudo asterisk -rx "pjsip show contacts" ```