Pokazywanie postów oznaczonych etykietą asterisk. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą asterisk. Pokaż wszystkie posty

środa, 13 maja 2015

Limit kanałów na trunku wraz ze zmianą na żądanie

Szybki sposób, na zastosowania limitowania ilości połączeń wraz z możliwością zmiany ilości kanałów na żądanie

extensions.conf

exten => 4832XXXXXXX,1,Set(GROUP()=trunk)
exten => 4832XXXXXXX,n,Set(ILE=${DB(test/ile)})
exten => 4832XXXXXXX,n,Noop(Tyle polaczen ${GROUP_COUNT(trunk)} ustawiono na ${ILE})
exten => 4832XXXXXXX,n,GotoIf($[${GROUP_COUNT(trunk)} > ${ILE}]?falsz:prawda)
exten => 4832XXXXXXX,n(prawda),NoOP(prawda)
exten => 4832XXXXXXX,......
exten => 4832XXXXXXX,......
exten => 4832XXXXXXX,n(falsz),Set(DIALSTATUS=BUSY)

[kanal1]
exten => s,1,NoOP(bede zmienial liczbe kanalow na 1)
exten => s,n,Set(DB(test/ile)=1)
exten => s,n,Set(ILE=${DB(test/ile)})
exten => s,n,NoOP(kanalow ${ILE})

[kanal2]
exten => s,1,NoOP(bede zmienial liczbe kanalow na 2)
exten => s,n,Set(DB(test/ile)=2)
exten => s,n,Set(ILE=${DB(test/count)})
exten => s,n,NoOP(kanalow ${ILE})


Contexty kanal1 i kanal2 sluza do ustawiania liczby mozliwych polaczen na 1 lub 2.

Jest to jakiś pomysł, na obejście problemu niemożności ustawienia call-limit w deklaracji trunku w sip.conf

piątek, 14 listopada 2014

Połączenia na numery stacjonarne - dialplan pattern matching

Zrobiłem dialplan dla asteriska, który pozwala na połączenia tylko do numerów stacjonarnych w Polsce według rozpiski z http://pl.wikisource.org/wiki/Telefoniczne_numery_kierunkowe_w_Polsce. Dialplan bardzo prosty, aczkolwiek na tyle pracochłonny, że postanowiłem tutaj wrzucić, może komuś się przyda.  Sam dialplan wykorzystuje macro, aby można było w prostszy sposób zmieniać jego konfigurację.

Może ktoś z Was, wie jak napisać taki dialplan zgrabniej? Jeśli tak to proszę zostawić pomysł w komentarzach pod postem ;)

extensions.conf


[macro-stacjonarka]
exten => s,1,NoOp(DZWONIE DO ${ARG1})
exten => s,n,Dial(SIP/trunk_wychodzacy/${ARG1})
exten => s,n,Hangup



[wychodzace]

exten => _1XXXXXXXX,1,NoOP(stacjonarka)
exten => _1XXXXXXXX,n,Macro(stacjonarka,${EXTEN},1)
exten => _1XXXXXXXX,n,Hangup()


czwartek, 2 października 2014

Prosty load balancer oparty na round-robin dla połączeń wychodzących - Asterisk


Dzisiaj szybki i prosty round-robin w Asterisku, który losuje pomiędzy trunkA i trunkB, gdzie pójdzie połączenie wychodzące:

extensions.conf

[macro-stacjonarne]
exten => s,1,NoOp(DZWONIE DO ${ARG1})
exten => s,n,GotoIf($[${RAND(1,2)} > 1]?trunkA:trunkB)
exten => s,n(trunkA),Dial(SIP/trunkA/${ARG1})
exten => s,n,Hangup
exten => s,n(trunkB),Dial(SIP/trunkB/${ARG1})
exten => s,n,Hangup


Rozwiązanie można nawet wykorzystać w ostateczności jako failover, jeśli ma się tylko 2 trunki (ale nie polecał bym, lepiej jednak zrobić failover, który będzie badał status ewentualnie stan trunka)

piątek, 26 września 2014

Business Livebox MicroPBX - Asterisk trunk

Podłączenie Business Livebox MicroPBX  do Asteriska (konfiguracja peera)

sip.conf


[global]
directmedia=no


register => shortnumber:password@10.0.0.1/shortnumber


[shortnumber]
type=friend
nat=yes
defaultuser=shortnumber
fromuser=shortnumber
secret=password
host=10.0.0.1
qualify=yes
context=tpsa
callerid=048XXXXXXXXX
disallow=all
allow=ulaw
allow=alaw

poniedziałek, 25 lutego 2013

Asterisk - połączenia przychodzące - zależne od pory dnia

Korzystając z rozwiązań jakie daje nam dialplan asteriska - centrala telefoniczna IP-PBX  - możemy na jednym numerze telefonu ustawić dwa osobne konteksty zależne od dnia i godziny.

Przykładowo codziennie od poniedziałku do piątku w godzinach od 10 do 15 siedzimy w biurze i chcemy odbierać tam połączenia, ale po 15 jesteśmy już poza biurem i chcemy automatycznie przekierować dzwoniącego na swoją komórkę.

czwartek, 14 lutego 2013

Asterisk install from source

Coś pięknego postawić sobie centralę telefoniczną na zwykłym kompie czy laptopie :) Asterisk to w sumie nic innego jak programowa centralka telefoniczna czyli tzw. Software PBX, no może lepiej Software IP-PBX ;) bo w sumie kto instaluje Asteriska i nie wykorzystuje VoIP :)

Ja aktualnie kompiluje i instaluje Asteriska w wersji 11 na Slackware 14.0. Gdyby ktoś jeszcze miał problem z instalacją asterisk na Slackware to:

poniedziałek, 21 stycznia 2013

VoIPmonitor Free GUI

Dziś na sourceforge wrzuciłem mały projekt, który robię ze znajomym, Jest to nakładka - GUI na VoIPmonitor. VoIPmonitor to nic innego jak sniffer, który pomaga przy analizie jakości połączeń głosowych.  Co prawda sam projekt posiada GUI i to bardzo dobre, ale płatne i niestety zaciemnione przez ionCube.

VoIPmonitor Free GUI na pewno nie jest i raczej nie będzie konkurencją dla oryginalnego GUI voipmonitora.  Nasze GUI to tylko darmowa alternatywa :)





Dziś wrzucam to co zrobiłem przez jeden dzień. Mamy nadzieję, że projekt będzie rozwijany :)

https://sourceforge.net/projects/voipmonitorgui/


Będę wdzięczny za raportowanie o znalezionych problemach oraz podatnościach w kodzie.

wtorek, 16 października 2012

Multi level IVR

Wielopoziomowe menu IVR w Asterisk




[macro-dzwon]
exten => s,1,Ringing
exten => s,n,Background(gsm/prompt 9.1)
exten => s,n,Set(DIRNAME=${STRFTIME(${EPOCH},,%Y%m/%d)}/${CALLERID(NUM)})
exten => s,n,Set(FILENAME=${DIRNAME}/${STRFTIME(${EPOCH},,%H%M%S)}-${EXTEN:2})
exten => s,n,System(/bin/mkdir -p /var/www/monitor/${DIRNAME})
exten => s,n,NoOp(${FILENAME})
exten => s,n,MixMonitor(/var/www/monitor/${FILENAME}.wav,b)
exten => s,n,Set(_doVoicemail=no)
exten => s,n,Queue(CallCenter,n) ;twh
exten => s,n,Hangup



[IVR]
exten => 48XXxxXXxxX,1,Answer
exten => 48XXxxXXxxX,2,Background(gsm/prompt 1.1)
exten => 48XXxxXXxxX,3,Background(gsm/prompt 1.2)
exten => 48XXxxXXxxX,4,Background(gsm/prompt 1.3)
exten => 48XXxxXXxxX,5,Set(TIMEOUT(digit)=20)
exten => 48XXxxXXxxX,6,Set(TIMEOUT(response)=25)
exten => 48XXxxXXxxX,7,WaitExten(5)

;1
exten => 1,1,Answer
exten => 1,n,GoTo(prompt2,200,1)

;2
exten => 2,1,Answer
exten => 2,n,GoTo(prompt3,300,1)

;3
exten => 3,1,Answer
exten => 3,n,GoTo(prompt4,400,1)

;4
exten => 4,1,Answer
exten => 4,n,GoTo(prompt5,500,1)

;5
exten => 5,1,Answer
exten => 5,n,GoTo(prompt6,600,1)

;6
exten => 6,1,Answer
exten => 6,n,GoTo(prompt7,700,1)

;7
exten => 7,1,Answer
exten => 7,n,GoTo(prompt8,800,1)


;Timeout
exten => t,1,Playback(1-4)
exten => t,2,Goto(IVR,48XXxxXXxxX,4)
exten => i,1,Goto(IVR,48XXxxXXxxX,2)

środa, 3 października 2012

Asterisk - dzwonienie z konsoli


Żeby zadzwonić prosto z CLI asterisk'a

originate SIP/793333333@trunk extension default@

gdzie:

793333333 - numer, na który dzwonimy
trunk - nazwa trunka jeśli dzwonimy na zewnątrz
default - context

Asterisk CallerID - kilka numerów na jednym trunku



Zawartość /etc/asterisk/extensions.conf

exten => _X.,1,GotoIf($["${CALLERID(num)}" = "101"]?dial101)
exten => _X.,n,GotoIf($["${CALLERID(num)}" = "102"]?dial102)
exten => _X.,n,GotoIf($["${CALLERID(num)}" = "103"]?dial103)
exten => _X.,n,GotoIf($["${CALLERID(num)}" = "104"]?dial104)
exten => _X.,n,GotoIf($["${CALLERID(num)}" = "105"]?dial105)
exten => _X.,n(dial101),Set(CALLERID(all)=48xXxXx50)
exten => _X.,n,Dial(SIP/trunk/${EXTEN},,r)
exten => _X.,n,Hangup()
exten => _X.,n(dial102),Set(CALLERID(all)=48xXxXx51)
exten => _X.,n,Dial(SIP/trunk/${EXTEN},,r)
exten => _X.,n,Hangup()
exten => _X.,n(dial103),Set(CALLERID(all)=48xXxXx53)
exten => _X.,n,Dial(SIP/trunk/${EXTEN},,r)
exten => _X.,n,Hangup()
exten => _X.,n(dial103),Set(CALLERID(all)=48xXxXx52)
exten => _X.,n,Dial(SIP/trunk/${EXTEN},,r)
exten => _X.,n,Hangup()
exten => _X.,n(dial105),Set(CALLERID(all)=48xXxXx54)
exten => _X.,n,Dial(SIP/trunk/${EXTEN},,r)
exten => _X.,n,Hangup()

środa, 29 sierpnia 2012

Kolejki

Prosta kolejka w Asterisk

queues.conf

[CallCenter]
music=default
strategy=rrmemory
joinempty = yes
timeout=15
retry=1
wrapuptime=0
maxlen = 1
announce-frequency = 10
announce-holdtime = no
member => SIP/123,0
member => SIP/124,0



extensions.conf

exten => 13,1,Queue(CallCenter)


asterisk*CLI>

asterisk*CLI> queue show CallCenter
CallCenter has 0 calls (max 1) in 'rrmemory' strategy (5s holdtime, 18s talktime), W:0, C:2, A:0, SL:0.0% within 0s
   Members:
      SIP/124 (Not in use) has taken 1 calls (last was 281 secs ago)
      SIP/123 (Not in use) has taken 1 calls (last was 279 secs ago)
   No Callers

Jeśli chcesz aby tylko jeden SIP odbierał jedną rozmowę to koniecznie w sip.conf daj mu call-limit=1, wtedy  asterisk pokaże in use. 




piątek, 17 sierpnia 2012

Rozpoznawanie mowy przez Asterisk [Speech recognition]

Skonfigurowanie Asteriska tak aby zamieniał test na mowę mamy za sobą. Dzisiaj chciałbym zaprezentować kolejny skrypt AGI autora Lefteris Zafiris, który to pozwala zamieniać mowę na słowo pisane.

Potrzebne paczki:
Perl
perl-libwww

Instalacja samego AGI podobnie jak we wcześniejszym poście bardzo prosta i polega na skopiowaniu pliku 
speech-recog.agi do katalogu ze skryptami AGI w asterisku ( u mnie /usr/share/asterisk/agi-bin/ ). 

a w /etc/asterisk/extensions.conf przykładowo dla języka polskiego:

exten => 0,1,Answer()
exten => 0,n,agi(speech-recog.agi,pl-PL)
exten => 0,n,Verbose(1,The text you just said is: ${utterance})
exten => 0,n,Verbose(1,The probability to be right is: ${confidence})
exten => 0,n,Hangup()

wtorek, 14 sierpnia 2012

Asterisk syntezator mowy [Text to speech]

Chcesz aby Twój asterisk w końcu przemówił?
Wystarczy zastosować skrypt AGI, który przerobi nasz tekst na mowę dzięki usłudze Google Translate.

Co będzie potrzebne?
AGI stworzone przez Lefteris Zafiris, które można pobrać z tąd

Oraz trochę niezbędnego softu:
- perl
- perl-libwww
- sox
- mpg123


Cała instalacja jest naprawdę trywialna. Należy skopiować googletts.agi do katalogu ze skryptami AGI w asterisku ( u mnie /usr/share/asterisk/agi-bin/ ).

Została tylko edycja extensions.conf

exten => 4832XXXXXXX,1,Answer()
exten => 4832XXXXXXX,2,agi(googletts.agi,"Asterisk juz mowi.",pl)


Projekt asterisk-googletts: zaf.github.com/asterisk-googletts

poniedziałek, 13 sierpnia 2012

Instalacja dahdi - Debian


Przyszedł czas na MeetMe w Asterisku stojącym na Debianie, więc krótka notka dla tych, którzy mieli przyjemność spotkać się z:

app_meetme.c:1097 build_conf: Unable to open pseudo device


apt-get install dkms

wget http://downloads.digium.com/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz

tar zxvf dahdi-linux-complete-current.tar.gz 

make all
make install
make config
modprobe dahdi_dummy


to powinno załatwić wszystkie problemy ;)

-- Executing [4832XXXXXXX@incoming:1] MeetMe("SIP/black-00000036", "1234") in new stack

wtorek, 7 sierpnia 2012

Połączenie przychodzące do wielu kont SIP - Asterisk


W razie potrzeby skierowania połączenia przychodzącego do kilku  innych numerów (w tym przypadku 3 wewnętrznych kont SIP) można zastosować poniższe rozwiązanie

/etc/asterisk/extensions.conf


[global]
SIP_GROUP=SIP/100&SIP/101&SIP/102

[context]
exten => 1,n,Ringing
exten => 1,n,Wait(2)
exten => 1,n,Dial(${SIP_GROUP},60,r)


czwartek, 5 kwietnia 2012

Zabezpieczamy Asteriska - fail2ban

W czasach wzmożonych ataków na platformy Asterisk polegających na  próbie poprawnego zalogowania się na jakieś z dostępnych kont SIP warto zablokować taką możliwość. Ponieważ ataki bruteforce/wordlist nie są zazwyczaj groźne - no chyba że nie mamy zabezpieczeń antyfraud'owych - ale potrafią zapchać asteriska/małe łącze  dużą liczbą prób logowań.

Jak poznać czy, ktoś próbuje włamać się na konto SIP'owe?

środa, 4 kwietnia 2012

Monitorowanie Asterisk przez Nagios

W celu monitorowania dostępności naszej centrali telefonicznej Asterisk możemy wykorzystać oprogramowanie Nagios oraz sipsak.

Sciagamy plugin do nagiosa check_asterisk i wrzucamy go do /usr/local/nagios/libexec


Po instalacji sipsak
./configure && make && make install

Definiujemy w commands.cfg nową komendę


define command{
command_name check_asterisk
command_line $USER1$/check_asterisk -U $ARG1$ -P $ARG2$ -w 500 -c 1000
}



Nastepnie w pliku z hostami dodajemy 

define service {

        use generic-service

        host_name Asterisk

        service_description SIP

        check_command  check_asterisk!sip:NAZWA_SIP@IP_NASZEGO_ASTERISKA

        normal_check_interval 1
        retry_check_interval 2

}

Na koniec przeładujemy Nagiosa i powinno wszystko grać ;) 







poniedziałek, 2 kwietnia 2012

Asterisk - automatyczne nawiazywanie polaczen

Do pliku /etc/asterisk/modules.conf dodajemy


load => pbx_spool.so

W bashu klepiemy bardzo prosty skrypt 

#!/bin/bash
sounds=/var/lib/asterisk/sounds/
rOut=/var/spool/asterisk/outgoing/
rUser=root
rGroup=root
nFile=call.csv
rtry=1
mtry=2
stime=1
#############################################
for nums in $(cat $nFile)
        do
                num=`echo $nums | awk -F"," {'print $1'}`
                noise=`echo $nums | awk -F"," {'print $2'}`
                                nTrunk=`echo $nums | awk -F"," {'print $3'}`
echo "`date`,$num,$noise" >> call-log.csv
echo "Channel: SIP/$nTrunk/$num" >> $num.call
echo "RetryTime:$rtry" >> $num.call
echo "MaxRetries:$mtry" >> $num.call
echo "Archive: Yes" >> $num.call
echo "Application: Playback" >> $num.call
echo "Data:$noise" >> $num.call
chown $rUser.$rGroup $num.call
mv $num.call $rOut
sleep $stime
done


Do tego tworzymy plik call.csv 
numer1,nagranie,trunk 
numer2,nagranie,trunk 
numer3,nagranie,trunk 
...


I to wszystko ;) 

Odpalamy skrypt, a asterisk sam dzwoni na numery z pliku call.csv i puszcza odpowiedni komunikat glosowy (nagranie - call.csv). 

Dzieki Archive:Yes  pliki call zostaja zarchiwizowane w katalogu /var/spool/asterisk/outgoing_done/