Walker Haddock
2003-Oct-13 20:11 UTC
[Asterisk-Users] AGI solution to Grandstream BT102 call waiting problem
I'm trying to fix a problem with the GrandStream Budgetone 102. I've been reading the source code, mailing lists and other resources. Here's the scenario and the approach I have been pursuing. I'm having some problems with the AGI calls and I hope someone can give me some clarification. PSTN <---> T1,PRI * <---> Grandstream BT 102 (12) <---> TDM400 (1) Fax machine End user requires that an inbound call ring 4 of the BT 102 phones so that any available employee may answer. Generally, this works very well and the only problem I have is when another call comes in. In this case the Grandstream BT 102 rings very loudly in the ear piece and obliterates the conversation. The external party notices that the audio is cut off while the BT 102 is ringing. The solution I am trying to develop to work around the problem is to use an AGI script to check each of the extensions in the group of phones that are supposed to be rung. I want to remove extensions that are presently in a call and not ring them with the new call. Also, I want to perform this test every 10 seconds so that I may include any extension back into the group of phones to ring if their previous call has ended. I plan to implement a variable and increment it in a loop using gotoif to provide three or four 10 second trials for the dial. If no one answers, I'll send it to voice mail. I have tried using ChanIsAvail and Channel status to see if I can detect when the Sip phone is busy. In the case of the ChanIsAvail, it doesn't matter if the phone is busy or not, it will still return the channel as available. Maybe the definition of channel is available does not have anything to do if it is in a call or not. In the case of the Channel Status, it always returns 201 on the Sip channel. Actually, I'm using the Asterisk Perl Modules by James Golovich so the $AGI->channel_status('Zap/1-1') returns 4 and the $AGI->channel_status('Sip/2400') returns -1. I think that a major problem with the Channel Status is that the Sip channel is not being correctly provided. Since it seems to work with the Zap channel. The code is walking the channels to do a strcmp for an exact match. I'm lost to find out what the Sip channel designator should look like. It appears that the ChanIsAvail would be the correct call to make for this purpose. Last, I can't get the options to work with the $AGI->exed('Dial', $newvar , '30,t'); command. It seems to ignore the options, so, I can't tell the dial command how long to ring and to allow the called extension to transfer. TIA, Walker Here are some snips from my conf files and agi script: myagi.agi ... for $i ( split /,/,$ARGV[0] ) { if ( $AGI->exec('ChanIsAvail', $i) == 0 ) { if ( $count++ > 0 ) { $newvar .= "\&" }; $newvar .= $i; $result = $AGI->channel_status($i); # always returns -1 print STDERR "$result\n"; } } $result = $AGI->channel_status('Zap/1-1'); # test this with Zap print STDERR "$result\n"; # always returns 4 $AGI->exec('Dial', $newvar , '30,t'); # this is supposed to dial the # extensions that are "not busy" ... sip.conf ... [2400] ; Grandstream Phone context=intern type=friend insecure=yes host=dynamic permit=192.168.254.0/255.255.255.0 mailbox=2400 dtmfmode=inband canreinvite=no nat=no ... extensions.conf ... PHONE2=SIP/2400 PHONE3=SIP/2410 RECEPTION=${PHONE2},${PHONE3} ... exten => 2200,1,AGI(myagi.agi,${RECEPTION}) ... console (asterisk -vvvvvvvc) ... -- Executing AGI("Zap/1-1", "myagi.agi|SIP/2400,SIP/2410") in new stack -- Launched AGI Script /var/lib/asterisk/agi-bin/myagi.agi arg1 = SIP/2400,SIP/2410 Channel Status: -- AGI Script Executing Application: (ChanIsAvail) Options: (SIP/2400) -1 -- AGI Script Executing Application: (ChanIsAvail) Options: (SIP/2410) -1 4 -- AGI Script Executing Application: (Dial) Options: (SIP/2400&SIP/2410) -- Called 2400 -- Called 2410 -- SIP/2400-3320 is ringing -- SIP/2410-a8ca is ringing ... -- ******** DataCrest, Inc. -- Technically Superior ****************** Walker Haddock http://www.datacrest.com DataCrest, Inc. e-mail: wh@datacrest.com 1634A Montgomery Hwy. phone: 1-888-941-3282, 1-205-335-8589 Birmingham, AL 35216 fax: 1-205-823-7838 *********************************************************************** -- ******** DataCrest, Inc. -- Technically Superior ****************** Walker Haddock http://www.datacrest.com DataCrest, Inc. e-mail: wh@datacrest.com 1634A Montgomery Hwy. phone: 1-888-941-3282, 1-205-335-8589 Birmingham, AL 35216 fax: 1-205-823-7838 ***********************************************************************
Walker Haddock
2003-Oct-13 20:14 UTC
[Asterisk-Users] AGI solution to Grandstream BT102 call waiting problem
I'm trying to fix a problem with the GrandStream Budgetone 102. I've been reading the source code, mailing lists and other resources. Here's the scenario and the approach I have been pursuing. I'm having some problems with the AGI calls and I hope someone can give me some clarification. PSTN <---> T1,PRI * <---> Grandstream BT 102 (12) <---> TDM400 (1) Fax machine End user requires that an inbound call ring 4 of the BT 102 phones so that any available employee may answer. Generally, this works very well and the only problem I have is when another call comes in. In this case the Grandstream BT 102 rings very loudly in the ear piece and obliterates the conversation. The external party notices that the audio is cut off while the BT 102 is ringing. The solution I am trying to develop to work around the problem is to use an AGI script to check each of the extensions in the group of phones that are supposed to be rung. I want to remove extensions that are presently in a call and not ring them with the new call. Also, I want to perform this test every 10 seconds so that I may include any extension back into the group of phones to ring if their previous call has ended. I plan to implement a variable and increment it in a loop using gotoif to provide three or four 10 second trials for the dial. If no one answers, I'll send it to voice mail. I have tried using ChanIsAvail and Channel status to see if I can detect when the Sip phone is busy. In the case of the ChanIsAvail, it doesn't matter if the phone is busy or not, it will still return the channel as available. Maybe the definition of channel is available does not have anything to do if it is in a call or not. In the case of the Channel Status, it always returns 201 on the Sip channel. Actually, I'm using the Asterisk Perl Modules by James Golovich so the $AGI->channel_status('Zap/1-1') returns 4 and the $AGI->channel_status('Sip/2400') returns -1. I think that a major problem with the Channel Status is that the Sip channel is not being correctly provided. Since it seems to work with the Zap channel. The code is walking the channels to do a strcmp for an exact match. I'm lost to find out what the Sip channel designator should look like. It appears that the ChanIsAvail would be the correct call to make for this purpose. Last, I can't get the options to work with the $AGI->exed('Dial', $newvar , '30,t'); command. It seems to ignore the options, so, I can't tell the dial command how long to ring and to allow the called extension to transfer. TIA, Walker Here are some snips from my conf files and agi script: myagi.agi ... for $i ( split /,/,$ARGV[0] ) { if ( $AGI->exec('ChanIsAvail', $i) == 0 ) { if ( $count++ > 0 ) { $newvar .= "\&" }; $newvar .= $i; $result = $AGI->channel_status($i); # always returns -1 print STDERR "$result\n"; } } $result = $AGI->channel_status('Zap/1-1'); # test this with Zap print STDERR "$result\n"; # always returns 4 $AGI->exec('Dial', $newvar , '30,t'); # this is supposed to dial the # extensions that are "not busy" ... sip.conf ... [2400] ; Grandstream Phone context=intern type=friend insecure=yes host=dynamic permit=192.168.254.0/255.255.255.0 mailbox=2400 dtmfmode=inband canreinvite=no nat=no ... extensions.conf ... PHONE2=SIP/2400 PHONE3=SIP/2410 RECEPTION=${PHONE2},${PHONE3} ... exten => 2200,1,AGI(myagi.agi,${RECEPTION}) ... console (asterisk -vvvvvvvc) ... -- Executing AGI("Zap/1-1", "myagi.agi|SIP/2400,SIP/2410") in new stack -- Launched AGI Script /var/lib/asterisk/agi-bin/myagi.agi arg1 = SIP/2400,SIP/2410 Channel Status: -- AGI Script Executing Application: (ChanIsAvail) Options: (SIP/2400) -1 -- AGI Script Executing Application: (ChanIsAvail) Options: (SIP/2410) -1 4 -- AGI Script Executing Application: (Dial) Options: (SIP/2400&SIP/2410) -- Called 2400 -- Called 2410 -- SIP/2400-3320 is ringing -- SIP/2410-a8ca is ringing ... -- ******** DataCrest, Inc. -- Technically Superior ****************** Walker Haddock http://www.datacrest.com DataCrest, Inc. e-mail: wh@datacrest.com 1634A Montgomery Hwy. phone: 1-888-941-3282, 1-205-335-8589 Birmingham, AL 35216 fax: 1-205-823-7838 *********************************************************************** -- ******** DataCrest, Inc. -- Technically Superior ****************** Walker Haddock http://www.datacrest.com DataCrest, Inc. e-mail: wh@datacrest.com 1634A Montgomery Hwy. phone: 1-888-941-3282, 1-205-335-8589 Birmingham, AL 35216 fax: 1-205-823-7838 ***********************************************************************