[Asterisk-Dev] Centralized voicemail
Soren Rathje
asterisk at lolle.org
Tue Jun 15 02:41:34 MST 2004
I just did a simple text. I exchanged the voicemail definition in SIP.CONF on SIP/100 and SIP 1100 and it turns out that if no context is specified in VoicemailMain, app_voicemail selects the first match regardless of the context. That's why I never saw this problem earlier as my SIP/1100 (vm=100 at external) is only a test user.
I believe your method is correct as to avoid callers ending up in the wrong mailbox. However, in my case ${MACRO_CONTEXT} is useless as this is the context of my incoming call.
-- Goto (macro-stdexten,s,13)
-- Executing VoiceMail("SIP/100-3106", "u100 at From-Internal") in new stack
Jun 15 11:18:43 WARNING[131081]: app_voicemail.c:1711 leave_voicemail: No entry in voicemail config file for '100'
-- Executing Hangup("SIP/100-3106", "") in new stack
== Spawn extension (macro-stdexten, s, 14) exited non-zero on 'SIP/100-3106' in macro 'stdexten'
== Spawn extension (From-Internal, 100, 1) exited non-zero on 'SIP/100-3106'
I guess it is time to rethink the layout my dialplan and maybe add a couple of "work" variables.. :-)
-- Soren
----- Original Message -----
From: "Rob Gagnon" <rob at networkip.net>
To: <asterisk-dev at lists.digium.com>
Sent: Tuesday, June 15, 2004 2:39 AM
Subject: Re: [Asterisk-Dev] Centralized voicemail
> The use of the "default" context is intentional because the primary key in
> the voicemail "users" table is "context, mailbox"
>
> Now, in a database, no part of the primary key can be NULL, so the context
> is set to "default" when it is missing in order to account for this.
>
> Also, you should not have to pass either ARG1, or ARG3 to your macro, why
> not just use the $MACRO_CONTEXT, and $MACRO_EXTEN variables inside the
> macro?
>
> IE: Voicemail(b${MACRO_EXTEN}@${MACRO_CONTEXT})
>
> As well, without giving a context to voicemail app, how would it know how to
> discren between 100 at internal and 100 at external?
>
> Rob
>
> ----- Original Message -----
> From: "Soren Rathje" <asterisk at lolle.org>
> To: <asterisk-dev at lists.digium.com>
> Sent: Monday, June 14, 2004 4:59 PM
> Subject: Re: [Asterisk-Dev] Centralized voicemail
>
>
> ----- Original Message -----
> From: "Rob Gagnon" <rob at networkip.net>
> To: <asterisk-dev at lists.digium.com>
> Sent: Monday, June 14, 2004 8:43 PM
> Subject: Re: [Asterisk-Dev] Centralized voicemail
>
>
> > Solution for the bug in ast_data has been located and updated on the SVN
> > server at
> > http://svn.asteriskdocs.org/res_data/
> >
> > (Rev 143 or newer contains the fix)
> >
> > A logical issue was found in ast_data_extract_packet() that has been
> > resolved. Originally I was having the routine bail out of the function
> upon
> > the first instance of an attribute not being present in a packet. This
> > doesn't work so well with a request for a voicemail account that has a
> > missing context.
> >
> > The subroutine has been adjusted to compensate for this, and should work
> > well for everyone now.
> >
> > Thanks for your implied patience. :-)
> >
> > Rob
>
> 143 works fine with no segfaults, but breaks something at my end...
>
> ast_data is configured for Voicemail _only_, phones and dialplans are kept
> in their respective files.
>
> I have configured two voicemail contexts with similar numbers SIP/100 =
> 100 at internal and SIP/1100 = 100 at external and running everything from .conf
> files, "exten => _80,1,VoicemailMain(${CALLERIDNUM})" is able to figure out
> my voicemail context and will only prompt me for the password.
>
> Moving voicemail.conf into the database something breaks, I now have to
> change my dialplan to exten => _80,1,VoicemailMain(${CALLERIDNUM}@internal)
> in order to check my voicemail, this will fail for 100 at external so
> 100 at external will need a similar dialplan with a different context. If I
> leave it as it is it assumes context=default and fails regardless of
> anything.
>
> Also, leaving voicemails becomes a problem, below is my macro for placing
> internal calls..
>
> [Internals]
> exten => 100,1,Macro(stdexten,100,SIP/100)
>
> [macro-stdexten]
> ;
> ; ${ARG1} - Extension
> ; ${ARG2} - Device(s) to ring
> ;
> exten => s,1,DBget(temp=DND/${ARG1}) ; Get DND key
> exten => s,102,Goto(s,3) ; DND key is NOT set
> exten => s,2,Goto(s,11) ; DND key is set
> exten => s,3,ChanisAvail(${ARG2}) ; Is channel up?
> exten => s,104,Goto(s,13) ; Channel in NOT up
> exten => s,4,DBget(temp=CFIM/${ARG1}) ; Get CFIM key
> exten => s,105,Goto(s,6) ; CFIM key is NOT set
> exten => s,5,Dial(Local/${temp}@Internals) ; Unconditional forward
> exten => s,6,Dial(${ARG2},20,tm) ; Ring the interface
> exten => s,107,Goto(s,9) ; B party is BUSY
> exten => s,7,DBget(temp=CFBS/${ARG1}) ; Get CFBS key
> exten => s,108,Goto(s,13) ; CFBS key in NOT set
> exten => s,8,Dial(Local/${temp}@Internals) ; Unavailable forward
> exten => s,9,DBget(temp=CFBS/${ARG1}) ; Get CFBS key
> exten => s,110,Goto(s,11) ; CFBS key is NOT set
> exten => s,10,Dial(Local/${temp}@Internals) ; Busy forward
> exten => s,11,Voicemail(b${ARG1}) ; Send to voicemail w/ busy
> announce
> exten => s,12,Hangup() ; Hangup
> exten => s,13,Voicemail(u${ARG1}) ; Send to voicemail w/
> unavail announce
> exten => s,14,Hangup() ; Hangup
>
> Phone number 100 (line-1, vm=100 at internal) calling 100 (line-2,
> vm=100 at internal) and eventually going to voicemail.
>
> -- Executing Macro("SIP/100-c37f", "stdexten|100|SIP/100") in new stack
> -- Executing DBget("SIP/100-c37f", "temp=DND/100") in new stack
> -- DBget: varname=temp, family=DND, key=100
> -- DBget: Value not found in database.
> -- Executing Goto("SIP/100-c37f", "s|3") in new stack
> -- Goto (macro-stdexten,s,3)
> -- Executing ChanIsAvail("SIP/100-c37f", "SIP/100") in new stack
> -- Executing DBget("SIP/100-c37f", "temp=CFIM/100") in new stack
> -- DBget: varname=temp, family=CFIM, key=100
> -- DBget: Value not found in database.
> -- Executing Goto("SIP/100-c37f", "s|6") in new stack
> -- Goto (macro-stdexten,s,6)
> -- Executing Dial("SIP/100-c37f", "SIP/100|20|tm") in new stack
> -- Called 100
> -- Started music on hold, class 'default', on SIP/100-c37f
> -- SIP/100-e174 is ringing
> -- Nobody picked up in 20000 ms
> -- Stopped music on hold on SIP/100-c37f
> -- Executing DBget("SIP/100-c37f", "temp=CFBS/100") in new stack
> -- DBget: varname=temp, family=CFBS, key=100
> -- DBget: Value not found in database.
> -- Executing Goto("SIP/100-c37f", "s|13") in new stack
> -- Goto (macro-stdexten,s,13)
> -- Executing VoiceMail("SIP/100-c37f", "u100") in new stack
> Jun 14 23:18:54 WARNING[131081]: app_voicemail.c:1711 leave_voicemail: No
> entry in voicemail config file for '100'
> -- Executing Hangup("SIP/100-c37f", "") in new stack
> == Spawn extension (macro-stdexten, s, 14) exited non-zero on
> 'SIP/100-c37f' in macro 'stdexten'
> == Spawn extension (From-Internal, 100, 1) exited non-zero on
> 'SIP/100-c37f'
>
> If I change the context of that particular entry in the database to
> "default" it works...
> Somehow ast_data do not resolve the voicemail context of the called party
> the same way as core asterisk.
> The question is; is this intentional or ??
>
> I can resolve the problem by altering macro-stdext to include a third
> parameter, the voicemail context but that only means additional
> administration when creating new clients.
>
> [Internals]
> exten => 100,1,Macro(stdexten,100,SIP/100,internal)
>
> and
>
> [macro-stdexten]
> ;
> ; ${ARG1} - Extension
> ; ${ARG2} - Device(s) to ring
> ; ${ARG3} - VoiceMail context
> ;
> exten => s,1,DBget(temp=DND/${ARG1}) ; Get DND key
> ...
> ...
> exten => s,10,Dial(Local/${temp}@Internals) ; Busy forward
> exten => s,11,Voicemail(b${ARG1}@${ARG3}) ; Send to voicemail
> w/ busy announce
> exten => s,12,Hangup() ; Hangup
> exten => s,13,Voicemail(u${ARG1}@${ARG3}) ; Send to voicemail
> w/ unavail announce
> exten => s,14,Hangup() ; Hangup
>
> Suggestion ??
>
> -- Soren
>
> _______________________________________________
> Asterisk-Dev mailing list
> Asterisk-Dev at lists.digium.com
> http://lists.digium.com/mailman/listinfo/asterisk-dev
> To UNSUBSCRIBE or update options visit:
> http://lists.digium.com/mailman/listinfo/asterisk-dev
>
> _______________________________________________
> Asterisk-Dev mailing list
> Asterisk-Dev at lists.digium.com
> http://lists.digium.com/mailman/listinfo/asterisk-dev
> To UNSUBSCRIBE or update options visit:
> http://lists.digium.com/mailman/listinfo/asterisk-dev
More information about the asterisk-dev
mailing list