[Asterisk-Users] Remote Voicemail Notifier / enter Dialplan on SIP
Register
Chris A. Icide
chris at netgeeks.net
Wed May 25 12:44:58 MST 2005
There is a patch on Mantis (http://bugs.digium.com/view.php?id=4371)
Which includes several features.
1. Support for central voicemail server(s) with remote server
notification via IAX
In other words, this patch allows you to configure an Asterisk server as
a central voicemail server and to send out voicemail notification to
remote Asterisk servers who can then pass the notification on to local
clients.
2. Diaplan command to update voicemail pointers
The patch includes a dialplan command (ChangeMailbox) which allows you
to change both the central voicemail server as well as the remote
clients mailbox pointers. In other words, you can add/move 'mailbox='
fields via the dialplan.
3. Entry into dial plan upon device registration or loss of registration
This function allows you to configure a dialplan context in which SIP or
IAX devises will activate a dialplan thread allowing you to execute any
non-audio stream dependant dialplan command(s). An example might be
identifying the location of the registration and using the changemailbox
command to direct the correct voicemail indication to the registering
device.
We need community support if we want to get this added to asterisk.
Please take a gander. I also have a patch against CVS head 05-02-2005
if you want to test against CVS HEAD prior to all the function changes.
Below are notes on the configuration:
First, the remote voicemail notification configuration:
In voicemail.conf under the general section we need to identify that
this voicemail server
is a centralized voicemail server supplying remote notification. This
is done by adding an
entry that points at an iax entry for this server. Note that you must
add an entry for this
server in your IAX configuration.
[general]
voicemail_server=<unique_IAX_peername_of_this_server>
On the same server we will configure the voicemail boxes. There is one
new entry required over the normal user configuration and that is the
remote asterisk server hosting the client device to which we will be
sending voicemail indication. This is included as an IAX entry (must
also exist in your IAX config) as shown here
[default]
<vmbox>:<iax_peer> => <pin>,<name>,etc..
or if we have voicemail box 1000 being served for a client device
attached to IAX peer 'sip-reg-srv-001' as defined in your iax.conf file,
the line would look like this:
[default]
1000:sip-reg-srv-001 => 1000,John Doe,jdoe at john.doe....
All servers (both central voicemail and remote client) must have iax
entries for each other (and the central server must include an entry for
itself in it's own iax.conf file). Servers can be dyanmic
(host=dynamic) as well as static.
In the sip.conf or iax.conf for each device there is a change to the
mailbox= argument. Note that the mailbox=<user> still works for locally
served mailboxes. For remote mailboxes the format is this:
mailbox=<user>:<vm_context>@<iax_peername_of_VMserver>
so in the example above, it would look like this
sip.conf
[1000]
type=friend
host=dynamic
mailbox=1000:default at vm-srv-001
where 'vm-srv-001' is the entry in the iax.conf for the central
voicemail server.
This configuration does not include automatic routing of voicemail
commands (voicemail and voicemailmain). You must still route calls to
voicemail to the central voicemail server through your dialplan. If you
try and call a voicemailbox directly on a remote client you will get a
no such voicemailbox error. So when you want to leave voicemail or
retrieve it, the call needs to be sent to the central voicemail server
where you would then execute the VoiceMail or VoiceMailMain functions.
Second, the ChangeMailbox function
There is an application that you can change the mailbox= definition in
either iax.conf/sip.conf or voicemail.conf (changes are NOT reflected in
the configuration files, they are not updated by this command)
ChangeMailbox(tech,name=newsetting)
On the central voicemail server, you can change both the voicemail entry
as well as the sip or iax entry. On the remote client servers you can
only change the sip/iax entries.
To change the remote server in which a client's voicemail status is
sent, you would use the Voicemail keyword for technology in the
following structure:
1) Voicemail
ChangeMailbox(Voicemail,<mailbox>@<iax_peername>)
On the system which hosts the UA device, you would use the following
structure, with SIP or IAX as the technology:
2) IAX/SIP/etc
ChangeMailbox(IAX,<user-123>=<mailbox>:<vm-context>@<iax_peername-central_vmserver>)
To completely change the location a voicemail indication is being sent,
you may need to exectute this command on both the central vm server as
well as the remote client server. The entry on the voicemail server
tells the vm server what remote asterisk server to send the notification
to. The entry on the remote client server tells the local asterisk
system which device to notify. So in the case that the device only
changes (you want to send or add vmail indication to another device on
the same server) only the SIP or IAX entry need be changed. However if
the device moves to a different remote client server, you will also need
to tell the central VM server to change where it's sending notification
as well.
Now the 3rd feature ...
in iax.conf or sip.conf for each user define the keyword
'onregister-context'
syntax:
[user]
type=friend
onregister-context=regcontext
etc
then upon registry, (context,exten) = (<onregister-context>,<user>,1)
will be invoked and on unregister the
(unreg-<onregister-context>,<user>,1) is invoked
So on unregister 'unreg-' is prefixed to the onregister_context
The variable ${DEVICETECH} contains the technology of the device
registering.
To rebuild the unique channel id from this, you would use
${DEVICETECH}/${EXTEN} which for example would return SIP/1000 in the
case of that device registering
-Chris
More information about the asterisk-users
mailing list