ActiveMailbox
ActiveMailbox provides a simple API and command line utility to work with voicemail boxes and voicemails generated by Asterisk.
Command line usage via active_mailbox
ActiveMailbox includes a command line tool which administrators can use to perform maintenance on a user’s mailbox.
The command takes two arguments: the action (OPTION), and the user’s phone number (MAILBOX).
Usage: active_mailbox [OPTION] MAILBOX
Mailbox Options:
        --context                    Look for [MAILBOX] in [CONTEXT]
        --delete                     Delete [MAILBOX] and all messages
        --sort                       Sort messages in [MAILBOX] (recursive)
Cleanup Options:
        --clean-ghosts               Cleanup 'ghost' messages
        --clean-stale                Cleanup messages older than 30 days
        --purge                      Remove all messages, but leave [MAILBOX] folders intact
Greeting Options:
        --delete-temp                Delete [MAILBOX]/temp.wav
        --delete-unavail             Delete [MAILBOX]/unavail.wav
        --delete-busy                Delete [MAILBOX]/busy.wav
General Options:
    -h, --help                       Show this message
    -v, --version                    Show version
Example Command line usage
Delete unavailable greeting
active_mailbox --delete-unavail 15183332220
Delete temp greeting
active_mailbox --delete-temp 15183332220
Purge mailbox (deletes all messages, leaves folders intact)
active_mailbox --purge 15183332220
Delete messages older than 30 days
active_mailbox --clean-stale 15183332220
Delete mailbox
active_mailbox --delete 15183332222
Delete ‘ghost’ messages
Ghost voicemails happen if a message’s txt file exists, but the corresponding wav file does not. Example:
tree 518/15183332225/INBOX
    518/15183332225/INBOX
    |-- msg0000.txt
    |-- msg0000.wav
    `-- msg0002.txt
Run active_mailbox --clean-ghosts to clear the offending txt files.
active_mailbox --clean-ghosts 518 15183332220
Observe the results:
tree 518/15183332225/INBOX
    518/15183332225/INBOX
    |-- msg0000.txt
    `-- msg0000.wav
Sorting
If voicemails are manually deleted, the INBOX order can be out of sync, as depicted below:
tree 518/15183332225/INBOX
    518/15183332225/INBOX
    |-- msg0000.txt
    |-- msg0000.wav
    |-- msg0002.txt
    |-- msg0002.wav
    |-- msg0006.txt
    |-- msg0006.wav
    |-- msg0009.txt
    `-- msg0009.wav
Sort the messages so they play correctly in Asterisk using
active_mailbox --sort:
active_mailbox --sort 15183332225
Messages are renamed in INBOX after sorting
tree 518/15183332225/INBOX
    518/15183332225/INBOX
    |-- msg0000.txt
    |-- msg0000.wav
    |-- msg0001.txt
    |-- msg0001.wav
    |-- msg0002.txt
    |-- msg0002.wav
    |-- msg0003.txt
    `-- msg0003.wav
Library Usage
ActiveMailbox can also be used in ruby scripts to work with mailboxes and voicemail messages.
Working with mailboxes
# Create a mailbox object
mailbox = ActiveMailbox::Mailbox.find('office_a', '1234')
# Destroy mailbox and all messages/greetings
mailbox.destroy!
# Determine the greeting Asterisk will playback
mailbox.current_greeting
# Destroy ``unavail.wav``
mailbox.destroy_greeting!
# Destroy ``temp.wav``
mailbox.destroy_temp!
# A Hash of the mailbox's messages
#
# Keys are the subdirectory, lowercased, as
# a symbol. Eg: INBOX = :inbox, Old = :old
#
# Values are arrays of Message objects
mailbox.folders
# Fetch array of messages in :inbox
inbox = mailbox.folders[:inbox]
# Or some sugar
inbox = mailbox.inbox
# Or :old
mailbox.folders[:old]
mailbox.old
Working with messages
# Set mailbox
mailbox = ActiveMailbox::Mailbox.find('office_a', '1234')
# Get first message in INBOX
vm = mailbox.inbox.first
# Path to Asterisk generated msg####.txt
vm.txt
# Path to Asterisk generated msg####.wav
vm.wav
# Caller ID name
vm.callerid_name
# Caller ID number
vm.callerid_number
# Message duration (in seconds)
vm.duration
# Delete this message
# Deletes wav and txt files
vm.destroy!
Notes
If Asterisk does not keep voicemail in
/var/spool/asterisk/voicemail on this server, add the following
to ~/.bashrc (or the appropriate shell config file):
export ASTERISK_VOICEMAIL_ROOT='/my/alternate/voicemail/path'
Note that you can specify this as an ENV variable when running the
active_mailbox executable.
ASTERISK_VOICEMAIL_ROOT='/root' active_mailbox [OPTION] MAILBOX
Development
ActiveMailbox is still in development, as such, don’t use it yet unless you’re brave. Then again, if you’re using Asterisk, you’re already a cowboy so have fun!
License
MIT License - see LICENSE in this repo.
Tags: API, Asterisk, Git, Linux, Ruby, RubyGems, Test Unit, Voicemail