• Home
  • Blog
    • Technews
    • Pensiero del giorno
  • Informatica
  • Fotografie
    • Concerti
    • Vacanze
    • Varie
  • Acqua
  • La Wishlist

Come ti registro le telefonate

Martedì 20 Gennaio 2009 23:44

Per motivi vari mi sono trovato con la necessità di registrare le telefonate in transito sul server asterisk. Registrarle come noto è semplice, basta utilizzare l'applicazione Monitor che fa tutto da sola: registra l'audio in entrambe le direzioni in /var/spool/asterisk/monitor ed al termine richiama sox per la conversione in una unica traccia.

Se però volessi inviare la registrazione ad un indirizzo mail, magari in formato leggermente compresso? Beh, non è così immediata la cosa, motivo per cui ho deciso di condividere il modo in cui io l'ho realizzato. Nel mio caso l'invio avviene direttamente ad una singola casella di posta elettronica, ma nulla vieta di inviarlo ad esempio allo specifico utente che ha generato o ricevuto la chiamata.

Il dialplan è abbastanza semplice:

{xtypo_code}
exten => _X.,1,Noop()
exten => _X.,n,Set(CALLFILENAME=/var/spool/asterisk/monitor/${TIMESTAMP})
exten => _X.,n,Set(MONITOR_EXEC=/opt/mailcall.sh "${CALLERID(num)}" "${EXTEN}")
exten => _X.,n,Monitor(wav,${TIMESTAMP},m)
exten => _X.,n,Dial(Zap/4/${EXTEN:1})

{/xtypo_code}

E' chiaro? Hmmm, mi sa di no. Ecco vediamo un po' come funziona. Normalmente il comando Monitor si occupa della registrazione della chiamata, nel formato specificato (wav solitamente) nel path definito in CALLFILENAME, motivo per cui si definisce prima questa variabile. Senza ulteriori dettagli, senza quindi la "m" come parametro di Monitor e senza MONITOR_EXEC quello che succede è che la chiamata viene registrata, vengono generati i due callfile (in e out) e finisce tutto qui.

Se aggiungiamo la "m" quello che Monitor fa è lanciare uno script alla chisura della chiamata, script che normalmente come detto esegue sox per il join delle due tracce. Se però facciamo eseguire un nostro script (definito con MONITOR_EXEC) possiamo ottenere qualsiasi effetto. Lo script (mailcall.sh) riceve in input i parametri da noi definiti e quindi numero chiamante e chiamato e altri tre parametri, che altro non sono che i due file di ingresso e quello di uscita.

A questo punto il simpatico script mailcall.sh può essere ad esempio il seguente:

{xtypo_code}
#!/bin/sh
/usr/bin/sox -m "\$3" "\$4" "\$5"
/bin/rm -f "\$3" "\$4"
/usr/bin/oggenc \$5 -o /tmp/recording.ogg
echo "Mail inviata automaticamente" | biabam "/tmp/recording.ogg" -s "[Asterisk] Call '\$1' - '\$2'" Questo indirizzo e-mail è protetto dallo spam bot. Abilita Javascript per vederlo.
/bin/rm -f \$5

{/xtypo_code}

Cosa fa lo script? Non fa altro che unire le due tracce audio come farebbe lo script standard di Monitor, cancella i due file non più utili, comprime con oggenc la registrazione in formato wav  e la invia in allegato ad una mail con biabam, uno dei tanti programmetti che da console si occupano dell'invio di allegati via mail, preoccupandosi personalmente dell'encoding necessario.

Insomma, due righe nel dialplan ed uno script ed abbiamo ottenuto il nostro scopo.

Twitter status

: me ne lamento sempre, ma avere dei clienti con consulenti incompetenti ha degli indubbi vantaggi
perde un amico
LUI "cara aspettiamo ospiti a casa?", LEI "si... perché?", LUI "ora si spiega perché non ci sono scarpe sparse per l'ingresso"
 

Meteo

Anguillara Sabazia: 21.0 °C
Genova Albaro: 29.2 °C

Temperatura Casa: 27.9 °C
Pressione Casa: 973.0 hPa
Umidità Casa: 89 %
Pioggia ultime 24h: 0.0 mm