Asterisk 1.8 queues in VoiceOne

28 giu 2011

2 Comments »

Con le ultime due release di asterisk (1.6 e 1.8) il funzionamento e l’utilizzo delle code è cambiato molto, limitandone l’uso allo stretto indispensabile e togliendo alcune possibilità utili nelle configurazioni di tutti i gironi.

Nella prima versione di VoiceOne (la 1.0), che si appoggiava all’ormai vecchio ma stabile asterisk 1.2, le code erano gestite in maniera statica, associando ad ognuna di esse uno o più agenti come member della coda. Ad ogni interno era infatti associato un agente il quale poteva essere volontariamente registrato o deregistrato dall’utente con delle apposite applicazioni. In questa maniera era possibile per ogni interno decidere dinamicamente di smettere di ricevere chiamate dalle code di cui faceva parte (deregistrando l’agente), senza dover inserire il DND e senza quindi rendersi irreperibile per tutti gli altri tipi di chiamata (interne, dirette, ecc…). L’interno poteva poi registrare nuovamente l’agente, abilitandosi alla ricezione delle chiamate in coda.

Il comando di Asterisk che permetteva questo funzionamento era l’ AgentCallbackLogin che è stato deprecato nella versione 1.4,  rimosso nella versione 1.6 e pertanto assente nella versione 1.8 di Asterisk. L’uso degli agenti si è ridotto quindi alla sola implementazione di call center avanzato, in cui gli utenti, una volta registrati alla coda con il comando AgentLogin, instaurano una chiamata permanente tra interno e centralino e sono di fatto sempre in linea. Su questo canale ricevono automaticamente le chiamate che arrivano in coda e vengono segnalate all’utente con un beep e possono venire riagganciate con la pressione di un tasto ed il conseguente invio di un tono dtmf. Questa soluzione però non è adatta all’uso che solitamente viene richiesto in fase di configurazione, ovvero che le chiamate vengano messe in coda e da li facciano squillare i telefoni in un ordine di priorità assegnata, saltando da telefono a telefono fino a ricevere risposta. Non si può infatti pretendere che chi risponde rimanga per tutta la durata della sua presenza in ufficio in linea con il centralino, tenendo pertanto occupato l’interno, in attesa che arrivi una chiamata.

La logica degli agenti rimane quindi attiva su Asterisk ma solo per usi avanzati che poco spesso, se non quasi mai, vengono richiesti. L’alternativa è l’uso diretto degli interni come member della coda. In VoiceOne 1.8 è infatti possibile indicare per ogni member la tecnologia che si desidera utilizzare:

  1. SIP/IAX: l’interno viene chiamato direttamente senza scatenare nessuna macro di gestione della chiamata
  2. Agent: la chiamata viene passata all’agente che deve essere registrato
  3. Local: viene chiamato l’interno associato attraverso le macro e la gestione della chiamata di VoiceOne

Delle tre la configurazione di default è la prima, ovvero quella che prevede l’utilizzo della tecnologia dell’interno. Il primo limite di questa configurazione è l’impossibilità di de-registrarsi dalle code, smettendo di ricevere chiamate da esse. Un altro punto dolente è l’impossibilità di far suonare un gruppo di interni e successivamente un altro gruppo di interni indicando per gli interni che si vuole suonino insieme la stessa priorità. In caso di interni con uguale priorità, Asterisk allerterà sempre e solo un interno, il primo libero. E’ quindi possibile far suonare tutti i membri della coda (con la strategia ringall) oppure un membro alla volta, scegliendolo pseudo-casualmente (strategia random) con memoria (stategia rrmemory) o in ordine di priorità (strategia linear). Il vantaggio rispetto all’uso dei canali Local è che nel CDR di Asterisk apparirà solo una riga, indipendentemente da quanti salti sono stati effettuati prima che la chiamata venisse risposta. Con l’uso dei canali Local (come avveniva con l’uso dei vecchi Agenti) infatti viene generata una chiamata ogni volta che viene allertato un telefono con un’esplosione di righe di log nel CDR e la conseguente difficoltà di lettura.

L’unico modo di far suonare diversi gruppi di telefoni in coda sembra essere descritto qui attraverso l’uso del QUEUE_MAX_PENALTY. Una gestione di questo tipo deve essere però stabilita con una macro apposita e altamente personalizzata in funzione della configurazione desiderata, risultando difficilmente manutenibile nel tempo e poco chiara.

Un’alternativa c’è ed è quella di gestire le chiamate con una macro che allerti prima un gruppo di interni ed in mancanza di risposta ne allerti un’altro, per poi tornare eventualmente al primo gruppo formando un ciclo; il tutto riproducendo al chiamante una muscia d’attesa. Chiaramente in questo caso si perdono alcune funzionalità proprie della coda come: il mantenimento della priorità delle chiamate e il messaggio periodico. Queste limitazioni, tuttavia, sono sopportabili se il traffico telefonico non è elevato ed il tempo di risposta medio è basso.

La questione rimane tuttavia aperta, a questa guida ne seguiranno altre che approfondiranno ulteriormente il problema e forniranno nuovi strumenti per lavorare con le code.

2 Responses to “Asterisk 1.8 queues in VoiceOne

  1. Roberto scrive:

    …lasciare le cose com’erano era brutto. Una delle funzionalità migliori castrata per non si capisce quali motivi.
    Probabilmente legato all’utilizzo delle risorse di sistema.
    Mah

  2. daniele scrive:

    Salve Roberto, il motivo del cambiamento della logica non sta nella scelta degli sviluppatori di VoiceOne ma nel fatto che asterisk 1.8 (e successivi) non supporta più la precedente architettura. Se gli aspetti di login/logout degli agenti così come erano gestiti in precedenza possono essere riprodotti attraverso macro di pause/unpause non è più possibile far squillare gruppi di telefoni in coda se non gestendo code distinte e facendo trasitare la chiamata da una coda all’altra. Ci sono però anche dei vantaggi da non sottovalutare: inserendo in coda direttamente gli utenti (SIP/201) e non gli agenti (Agent/201) il cdr si semplifica mostrando una sola chiamata in ingresso anche se questa ha fatto squillare più volte telefoni diversi.

    Daniele

Leave a Reply