DEV Community


Posted on

Make calls through Asterisk CLI

Weekly sharing

Hi everyone, I am Ekim, a fresh Bootcamp graduate and an IT helper (I don't dare to call myself a programmer yet). Every Friday, I will share some of the work that I've done over the last week in a bid to get feedbacks from you guys and record my journey to become a programmer.


Record and Hear your voice through Asterisk


As promised, I will go through a more user-friendly process of recording a voice. Also, I would like to show you how to originate a call (make a call) from Asterisk.

Voice Navigation

  • If you are careful enough, you would have noticed that the Record dialplan application includes a "beep" sound when you dial 41XXXX.
  • So now, let's make our voice navigation based on that.
  • Record a track that signals people to start recording their voices after hearing a "beep" sound and press # when they finish recording.

Phone restriction

  • If you dial 41XXXX to record your navigation audio, just like the previous sharing, you wouldn't need to worry about the audio restrictions. However, if you record your navigation audio through your smartphone application or other devices, the recording you got is highly likely incompatible with the telephony codecs.

  • Often, for hardphones, there are restrictions for the audio file.

    • Codec → .gsm (convention and saves space) | .wav (better quality but occupying more space)
    • Channels → mono
    • Sample rate → 8000hz (at max)
    • Bits per sample → 16bits
  • So, we need to convert the file into what we need using ffmpeg.

ffmpeg -i <file> -ac 1 -ar 8000 -c:a pcm_s16le "<new file>.wav"
Enter fullscreen mode Exit fullscreen mode

Audio track location

  • After that, let's move the converted file to the location where Asterisk stores sounds.
cd /var/lib/asterisk/sounds/
Enter fullscreen mode Exit fullscreen mode
  • I would like to create a folder for better organization, so I create a folder called "playback"
mkdir playback
Enter fullscreen mode Exit fullscreen mode

Dialplan modifications

  • Going back to our extensions.conf,
exten = _41XXXX,1,Answer
; Playback is the application; playback is the folder in /var/lib/asterisk/sounds/ ; xxxxx is the converted audio name where .wav is excluded.
same = n,Playback(playback/xxxxx)   
; record your voice and save it in the name of XXXX, the any 4 digits you dialed and in .gsm format
same = n,Record(record/${EXTEN:2}.gsm)      
same = n,Wait(1)
same = n,Hangup()

exten = _42XXXX,1,Answer
same = n,Wait(1)
; play the audio file you recorded from /var/lib/asterisk/sounds/record
same = n,Playback(record/${EXTEN:2})        
same = n,Wait(1)
same = n,Hangup()
Enter fullscreen mode Exit fullscreen mode
  • As always, after doing changes in the dialplan, reload it in the CLI.
sudo asterisk -rvvvvv
dialplan reload
Enter fullscreen mode Exit fullscreen mode
  • Now, it is more user-friendly.

Calling through CLI

  • Before we originate a call through CLI, we need to do some settings in pjsip.conf, extensions.conf and modules.conf.

  • In pjsip.conf,

type = transport
protocol = udp
bind =

context=calling         ;Context is now "calling"
allow = !all,ulaw,alaw

type = auth
auth_type = userpass

type = aor
max_contacts = 1

[1112](endpoint-useragent)      ;created 1112 endpoint
callerid = 1112 <1112>

password = 1112
username = 1112

[1113](endpoint-useragent)      ;created 1113 endpoint
callerid = 1113 <1113>

password = 1113
username = 1113
Enter fullscreen mode Exit fullscreen mode
  • In extensions.conf
exten = _111X,1,Dial(PJSIP/${EXTEN})
 same = n,Hangup()
Enter fullscreen mode Exit fullscreen mode
  • In modules.conf
load =
load =
load =
load =
load =
load =
load =
load =
load =
load =
load =     ; added 
load =  ; added 
Enter fullscreen mode Exit fullscreen mode
  • Also, don't forget to set up those endpoints on your two different softphones. For me, I use MicroSIP and Linphone.

  • And remember, restart after adding new modules in modules.conf, and reload the dialplan and pjsip.

sudo service asterisk restart
sudo asterisk -rvvvvv
dialplan reload     ; not necessary after restart
core reload     ; not necessary after restart
channel originate LOCAL/1112@calling application Dial(PJSIP/1113)       # this is how you originate a call via CLI
Enter fullscreen mode Exit fullscreen mode
  • TLDR: This is how you originate a call from CLIchannel originate LOCAL/1112@calling application Dial(PJSIP/1113).


  • I hope you know more about the codec for telephony system and know how to make calls from CLI. That's it for today. If you have problems regarding ffmpeg installation, which I omitted in this sharing, please comment below and see if I could help. In the meantime, stay healthy and stay tuned for more content !!!

Top comments (0)