I've been doing some debugging on this and I think it's a code problem.

I'm by no means an expert on Asterisk or how it is written or implemented, but the following patch to app_voicemail.c fixes the issue. With this code change, Asterisk correctly transfers to the 'a' and 'o' extensions as I'd expect them to.

As I said, I'm not an expert, so I would strongly recommend against committing this as-is... someone please interpret why this works and fix the root problem (or help me understand why this works so I can fix the root problem).

Index: app_voicemail.c
===================================================================
RCS file: /usr/cvsroot/asterisk/apps/app_voicemail.c,v
retrieving revision 1.119
diff -C3 -r1.119 app_voicemail.c
*** app_voicemail.c 26 Jun 2004 16:06:19 -0000 1.119
--- app_voicemail.c 28 Jun 2004 17:58:17 -0000
***************
*** 1727,1735 ****
make_dir(dir, sizeof(dir), vmu->context, ext, "INBOX");
if (mkdir(dir, 0700) && (errno != EEXIST))
ast_log(LOG_WARNING, "mkdir '%s' failed: %s\n", dir, strerror(errno));
! if (ast_exists_extension(chan, strlen(chan->macrocontext) ? chan->macrocontext : chan->context, "o", 1, chan->callerid))
strcat(ecodes, "0");
! if (ast_exists_extension(chan, strlen(chan->macrocontext) ? chan->macrocontext : chan->context, "a", 1, chan->callerid))
strcat(ecodes, "*");
/* Play the beginning intro if desired */
if (!ast_strlen_zero(prefile)) {
--- 1727,1735 ----
make_dir(dir, sizeof(dir), vmu->context, ext, "INBOX");
if (mkdir(dir, 0700) && (errno != EEXIST))
ast_log(LOG_WARNING, "mkdir '%s' failed: %s\n", dir, strerror(errno));
! if (ast_exists_extension(chan, chan->context, "o", 1, chan->callerid))
strcat(ecodes, "0");
! if (ast_exists_extension(chan, chan->context, "a", 1, chan->callerid))
strcat(ecodes, "*");
/* Play the beginning intro if desired */
if (!ast_strlen_zero(prefile)) {
***************
*** 1768,1775 ****
strncpy(chan->exten, "a", sizeof(chan->exten) - 1);
if (!ast_strlen_zero(vmu->exit)) {
strncpy(chan->context, vmu->exit, sizeof(chan->context) - 1);
- } else if (!ast_strlen_zero(chan->macrocontext)) {
- strncpy(chan->context, chan->macrocontext, sizeof(chan->context) - 1);
}
chan->priority = 0;
free_user(vmu);
--- 1768,1773 ----


On Jun 26, 2004, at 8:52 PM, Chad Scott wrote:

I've been banging my head on a brick wall for about an hour now trying to understand why the following doesn't work (which is even provided as an example in the distribution!).

The goal is to create a voicemail-only extension not associated with a phone. I'd rather not have an extension dedicated to VoicemailMain(), so I would like the user to be able to hit '*' during the introductory message and be prompted for a password.

For whatever reason, this doesn't work as expected. The first section, macro-stdexten, is what is provided in the distribution. It defines exten => a,1,VoicemailMain(${ARG1}), which should match the return extension from Voicemail() if the user presses '*'. Neither this nor my "vmonly" macro do this properly. The '*' key instead does nothing.

Am I not understanding macros properly?

Thanks,
Chad

[macro-stdexten];
;
; Standard extension macro:
; ${ARG1} - Extension (we could have used ${MACRO_EXTEN} here as well
; ${ARG2} - Device(s) to ring
;
exten => s,1,Dial(${ARG2},20) ; Ring the interface, 20 seconds maximum
exten => s,2,Goto(s-${DIALSTATUS}) ; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)


exten => s-NOANSWER,1,Voicemail(u${ARG1}) ; If unavailable, send to voicemail w/ unavail announce
exten => s-NOANSWER,2,Goto(default,s,1) ; If they press #, return to start


exten => s-BUSY,1,Voicemail(b${ARG1}) ; If busy, send to voicemail w/ busy announce
exten => s-BUSY,2,Goto(default,s,1) ; If they press #, return to start


exten => s-.,1,Goto(s-NOANSWER,1) ; Treat anything else as no answer

exten => a,1,VoicemailMain(${ARG1}) ; If they press *, send the user into VoicemailMain

[macro-vmonly]
exten => s,1,Voicemail(${ARG1})
exten => s,2,Hangup

exten => a,1,VoicemailMain(${ARG1})

_______________________________________________
Asterisk-Users mailing list
[EMAIL PROTECTED]
http://lists.digium.com/mailman/listinfo/asterisk-users
To UNSUBSCRIBE or update options visit:
  http://lists.digium.com/mailman/listinfo/asterisk-users

_______________________________________________ Asterisk-Users mailing list [EMAIL PROTECTED] http://lists.digium.com/mailman/listinfo/asterisk-users To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/asterisk-users

Reply via email to