Files
asterisk/contrib
George Joseph d8f0bc3572 res_pjsip_mwi: Add voicemail extension and mwi_subscribe_replaces_unsolicited
res_pjsip_mwi was missing the chan_sip "vmexten" functionality which adds
the Message-Account header to the MWI NOTIFY.  Also, specifying mailboxes
on endpoints for unsolicited mwi and on aors for subscriptions required
that the admin know in advance which the client wanted.  If you specified
mailboxes on the endpoint, subscriptions were rejected even if you also
specified mailboxes on the aor.

Voicemail extension:
* Added a global default_voicemail_extension which defaults to "".
* Added voicemail_extension to both endpoint and aor.
* Added ast_sip_subscription_get_dialog for support.
* Added ast_sip_subscription_get_sip_uri for support.

When an unsolicited NOTIFY is constructed, the From header is parsed, the
voicemail extension from the endpoint is substituted for the user, and the
result placed in the Message-Account field in the body.

When a subscribed NOTIFY is constructed, the subscription dialog local uri
is parsed, the voicemail_extension from the aor (looked up from the
subscription resource name) is substituted for the user, and the result
placed in the Message-Account field in the body.

If no voicemail extension was defined, the Message-Account field is not added
to the NOTIFY body.

mwi_subscribe_replaces_unsolicited:
* Added mwi_subscribe_replaces_unsolicited to endpoint.

The previous behavior was to reject a subscribe if a previous internal
subscription for unsolicited MWI was found for the mailbox.  That remains the
default.  However, if there are mailboxes also set on the aor and the client
subscribes and mwi_subscribe_replaces_unsolicited is set, the existing internal
subscription is removed and replaced with the external subscription.  This
allows an admin to configure mailboxes on both the endpoint and aor and allows
the client to select which to use.

ASTERISK-25865 #close
Reported-by: Ross Beer

Change-Id: Ic15a9415091760539c7134a5ba3dc4a6a1217cea
2016-03-30 12:17:29 -06:00
..

app_festival is an application that allows one to send text-to-speech commands
to a background festival server, and to obtain the resulting waveform which
gets sent down to the respective channel. app_festival also employs a waveform 
cache, so invariant text-to-speech strings ("Please press 1 for instructions") 
do not need to be dynamically generated all the time. 

You need : 

1) festival, patched to produce 8khz waveforms on output. Patch for Festival
1.4.2 RELEASE are included. The patch adds a new command to festival 
(asterisk_tts). 

It is possible to run Festival without patches in the source-code. Just
add this to your /etc/festival.scm or /usr/share/festival/festival/scm:

    (define (tts_textasterisk string mode)
    "(tts_textasterisk STRING MODE)
    Apply tts to STRING. This function is specifically designed for
    use in server mode so a single function call may synthesize the string.
    This function name may be added to the server safe functions."
    (let ((wholeutt (utt.synth (eval (list 'Utterance 'Text string)))))
    (utt.wave.resample wholeutt 8000)
    (utt.wave.rescale wholeutt 5)
    (utt.send.wave.client wholeutt)))

[See the comment with subject "Using Debian
 festival >= 1.4.3-15 (no recompiling needed!)" on
 http://www.voip-info.org/wiki-Asterisk+festival+installation for the
 original mentioning of it]

2) You may wish to obtain and install the asterisk-perl
module by James Golovich <james@gnuinter.net>, from 
either CPAN, or his site: http://asterisk.gnuinter.net,
as this contains a good example of how variable text
can be tts'd via asterisk, namely the examples/tts-*.agi
files there. It has been noted that the current expression
evaluation capabilities of asterisk are not best suited
for the generation and manipulation of text. AGI scripting
can be ideal for these sorts of needs. For simpler usage,
fixed, pre-recorded messages may be more amenable for your
purposes.

3) Before running asterisk, you have to run festival-server with a command 
like : 

/usr/local/festival/bin/festival --server > /dev/null 2>&1 &