From cba80e7f258336fbe471307301e46edca87ddd04 Mon Sep 17 00:00:00 2001 From: MelwareDE Date: Sun, 26 Sep 2010 10:51:45 +0000 Subject: [PATCH] Allow "," as capicommand option separator (needed from asterisk 1.6) --- CHANGES | 1 + README | 66 ++++---- README.Diva.fax | 16 +- README.Diva.qsig | 4 +- README.media | 342 +++++++++++++++++++------------------- README.qsig | 2 +- chan_capi.c | 42 ++--- chan_capi.h | 2 + chan_capi_chat.c | 16 +- chan_capi_qsig_core.c | 2 +- chan_capi_qsig_ecma.c | 12 +- chan_capi_supplementary.c | 8 +- 12 files changed, 258 insertions(+), 255 deletions(-) diff --git a/CHANGES b/CHANGES index 2934705..c42979d 100644 --- a/CHANGES +++ b/CHANGES @@ -20,6 +20,7 @@ HEAD - Add Slinear - Add HD voice using G.722, Siren7, Siren14 and Slinear16 - added faxdestination= to capi.conf to configure custom context,exten,prio. +- allow capicommand option separator "|" and ",". chan_capi-1.1.5 ------------------ diff --git a/README b/README index 63227cd..c16d952 100644 --- a/README +++ b/README @@ -148,27 +148,27 @@ With this application, special CAPI commands and features can be used. Call Deflection: Forwards an unanswered call to another number. Example: - exten => s,1,capicommand(deflect|12345678) + exten => s,1,capicommand(deflect,12345678) Fax receive: Receives a fax using CAPI. Example: - exten => s,1,capicommand(receivefax|/tmp/${UNIQUEID}|+49 6137 555123|Asterisk|kX) + exten => s,1,capicommand(receivefax,/tmp/${UNIQUEID},+49 6137 555123,Asterisk,kX) (more see below) Fax send: Sends a fax using CAPI. Example: - exten => s,1,capicommand(sendfax|/path/to/faxfile.sff|+49 6137 555123|Asterisk) + exten => s,1,capicommand(sendfax,/path/to/faxfile.sff,+49 6137 555123,Asterisk) (more see below) Enable/Disable echosquelch: Enables or disable a very primitive echo suppressor. Disable this option before you start recording voicemail or your files may get choppy. Example: - exten => s,1,capicommand(echosquelch|yes) + exten => s,1,capicommand(echosquelch,yes) or - exten => s,1,capicommand(echosquelch|no) + exten => s,1,capicommand(echosquelch,no) Enable/Disable echocancel: Enables or disables echo-cancel provided by CAPI driver/hardware. @@ -176,9 +176,9 @@ Enable/Disable echocancel: by a non-CAPI application. After hangup, this setting is restored to the value set in capi.conf. Example: - exten => s,1,capicommand(echocancel|yes) + exten => s,1,capicommand(echocancel,yes) or - exten => s,1,capicommand(echocancel|no) + exten => s,1,capicommand(echocancel,no) By default chan_capi deactivates echo-cancel for transit connections (Dial command called from existing call). You can use 'econtransitconn' @@ -191,7 +191,7 @@ Enable/Disable echocancel: Send Keypad Facility: Send Keypad Faciliaty information. Example: - exten => s,1,capicommand(keypad|) + exten => s,1,capicommand(keypad,) Malicious Call Identification: Reports a call of malicious nature. @@ -206,18 +206,18 @@ Hold: Example: exten => s,1,capicommand(hold) or - exten => s,1,capicommand(hold|MYHOLDVAR) + exten => s,1,capicommand(hold,MYHOLDVAR) Holdtype: Sets the type of 'hold'. When Asterisk wants to put the call on hold, the specified method will be used. Example: - exten => s,1,capicommand(holdtype|local) ;no hold, Asterisk can play MOH + exten => s,1,capicommand(holdtype,local) ;no hold, Asterisk can play MOH or - exten => s,1,capicommand(holdtype|hold) ;ISDN-HOLD + exten => s,1,capicommand(holdtype,hold) ;ISDN-HOLD or ; not yet implemented - exten => s,1,capicommand(holdtype|notify) ;notify the peer only, Asterisk can play MOH + exten => s,1,capicommand(holdtype,notify) ;notify the peer only, Asterisk can play MOH Retrieve: @@ -226,12 +226,12 @@ Retrieve: Example: exten => s,1,capicommand(retrieve) or - exten => s,1,capicommand(retrieve|${MYHOLDVAR}) + exten => s,1,capicommand(retrieve,${MYHOLDVAR}) ECT: Explicit Call Transfer of the call on hold (must put call on hold first!) Example: - exten => s,1,capicommand(ect|${MYHOLDVAR}) + exten => s,1,capicommand(ect,${MYHOLDVAR}) or [macro-capiect] exten => s,1,capicommand(ect) @@ -241,13 +241,13 @@ ECT: exten => s,3,Dial(CAPI/contr1/1234,60,M(capiect)) Note: Normaly a PBX needs 'implicit call transfer', which is done by default with this command. But if the line needs real 'explicit call transfer', use - exten => s,1,capicommand(ect|x) + exten => s,1,capicommand(ect,x) instead. 3PTY: Initiates a Three-Party Conference (must have one call on hold and one active call!). Example: - exten => s,1,capicommand(3pty_begin|${MYHOLDVAR}) + exten => s,1,capicommand(3pty_begin,${MYHOLDVAR}) or [macro-capi3pty] exten => s,1,capicommand(3pty_begin) @@ -274,9 +274,9 @@ Set local party to 'busy' or 'free': about the status of the extension who started the callback. By default, chan_capi assumes 'free', but you can change that with: - exten => s,1,capicommand(ccpartybusy|${CCLINKAGEID}|yes) + exten => s,1,capicommand(ccpartybusy,${CCLINKAGEID},yes) or - exten => s,1,capicommand(ccpartybusy|${CCLINKAGEID}|no) + exten => s,1,capicommand(ccpartybusy,${CCLINKAGEID},no) Call completion on subscriber busy (CCBS): To receive a callback when the dialed and busy party becomes free, aka @@ -286,7 +286,7 @@ Call completion on subscriber busy (CCBS): exten => s,2,Dial(CAPI/contr1/123456,60,g) ;'g' to go-on with the dialplan on busy. exten => s,3,NoOp(${CCLINKAGEID}) ;if this variable now contains a number, CCBS is possible. ;here you can ask the caller if CCBS shall be activated... - exten => s,4,capicommand(ccbs|${CCLINKAGEID}|||) + exten => s,4,capicommand(ccbs,${CCLINKAGEID},,,) exten => s,5,NoOp(${CCBSSTATUS}) ;if CCBS was successfully enabled, it is set to "ACTIVATED". If the remote party becomes 'non-busy', the network initiates the callback that will be sent to the provided context/exten/priority. Of course, this only happens if your local @@ -298,15 +298,15 @@ Call completion on subscriber busy (CCBS): Deactivate CCBS: To deactivate a previously activated CCBS, use the following command: Example: - exten => s,1,capicommand(ccbsstop|${CCLINKAGEID}) + exten => s,1,capicommand(ccbsstop,${CCLINKAGEID}) Chat (MeetMe/Conference): See also README.media for details! If the CAPI card/driver supports it, the caller can be put into a chat-room: (This uses the DSPs onboard a Dialogic(R) Diva(R) Rev.2 Media Board.) - exten => s,1,capicommand(chat|||controller) + exten => s,1,capicommand(chat,,,controller) Example: - exten => s,1,capicommand(chat|salesmeeting|m|1,3-6) + exten => s,1,capicommand(chat,salesmeeting,m,1,3-6) Possible options: 'm' = The first caller will get music-on-hold until second caller arrives. 'h' = Hangup after seconds if caller is alone in conference. @@ -385,19 +385,19 @@ Short HOWTO of capicommand(receivefax...) and capicommand(sendfax...): For those of you who have a CAPI card with an on-board DSP (like Dialogic(R) Diva(R) Media Boards), this allows you to receive/send faxes. -capicommand(receivefax|[|||]): +capicommand(receivefax,[,,,]): ------------------------------------------------------------------------- -If you want to answer a channel in fax mode, use capicommand(receivefax|...) +If you want to answer a channel in fax mode, use capicommand(receivefax,...) instead of Answer(). If you use Answer(), you will be in voice mode. If the hardware DSP detects fax tone, you can switch from voice to fax mode -by calling capicommand(receivefax|...). +by calling capicommand(receivefax,...). The parameter is mandatory and the parameters , and are optional. By default, if fax reception was not successful, the file is deleted. If you want even partly received or broken fax files, use 'k' for "keep bad fax" in the : - capicommand(receivefax|/tmp/${UNIQUEID}|+123456789||k) + capicommand(receivefax,/tmp/${UNIQUEID},+123456789,,k) You can activate extended fax support by 'X' in the : - capicommand(receivefax|/tmp/${UNIQUEID}|+123456789||X) + capicommand(receivefax,/tmp/${UNIQUEID},+123456789,X) Please read details on extended fax options in README.Diva.fax. To enable fax tone detection and redirect to extension 'fax', use config variable @@ -415,11 +415,11 @@ exten => 124,1,Goto(handle_fax,s,1) exten => fax,1,Goto(handle_fax,s,1) [handle_fax] -exten => s,1,capicommand(receivefax|/tmp/${UNIQUEID}[|||]) +exten => s,1,capicommand(receivefax,/tmp/${UNIQUEID}[,,,]) exten => s,2,Hangup() exten => h,1,deadagi,fax.php // Run sfftobmp and mail it. -The output of capicommand(receivefax|...) is a SFF file. +The output of capicommand(receivefax,...) is a SFF file. Use sfftobmp to convert it. With a Dialogic(R) Diva(R) Media Board, the following features are provided: - fax up to 33600 @@ -428,12 +428,12 @@ With a Dialogic(R) Diva(R) Media Board, the following features are provided: - JPEG Compression is disabled (not tested yet) See README.Diva.fax for more details and description of all options. -capicommand(sendfax|[|||]): +capicommand(sendfax,[,,,]): ------------------------------------------------------------ To send a fax, you can use the same mechanism like with receivefax. Just replace the with the path to the .SFF file to send. You can activate extended fax support by 'X' in the : - capicommand(sendfax|/tmp/${UNIQUEID}|+123456789||X) + capicommand(sendfax,/tmp/${UNIQUEID},+123456789,,X) Please read details on extended fax options in README.Diva.fax. After disconnect of a fax connection, the following variables @@ -485,7 +485,7 @@ BCHANNELINFO '2' : neither B nor D-channel is used (e.g., call waiting) Call-Waiting: an incoming call with BCHANNELINFO not '0' cannot be accepted. Another connection must be dropped before accepting or use - capicommand(deflect|) to initiate call deflection to another destination. + capicommand(deflect,) to initiate call deflection to another destination. CALLEDTON Incoming calls: 'type of number' value of the called number is saved in this variable on @@ -522,7 +522,7 @@ CAPI_CIP instead of transfercapability. CCBSSTATUS - When using capicommand(ccbs|....), this variable is set to either "ERROR" or + When using capicommand(ccbs,....), this variable is set to either "ERROR" or "ACTIVATED". CCLINKAGEID diff --git a/README.Diva.fax b/README.Diva.fax index f91a3ef..4a71e14 100644 --- a/README.Diva.fax +++ b/README.Diva.fax @@ -212,7 +212,7 @@ Reception of fax documents You can use the Dialogic (R) Diva(R) chan_capi configuration to activate fax support ("Fax detection" and "Fax detection time"). The reception of the fax message is started using 'receivefax' capi command: - capicommand(receivefax|[|||]) + capicommand(receivefax,[,,,]) Parameters: 'filename' - Contains the full path and file name for the resulting fax file, mandatory @@ -256,15 +256,15 @@ exten => fax,1,Goto(handle_fax,s,1) ; Fax calling tone detected, change to exten => i,1,Hangup() ; Received unexpected event [handle_fax] -exten => s,1,capicommand(receivefax|/tmp/${UNIQUEID}[|||]) +exten => s,1,capicommand(receivefax,/tmp/${UNIQUEID}[,,,]) exten => s,n,Hangup() exten => h,1,deadagi,fax.php ; Run sfftobmp and mail it Example with Clear Channel fax support: [handle_fax] -exten => s,1,capicommand(resource|1-4) ; Assign resource PLCI (use controllers 1 to 4) -exten => s,n,capicommand(receivefax|/tmp/${UNIQUEID}[|||]) +exten => s,1,capicommand(resource,1-4) ; Assign resource PLCI (use controllers 1 to 4) +exten => s,n,capicommand(receivefax,/tmp/${UNIQUEID}[,,,]) exten => s,n,Hangup() exten => h,1,deadagi,fax.php ; Run sfftobmp and mail it @@ -274,7 +274,7 @@ Transmission of fax documents The transmission of the fax message is started using 'sendfax' capi command: - capicommand(sendfax|[|||]) + capicommand(sendfax,[,,,]) Parameters: 'filename' - Contains the full path and file name to be sent, mandatory @@ -309,7 +309,7 @@ Example: exten => 1,1,Dial(capi/ISDN1/1234512345,20,G(handle_sendfax,s,1)) [handle_sendfax] -exten => s,1,capicommand(sendfax|/tmp/sendfax001.sff|1234 1234 1234|Outgoing Fax) +exten => s,1,capicommand(sendfax,/tmp/sendfax001.sff,1234 1234 1234,Outgoing Fax) exten => s,n,deadagi,faxlog.php ; Log result and schedule restart if necessary exten => s,n,Hangup @@ -317,8 +317,8 @@ exten => s,n,Hangup Example with Clear Channel fax support: [handle_sendfax] -exten => s,1,capicommand(resource|1-4) ; Assign resource PLCI -exten => s,n,capicommand(sendfax|/tmp/sendfax001.sff|1234 1234 1234|Outgoing Fax) +exten => s,1,capicommand(resource,1-4) ; Assign resource PLCI +exten => s,n,capicommand(sendfax,/tmp/sendfax001.sff,1234 1234 1234,Outgoing Fax) exten => s,n,deadagi,faxlog.php ; Log result and schedule restart if necessary exten => s,n,Hangup diff --git a/README.Diva.qsig b/README.Diva.qsig index d4cee25..848f6d4 100644 --- a/README.Diva.qsig +++ b/README.Diva.qsig @@ -158,7 +158,7 @@ ECT Example: ///////////////////////////////////////////////////////////////////// [macro-capiect] ; Activate suppressor of ambient noise for consultation call -exten => s,1,capicommand(noisesuppressor|yes) +exten => s,1,capicommand(noisesuppressor,yes) ; Invoke ECT command exten => s,n,capicommand(ect) @@ -172,7 +172,7 @@ exten => 12345,n,Playback(demo-enterkeywords,noanswer,us) ; Accept incoming call exten => 12345,n,Answer ; Activate suppressor of ambient noises for incoming call -exten => 12345,n,capicommand(noisesuppressor|yes) +exten => 12345,n,capicommand(noisesuppressor,yes) ; Save PLCI of incoming call to CAPIPLCI variable exten => 12345,n,capicommand(getplci) ; Set CAPIECTPLCI variable to PLCI of incoming call diff --git a/README.media b/README.media index f3eae5a..e8dc9f2 100644 --- a/README.media +++ b/README.media @@ -21,11 +21,11 @@ Supported hardware: feature only together with RTP. Syntax: -noisesuppressor|yes,no +noisesuppressor,[yes|no] Syntax example: -s,n,capicommand(noisesuppressor|yes) -s,n,capicommand(noisesuppressor|no) +s,n,capicommand(noisesuppressor,yes) +s,n,capicommand(noisesuppressor,no) IVR example: ///////////////////////////////////////////////////////////////////// @@ -36,9 +36,9 @@ exten => s,1,Set(TIMEOUT(digit)=5) ; Set Digit Timeout to 5 seconds exten => s,n,Set(TIMEOUT(response)=10) ; Set Response Timeout to 10 seconds exten => s,n(restart),BackGround(demo-instruct) ; Play some instructions exten => s,n,WaitExten ; Wait for an extension to be dialed. -exten => 1,1,capicommand(noisesuppressor|yes) +exten => 1,1,capicommand(noisesuppressor,yes) exten => 1,n,Goto(s,restart) -exten => 2,1,capicommand(noisesuppressor|no) +exten => 2,1,capicommand(noisesuppressor,no) exten => 2,n,Goto(s,restart) exten => 99,1,Echo exten => i,1,Playback(invalid) @@ -49,7 +49,7 @@ exten => h,1,Hangup PBX Example: ///////////////////////////////////////////////////////////////////// [macro-capinoisesuppressor] -exten => s,1,capicommand(noisesuppressor|yes) +exten => s,1,capicommand(noisesuppressor,yes) [isdn-in] exten => 12345,1,Progress() @@ -58,7 +58,7 @@ exten => 12345,n,Set(TIMEOUT(response)=5) ; Set Response Timeout to 10 seconds exten => 12345,n,Playback(demo-enterkeywords,noanswer,us) exten => 12345,n,Answer exten => 12345,n,Wait(2) -exten => 12345,n,capicommand(noisesuppressor|yes) +exten => 12345,n,capicommand(noisesuppressor,yes) exten => 12345,n,Dial(DIALOGICDIVA/ISDN1/100,10,M(capinoisesuppressor)) exten => 12345,n,Hangup() ///////////////////////////////////////////////////////////////////// @@ -79,14 +79,14 @@ Supported hardware: Requires one Dialogic(R) Diva(R) Media Board equipped with DSPs. Syntax: -clamping|N +clamping,N N - estimated duration of DTMF tones to be suppressed in ms 0 - deactivate clamping 1 ... 250 - activate clamping Syntax example: -s,n,capicommand(clamping|100) -s,n,capicommand(clamping|0) +s,n,capicommand(clamping,100) +s,n,capicommand(clamping,0) IVR example: ///////////////////////////////////////////////////////////////////// @@ -97,9 +97,9 @@ exten => s,1,Set(TIMEOUT(digit)=5) ; Set Digit Timeout to 5 seconds exten => s,n,Set(TIMEOUT(response)=10) ; Set Response Timeout to 10 seconds exten => s,n(restart),BackGround(demo-instruct) ; Play some instructions exten => s,n,WaitExten ; Wait for an extension to be dialed. -exten => 1,1,capicommand(clamping|100) +exten => 1,1,capicommand(clamping,100) exten => 1,n,Goto(s,restart) -exten => 2,1,capicommand(clamping|0) +exten => 2,1,capicommand(clamping,0) exten => 2,n,Goto(s,restart) exten => 99,1,Echo exten => i,1,Playback(invalid) @@ -110,7 +110,7 @@ exten => h,1,Hangup PBX Example: ///////////////////////////////////////////////////////////////////// [macro-capiclamping] -exten => s,1,capicommand(clamping|100) +exten => s,1,capicommand(clamping,100) [isdn-in] exten => 12345,1,Progress() @@ -119,7 +119,7 @@ exten => 12345,n,Set(TIMEOUT(response)=5) ; Set Response Timeout to 10 seconds exten => 12345,n,Playback(demo-enterkeywords,noanswer,us) exten => 12345,n,Answer exten => 12345,n,Wait(2) -exten => 12345,n,capicommand(clamping|100) +exten => 12345,n,capicommand(clamping,100) exten => 12345,n,Dial(DIALOGICDIVA/ISDN1/100,10,M(capiclamping)) exten => 12345,n,Hangup() ///////////////////////////////////////////////////////////////////// @@ -140,11 +140,11 @@ Supported hardware: Requires one Diva Media Board equipped with DSPs. Syntax: -rxagc|yes,no +rxagc,[yes|no] Syntax example: -s,n,capicommand(rxagc|yes) -s,n,capicommand(rxagc|no) +s,n,capicommand(rxagc,yes) +s,n,capicommand(rxagc,no) IVR example: ///////////////////////////////////////////////////////////////////// @@ -155,9 +155,9 @@ exten => s,1,Set(TIMEOUT(digit)=5) ; Set Digit Timeout to 5 seconds exten => s,n,Set(TIMEOUT(response)=10) ; Set Response Timeout to 10 seconds exten => s,n(restart),BackGround(demo-instruct) ; Play some instructions exten => s,n,WaitExten ; Wait for an extension to be dialed. -exten => 1,1,capicommand(rxagc|yes) +exten => 1,1,capicommand(rxagc,yes) exten => 1,n,Goto(s,restart) -exten => 2,1,capicommand(rxagc|no) +exten => 2,1,capicommand(rxagc,no) exten => 2,n,Goto(s,restart) exten => 99,1,Echo exten => i,1,Playback(invalid) @@ -168,7 +168,7 @@ exten => h,1,Hangup PBX Example: ///////////////////////////////////////////////////////////////////// [macro-capirxagc] -exten => s,1,capicommand(rxagc|yes) +exten => s,1,capicommand(rxagc,yes) [isdn-in] exten => 12345,1,Progress() @@ -177,7 +177,7 @@ exten => 12345,n,Set(TIMEOUT(response)=5) ; Set Response Timeout to 10 seconds exten => 12345,n,Playback(demo-enterkeywords,noanswer,us) exten => 12345,n,Answer exten => 12345,n,Wait(2) -exten => 12345,n,capicommand(rxagc|yes) +exten => 12345,n,capicommand(rxagc,yes) exten => 12345,n,Dial(DIALOGICDIVA/ISDN1/100,10,M(capirxagc)) exten => 12345,n,Hangup() ///////////////////////////////////////////////////////////////////// @@ -198,11 +198,11 @@ Supported hardware: Requires one Diva Media Board equipped with DSPs. Syntax: -txagc|yes,no +txagc,[yes|no] Syntax example: -s,n,capicommand(txagc|yes) -s,n,capicommand(txagc|no) +s,n,capicommand(txagc,yes) +s,n,capicommand(txagc,no) IVR example: See rxagc @@ -226,14 +226,14 @@ Supported hardware: Requires one Diva Media Board equipped with DSPs. Syntax: -rxdgain|N +rxdgain,N N - gain in dBm, float -127 ... +6 - gain -128 or less - infinite attenuation Syntax example: -s,n,capicommand(rxdgain|5.5) -s,n,capicommand(rxdgain|-14.2) +s,n,capicommand(rxdgain,5.5) +s,n,capicommand(rxdgain,-14.2) IVR example: ///////////////////////////////////////////////////////////////////// @@ -244,9 +244,9 @@ exten => s,1,Set(TIMEOUT(digit)=5) ; Set Digit Timeout to 5 seconds exten => s,n,Set(TIMEOUT(response)=10) ; Set Response Timeout to 10 seconds exten => s,n(restart),BackGround(demo-instruct) ; Play some instructions exten => s,n,WaitExten ; Wait for an extension to be dialed. -exten => 1,1,capicommand(rxdgain|5.5) +exten => 1,1,capicommand(rxdgain,5.5) exten => 1,n,Goto(s,restart) -exten => 2,1,capicommand(rxdgain|-70) +exten => 2,1,capicommand(rxdgain,-70) exten => 2,n,Goto(s,restart) exten => 99,1,Echo exten => i,1,Playback(invalid) @@ -270,12 +270,12 @@ Supported hardware: Requires one Diva Media Board equipped with DSPs. incSyntax: -rxdgain|N +rxdgain,N N - gain increment in dBm, float Syntax example: -s,n,capicommand(incrxdgain|2.5) // add 2.5 dBm to actiall gain -s,n,capicommand(incrxdgain|-2.5) // substract 2.5 dBm from actual gain +s,n,capicommand(incrxdgain,2.5) // add 2.5 dBm to actiall gain +s,n,capicommand(incrxdgain,-2.5) // substract 2.5 dBm from actual gain IVR example: ///////////////////////////////////////////////////////////////////// @@ -286,9 +286,9 @@ exten => s,1,Set(TIMEOUT(digit)=5) ; Set Digit Timeout to 5 seconds exten => s,n,Set(TIMEOUT(response)=10) ; Set Response Timeout to 10 seconds exten => s,n(restart),BackGround(demo-instruct) ; Play some instructions exten => s,n,WaitExten ; Wait for an extension to be dialed. -exten => 1,1,capicommand(incrxdgain|2.5) +exten => 1,1,capicommand(incrxdgain,2.5) exten => 1,n,Goto(s,restart) -exten => 2,1,capicommand(incrxdgain|-2.5) +exten => 2,1,capicommand(incrxdgain,-2.5) exten => 2,n,Goto(s,restart) exten => 99,1,Echo exten => i,1,Playback(invalid) @@ -312,14 +312,14 @@ Supported hardware: Requires one Diva Media Board equipped with DSPs. Syntax: -txdgain|N +txdgain,N N - gain in dBm, float -127 ... +6 - gain -128 or less - infinite attenuation Syntax example: -s,n,capicommand(txdgain|5.5) -s,n,capicommand(txdgain|-14.2) +s,n,capicommand(txdgain,5.5) +s,n,capicommand(txdgain,-14.2) IVR example: ///////////////////////////////////////////////////////////////////// @@ -330,9 +330,9 @@ exten => s,1,Set(TIMEOUT(digit)=5) ; Set Digit Timeout to 5 seconds exten => s,n,Set(TIMEOUT(response)=10) ; Set Response Timeout to 10 seconds exten => s,n(restart),BackGround(demo-instruct) ; Play some instructions exten => s,n,WaitExten ; Wait for an extension to be dialed. -exten => 1,1,capicommand(txdgain|5.5) +exten => 1,1,capicommand(txdgain,5.5) exten => 1,n,Goto(s,restart) -exten => 2,1,capicommand(txdgain|-70) +exten => 2,1,capicommand(txdgain,-70) exten => 2,n,Goto(s,restart) exten => 99,1,Echo exten => i,1,Playback(invalid) @@ -356,12 +356,12 @@ Supported hardware: Requires one Diva Media Board equipped with DSPs. incSyntax: -rxtgain|N +rxtgain,N N - gain increment in dBm, float Syntax example: -s,n,capicommand(inctxdgain|2.5) // add 2.5 dBm to actiall gain -s,n,capicommand(inctxdgain|-2.5) // substract 2.5 dBm from actual gain +s,n,capicommand(inctxdgain,2.5) // add 2.5 dBm to actiall gain +s,n,capicommand(inctxdgain,-2.5) // substract 2.5 dBm from actual gain IVR example: ///////////////////////////////////////////////////////////////////// @@ -372,9 +372,9 @@ exten => s,1,Set(TIMEOUT(digit)=5) ; Set Digit Timeout to 5 seconds exten => s,n,Set(TIMEOUT(response)=10) ; Set Response Timeout to 10 seconds exten => s,n(restart),BackGround(demo-instruct) ; Play some instructions exten => s,n,WaitExten ; Wait for an extension to be dialed. -exten => 1,1,capicommand(inctxdgain|2.5) +exten => 1,1,capicommand(inctxdgain,2.5) exten => 1,n,Goto(s,restart) -exten => 2,1,capicommand(inctxdgain|-2.5) +exten => 2,1,capicommand(inctxdgain,-2.5) exten => 2,n,Goto(s,restart) exten => 99,1,Echo exten => i,1,Playback(invalid) @@ -404,15 +404,15 @@ Supported hardware: Requires one Diva Media Board equipped with DSPs. Syntax: -pitchcontrol|RxN|TxN - set Rx and Tx rate to different values -pitchcontrol|N - set Rx and Tx rate to same value +pitchcontrol,RxN,TxN - set Rx and Tx rate to different values +pitchcontrol,N - set Rx and Tx rate to same value pitchcontrol - deactivate rate control RxN, TxN, N - rate in the range 1250 ... 51200 Hz. Syntax example: -s,n,capicommand(pitchcontrol|8200,8100) ; Set Rx rate to 8200 Hz and Tx rate to 8100 Hz -s,n,capicommand(pitchcontrol|8400) ; Set Rx and Tx rate to 8400 Hz +s,n,capicommand(pitchcontrol,8200,8100) ; Set Rx rate to 8200 Hz and Tx rate to 8100 Hz +s,n,capicommand(pitchcontrol,8400) ; Set Rx and Tx rate to 8400 Hz IVR example: ///////////////////////////////////////////////////////////////////// @@ -423,9 +423,9 @@ exten => s,1,Set(TIMEOUT(digit)=5) ; Set Digit Timeout to 5 seconds exten => s,n,Set(TIMEOUT(response)=10) ; Set Response Timeout to 10 seconds exten => s,n(restart),BackGround(demo-instruct) ; Play some instructions exten => s,n,WaitExten ; Wait for an extension to be dialed. -exten => 1,1,capicommand(pitchcontrol|8200) +exten => 1,1,capicommand(pitchcontrol,8200) exten => 1,n,Goto(s,restart) -exten => 2,1,capicommand(pitchcontrol|8000) +exten => 2,1,capicommand(pitchcontrol,8000) exten => 2,n,Goto(s,restart) exten => 99,1,Echo exten => i,1,Playback(invalid) @@ -455,14 +455,14 @@ Supported hardware: Requires one Diva Media Board equipped with DSPs. Syntax: -incpitchcontrol|RxN|TxN - change Rx and Tx rate using different values -incpitchcontrol|N - change Rx and Tx rate using same value +incpitchcontrol,RxN,TxN - change Rx and Tx rate using different values +incpitchcontrol,N - change Rx and Tx rate using same value RxN, TxN, N - rate change in Hz Syntax example: -s,n,capicommand(incpitchcontrol|100) // Increase Rx and Tx rate by 100 Hz -s,n,capicommand(incpitchcontrol|-100) // Decrease Rx and Tx rate by 100 Hz +s,n,capicommand(incpitchcontrol,100) // Increase Rx and Tx rate by 100 Hz +s,n,capicommand(incpitchcontrol,-100) // Decrease Rx and Tx rate by 100 Hz IVR example: ///////////////////////////////////////////////////////////////////// @@ -473,9 +473,9 @@ exten => s,1,Set(TIMEOUT(digit)=5) ; Set Digit Timeout to 5 seconds exten => s,n,Set(TIMEOUT(response)=10) ; Set Response Timeout to 10 seconds exten => s,n(restart),BackGround(demo-instruct) ; Play some instructions exten => s,n,WaitExten ; Wait for an extension to be dialed. -exten => 1,1,capicommand(incpitchcontrol|100) +exten => 1,1,capicommand(incpitchcontrol,100) exten => 1,n,Goto(s,restart) -exten => 2,1,capicommand(incpitchcontrol|100) +exten => 2,1,capicommand(incpitchcontrol,100) exten => 2,n,Goto(s,restart) exten => 99,1,Echo exten => i,1,Playback(invalid) @@ -501,11 +501,11 @@ Supported hardware: Requires one Diva Media Board equipped with DSPs. Syntax: -mftonedetection|yes,no +mftonedetection,[yes|no] Syntax example: -s,n,capicommand(mftonedetection|yes) -s,n,capicommand(mftonedetection|no) +s,n,capicommand(mftonedetection,yes) +s,n,capicommand(mftonedetection,no) IVR example: ///////////////////////////////////////////////////////////////////// @@ -516,9 +516,9 @@ exten => s,1,Set(TIMEOUT(digit)=5) ; Set Digit Timeout to 5 seconds exten => s,n,Set(TIMEOUT(response)=10) ; Set Response Timeout to 10 seconds exten => s,n(restart),BackGround(demo-instruct) ; Play some instructions exten => s,n,WaitExten ; Wait for an extension to be dialed. -exten => 1,1,capicommand(mftonedetection|yes) +exten => 1,1,capicommand(mftonedetection,yes) exten => 1,n,Goto(s,restart) -exten => 2,1,capicommand(mftonedetection|no) +exten => 2,1,capicommand(mftonedetection,no) exten => 2,n,Goto(s,restart) exten => 99,1,Echo exten => i,1,Playback(invalid) @@ -542,11 +542,11 @@ Supported hardware: Requires one Diva Media Board equipped with DSPs. Syntax: -pulsedetection|yes,no +pulsedetection,[yes|no] Syntax example: -s,n,capicommand(pulsedetection|yes) -s,n,capicommand(pulsedetection|no) +s,n,capicommand(pulsedetection,yes) +s,n,capicommand(pulsedetection,no) IVR example: ///////////////////////////////////////////////////////////////////// @@ -557,9 +557,9 @@ exten => s,1,Set(TIMEOUT(digit)=5) ; Set Digit Timeout to 5 seconds exten => s,n,Set(TIMEOUT(response)=10) ; Set Response Timeout to 10 seconds exten => s,n(restart),BackGround(demo-instruct) ; Play some instructions exten => s,n,WaitExten ; Wait for an extension to be dialed. -exten => 1,1,capicommand(pulsedetection|yes) +exten => 1,1,capicommand(pulsedetection,yes) exten => 1,n,Goto(s,restart) -exten => 2,1,capicommand(pulsedetection|no) +exten => 2,1,capicommand(pulsedetection,no) exten => 2,n,Goto(s,restart) exten => 99,1,Echo exten => i,1,Playback(invalid) @@ -584,7 +584,7 @@ Supported hardware: Requires one Diva Media Board equipped with DSPs. Syntax: -sendtone|N +sendtone,N stoptone N - tone to be sent @@ -633,7 +633,7 @@ stoptone 0xCB - Tone Alerting Signal (for Caller ID in PSTN) Syntax example: -s,n,capicommand(sendtone|0x83) ; Send PABX internal dial tone +s,n,capicommand(sendtone,0x83) ; Send PABX internal dial tone s,n,capicommand(stoptone) ; stop tone transmission IVR example @@ -645,7 +645,7 @@ exten => s,1,Set(TIMEOUT(digit)=5) ; Set Digit Timeout to 5 seconds exten => s,n,Set(TIMEOUT(response)=10) ; Set Response Timeout to 10 seconds exten => s,n(restart),BackGround(demo-instruct) ; Play some instructions exten => s,n,WaitExten ; Wait for an extension to be dialed. -exten => 1,1,capicommand(sendtone|0x83) +exten => 1,1,capicommand(sendtone,0x83) exten => 1,n,Goto(s,restart) exten => 2,1,capicommand(stoptone) exten => 2,n,Goto(s,restart) @@ -673,7 +673,7 @@ Supported hardware: Not available if RTP is active. Syntax: -starttonedetection|N +starttonedetection,N stoptonedetection N - Extension number to be used in case a tone is detected. @@ -729,7 +729,7 @@ stoptonedetection 0xCB - Tone Alerting Signal detected (for Caller ID in PSTN) Syntax example: -s,n,capicommand(starttonedetection|98) ; Change to extension 98 after detection of tone +s,n,capicommand(starttonedetection,98) ; Change to extension 98 after detection of tone s,n,capicommand(stoptonedetection) ; Disable detection of tones IVR example: @@ -746,7 +746,7 @@ exten => s,n,WaitExten ; Wait for an extension to be dialed. exten => 1,1,Set(TIMEOUT(digit)=1) exten => 1,n,Set(TIMEOUT(response)=5) -exten => 1,n,capicommand(starttonedetection|98) ; Change to 98 once tone is detected +exten => 1,n,capicommand(starttonedetection,98) ; Change to 98 once tone is detected exten => 1,n,Goto(s,restart) ; Continue after detection of the tone @@ -786,13 +786,13 @@ Description: independent from the dialplan. Syntax: -vc|command|key|param|param1|...|paranN - Add to menu: on detection of key execute command using parameters param1|...|paramN +vc,command,key,param,param1,...,paranN + Add to menu: on detection of key execute command using parameters param1,...,paramN -vc|command|key +vc,command,key Add to menu: on detection of key execute command without parameters -vc|command +vc,command Remove all instances of command from menu vc @@ -800,12 +800,12 @@ vc In case one command will use a key that is already in use, then a new command will overwrite the existing command: -exten => s,n,capicommand(vc|txagc|3|yes) -exten => s,n,capicommand(vc|inctxdgain|3|1.5) +exten => s,n,capicommand(vc,txagc,3,yes) +exten => s,n,capicommand(vc,inctxdgain,3,1.5) is equivalent to: -exten => s,n,capicommand(vc|inctxdgain|3|1.5) +exten => s,n,capicommand(vc,inctxdgain,3,1.5) It is better to use only one digit as key for commands in menu if using the menu for IVR and voice mailbox. This provides short response time. @@ -814,8 +814,8 @@ In case the menu is used for conference or for connection between two parties, i two or three digits for the key. This will prevent an activation by accidentally pressing a key. Syntax example: -exten => s,n,capicommand(vc|inctxdgain|5|1.5) ; Execute inctxdgain|1.5 if received DTMF digit 5 -exten => s,n,capicommand(vc|txagc|3|yes) ; Execute txagc|yes if received DTMF digit 3 +exten => s,n,capicommand(vc,inctxdgain,5,1.5) ; Execute inctxdgain,1.5 if received DTMF digit 5 +exten => s,n,capicommand(vc,txagc,3,yes) ; Execute txagc,yes if received DTMF digit 3 IVR Example: ///////////////////////////////////////////////////////////////////// @@ -823,14 +823,14 @@ IVR Example: exten => _X.,1,Answer exten => _X.,n,Goto(s,1) exten => s,1,Wait(1) -exten => s,n,capicommand(vc|sendtone|1|0x82) -exten => s,n,capicommand(vc|stoptone|2) -exten => s,n,capicommand(vc|txagc|3|yes) -exten => s,n,capicommand(vc|txagc|4|no) -exten => s,n,capicommand(vc|inctxdgain|5|1.5) -exten => s,n,capicommand(vc|inctxdgain|7|-2.5) -exten => s,n,capicommand(vc|incpitchcontrol|8|0|100) -exten => s,n,capicommand(vc|incpitchcontrol|9|0|-400) +exten => s,n,capicommand(vc,sendtone,1,0x82) +exten => s,n,capicommand(vc,stoptone,2) +exten => s,n,capicommand(vc,txagc,3,yes) +exten => s,n,capicommand(vc,txagc,4,no) +exten => s,n,capicommand(vc,inctxdgain,5,1.5) +exten => s,n,capicommand(vc,inctxdgain,7,-2.5) +exten => s,n,capicommand(vc,incpitchcontrol,8,0,100) +exten => s,n,capicommand(vc,incpitchcontrol,9,0,-400) exten => s,n(restart),Playback(demo-instruct) exten => s,n,Goto(s,restart) exten => s,n,Hangup @@ -870,7 +870,7 @@ Supported hardware: Diva Syntax: -capicommand(chat|||controller) +capicommand(chat,,,controller) roomname - conference room name options m - The first caller will get music-on-hold until the second caller arrives @@ -880,12 +880,12 @@ capicommand(chat|||controller) controller - CAPI controller Syntax example: -exten => s,n,capicommand(chat|test|m|1) -exten => s,n,capicommand(chat|test|m|1,3) -exten => s,n,capicommand(chat|test|m|1-4) -exten => s,n,capicommand(chat|test|m|1-4,7) -exten => s,n,capicommand(chat|test|m|1-4,7-10) -exten => s,n,capicommand(chat|test|mh300|1-4) +exten => s,n,capicommand(chat,test,m,1) +exten => s,n,capicommand(chat,test,m,1,3) +exten => s,n,capicommand(chat,test,m,1-4) +exten => s,n,capicommand(chat,test,m,1-4,7) +exten => s,n,capicommand(chat,test,m,1-4,7-10) +exten => s,n,capicommand(chat,test,mh300,1-4) IVR example: ///////////////////////////////////////////////////////////////////// @@ -898,21 +898,21 @@ exten => s,n(restart),BackGround(demo-instruct) ; Play some instructions exten => s,n,WaitExten ; Wait for an extension to be dialed, use to select conference room ; You can create macro to set up vc menu -exten => 1,1,capicommand(clamping|100) ; Activate suppression of DTMF tones -exten => 1,n,capicommand(vc|incrxdgain|0|1.5) ; Install voice command menu for volume control, '0' to increase volume -exten => 1,n,capicommand(vc|incrxdgain|1|-1.5) ; Install voice command menu for volume control, '1' to decrease volume -exten => 1,n,capicommand(vc|txdgain|2|-128) ; Install voice command menu for volume control, '2' to mute tx path -exten => 1,n,capicommand(vc|txdgain|3|0) ; Install voice command menu for volume control, '3' to activate tx path -exten => 1,n,capicommand(chat|test1|m|1-4) ; Create/enter conference room 'test1' +exten => 1,1,capicommand(clamping,100) ; Activate suppression of DTMF tones +exten => 1,n,capicommand(vc,incrxdgain,0,1.5) ; Install voice command menu for volume control, '0' to increase volume +exten => 1,n,capicommand(vc,incrxdgain,1,-1.5) ; Install voice command menu for volume control, '1' to decrease volume +exten => 1,n,capicommand(vc,txdgain,2,-128) ; Install voice command menu for volume control, '2' to mute tx path +exten => 1,n,capicommand(vc,txdgain,3,0) ; Install voice command menu for volume control, '3' to activate tx path +exten => 1,n,capicommand(chat,test1,m,1-4) ; Create/enter conference room 'test1' -exten => 2,1,capicommand(clamping|100) ; Activate suppression of DTMF tones -exten => 2,n,capicommand(txdgain|-128) ; Deactivate tx path -exten => 2,n,capicommand(vc|incrxdgain|0|1.5) ; Install voice command menu for volume control, '0' to increase volume -exten => 2,n,capicommand(vc|incrxdgain|1|-1.5) ; Install voice command menu for volume control, '1' to decrease volume -exten => 2,n,capicommand(vc|txdgain|2|-128) ; Install voice command menu for volume control, '2' to mute tx path -exten => 2,n,capicommand(vc|txdgain|3|0) ; Install voice command menu for volume control, '3' to activate tx path -exten => 2,n,capicommand(chat|test1|m|1-4) ; Create/enter conference room 'test1 -exten => 2,n,capicommand(chat|test2|m|1-4) ; Create/enter conference room 'test2' +exten => 2,1,capicommand(clamping,100) ; Activate suppression of DTMF tones +exten => 2,n,capicommand(txdgain,-128) ; Deactivate tx path +exten => 2,n,capicommand(vc,incrxdgain,0,1.5) ; Install voice command menu for volume control, '0' to increase volume +exten => 2,n,capicommand(vc,incrxdgain,1,-1.5) ; Install voice command menu for volume control, '1' to decrease volume +exten => 2,n,capicommand(vc,txdgain,2,-128) ; Install voice command menu for volume control, '2' to mute tx path +exten => 2,n,capicommand(vc,txdgain,3,0) ; Install voice command menu for volume control, '3' to activate tx path +exten => 2,n,capicommand(chat,test1,m,1-4) ; Create/enter conference room 'test1 +exten => 2,n,capicommand(chat,test2,m,1-4) ; Create/enter conference room 'test2' exten => i,1,Playback(invalid) exten => i,n,Goto(s,restart) @@ -1006,32 +1006,32 @@ Supported hardware: Syntax: -capicommand(ressource|controller) +capicommand(ressource,controller) controller - CAPI controller Syntax example: -exten => s,n,capicommand(resource|1) -exten => s,n,capicommand(resource|1,3) -exten => s,n,capicommand(resource|1-4) -exten => s,n,capicommand(resource|1-4,7) -exten => s,n,capicommand(resource|1-4,7-10) +exten => s,n,capicommand(resource,1) +exten => s,n,capicommand(resource,1,3) +exten => s,n,capicommand(resource,1-4) +exten => s,n,capicommand(resource,1-4,7) +exten => s,n,capicommand(resource,1-4,7-10) IVR example: ///////////////////////////////////////////////////////////////////// [isdn-in] exten => _X.,1,Answer ; Answer the line exten => _X.,n,Goto(s,1) -exten => s,1,capicommand(resource|1-4) ; Create DSP resource on CAPI controllers 1-4 for IP members, +exten => s,1,capicommand(resource,1-4) ; Create DSP resource on CAPI controllers 1-4 for IP members, ; ignore command for E.1/T.1/S0/POTS members -exten => s,n,capicommand(clamping|100) ; Activate suppression of DTMF tones -exten => s,n,capicommand(rxagc|yes) ; Activate Rx AGC -exten => s,n,capicommand(noisesuppressor|yes) ; Activate suppression of ambient noises -exten => s,n,capicommand(vc|incrxdgain|0|1.5) ; Install voice command menu for volume control, '0' to increase volume -exten => s,n,capicommand(vc|incrxdgain|1|-1.5) ; Install voice command menu for volume control, '1' to decrease volume -exten => s,n,capicommand(vc|txdgain|2|-128) ; Install voice command menu for volume control, '2' to mute tx path -exten => s,n,capicommand(vc|txdgain|3|0) ; Install voice command menu for volume control, '3' to activate tx path -exten => s,n,capicommand(chat|test1|m|1-4) ; Craete/enter conference toom 'test1', controller field is ignored if +exten => s,n,capicommand(clamping,100) ; Activate suppression of DTMF tones +exten => s,n,capicommand(rxagc,yes) ; Activate Rx AGC +exten => s,n,capicommand(noisesuppressor,yes) ; Activate suppression of ambient noises +exten => s,n,capicommand(vc,incrxdgain,0,1.5) ; Install voice command menu for volume control, '0' to increase volume +exten => s,n,capicommand(vc,incrxdgain,1,-1.5) ; Install voice command menu for volume control, '1' to decrease volume +exten => s,n,capicommand(vc,txdgain,2,-128) ; Install voice command menu for volume control, '2' to mute tx path +exten => s,n,capicommand(vc,txdgain,3,0) ; Install voice command menu for volume control, '3' to activate tx path +exten => s,n,capicommand(chat,test1,m,1-4) ; Craete/enter conference toom 'test1', controller field is ignored if ; media processing resource is assigned by 'resource' command or for ; E.1/T.1/S0/POTS members @@ -1071,14 +1071,14 @@ Direction: Note: The voice stream of regular users is active by default. If the conference mode was changed to half duplex - ('chat_mute|yes'), then new regular users are created with a deactivated voice stream until the conference - mode is changed back to full duplex ('chat_mute|no') + ('chat_mute,yes'), then new regular users are created with a deactivated voice stream until the conference + mode is changed back to full duplex ('chat_mute,no') Supported hardware: Diva Syntax: -capicommand(chat_mute|[|]) +capicommand(chat_mute,[,]) action - mandatory yes - Change conference mode to half duplex, deactivate voice stream from regular users to conference. @@ -1090,32 +1090,32 @@ capicommand(chat_mute|[|]) functionality of a common conference operator. Syntax example: -exten => s,n,capicommand(chat_mute|yes) -exten => s,n,capicommand(char_mute|no) -exten => s,n,capicommand(chat_mute|yes|test_room) -exten => s,n,capicommand(char_mute|no|test_room) +exten => s,n,capicommand(chat_mute,yes) +exten => s,n,capicommand(char_mute,no) +exten => s,n,capicommand(chat_mute,yes,test_room) +exten => s,n,capicommand(char_mute,no,test_room) Conference example: ///////////////////////////////////////////////////////////////////// [isdn-in] exten => 1291,1,Answer ; Accept call -exten => 1291,n,capicommand(resource|1-4) ; assign resource PLCI if call from IP -exten => 1291,n,capicommand(clamping|200) ; Activate DTMF suppression -exten => 1291,n,capicommand(vc|chat_mute|0|yes) ; Voice command, key 0 - change to half duplex mode -exten => 1291,n,capicommand(vc|chat_mute|1|no) ; Voice command, key 0 - change to full duplex mode -exten => 1291,n,capicommand(chat|test_chat|mo|1-4) ; Add to conference as operator +exten => 1291,n,capicommand(resource,1-4) ; assign resource PLCI if call from IP +exten => 1291,n,capicommand(clamping,200) ; Activate DTMF suppression +exten => 1291,n,capicommand(vc,chat_mute,0,yes) ; Voice command, key 0 - change to half duplex mode +exten => 1291,n,capicommand(vc,chat_mute,1,no) ; Voice command, key 0 - change to full duplex mode +exten => 1291,n,capicommand(chat,test_chat,mo,1-4) ; Add to conference as operator exten => 1291,n,Hangup() exten => 1292,1,Answer ; Accept call -exten => 1292,n,capicommand(resource|1-4) ; Assign resource PLCI if call from IP -exten => 1292,n,capicommand(clamping|200) ; Activate DTMF suppression -exten => 1292,n,capicommand(chat|test_chat|m|1-4) ; Add to conference as regular user +exten => 1292,n,capicommand(resource,1-4) ; Assign resource PLCI if call from IP +exten => 1292,n,capicommand(clamping,200) ; Activate DTMF suppression +exten => 1292,n,capicommand(chat,test_chat,m,1-4) ; Add to conference as regular user exten => 1292,n,Hangup() exten => 1293,1,Answer ; Accept call -exten => 1293,n,capicommand(resource|1-4) ; Assign resource PLCI if call from IP -exten => 1293,n,capicommand(clamping|200) ; Activate DTMF suppression -exten => 1293,n,capicommand(chat|test_chat|ml|1-4) ; Add to conference as listener +exten => 1293,n,capicommand(resource,1-4) ; Assign resource PLCI if call from IP +exten => 1293,n,capicommand(clamping,200) ; Activate DTMF suppression +exten => 1293,n,capicommand(chat,test_chat,ml,1-4) ; Add to conference as listener exten => 1293,n,Hangup() exten => _X.,1,Answer @@ -1142,7 +1142,7 @@ Supported hardware: Diva Syntax: -capicommand(chat_play||||controller) +capicommand(chat_play,,,,controller) roomname - conference room name options m - The caller will get music-on-hold while message is played @@ -1151,22 +1151,22 @@ capicommand(chat_play||||controller) controller - CAPI controller Syntax example: -exten => s,n,capicommand(chat|test|m|/tmp/file.alaw|1) -exten => s,n,capicommand(chat|test||/tmp/file.alaw|1-4,7-10) +exten => s,n,capicommand(chat,test,m,/tmp/file.alaw,1) +exten => s,n,capicommand(chat,test,,/tmp/file.alaw,1-4,7-10) IVR example: ///////////////////////////////////////////////////////////////////// [isdn-in] exten => _X.,1,Answer ; Answer the line exten => _X.,n,Goto(s,1) -exten => s,1,capicommand(clamping|100) ; Activate suppression of DTMF tones +exten => s,1,capicommand(clamping,100) ; Activate suppression of DTMF tones exten => s,n,Playback(record-name) ; Ask for name -exten => s,n,capicommand(rxagc|yes) ; Activate Rx AGC +exten => s,n,capicommand(rxagc,yes) ; Activate Rx AGC exten => s,n,Record(/tmp/${UNIQUEID}-info:alaw) ; Record message -exten => s,n,capicommand(rxagc|no) ; Deactivate Rx AGC -exten => s,n,capicommand(chat_play|test|m|/tmp/${UNIQUEID}-info.alaw|1-4) ; Play message to conference, +exten => s,n,capicommand(rxagc,no) ; Deactivate Rx AGC +exten => s,n,capicommand(chat_play,test,m,/tmp/${UNIQUEID}-info.alaw,1-4) ; Play message to conference, ; play music on hold to caller -exten => s,n,capicommand(chat|test|m|1-4) ; Create/enter conference room 'test' +exten => s,n,capicommand(chat,test,m,1-4) ; Create/enter conference room 'test' ///////////////////////////////////////////////////////////////////// @@ -1181,7 +1181,7 @@ Supported hardware: Diva Syntax: -capicommand(chat_command||) +capicommand(chat_command,,) options - mandatory r - Remove newest user from conference. Command does not apply to calling member and be used by operators only. @@ -1194,9 +1194,9 @@ capicommand(chat_command||) roomname - optional, room caller assigned to is used if not present Syntax example: -exten => s,n,capicommand(chat_command|r) -exten => s,n,capicommand(chat_command|lo|test) -exten => s,n,capicommand(chat_command|a|test) +exten => s,n,capicommand(chat_command,r) +exten => s,n,capicommand(chat_command,lo,test) +exten => s,n,capicommand(chat_command,a,test) Conference example: ///////////////////////////////////////////////////////////////////// @@ -1205,15 +1205,15 @@ exten => _X.,1,Answer exten => _X.,n,Authenticate(12345) exten => _X.,n,Playback(vm-rec-name) exten => _X.,n,Record(/tmp/name${UNIQUEID}.alaw,5,15) ; Record name -exten => _X.,n,capicommand(chat_play|c1||/tmp/name${UNIQUEID}.alaw|1-4) ; Play name to conference -exten => _X.,n,capicommand(resource|1-4) ; Create resource PLCI if call from IP -exten => _X.,n,capicommand(clamping|200) ; Activate suppression of DTMF codes -exten => _X.,n,capicommand(vc|chat_mute|1|yes) ; Voice command, key 1 - mute all members except operators -exten => _X.,n,capicommand(vc|chat_mute|2|no) ; Voice command, key 2 - unmute all members except operators -exten => _X.,n,capicommand(vc|chat_command|0|a|c1) ; Voice command, key 0 - remove all members from conference -exten => _X.,n,capicommand(vc|noisesuppressor|3|yes) ; Voice command, key 3 - turn noise suppression on -exten => _X.,n,capicommand(vc|noisesuppressor|4|no) ; Voice command, key 4 - turn noise suppression off -exten => _X.,n,capicommand(chat|c1|mo|1-4) ; Add caller to conference as operator +exten => _X.,n,capicommand(chat_play,c1,,/tmp/name${UNIQUEID}.alaw,1-4) ; Play name to conference +exten => _X.,n,capicommand(resource,1-4) ; Create resource PLCI if call from IP +exten => _X.,n,capicommand(clamping,200) ; Activate suppression of DTMF codes +exten => _X.,n,capicommand(vc,chat_mute,1,yes) ; Voice command, key 1 - mute all members except operators +exten => _X.,n,capicommand(vc,chat_mute,2,no) ; Voice command, key 2 - unmute all members except operators +exten => _X.,n,capicommand(vc,chat_command,0,a,c1) ; Voice command, key 0 - remove all members from conference +exten => _X.,n,capicommand(vc,noisesuppressor,3,yes) ; Voice command, key 3 - turn noise suppression on +exten => _X.,n,capicommand(vc,noisesuppressor,4,no) ; Voice command, key 4 - turn noise suppression off +exten => _X.,n,capicommand(chat,c1,mo,1-4) ; Add caller to conference as operator ///////////////////////////////////////////////////////////////////// @@ -1253,11 +1253,11 @@ Supported hardware: Diva Media Boards equipped with DSPs. Syntax: -echocancel|yes,no +echocancel,[yes|no] Syntax example: -s,n,capicommand(echocancel|yes) -s,n,capicommand(echocancel|no) +s,n,capicommand(echocancel,yes) +s,n,capicommand(echocancel,no) IVR example: ///////////////////////////////////////////////////////////////////// @@ -1268,9 +1268,9 @@ exten => s,1,Set(TIMEOUT(digit)=5) ; Set Digit Timeout to 5 seconds exten => s,n,Set(TIMEOUT(response)=10) ; Set Response Timeout to 10 seconds exten => s,n(restart),BackGround(demo-instruct) ; Play some instructions exten => s,n,WaitExten ; Wait for an extension to be dialed. -exten => 1,1,capicommand(echocancel|yes) +exten => 1,1,capicommand(echocancel,yes) exten => 1,n,Goto(s,restart) -exten => 2,1,capicommand(echocancel|no) +exten => 2,1,capicommand(echocancel,no) exten => 2,n,Goto(s,restart) exten => 99,1,Echo exten => i,1,Playback(invalid) @@ -1281,13 +1281,13 @@ exten => h,1,Hangup PBX Example: ///////////////////////////////////////////////////////////////////// [macro-capiechocancel] -exten => s,1,capicommand(echocancel|yes) +exten => s,1,capicommand(echocancel,yes) [isdn-in] exten => 12345,1,Progress() exten => 12345,n,Set(TIMEOUT(digit)=1) ; Set Digit Timeout to 5 seconds exten => 12345,n,Set(TIMEOUT(response)=5) ; Set Response Timeout to 10 seconds -exten => 12345,n,capicommand(echocancel|yes) +exten => 12345,n,capicommand(echocancel,yes) exten => 12345,n,Playback(demo-enterkeywords,noanswer,us) exten => 12345,n,Answer exten => 12345,n,Wait(2) diff --git a/README.qsig b/README.qsig index 2af5289..8fc7a63 100644 --- a/README.qsig +++ b/README.qsig @@ -58,7 +58,7 @@ The QSIG support includes: its subchannels - Simple Call Transfer - With capicommand(qsig_ct|src-id|dst-id), you can transfer an inbound call back to the qsig switch. + With capicommand(qsig_ct,src-id,dst-id), you can transfer an inbound call back to the qsig switch. The B-channel of this call will be relased, so that the line is free for a next call. Unfortunately, the call will be completely released by the switch if the target is busy. If you need to know whether your target is busy, you can use the call transfer feature below. diff --git a/chan_capi.c b/chan_capi.c index 5ddafd8..256483a 100644 --- a/chan_capi.c +++ b/chan_capi.c @@ -2643,9 +2643,9 @@ static int pbx_capi_receive_extended_fax(struct ast_channel *c, struct capi_pvt unsigned short b3_protocol_options = 0x0001; int extended_resolution = 0; - filename = strsep(&data, "|"); - stationid = strsep(&data, "|"); - headline = strsep(&data, "|"); + filename = strsep(&data, COMMANDSEPARATOR); + stationid = strsep(&data, COMMANDSEPARATOR); + headline = strsep(&data, COMMANDSEPARATOR); options = data; if (!stationid) @@ -2835,9 +2835,9 @@ static int pbx_capi_receive_basic_fax(struct ast_channel *c, struct capi_pvt *i, B3_PROTO_FAXG3 b3conf; char buffer[CAPI_MAX_STRING]; - filename = strsep(&data, "|"); - stationid = strsep(&data, "|"); - headline = strsep(&data, "|"); + filename = strsep(&data, COMMANDSEPARATOR); + stationid = strsep(&data, COMMANDSEPARATOR); + headline = strsep(&data, COMMANDSEPARATOR); options = data; if (!stationid) @@ -2989,9 +2989,9 @@ static int pbx_capi_receive_fax(struct ast_channel *c, char *data) return -1; } - (void)strsep(&ldata, "|"); - (void)strsep(&ldata, "|"); - (void)strsep(&ldata, "|"); + (void)strsep(&ldata, COMMANDSEPARATOR); + (void)strsep(&ldata, COMMANDSEPARATOR); + (void)strsep(&ldata, COMMANDSEPARATOR); while ((ldata) && (*ldata)) { switch (*ldata) { case 'X': @@ -3110,9 +3110,9 @@ static int pbx_capi_send_extended_fax(struct ast_channel *c, struct capi_pvt *i, unsigned short b3_protocol_options = 0; int extended_resolution = 0; - filename = strsep(&data, "|"); - stationid = strsep(&data, "|"); - headline = strsep(&data, "|"); + filename = strsep(&data, COMMANDSEPARATOR); + stationid = strsep(&data, COMMANDSEPARATOR); + headline = strsep(&data, COMMANDSEPARATOR); options = data; if (!stationid) @@ -3319,9 +3319,9 @@ static int pbx_capi_send_basic_fax(struct ast_channel *c, struct capi_pvt *i, ch B3_PROTO_FAXG3 b3conf; char buffer[CAPI_MAX_STRING]; - filename = strsep(&data, "|"); - stationid = strsep(&data, "|"); - headline = strsep(&data, "|"); + filename = strsep(&data, COMMANDSEPARATOR); + stationid = strsep(&data, COMMANDSEPARATOR); + headline = strsep(&data, COMMANDSEPARATOR); options = data; if (!stationid) @@ -3447,9 +3447,9 @@ static int pbx_capi_send_fax(struct ast_channel *c, char *data) return -1; } - (void)strsep(&ldata, "|"); - (void)strsep(&ldata, "|"); - (void)strsep(&ldata, "|"); + (void)strsep(&ldata, COMMANDSEPARATOR); + (void)strsep(&ldata, COMMANDSEPARATOR); + (void)strsep(&ldata, COMMANDSEPARATOR); while ((ldata) && (*ldata)) { switch (*ldata) { case 'X': @@ -5730,7 +5730,7 @@ static int pbx_capi_call_deflect(struct ast_channel *c, char *param) " deflection requires an argument (destination phone number)\n"); return -1; } - number = strsep(¶m, "|"); + number = strsep(¶m, COMMANDSEPARATOR); numberlen = strlen(number); if (!numberlen) { @@ -5919,7 +5919,7 @@ static int pbx_capi_ect(struct ast_channel *c, char *param) plci = (unsigned int)strtoul(id, NULL, 0); } - holdid = strsep(¶m, "|"); + holdid = strsep(¶m, COMMANDSEPARATOR); if (holdid) { plci = (unsigned int)strtoul(holdid, NULL, 0); @@ -7197,7 +7197,7 @@ static int pbx_capicommand_exec(struct ast_channel *chan, void *data) s = ast_strdupa(data); stringp = s; - command = strsep(&stringp, "|"); + command = strsep(&stringp, COMMANDSEPARATOR); params = stringp; cc_verbose(2, 1, VERBOSE_PREFIX_3 "capicommand: '%s' '%s'\n", command, params); diff --git a/chan_capi.h b/chan_capi.h index f715b6e..3f71511 100644 --- a/chan_capi.h +++ b/chan_capi.h @@ -71,6 +71,8 @@ struct _diva_stream_scheduling_entry; #define CAPI_MAX_FACILITYDATAARRAY_SIZE 300 +#define COMMANDSEPARATOR "|," + #ifdef CC_AST_HAS_FORMAT_T typedef format_t cc_format_t; #else diff --git a/chan_capi_chat.c b/chan_capi_chat.c index 5ab93cc..e664c5d 100644 --- a/chan_capi_chat.c +++ b/chan_capi_chat.c @@ -602,8 +602,8 @@ int pbx_capi_chat(struct ast_channel *c, char *param) unsigned int hangup_timeout = 0; room_member_type_t room_member_type = RoomMemberDefault; - roomname = strsep(¶m, "|"); - options = strsep(¶m, "|"); + roomname = strsep(¶m, COMMANDSEPARATOR); + options = strsep(¶m, COMMANDSEPARATOR); controller = param; if (!roomname) { @@ -709,9 +709,9 @@ int pbx_capi_chat_play(struct ast_channel *c, char *param) return (-1); } - roomname = strsep(¶m, "|"); - options = strsep(¶m, "|"); - file_name = strsep(¶m, "|"); + roomname = strsep(¶m, COMMANDSEPARATOR); + options = strsep(¶m, COMMANDSEPARATOR); + file_name = strsep(¶m, COMMANDSEPARATOR); controller = param; if (!roomname) { @@ -829,7 +829,7 @@ int pbx_capi_chat_command(struct ast_channel *c, char *param) struct capichat_s *room, *tmproom; struct capi_pvt *i; unsigned int roomnumber, ret = 0; - const char* options = strsep(¶m, "|"); + const char* options = strsep(¶m, COMMANDSEPARATOR); const char* roomname = param; unsigned int disconnect_command = 0; @@ -939,7 +939,7 @@ int pbx_capi_chat_associate_resource_plci(struct ast_channel *c, char *param) cc_format_t codecs = 0; /* codecs are disabled by default */ int all = 0; - controller = strsep(¶m, "|"); + controller = strsep(¶m, COMMANDSEPARATOR); codeclist = param; if (controller) { @@ -1068,7 +1068,7 @@ int pbx_capi_chat_mute(struct ast_channel *c, char *param) struct capichat_s *room; unsigned int roomnumber; room_mode_t room_mode; - const char* roommode = strsep(¶m, "|"); + const char* roommode = strsep(¶m, COMMANDSEPARATOR); const char* roomname = param; struct capi_pvt *i; diff --git a/chan_capi_qsig_core.c b/chan_capi_qsig_core.c index d7fcc2f..a276043 100644 --- a/chan_capi_qsig_core.c +++ b/chan_capi_qsig_core.c @@ -1203,7 +1203,7 @@ int pbx_capi_qsig_ct(struct ast_channel *c, char *param) return -1; } - marker = strsep(¶m, "|"); + marker = strsep(¶m, COMMANDSEPARATOR); callmark = atoi(marker); cc_qsig_verbose( 1, VERBOSE_PREFIX_4 " * QSIG_CT: using call marker %i(%s)\n", callmark, marker); diff --git a/chan_capi_qsig_ecma.c b/chan_capi_qsig_ecma.c index 939d6cb..af95cb4 100644 --- a/chan_capi_qsig_ecma.c +++ b/chan_capi_qsig_ecma.c @@ -386,19 +386,19 @@ void cc_qsig_encode_ecma_calltransfer(unsigned char * buf, unsigned int *idx, st if (param) { /* got Call Transfer Parameters */ if (info) { - cid = strsep(¶m, "|"); + cid = strsep(¶m, COMMANDSEPARATOR); cidlen = strlen(cid); if (cidlen > 20) /* HACK: stop action here, maybe we have invalid data */ cidlen = 20; } else { - char *tmp = strsep(¶m, "|"); + char *tmp = strsep(¶m, COMMANDSEPARATOR); tmp = NULL; - cid = strsep(¶m, "|"); + cid = strsep(¶m, COMMANDSEPARATOR); cidlen = strlen(cid); if (cidlen > 20) /* HACK: stop action here, maybe we have invalid data */ cidlen = 20; - ccanswer = strsep(¶m, "|"); + ccanswer = strsep(¶m, COMMANDSEPARATOR); if (ccanswer[0]) icanswer = ccanswer[0] - 0x30; } @@ -618,12 +618,12 @@ void cc_qsig_encode_ecma_sscalltransfer(unsigned char * buf, unsigned int *idx, char c[255]; int ix = 0; - cidsrc = strsep(¶m, "|"); + cidsrc = strsep(¶m, COMMANDSEPARATOR); srclen = strlen(cidsrc); if (srclen > 20) /* HACK: stop action here, maybe we have invalid data */ srclen = 20; - ciddst = strsep(¶m, "|"); + ciddst = strsep(¶m, COMMANDSEPARATOR); dstlen = strlen(ciddst); if (dstlen > 20) /* HACK: stop action here, maybe we have invalid data */ dstlen = 20; diff --git a/chan_capi_supplementary.c b/chan_capi_supplementary.c index 950f87c..9b63c43 100644 --- a/chan_capi_supplementary.c +++ b/chan_capi_supplementary.c @@ -727,7 +727,7 @@ int pbx_capi_ccpartybusy(struct ast_channel *c, char *data) struct ccbsnr_s *ccbsnr; char partybusy = 0; - slinkageid = strsep(&data, "|"); + slinkageid = strsep(&data, COMMANDSEPARATOR); yesno = data; if (slinkageid) { @@ -821,9 +821,9 @@ int pbx_capi_ccbs(struct ast_channel *c, char *data) MESSAGE_EXCHANGE_ERROR error; unsigned int ccbsnrstate; - slinkageid = strsep(&data, "|"); - context = strsep(&data, "|"); - exten = strsep(&data, "|"); + slinkageid = strsep(&data, COMMANDSEPARATOR); + context = strsep(&data, COMMANDSEPARATOR); + exten = strsep(&data, COMMANDSEPARATOR); priority = data; if (slinkageid) {