Kind of dynamic MeetMe conference rooms

uname -a
Linux pbx.local 2.6.32-220.13.1.el6.i686 #1 SMP Tue Apr 17 22:09:08 BST 2012 i686 i686 i386 GNU/Linux

asterisk -V
Asterisk 1.8.12.0

I have a need to create some temporary/dynamic MeetMe conference rooms. My dial plan looks like this:

exten => 2,1,Background(custom/conf-room-creation-feature-password)
same => hang,1,Playback(vm-goodbye)
same => hang,n,Hangup
same => n,Set(LOOPCOUNT=0)
same => n(reset),Read(CREATE_PASSWORD,beep,6)
same => n,GotoIf($[ ${CREATE_PASSWORD} = 123456 ]?passed:failed)
same => n(passed),Playback(custom/five-digit-num-conf-to-create)
same => n,Read(NUM2CREATE,beep,5)
same => n,Playback(custom/conf-admin-pin)
same => n,Playback(custom/conf-admin-help)
same => n,Read(CONF_ADMIN_PIN,beep,5)
same => n,Playback(custom/conf-user-pin)
same => n,Playback(custom/conf-user-help)
same => n,Read(CONF_USER_PIN,beep,5)
[color=#4000BF]same => n,MeetMe(${NUM2CREATE},AcDirSTPx,${CONF_USER_PIN},${CONF_ADMIN_PIN})[/color]
same => n,Goto(gc-conf-bridge,s,2)
same => n(failed),SET(LOOPCOUNT=$[${LOOPCOUNT} + 1])
same => n,Playback(wrong-try-again-smarty)
same => n,GotoIf($[${LOOPCOUNT} > 3]?hang,1)
same => n,Goto(reset)
same => n,Hangup

The goal is for users who do not have a pre-configured, private MeetMe conference room already set up for them; to be able to create temporary ones. Eventually, all the users who need conference capabilities will have their own pre-configured rooms.
For office politics reasons, the temporary rooms need to have both an Admin PIN and a User PIN.

Based on reading online examples, the O’Reilly book (2nd edition (3rd edition on order)) and other research, I came up with the line highlighted above.

same => n,MeetMe(${NUM2CREATE},AcDirSTPx,${CONF_USER_PIN},${CONF_ADMIN_PIN})

Taking input from the user, I collect the number of the room they want to create (NUM2CREATE), the User PIN (CONF_USER_PIN) and the Admin PIN (CONF_ADMIN_PIN) and feed those items to the MeetMe() call, with the options:

a - Sets admin mode
A - Set Marked mode
c - Announce user count
d/D - Dynamically add conference (I’ve tried both ‘d’ and ‘D’)
i - Announce leave/join
P - Allow exit by pressing #
r - Record conference
S - Presents the menu
T - Talker Detection
x - Close conference when last marked user exits

Executing this section of dial plan, and supplying:
123456 - feature password
45678 - desired room number
1111 - Admin PIN
1234 - User PIN

results in being told that the PIN is invalid for this conference, no matter which PIN is supplied.

The log messages look like this:


[2012-06-05 20:17:15] VERBOSE[20765] pbx.c: == CDR updated on SIP/501-00000064
[2012-06-05 20:17:15] VERBOSE[20765] pbx.c: – Executing [2@gc-conf-bridge:1] BackGround(“SIP/501-00000064”, “custom/conf-room-creation-feature-password”) in new stack
[2012-06-05 20:17:15] VERBOSE[20765] file.c: – <SIP/501-00000064> Playing ‘custom/conf-room-creation-feature-password.gsm’ (language ‘en’)
[2012-06-05 20:17:23] VERBOSE[20765] pbx.c: – Executing [2@gc-conf-bridge:2] NoOp(“SIP/501-00000064”, "LOOPCOUNT AT TOP ********** is ") in new stack
[2012-06-05 20:17:23] VERBOSE[20765] pbx.c: – Executing [2@gc-conf-bridge:3] Set(“SIP/501-00000064”, “LOOPCOUNT=0”) in new stack
[2012-06-05 20:17:23] VERBOSE[20765] pbx.c: – Executing [2@gc-conf-bridge:4] Read(“SIP/501-00000064”, “CREATE_PASSWORD,beep,6”) in new stack
[2012-06-05 20:17:23] VERBOSE[20765] app_read.c: – Accepting a maximum of 6 digits.
[2012-06-05 20:17:23] VERBOSE[20765] file.c: – <SIP/501-00000064> Playing ‘beep.gsm’ (language ‘en’)
[2012-06-05 20:17:26] VERBOSE[20765] app_read.c: – User entered ‘123456’
[2012-06-05 20:17:26] VERBOSE[20765] pbx.c: – Executing [2@gc-conf-bridge:5] GotoIf(“SIP/501-00000064”, “1?passed:failed”) in new stack
[2012-06-05 20:17:26] VERBOSE[20765] pbx.c: – Goto (gc-conf-bridge,2,6)
[2012-06-05 20:17:26] VERBOSE[20765] pbx.c: – Executing [2@gc-conf-bridge:6] Playback(“SIP/501-00000064”, “custom/five-digit-num-conf-to-create”) in new stack
[2012-06-05 20:17:26] VERBOSE[20765] file.c: – <SIP/501-00000064> Playing ‘custom/five-digit-num-conf-to-create.gsm’ (language ‘en’)
[2012-06-05 20:17:31] VERBOSE[20765] pbx.c: – Executing [2@gc-conf-bridge:7] Read(“SIP/501-00000064”, “NUM2CREATE,beep,5”) in new stack
[2012-06-05 20:17:31] VERBOSE[20765] app_read.c: – Accepting a maximum of 5 digits.
[2012-06-05 20:17:31] VERBOSE[20765] file.c: – <SIP/501-00000064> Playing ‘beep.gsm’ (language ‘en’)
[2012-06-05 20:17:34] VERBOSE[20765] app_read.c: – User entered ‘45678’
[2012-06-05 20:17:34] VERBOSE[20765] pbx.c: – Executing [2@gc-conf-bridge:8] Playback(“SIP/501-00000064”, “custom/conf-admin-pin”) in new stack
[2012-06-05 20:17:34] VERBOSE[20765] file.c: – <SIP/501-00000064> Playing ‘custom/conf-admin-pin.gsm’ (language ‘en’)
[2012-06-05 20:17:37] VERBOSE[20765] pbx.c: – Executing [2@gc-conf-bridge:9] Playback(“SIP/501-00000064”, “custom/conf-admin-help”) in new stack
[2012-06-05 20:17:37] VERBOSE[20765] file.c: – <SIP/501-00000064> Playing ‘custom/conf-admin-help.gsm’ (language ‘en’)
[2012-06-05 20:17:41] VERBOSE[20765] pbx.c: – Executing [2@gc-conf-bridge:10] Read(“SIP/501-00000064”, “CONF_ADMIN_PIN,beep,5”) in new stack
[2012-06-05 20:17:41] VERBOSE[20765] app_read.c: – Accepting a maximum of 5 digits.
[2012-06-05 20:17:41] VERBOSE[20765] file.c: – <SIP/501-00000064> Playing ‘beep.gsm’ (language ‘en’)
[2012-06-05 20:17:49] VERBOSE[20765] app_read.c: – User entered ‘1111’
[2012-06-05 20:17:49] VERBOSE[20765] pbx.c: – Executing [2@gc-conf-bridge:11] Playback(“SIP/501-00000064”, “custom/conf-user-pin”) in new stack
[2012-06-05 20:17:49] VERBOSE[20765] file.c: – <SIP/501-00000064> Playing ‘custom/conf-user-pin.gsm’ (language ‘en’)
[2012-06-05 20:17:52] VERBOSE[20765] pbx.c: – Executing [2@gc-conf-bridge:12] Playback(“SIP/501-00000064”, “custom/conf-user-help”) in new stack
[2012-06-05 20:17:52] VERBOSE[20765] file.c: – <SIP/501-00000064> Playing ‘custom/conf-user-help.gsm’ (language ‘en’)
[2012-06-05 20:17:56] VERBOSE[20765] pbx.c: – Executing [2@gc-conf-bridge:13] Read(“SIP/501-00000064”, “CONF_USER_PIN,beep,5”) in new stack
[2012-06-05 20:17:56] VERBOSE[20765] app_read.c: – Accepting a maximum of 5 digits.
[2012-06-05 20:17:56] VERBOSE[20765] file.c: – <SIP/501-00000064> Playing ‘beep.gsm’ (language ‘en’)
[2012-06-05 20:18:03] VERBOSE[20765] app_read.c: – User entered ‘1234’
[2012-06-05 20:18:03] VERBOSE[20765] pbx.c: – Executing [2@gc-conf-bridge:14] MeetMe(“SIP/501-00000064”, “45678,AcdirSTPx,1234,1111”) in new stack
[2012-06-05 20:18:03] VERBOSE[20765] app_meetme.c: – Created MeetMe conference 1023 for conference ‘45678’
[2012-06-05 20:18:03] VERBOSE[20765] file.c: – <SIP/501-00000064> Playing ‘conf-getpin.gsm’ (language ‘en’)
[2012-06-05 20:18:14] VERBOSE[20765] file.c: – <SIP/501-00000064> Playing ‘conf-invalidpin.gsm’ (language ‘en’)
[2012-06-05 20:18:17] VERBOSE[20765] file.c: – <SIP/501-00000064> Playing ‘conf-getpin.gsm’ (language ‘en’)
[2012-06-05 20:18:27] VERBOSE[20765] file.c: – <SIP/501-00000064> Playing ‘conf-invalidpin.gsm’ (language ‘en’)
[2012-06-05 20:18:30] VERBOSE[20765] file.c: – <SIP/501-00000064> Playing ‘conf-getpin.gsm’ (language ‘en’)
[2012-06-05 20:18:34] VERBOSE[20765] chan_dahdi.c: – Hungup ‘DAHDI/pseudo-143471029’
[2012-06-05 20:18:34] VERBOSE[20765] pbx.c: == Spawn extension (gc-conf-bridge, 2, 14) exited non-zero on ‘SIP/501-00000064’
[2012-06-05 20:18:34] VERBOSE[20765] pbx.c: – Executing [h@gc-conf-bridge:1] Hangup(“SIP/501-00000064”, “”) in new stack
[2012-06-05 20:18:34] VERBOSE[20765] pbx.c: == Spawn extension (gc-conf-bridge, h, 1) exited non-zero on ‘SIP/501-00000064’


With my current level of knowledge, it appears to me that I’m doing the right thing. Clearly the PBX thinks otherwise. :smile:
Any suggestions?

Nobody has any input to offer?

Well your Cli output doesnt match with your posted dialplan and this is wrong:

exten => 2,1,Background(custom/conf-room-creation-feature-password)
same => hang,1,Playback(vm-goodbye)
same => hang,n,Hangup

The same declaration only needs the priority and you are mixing two different extension, then in your cli the 2nd step is a NoOP and I cant see it in your DialPLan, so its hard to help when things doesnt match.

First, thanks for taking the time to reply! :smile:

In trying to make my original post as short and uncluttered as possible, I took out all the comments in my dial plan. Since the NoOp lines are effectively comments, I took them out of the section of dial plan I posted. I forgot to remove them from the CLI output I posted. My mistake.

I don’t understand what you mean when you say:

The section that I need the most help in debugging is:

same => n(passed),Playback(custom/five-digit-num-conf-to-create)
; Store the conference number the user entered in the variable ${NUM2CREATE}
same => n,Read(NUM2CREATE,beep,5)
; Ask the user for the Administrator PIN for this conference and tell them what it's for.
same => n,Playback(custom/conf-admin-pin)
same => n,Playback(custom/conf-admin-help)
; Store the conference Admin PIN the user entered in the variable ${CONF_ADMIN_PIN}
same => n,Read(CONF_ADMIN_PIN,beep,5)
same => n,Playback(custom/conf-user-pin)
same => n,Playback(custom/conf-user-help)
; Ask the user for the User PIN for this conference and tell them what it's for.
same => n,Read(CONF_USER_PIN,beep,5)
; Store the conference User PIN the user entered in the variable ${CONF_USER_PIN}
; Now that we have the Conference Number, the Admin PIN and the User PIN, we can create the
; conference and send the user to it. Since only Administrators can create conferences, we
; connect the user to the conference, using the Admin PIN they entered here.
same => n,MeetMe(${NUM2CREATE},AcDirSTPx,${CONF_USER_PIN},${CONF_ADMIN_PIN})

If I run through this section of dialplan, and enter information at all the prompts, such that my variables look like:
NUM2CREATE=45678
CONF_ADMIN_PIN=1111
CONF_USER_PIN=1234

Thus building a call to MeetMe.app that looks like:
same => n,MeetMe(45678,AcDirSTPx,1234,1111)

The next prompt from the system is “Please enter the conference PIN number”. (presumedly being generated from/by MeetMe.app)

It doesn’t matter which PIN I enter (1111 or 1234), I get “That PIN is invalid for this conference”, in a loop until I finally hang up.

The goal is to allow a user who has not already been issued a conference room for their use, but who needs one on short notice; to be able to create one without waiting on the PBX admin staff person to do it for them. This ‘temporary’ “dynamic” conference needs to have both User level access and Admin level access (thus why I prompt for a User PIN and and Admin PIN), so that not just anyone can come along and join the conference; and so that the conference Admin can kick a person who joins out or lock the conference once the parties they need have all joined.

With the level of understanding I have of how MeetMe works, it appears to me that my dialplan code should work. Clearly it’s not working, so I am doing something wrong. :smile: I just don’t know what I should be doing differently.

Again, my apologies that my original post seemed to have different dialplan and CLI information. I was trying to follow the forum posting guidelines and keep it as short as possible.
Does the new information help any, or make it even more confusing?

Thanks!