Funkcjonalność BLF
03 listopad 2011, ratajczyklTelefony VoIP oferują coraz większe możliwości usług dodanych do obsługi połączeń telefonicznych. Wartą uwagi jest funkcjonalność BLF, ang. Busy Lamp Field. Funkcja ta jest często wykorzystywana:
- w urządzeniach posiadających kilka linii rozróżnianych za pomocą podświetlonego przycisku,
- w telefonach z przystawkami sekretarskimi.
Za pośrednictwem BLF, centrala PBX (Asterisk) informuje danego użytkownika telefonii VoIP na bieżąco o statusie innego użytkownika - od rozpoczęcia wywoływania połączenia, przez odebranie i ostatecznie rozłączenie.
Przykład konfiguracji przedstawiony jest na podstawie centralki PBX Asterisk oraz telefonu IP Yealink T-38G – posiada on dwukolorowe diody przy przyciskach oraz możliwość podpięcia przystawki sekretarskiej.
Możemy rozróżnić następujące stany monitorowanego połączenia:
- Ringing (dioda miga na czerwono) - rozpoczęcie wywoływania użytkownika.
- Connected/Busy (dioda świeci na czerwono) –użytkownik prowadzi rozmowę.
- Idle (dioda świeci na zielono) – użytkownik gotowy do odebrania połączenia (BLF nie informują np. o DND)
Podstawową konfigurację można oprzeć na: http://www.freeconet.pl/pl/pomoc/instrukcja-asterisk rozszerzając ją o dodatkowe konta użytkowników tak, aby zaprezentować pełnię możliwości .
Istotne w konfiguracji Asteriska są parametry:
call-limit=100
limitonpeer=yes
notifyringing=yes
notifyhold=yes
allowsubscribe=yes
SIP.conf
[code]
[general]
context=default - Wszystkie nieznane połączenia kierowane są do kontekstu default extensions.conf
bindport=5172 - Zwykle atakujący szukają Asterisk-ów na domyślnym porcie sip, czyli 5060. Warto ustawić inny np. 5172 Uwaga! w konfiguracji telefonów trzeba będzie wpisać ten port jako port proxy zamiast 5060
srvlookup=yes - Dla zwiększenia redundancji należy włączyć rozwiązywanie domeny po rekordach SRV (w przypadku problemów z dodzwonieniem konieczne jest ustawienie wartości „no”)
defaultexpiry=60 - Przydatne przy Asteriskach na niepublicznych adresach IP (za NATem)
allowguest=no - Zabezpiecza przed nieautoryzowanymi wywołaniami (domyślnie Asterisk zezwala na takie wywołania)
dtmfmode = rfc2833 - ustawiania dla FreecoNet
nat=yes - ustawienia dla bramek/telefonów za NATem
localnet=192.168.2.0/255.255.255.0 - adres i maska sieci lokalnej
;externip=123.234.123.234 - adres publiczny routera, za którym jest Asterisk
register => ***:***@sip.freeconet.pl/przychodzace1 - konto:haslo@domena/kontekst(?)
sip.conf
[freeconet-out]
type=peer - do operatora
username=*** - nazwa konta we FreecoNet
secret=*** - SIP (terminala) konta FreecoNet
fromdomain=sip.freeconet.pl
context=FreecoNet - informacja, na jaki kontekst w extensions.conf maja przychodzić połączenia
host=sip.freeconet.pl
port=5060
outboundproxy=sip.freeconet.pl
outboundproxyport=5060
insecure=no
call-limit=100 - zezwolenie na więcej wejść do extension
limitonpeer=yes - aby BLF działały zgodnie z oczekiwaniami
notifyringing=yes
notifyhold=yes
allowsubscribe=yes - zezwolenie na subscribe’y - na nich opiera się działanie BLF
[freeconet-in1] podobnie dwa peery dla połączeń przychodzących
type=peer
fromdomain=sip.freeconet.pl
port=5060
context=freeconet
host=213.218.116.65
insecure=no
call-limit=100 - zezwolenie na więcej wejść do extension
limitonpeer=yes - aby BLF działały zgodnie z oczekiwaniami
notifyringing=yes
notifyhold=yes
allowsubscribe=yes - zezwolenie na subscribe’y - na nich opiera się działanie BLF
[freeconet-in2]
type=peer
fromdomain=sip.freeconet.pl
port=5060
context=freeconet
host=213.218.116.66
insecure=no
call-limit=100 - zezwolenie na więcej wejść do extension
limitonpeer=yes - aby BLF działały zgodnie z oczekiwaniami
notifyringing=yes
notifyhold=yes
allowsubscribe=yes - zezwolenie na subscribe’y - na nich opiera się działanie BLF
[telefon1] przykład konfiguracji telefonu
context=tel1 - informacje, o kontekście przetwarzania
type=friend - jest użytkownikiem
username=telefon1 - nazwa użytkownika
secret=telefon1 - hasło, którym użytkownik uwierzytelnia się
callerid=”Kowalski Jan” <100> - id - tekst oraz numer
host=dynamic - może być gdziekolwiek w sieci
nat=yes - również na NATem
accountcode=Kowalscy - Kowalscy - dodatkowe dla billingów wewnętrznych Asteriska
allow=All - kodeki (tu wszystkie)
call-limit=100 - zezwolenie na więcej wejść do extension
limitonpeer=yes - aby BLF działały zgodnie z oczekiwaniami
notifyringing=yes
notifyhold=yes
allowsubscribe=yes - zezwolenie na subscribe’y - na nich opiera się działanie BLF
[telefon2] przykład konfiguracji telefonu
context=tel2 - informacje, o kontekście przetwarzania
type=friend - jest użytkownikiem
username=telefon2 - nazwa użytkownika
secret=telefon2- hasło, którym użytkownik uwierzytelnia się
callerid=”Piotr Nowak” <101> - id - tekst oraz numer
host=dynamic - może być gdziekolwiek w sieci
nat=yes - również na NATem
accountcode=Kowalscy - Kowalscy - dodatkowe dla billingów wewnętrznych Asteriska
allow=All - kodeki (tu wszystkie)
call-limit=100 - zezwolenie na więcej wejść do extension
limitonpeer=yes - aby BLF działały zgodnie z oczekiwaniami
notifyringing=yes
notifyhold=yes
allowsubscribe=yes - zezwolenie na subscribe’y - na nich opiera się działanie BLF
[telefon3] przykład konfiguracji telefonu
context=tel3 - informacje, o kontekście przetwarzania
type=friend - jest użytkownikiem
username=telefon3 - nazwa użytkownika
secret=telefon3- hasło, którym użytkownik uwierzytelnia się
callerid=”Anna Lewandowska” <102> - id - tekst oraz numer
host=dynamic - może być gdziekolwiek w sieci
nat=yes - również na NATem
accountcode=Kowalscy - Kowalscy - dodatkowe dla billingów wewnętrznych Asteriska
allow=All - kodeki (tu wszystkie)
call-limit=100 - zezwolenie na więcej wejść do extension
limitonpeer=yes - aby BLF działały zgodnie z oczekiwaniami
notifyringing=yes
notifyhold=yes
allowsubscribe=yes - zezwolenie na subscribe’y - na nich opiera się działanie BLF
[/code]
extensions.conf
[code]
[default] - niebezpieczny kontekst dla nieproszonych gości
exten => _X.,1,Hangup - bez szans na wykonanie połączenia
[freeconet] - kontekst docelowy peerów FreecoNet
exten => przychodzace1,1,Set(TOHDR=${SIP_HEADER(To)})
exten => przychodzace1,2,GotoIf($["${REGEX("611234567" ${TOHDR})}" = "1"]?wew,100,1)
exten => przychodzace1,3,GotoIf($["${REGEX("611234568" ${TOHDR})}" = "1"]?wew,101,1)
exten => przychodzace1,4,GotoIf($["${REGEX("611234569" ${TOHDR})}" = "1"]?wew,102,1)
[tel1]
exten => t,1,Hangup
exten => h,1,Hangup
include => wew
exten => _XXX.,1,SIPAddHeader(X-Fid: ${SIPCALLID}) - opcjonalne to, co stanie w miejscu ${SIPCALLID} pojawi się w billingach csv w panelu FreecoNet
exten => _XXX.,2,Set(CALLERID(num)=48611234569) - ustawienie publicznego numeru telefonu (w panelu trzeba ustawić prezentację “użyj z bramki”)
exten => _XXX.,3,Dial(SIP/${EXTEN}@freeconet-out) - resztą połączenia zajmiemy się my!
exten => 100,hint,SIP/telefon1 - instrukcje odpowiedzialne za BLF, umieszczenie w kontekście danego użytkownika lub w [default], jeśli pozwolimy każdemu na sprawdzanie statusów
exten => 101,hint,SIP/telefon2
exten => 102,hint,SIP/telefon3
exten => 900,hint,SIP/freeconet-in2&SIP/freeconet-in1&SIP/freeconet-out - za pomocą & można połączyć kilka peerów do jednego subscribe’a;
exten składa się z: exten => (nazwa lub numer który wpisujemy w telefonie VOIP w polu value),(hint),SIP/(nazwa peera)
[tel2]
include => wew
exten => t,1,Hangup
exten => h,1,Hangup
exten => _XXX.,1,SIPAddHeader(X-Fid: ${SIPCALLID}) - opcjonalne to, co stanie w miejscu ${SIPCALLID} pojawi się w billingach csv w panelu FreecoNet
exten => _XXX.,2,Set(CALLERID(num)=48611234568) - ustawienie publicznego numeru telefonu (w panelu trzeba ustawić prezentację “użyj z bramki”)
exten => _XXX.,3,Dial(SIP/${EXTEN}@freeconet-out) - resztą połączenia zajmiemy się my!
[tel3]
include => wew
exten => t,1,Hangup
exten => h,1,Hangup
exten => _XXX.,1,SIPAddHeader(X-Fid: ${SIPCALLID}) - opcjonalne to, co stanie w miejscu ${SIPCALLID} pojawi się w billingach csv w panelu FreecoNet
exten => _XXX.,2,Set(CALLERID(num)=48611234567) - ustawienie publicznego numeru telefonu (w panelu trzeba ustawić prezentację “użyj z bramki”)
exten => _XXX.,3,Dial(SIP/${EXTEN}@freeconet-out) - resztą połączenia zajmiemy się my!
exten => 100,hint,SIP/telefon1
exten => 101,hint,SIP/telefon2
exten => 102,hint,SIP/telefon3
exten => 900,hint,SIP/freeconet-in2&SIP/freeconet-in1&SIP/freeconet-out
[wew]
exten => 100,1,Dial(SIP/telefon1,45,Tt)
exten => 101,1,Dial(SIP/telefon2,45,Tt)
exten => 102,1,Dial(SIP/telefon3,45,Tt)
[/code]
(Jeśli chcemy zablokować możliwość sprawdzania statusów użytkowników wystarczy dodać allowsubscribe=no w [general] w sip.conf )
W telefonie VoIP wpisujemy w polu value numer, który mamy w exten => 102,hint,SIP/telefon3 , a extension to numer, na który zadzwonimy po naciśnięciu przycisku.
Warto zapoznać się również z http://www.voip-info.org/wiki/view/Asterisk+standard+extensions
