بخش اول: نصب و راهاندازی اولیه
در این بخش، سرور اوبونتو را آماده کرده و استریسک را از سورسکد نصب و سرویس اولیه را راهاندازی میکنیم.
۱.۱: بهروزرسانی و نصب پیشنیازها
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential git curl subversion wget libncurses5-dev libssl-dev libxml2-dev libsqlite3-dev libjansson-dev libuuid1 uuid-dev
۱.۲: دانلود و کامپایل استریسک
cd /usr/src/
sudo curl -O http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-21-current.tar.gz
sudo tar xvf asterisk-21-current.tar.gz
cd asterisk-21.*/
sudo contrib/scripts/install_prereq install
sudo ./configure
sudo make menuselect
sudo make
sudo make install
sudo make samples
sudo make config
sudo ldconfig
۱.۳: ایجاد کاربر و تنظیم دسترسیها
sudo groupadd asterisk
sudo useradd -r -d /var/lib/asterisk -g asterisk asterisk
sudo usermod -aG audio,dialout asterisk
sudo chown -R asterisk:asterisk /etc/asterisk /var/{lib,log,spool}/asterisk /usr/lib/asterisk
۱.۴: راهاندازی سرویس
در فایل /etc/default/asterisk خطوط AST_USER و AST_GROUP را از حالت کامنت خارج کنید.
sudo systemctl restart asterisk
sudo systemctl enable asterisk
sudo systemctl status asterisk
بخش دوم: پیکربندی داخلیها
در این بخش، دو داخلی SIP برای فروش (6001) و پشتیبانی (6002) ایجاد میکنیم.
۲.۱: ویرایش فایل pjsip.conf
محتویات زیر را در فایل /etc/asterisk/pjsip.conf کپی کنید.
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0
[6001]
type=endpoint
context=from-internal
disallow=all
allow=ulaw
auth=auth6001
aors=6001
[auth6001]
type=auth
auth_type=userpass
password=StrongPassword1!
username=6001
[6001]
type=aor
max_contacts=1
[6002]
type=endpoint
context=from-internal
disallow=all
allow=ulaw
auth=auth6002
aors=6002
[auth6002]
type=auth
auth_type=userpass
password=StrongPassword2@
username=6002
[6002]
type=aor
max_contacts=1
۲.۲: ایجاد دایلپلن اولیه در extensions.conf
در این مرحله فقط تماس مستقیم بین داخلیها را فعال میکنیم. این کد در مراحل بعد کاملتر خواهد شد.
[from-internal]
exten => 6001,1,Dial(PJSIP/6001,20)
exten => 6002,1,Dial(PJSIP/6002,20)
exten => 100,1,Answer() & Echo() & Hangup()
بخش سوم: ضبط مکالمات
با افزودن دستور MixMonitor، تماسهای بین داخلیها را به صورت خودکار ضبط میکنیم.
۳.۱: ویرایش extensions.conf
کانتکست [from-internal] را با کد زیر جایگزین کنید تا ضبط مکالمه فعال شود.
[from-internal]
exten => 6001,1,MixMonitor(${STRFTIME(${EPOCH},,%Y-%m-%d-%H-%M-%S)}_${UNIQUEID}.wav)
same => n,Dial(PJSIP/6001,20)
exten => 6002,1,MixMonitor(${STRFTIME(${EPOCH},,%Y-%m-%d-%H-%M-%S)}_${UNIQUEID}.wav)
same => n,Dial(PJSIP/6002,20)
exten => 100,1,Answer() & Echo() & Hangup()
۳.۲: بررسی فایلهای ضبط شده
پس از برقراری تماس، فایلها در مسیر /var/spool/asterisk/monitor/ ذخیره میشوند.
بخش چهارم: انتقال تماس (دایورت)
یک سیستم دایورت هوشمند با کدهای ویژه *72 (فعالسازی) و *73 (غیرفعالسازی) پیادهسازی میکنیم.
۴.۱: افزودن ماکرو و کدهای ویژه به extensions.conf
کدهای زیر را به انتهای فایل extensions.conf اضافه کنید.
[macro-dial-ext]
exten => s,1,Set(FWD_STATUS=${DB(CF/${ARG1})})
same => n,GotoIf($["${FWD_STATUS}" = ""]?dial:forward)
same => n(forward),Dial(Local/${FWD_STATUS}@from-internal,20)
same => n,Hangup()
same => n(dial),Dial(PJSIP/${ARG1},20)
same => n,Hangup()
[feature-forward]
exten => *72,1,Answer()
same => n,Read(FWD_TO_NUM,vm-enter-num-to-callfwd,10)
same => n,Set(DB(CF/${CALLERID(num)})=${FWD_TO_NUM})
same => n,Playback(saved) & Hangup()
exten => *73,1,Answer()
same => n,DBdel(CF/${CALLERID(num)})
same => n,Playback(call-fwd-deactivated) & Hangup()
بخش پنجم: استفاده از کالر آیدی
ماکروی dial-ext را کاملتر میکنیم تا قبل از اتصال، شماره تماسگیرنده را بخواند و قابلیت ضبط مکالمه را نیز در خود داشته باشد.
۵.۱: جایگزینی ماکروی dial-ext
ماکروی قبلی را پیدا کرده و آن را با نسخه کامل زیر جایگزین کنید.
[macro-dial-ext]
exten => s,1,Set(FWD_STATUS=${DB(CF/${ARG1})})
same => n,GotoIf($["${FWD_STATUS}" = ""]?dial:forward)
same => n(forward),Dial(Local/${FWD_STATUS}@from-internal,20)
same => n,Hangup()
same => n(dial),Answer()
same => n,Playback(a-call-from)
same => n,SayDigits(${CALLERID(num)})
same => n,MixMonitor(${STRFTIME(${EPOCH},,%Y-%m-%d-%H-%M-%S)}_${UNIQUEID}.wav)
same => n,Dial(PJSIP/${ARG1},20)
same => n,Hangup()
بخش ششم: منوی تلفنی گویا (IVR)
یک منوی تلفنی با داخلی 700 میسازیم تا تماسگیرندگان بتوانند بین بخش فروش و پشتیبانی انتخاب کنند.
۶.۱: افزودن کانتکست IVR
کد زیر را به انتهای فایل extensions.conf اضافه کنید.
[ivr-menu]
exten => s,1,Answer()
same => n(start),Background(custom/welcome-menu)
exten => 1,1,Goto(from-internal,6001,1)
exten => 2,1,Goto(from-internal,6002,1)
exten => i,1,Playback(pbx-invalid) & Goto(s,start)
exten => t,1,Playback(vm-goodbye) & Hangup()
۶.۲: ویرایش نهایی [from-internal]
در نهایت، کانتکست [from-internal] را با نسخه کامل زیر جایگزین کنید تا تمام قابلیتها (ماکرو، کدهای ویژه و IVR) را شامل شود.
[from-internal]
include => feature-forward
exten => 6001,1,Macro(dial-ext,6001)
exten => 6002,1,Macro(dial-ext,6002)
exten => 700,1,Goto(ivr-menu,s,1)
exten => 100,1,Answer() & Echo() & Hangup()
بخش هفتم: اتصال به Zoiper
پس از اعمال تمام تغییرات در استریسک و بارگذاری مجدد دایلپلن (dialplan reload)، میتوانید با Zoiper به سرور متصل شوید.
- Username / Login: 6001@YOUR_SERVER_IP
- Password: StrongPassword1!
- پس از اتصال، میتوانید با شمارهگیری 700 منوی تلفنی را تست کنید.
بخش هشتم: عیبیابی
این مشکل معمولاً به دلیل فایروال (در ویندوز یا سرور) یا تنظیمات اشتباه شبکه ماشین مجازی (باید Bridged Adapter باشد) رخ میدهد. ابتدا فایروال ویندوز/آنتیویروس را موقتاً غیرفعال کنید.
مطمئن شوید که خط include => feature-forward در ابتدای کانتکست [from-internal] قرار دارد و کانتکست [feature-forward] به درستی در انتهای فایل کپی شده است.
مسیر فایل صوتی را بررسی کنید. فایل welcome-menu.wav باید دقیقاً در مسیر /var/lib/asterisk/sounds/custom/ قرار داشته باشد و دسترسی خواندن برای کاربر asterisk را داشته باشد.