Présentation

Sur mon serveur asterisk, j’avais bien activé et configuré les messageries vocales (mévo ou Voice Mail en anglais). Mais à chaque fois qu’un utilisateur enregistrait un message d’accueil personnalisé, c’était toujours le message par défaut qui était diffusé… Assez rageant…

Après quelques recherches, j’ai fini par trouver la subtilité qui m’avait échappé. D’où cet article, qui pourra toujours servir à quelqu’un d’autre.


Configuration

Et j’ai vérifié plusieurs fois ma configuration. Les appels arrivent dans un contexte et pour chaque SDA renvoi vers une macro et un compte SIP distinct.


exten => 123456,1,macro(call,${EXTEN},CPTE123456,Groupe01)

Cette macro, appelé simplement « macro-call », traite tous les appels entrants, qu’ils viennent de l’extérieur ou qu’ils soient internes au serveur.


[macro-internalcall]
exten => s,1,Set(CHANNEL(musicclass)=${ARG3})
exten => s,n,SetAmaflags(OMIT)
exten => s,n,Dial(SIP/${ARG2},30)
exten => s,n,Voicemail(${ARG1}@${ARG3})
exten => s,n,Hangup()

Je ne rentre pas dans le détail de cette macro, mais il est bien déclaré qu’au bout de 30 secondes, l’appel doit passer sur la boite vocale.

Et les messages personnalisés ont bien été enregistrés.


ASTERISK:/etc/asterisk# ls -lah /var/spool/asterisk/voicemail/Groupe01/123456/
total 220K
drwxr-xr-x  7 root root 4,0K mai  4 15:06 .
drwxr-xr-x 17 root root 4,0K oct 29  2010 ..
-rw-r--r--  1 root root 3,9K mai  4 15:06 greet.gsm
-rw-r--r--  1 root root  37K mai  4 15:06 greet.wav
-rw-r--r--  1 root root 3,9K mai  4 15:06 greet.WAV
drwxr-xr-x  2 root root 4,0K mai  4 16:16 INBOX
drwxr-xr-x  2 root root 4,0K mai  4 15:05 Old
drwxr-xr-x  2 root root 4,0K mai  4 16:16 tmp
-rw-r--r--  1 root root  12K mai  4 14:36 unavail.gsm
-rw-r--r--  1 root root 116K mai  4 14:36 unavail.wav
-rw-r--r--  1 root root  12K mai  4 14:36 unavail.WAV
drwxr-xr-x  2 root root 4,0K mai  4 15:05 Urgent
drwxr-xr-x  2 root root 4,0K oct 29  2010 Work

Pourtant à chaque fois que je teste, c’est bien le message par défaut qui est joué, et c’est aussi ce que je vois sur la console.


-- Executing [s@macro-call:11] VoiceMail("SIP/XXX-00000939", "123456@Groupe01") in new stack
    --  Playing 'vm-intro.gsm' (language 'fr')
    --  Playing 'beep.gsm' (language 'fr')
    -- Recording the message

Vraiment rageant !


Solution

Et la solution à ce probleme est vraiment simple… Dans la macro, il faut spécifier sur quel type de messagerie doit être renvoyé l’appel. Si cela n’est pas précisé, c’est effectivement le message par défaut qui est joué..


[macro-internalcall]
exten => s,1,Set(CHANNEL(musicclass)=${ARG3})
exten => s,n,SetAmaflags(OMIT)
exten => s,n,Dial(SIP/${ARG2},30)
exten => s,n,Voicemail(${ARG1}@${ARG3},u)
exten => s,n,Hangup()

Il faut rajouter l’argument « u », « u » pour unavailable. Il est possible aussi de déclarer l’argument « b », pour busy.

Et cette fois, c’est bien la messagerie personnalisée qui est jouée.