# 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"
```