P ROGETTO V.O.C.I. HOWTO CALL PICKUP N O M E F I L E: Asterisk_Call_Pickup.doc D A T A: 15/09/2009 A T T I V I T À: S T A T O: U R L: AUTORE/ I : Gruppo VoIP ABSTRACT: Il presente documento contiene l howto relativo al servizio call pickup che consente di prelevare le chiamate entranti su un interno o numero di servizio da account VoIP abilitati. ASTERISK_CALL_PICKUP.DOC 1/8
INDICE INTRODUZIONE...3 1. CONFIGURAZIONE DEL SERVIZIO CALL-PICKUP PER UTENTI REGISTRATI SU ASTERISK...4 1.1. Applicazione della funzione pickup...4 1.2. Applicazione della funzione pickup combinato a controlli nel dialplan...5 2. CONFIGURAZIONE DEL SERVIZIO CALL-PICKUP PER SISTEMI ESTERNI (SER).6 ASTERISK_CALL_PICKUP.DOC 2/8
INTRODUZIONE Il documento contiene l howto relativo al servizio call pickup che consente di definire dei gruppi di account abilitati a prelevare le chiamate entranti su un interno o un numero di servizio. Le configurazioni allegate possono essere applicate alle release Asterisk 1.2.X, 1.4.X, 1.6.X. ASTERISK_CALL_PICKUP.DOC 3/8
1. CONFIGURAZIONE DEL SERVIZIO CALL-PICKUP PER UTENTI REGISTRATI SU ASTERISK Il servizio riguarda la possibilità di prelevare una chiamata entrante su un interno o numero di servizio da una estensione telefonica diversa da quella con la quale il chiamato risulta registrato con il sistema. La configurazione può richiedere la definizione di due identificativi di gruppo da associare all'account VoIP di ciascun utente: callgroup e pickupgroup. Il callgroup indica il gruppo al quale la chiamata appartiene; il pickupgroup indica invece di quale gruppo possono essere prelevate le chiamate entranti. Di default sono attivabili 64 callgroup. Esiste un vincolo sul funzionamento: la chiamata per poter essere prelevata, non deve essere già stata accettata (risposta). Il codice da selezionare per la attivazione del servizio é *8. Esiste però la possibilità di definirne uno nuovo configurando il file features.conf al parametro pickupexten presente nella sezione general. La configurazione del servizio può anche essere condotta ricorrendo alla applicazione Pickup che é possibile impiegare nel dialplan. Questo consente di creare customizzazioni del servizio basate ad esempio sul contesto o al verificarsi di determinati controlli all'interno del dialplan. A tale proposito saranno presentati degli esempi relativi alle impostazioni per le due forme di configurazione introdotte. 1.1. Applicazione della funzione pickup Ogni utente presente nel file Asterisk /etc/asterisk/sip.conf va configurato per essere appartenente al gruppo di pickup: [USER] type=friend context=user_profile qualify=no host=dynamic disallow=all allow=all nat=yes rfc2833compensate=yes callgroup=groupid pickupgroup=groupid Tabella 1 Estratto del file sip.conf In Asterisk occorre creare la seguente estensione sul dialplan /etc/asterisk/extensions.conf : [from-ser] exten => _88,1,Pickup() ;Il servizio consente di prelevare sul proprio telefono le chiamate verso un numero di servizio o numero comune. exten => _88,n,Hangup() Tabella 2 Estratto del file extensions.conf ASTERISK_CALL_PICKUP.DOC 4/8
1.2. Applicazione della funzione pickup combinato a controlli nel dialplan In questo esempio è mostrato come configurare dei semplici controlli sul CallerID del chiamante in modo da abilitare eventualmente la possibilità di accedere alla applicazione Pickup. exten => _884444,1,Set(GLOBAL(NumeroEstensione)=${CALLERID(name)}) exten => _884444,n,GotoIf($["${NumeroEstensione}"="username1"]?pickup1) exten => _884444,n(exit),Hangup() exten => _884444,n(pickup1),Pickup(${EXTEN:2}) Tabella 3 Estratto del file extensions.conf L'estratto di codice allegato in Tabella 4 consente di abilitare la funzione pickup solo all utente username1 per chiamate entranti verso la estensione telefonica 4444. ASTERISK_CALL_PICKUP.DOC 5/8
2. CONFIGURAZIONE DEL SERVIZIO CALL-PICKUP PER SISTEMI ESTERNI (SER) Il servizio può essere erogato anche ad utenze esterne al sistema Asterisk (esempio registrate presso un SER). Un esempio di realizzazione è allegato nelle tabelle seguenti. 1) Il peer SER presente nel file Asterisk /etc/asterisk/sip.conf va configurato per essere appartenente allo stesso gruppo di pickup dell account SIP del quale si vogliono prelevare le chiamate entranti: [SER] type=friend context=from-ser qualify=no insecure=very host=aa.bb.cc.dd disallow=all allow=all nat=yes rfc2833compensate=yes callgroup=groupid pickupgroup=groupid Tabella 4 Estratto del file sip.conf 2) In Asterisk creare la seguente estensione sul dialplan /etc/asterisk/extensions.conf : [from-ser] exten => _88,1,Pickup() exten => _88,n,Hangup() Es.: se fosse in corso un tentativo di chiamata verso l'inteno 3542, un altro client che desiderasse prelevare la chiamata dovrebbe comporre sul proprio telefono il codice: 88 ed avviare la chiamata. Tabella 5 Estratto del file extensions.conf 3) In SER occorre restringere la visibilità del numero a cui é associato il servizio pickup ai soli autorizzati. A tal fine la elaborazione delle INVITE va integrata con il seguente check sulla R-URI. # ----------------------------------------------------------------- # Pickup interserever Asterisk <-->SER # ----------------------------------------------------------------- ASTERISK_CALL_PICKUP.DOC 6/8
if (uri=~"^sip:88@") { if (!is_user_in("from", "PICKUPenabled")) { rewritehost("asterisk_ip_address"); route(4); route(1); break; }; Tabella 6 Estratto del file ser.cfg La istruzione evidenziata esegue il controllo di appartenenza ad una ACL appositamente creata. (Il database SER prevede la relazione grp ). In essa vanno introdotte terne indicanti gli userid delle utenze, la denominazione del dominio ed il tipo di controllo (in questo caso: Pickupenabled ). Figura 1 Estratto del database del server SER relativo al gruppo di pickup Nell'estratto compaiono le chiamate alle subroute [4,1]. La route 1 esegue il t_relay come consueto per l'inoltro del pacchetto INVITE. La 4 dedicata alla rilevazione di eventuali NAT può avere la composizione allegata: route[4] { # ----------------------------------------------------------------- # NAT Traversal Section # ----------------------------------------------------------------- if (isflagset(6) isflagset(7)) { if (!isflagset(8)) { setflag(8); use_media_proxy(); }; }; } Tabella 7 Estratto del file ser.cfg ASTERISK_CALL_PICKUP.DOC 7/8
Un ultimo dettaglio da fornire é relativo alla necessità che il destinatario delle chiamate appartenga al gruppo avente ID: GroupID e sia registrato su Asterisk. [aaabbb] type=friend context=full-capabilities qualify=yes callerid="aaabbb" <+390612345678> Callgroup=GroupID pickupgroup=groupid host=dynamic canreinvite=yes disallow=all allow=all allow=h261 allow=h263 allow=h263p nat=yes rfc2833compensate=yes dtmfmode=rfc2833 ; inband is not supported in compressed codecs like gsm, so we better set it to rfc2833 Tabella 8 Estratto del file sip.conf Così facendo un utente SER é abilitato, se incluso nella ACL PICKUPenabled, ad accogliere sul proprio terminale i tentativi di chiamata in corso destinati allo user aaabbb. ASTERISK_CALL_PICKUP.DOC 8/8