11 сент. 2025 г.

Asterisk sequence of audio files playback

The directory for every queue contains sequence of greetings named as 1.wav, 2.wav, 3.wav, etc.
Required to play those files before enter queue, in ascending order.


[subPlaySequence]
exten => start,1,NoOp(Play sequence from announce/queue/${ARG1})
   same => n,Set(i=1)
   same => n,While($[${i} < 15])
   same => n,Set(exists=${STAT(e,${ASTDATADIR}/sounds/ru/announce/queue/${ARG1}/${i}.wav)})
   same => n,ExecIf($[${exists} = 1]?Playback(announce/queue/${ARG1}/${i}))
   same => n,Set(i=$[${i} + 1])
   same => n,EndWhile
   same => n,Return

[incoming]
exten => 600,1,NoOp(${CALLERID(num)} Call to ${EXTEN})
 same => n,Answer()
 same => n,GoSub(subPlaySequence,start,1(callcenter))
 same => n,Queue(callcenter,120)

Asterisk mp3 mono monitor vs stereo monitor (left channel - one side, right channel - another)

[macro-recording]
exten => s,1,GoToIf($["${RECORDING}" = "1"]?yes:no)
exten => s,n(yes),Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${ARG1}-${ARG2});
exten => s,n,Set(FULL_DIR=${DIR_RECORDS}${STRFTIME(${EPOCH},,%Y)}/${STRFTIME(${EPOCH},,%m)}/${STRFTIME(${EPOCH},,%d)}/)
exten => s,n,Set(monopt=nice -n 19 /usr/bin/lame -b 32  --silent "${FULL_DIR}${fname}.wav"  "${FULL_DIR}${fname}.mp3" && rm -f "${FULL_DIR}${fname}.wav" && chmod o+r "${FULL_DIR}${fname}.mp3");
exten => s,n,Set(CDR(filename)=${fname}.mp3);
exten => s,n,Set(CDR(realdst)=${ARG2});
exten => s,n,MixMonitor(${FULL_DIR}${fname}.wav,b,${monopt});
exten => s,n(no),Verbose(Exit record);

[macro-stereorecording]
exten => s,1,GoToIf($["${RECORDING}" = "1"]?yes:no)
exten => s,n(yes),Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${ARG1}-${ARG2});
exten => s,n,Set(FULL_DIR=${DIR_RECORDS}${STRFTIME(${EPOCH},,%Y)}/${STRFTIME(${EPOCH},,%m)}/${STRFTIME(${EPOCH},,%d)}/)
exten => s,n,Set(monwav=nice -n 19 /usr/bin/sox -M "${FULL_DIR}${fname}-in.wav" "${FULL_DIR}${fname}-out.wav" "${FULL_DIR}${fname}-joint.wav" && );
exten => s,n,Set(monmp3=nice -n 19 /usr/bin/lame -b 32 --silent "${FULL_DIR}${fname}-joint.wav" "${FULL_DIR}${fname}.mp3" && );
exten => s,n,Set(moncleanup=rm -f ${FULL_DIR}${fname}*.wav && chmod o+r "${FULL_DIR}${fname}.mp3");
exten => s,n,Set(CDR(filename)=${fname}.mp3);
exten => s,n,Set(CDR(realdst)=${ARG2});
exten => s,n,MixMonitor(${FULL_DIR}${fname}.wav,bSr(${FULL_DIR}${fname}-in.wav)t(${FULL_DIR}${fname}-out.wav),${monwav}${monmp3}${moncleanup});
exten => s,n(no),Verbose(Exit stereo record);

 

12 авг. 2025 г.

Asterisk call to client, privacy warning before talk

A() - wav file to play callee
m - play moh to caller while play message to callee 

exten = _00XXXXXXXXXX,1,Verbose(1,"Call out with warning ${EXTEN} from ${CALLERID(num)}")
    same => n,Dial(sip/8${EXTEN:2}@provider,300,mA(announce/outwarn))
    same => n,Hangup()

1 июл. 2025 г.

Autorun Tmux 6 panels layout on startup


 

1. Create /root/.tmux.conf

new-session -d -s MYDESK
set -g status off
set -g set-titles on
set -g set-titles-string ""
set -g pane-border-lines double
set -g pane-border-status top
set -g pane-border-format "#P #{pane_tty} PID=#{pane_pid}  PATH=#{pane_current_path} Command=#{pane_current_command} #{pane_title}"
split-window -h -l 80%
select-pane -t 0
split-window -v
split-window -v
select-pane -t 3
split-window -v
split-window -v
select-pane -t 0
send-keys -t MYDESK "cd /opt/proc1" C-m
send-keys -t MYDESK "proc1.sh" C-m
select-pane -t 1
send-keys -t MYDESK "cd /opt/proc2" C-m
send-keys -t MYDESK "proc2.sh" C-m
select-pane -t 2
send-keys -t MYDESK "cd /opt/proc3" C-m
send-keys -t MYDESK "proc3.sh" C-m
select-pane -t 3
send-keys -t MYDESK "cd /opt/proc4" C-m
send-keys -t MYDESK "proc4.sh" C-m
select-pane -t 4
send-keys -t MYDESK "cd /opt/proc5" C-m
send-keys -t MYDESK "proc5.sh" C-m
select-pane -t 5
send-keys -t MYDESK "mc" C-m

23 июн. 2025 г.

OpenSSL p12 extract keys and certs, convert ca and user keys to p12, decrypt encrypted key

Create unencrypted key file:

openssl pkcs12 -in mykeys.p12 -out unencrypted.key -nodes -nocerts

Extract certificates to file:

openssl pkcs12 -in mykeys.p12 -out mycerts.crt -nokeys

CA and user certificate will be in the same file!

Convert keys to p12:

openssl pkcs12 -export -certfile ca.crt -in user.crt  -inkey user.key -out mykeys.p12

Decrypt user key:

openssl rsa -in encrypted.key -out decrypted.key


13 февр. 2025 г.

Mysql/MariaDB table delete records by schedule

 1. /root/cleanup_records.sql

use DATABASE_NAME;
delete from TABLE_NAME where `DATE_FIELD` < DATE_SUB(CURDATE(),INTERVAL 3 MONTH);

2. crontab -e (/var/spool/cron/crontabs/root)


# m h  dom mon dow   command
0 0 * * * mysql -uroot <~/cleanup_records.sql

25 янв. 2025 г.

ufw cheatsheet

ufw disable/enable
ufw status verbose
ufw status numbered
ufw delete NUM
ufw delete deny NUM
ufw insert 1 deny in from XXX.XXX.XXX.XXX to any port 25 proto tcp
ufw app info 'OpenSSH' (see /etc/ufw/applications.d)
ufw allow proto tcp from XXX.XXX.XXX.XXX/24 to any port YYYY 
ufw reload (to apply rules)
ufw allow in on eth0 to any port 22
ufw logging on/off/low/medium/high/full
fot NAT - /etc/ufw/before.rules
ufw allow 22/tcp comment 'open port 22 for ssh'
ufw allow <PORTFROM>:<PORTTO>/udp