2005-06-02 18:47:35 +00:00
|
|
|
(CAPI*) chan_capi a Common ISDN API 2.0 implementation for Asterisk
|
|
|
|
|
|
|
|
Copyright (C) 2005 Cytronics & Melware
|
|
|
|
Armin Schindler <armin@melware.de>
|
|
|
|
|
|
|
|
Reworked, but based on the work of
|
|
|
|
Copyright (C) 2002-2005 Junghanns.NET GmbH
|
|
|
|
Klaus-Peter Junghanns <kpj@junghanns.net>
|
|
|
|
|
|
|
|
This program is free software and may be modified and distributed under
|
|
|
|
the terms of the GNU Public License. There is _NO_ warranty for this!
|
|
|
|
|
2005-09-11 08:39:29 +00:00
|
|
|
Thanks go to the debuggers, bugfixers and contributors :)
|
2005-06-02 18:47:35 +00:00
|
|
|
===========================================================================
|
|
|
|
Lele Forzani <lele@windmill.it>
|
|
|
|
Florian Overkamp <florian@obsimref.com>
|
|
|
|
Gareth Watts <gareth@omnipotent.net>
|
|
|
|
Jeff Noxon <jeff@planetfall.com>
|
|
|
|
Petr Michalek <petr.michalek@aca.cz>
|
|
|
|
Jan Stocker
|
2005-06-04 14:28:52 +00:00
|
|
|
Frank Sautter, levigo group
|
2005-09-11 08:39:29 +00:00
|
|
|
Hans Petter Selasky
|
2005-06-04 14:28:52 +00:00
|
|
|
|
2005-09-11 08:39:29 +00:00
|
|
|
(...and all the others that have been forgotten...) :-)
|
2005-06-02 18:47:35 +00:00
|
|
|
|
|
|
|
This chan_capi version includes:
|
|
|
|
================================
|
2005-06-07 04:26:12 +00:00
|
|
|
- Multiple controller support
|
2005-06-02 18:47:35 +00:00
|
|
|
- CID,DNID (callling party, called party)
|
|
|
|
- CLIR/CLIP
|
2005-06-07 04:26:12 +00:00
|
|
|
- Supplementary services, CD,HOLD,RETRIEVE,ECT
|
2005-06-02 18:47:35 +00:00
|
|
|
- DTMF (dependend on card) + software DTMF support
|
2005-06-07 04:26:12 +00:00
|
|
|
- Early B3 connects (always,success,never)
|
|
|
|
- Digital audio (what did you think?)
|
|
|
|
- Incoming/outgoing calls
|
2005-07-17 19:01:14 +00:00
|
|
|
- Overlap sending (dialtone and additional digits)
|
2005-06-07 04:26:12 +00:00
|
|
|
- E(xplicit) C(all) T(ransfer) (...although it's done implicit-but don't tell!)
|
|
|
|
- Tuneable latency: you can configure the size of B3 blocks at compile time
|
2005-08-22 07:53:36 +00:00
|
|
|
(in chan_capi.h, AST_CAPI_MAX_B3_BLOCK_SIZE)
|
2005-06-07 04:26:12 +00:00
|
|
|
The default is 160 samples, for non-VoIP use you can tune it down to 130
|
|
|
|
- Use asterisks internal DSP functions for DTMF
|
|
|
|
- Alaw support
|
|
|
|
- Ulaw support!
|
2005-06-02 18:47:35 +00:00
|
|
|
- Eicon CAPI echo cancelation (echocancel=1)
|
2005-06-07 04:26:12 +00:00
|
|
|
- Reject call waiting (ACO)
|
2005-06-02 18:47:35 +00:00
|
|
|
- DID for Point to Point mode (a.k.a overlap receiving)
|
2005-06-07 04:26:12 +00:00
|
|
|
- Rx/Tx gains (rxgain=1.0)
|
|
|
|
- Call deflection on circuit busy (deflect=12345678)
|
|
|
|
- (Inter)national dialing prefix (for callerid) configurable in capi.conf
|
|
|
|
- CLI command "capi info" shows B channel status of chan_capi
|
|
|
|
The called party can press # to drop the call
|
|
|
|
- Catch all MSN (incomingmsn=*)
|
|
|
|
- Some configuration enhancements (msn=123,124,125 and controller=1,2,3,4)
|
|
|
|
- Added accountcode=
|
|
|
|
- Echo squelching (echosquelch=1)
|
|
|
|
- Callgroup support
|
2005-07-17 19:01:14 +00:00
|
|
|
- report correct DIALSTATUS and HANGUPCAUSE.
|
2005-06-07 04:26:12 +00:00
|
|
|
- Updated to support the new frame->delivery field
|
|
|
|
- Compiles with different Asterisk versions (automatic build configuration)
|
2005-08-14 12:32:18 +00:00
|
|
|
- receive faxes over CAPI (see below)
|
2005-09-11 08:39:29 +00:00
|
|
|
- Fixes and compatibility for BSD (Jan Stocker and Hans Petter Selasky)
|
2005-08-07 19:24:06 +00:00
|
|
|
- Support 'type of number'.
|
2005-09-11 08:39:29 +00:00
|
|
|
- ISDN hold.
|
2005-09-17 19:08:28 +00:00
|
|
|
- CAPI Line Interconnect.
|
2005-06-02 18:47:35 +00:00
|
|
|
|
2005-07-17 19:01:14 +00:00
|
|
|
The Dial string
|
|
|
|
===============
|
|
|
|
|
|
|
|
Example: Dial(CAPI/g<group>/<destination>[/<params>])
|
|
|
|
Or: Dial(CAPI/contr<controller>/<destination>[/<params>])
|
2005-07-27 18:17:41 +00:00
|
|
|
Or: Dial(CAPI/<interface-name>/<destination>[/<params>])
|
2005-07-03 12:15:14 +00:00
|
|
|
|
|
|
|
'group' can be a value, comma separated list of values or a range
|
|
|
|
using '-'. The according interface is found by searching a match with
|
|
|
|
the 'group' specified in the capi.conf for each interface.
|
|
|
|
|
2005-07-17 19:01:14 +00:00
|
|
|
'params' is an optional part to set special settings for this call.
|
|
|
|
The string consists of a list of characters with the following meaning:
|
|
|
|
'b' : early B3 always.
|
|
|
|
'B' : early B3 on successful calls only.
|
|
|
|
'o' : use overlap sending of number if number is longer than 2 digits
|
|
|
|
(This is useful, when further digits shall be send to complete the
|
|
|
|
destination address).
|
|
|
|
|
2005-07-27 18:17:41 +00:00
|
|
|
If the <interface-name> is used in dialstring, be sure the name (specified
|
|
|
|
in capi.conf) does not start with 'contr' or 'g'.
|
|
|
|
|
2005-07-17 19:01:14 +00:00
|
|
|
CLIP/CLIR uses the calling presentation of the calling channel, which can
|
|
|
|
be modified using the SetCallerPres() application. Use
|
|
|
|
SetCallerPres(prohib_not_screened) for CLIR. That is why the msn= param in
|
|
|
|
capi.conf has been removed. The callerID is also taken from the calling channel.
|
2005-06-02 18:47:35 +00:00
|
|
|
|
|
|
|
|
2005-08-13 18:21:20 +00:00
|
|
|
CAPI command application
|
|
|
|
========================
|
|
|
|
chan_capi provides an additional Asterisk application
|
|
|
|
capicommand()
|
|
|
|
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)
|
2005-08-14 12:32:18 +00:00
|
|
|
|
|
|
|
Fax receive:
|
|
|
|
Receive a fax using CAPI.
|
|
|
|
Example:
|
|
|
|
exten => s,1,capicommand(receivefax|/tmp/${UNIQUEID}|+49 6137 555123|Asterisk)
|
|
|
|
(more see below)
|
|
|
|
|
2005-08-14 13:59:16 +00:00
|
|
|
Enable/Disable echosquelch:
|
|
|
|
Enable or disable a very primitive echo suppressor.
|
|
|
|
Disable this before you start recording voicemail or your files may get choppy.
|
|
|
|
Example:
|
|
|
|
exten => s,1,capicommand(echosquelch|yes)
|
2005-08-14 14:57:04 +00:00
|
|
|
or
|
2005-08-14 13:59:16 +00:00
|
|
|
exten => s,1,capicommand(echosquelch|no)
|
|
|
|
|
2005-08-14 14:57:04 +00:00
|
|
|
Malicious Call Identification:
|
|
|
|
Report a call of malicious nature.
|
|
|
|
Example:
|
|
|
|
exten => s,1,capicommand(malicious)
|
|
|
|
|
2005-08-16 18:25:03 +00:00
|
|
|
Hold:
|
|
|
|
Puts an answered call on hold, this has nothing to do with asterisk's onhold
|
|
|
|
thingie (music et al).
|
2005-08-21 10:28:43 +00:00
|
|
|
An optional parameter is the name of the variable which shall be set with
|
|
|
|
the reference ID of the call on hold.
|
2005-08-16 18:25:03 +00:00
|
|
|
Example:
|
|
|
|
exten => s,1,capicommand(hold)
|
2005-08-21 10:28:43 +00:00
|
|
|
or
|
|
|
|
exten => s,1,capicommand(hold|MYHOLDVAR)
|
2005-08-13 18:21:20 +00:00
|
|
|
|
2005-08-25 19:30:31 +00:00
|
|
|
Holdtype:
|
|
|
|
Set 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
|
|
|
|
or
|
|
|
|
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
|
|
|
|
|
|
|
|
|
2005-08-16 18:25:03 +00:00
|
|
|
Retrieve:
|
2005-08-21 10:28:43 +00:00
|
|
|
Gets back the holded call. An optional parameter is the reference ID of the call
|
|
|
|
on hold.
|
2005-08-16 18:25:03 +00:00
|
|
|
Example:
|
|
|
|
exten => s,1,capicommand(retrieve)
|
2005-08-21 10:28:43 +00:00
|
|
|
or
|
|
|
|
exten => s,1,capicommand(retrieve|${MYHOLDVAR})
|
2005-08-13 18:21:20 +00:00
|
|
|
|
2005-08-21 15:35:44 +00:00
|
|
|
ECT:
|
|
|
|
Explicit call transfer of the call on hold (must put call on hold first!)
|
|
|
|
Example:
|
|
|
|
exten => s,1,capicommand(ect|${MYHOLDVAR})
|
|
|
|
or
|
|
|
|
[macro-capiect]
|
|
|
|
exten => s,1,capicommand(ect)
|
|
|
|
[default]
|
|
|
|
exten => s,1,capicommand(hold)
|
2005-09-16 12:38:16 +00:00
|
|
|
exten => s,2,Wait(1)
|
|
|
|
exten => s,3,Dial(CAPI/contr1/1234,60,M(capiect))
|
2005-06-02 18:47:35 +00:00
|
|
|
|
|
|
|
|
|
|
|
Using CLIR
|
|
|
|
==========
|
2005-07-13 15:07:31 +00:00
|
|
|
Use the SetCallerPres() application before you dial:
|
|
|
|
exten => _X.,1,SetCallerPres(prohib_not_screened)
|
|
|
|
exten => _X.,2,Dial(CAPI/contr1/${EXTEN})
|
|
|
|
|
2005-06-02 18:47:35 +00:00
|
|
|
|
|
|
|
Enjoying early B3 connects (inband call progress, tones and announcements)
|
|
|
|
==========================================================================
|
2005-07-17 19:01:14 +00:00
|
|
|
Early B3 is configurable in the dialstring parameters.
|
|
|
|
If you set a 'b', early B3 will always be used, also if the call fails,
|
|
|
|
because the number is unprovisioned, etc ...
|
|
|
|
If you set a 'B', early B3 will only be used on successful calls,
|
2005-06-07 04:26:12 +00:00
|
|
|
giving you ring indication,etc...
|
|
|
|
|
|
|
|
Don't use indications in the Dial command, your local exchange will do that for
|
|
|
|
you:
|
2005-07-17 19:01:14 +00:00
|
|
|
exten => _X.,1,Dial(CAPI/contr1/${EXTEN}/B,30)
|
2005-06-07 04:26:12 +00:00
|
|
|
(early B3 on success)
|
|
|
|
|
2005-07-17 19:01:14 +00:00
|
|
|
exten => _X.,1,Dial(CAPI/contr1/${EXTEN}/b,30)
|
2005-06-07 04:26:12 +00:00
|
|
|
(always early B3)
|
|
|
|
|
|
|
|
exten => _X.,1,Dial(CAPI/contr1/${EXTEN},30,r)
|
|
|
|
(no early B3, fake ring indication)
|
|
|
|
|
2005-07-17 19:01:14 +00:00
|
|
|
exten => _X.,1,Dial(CAPI/contr1/${EXTEN}/b,30,r)
|
2005-06-07 04:26:12 +00:00
|
|
|
(always early B3, fake indicatons if the exchange does not give us
|
|
|
|
indications)
|
|
|
|
|
2005-07-17 19:01:14 +00:00
|
|
|
exten => _X.,1,Dial(CAPI/contr1/${EXTEN}/B,30,r)
|
2005-06-07 04:26:12 +00:00
|
|
|
(early B3 on success, fake indicatons if the exchange does not give us
|
|
|
|
indications)
|
2005-06-02 18:47:35 +00:00
|
|
|
|
|
|
|
For normal PBX usage you would use the "b" option, always early B3.
|
|
|
|
|
|
|
|
Overlap sending (a.k.a. real dialtone)
|
|
|
|
======================================
|
2005-06-07 04:26:12 +00:00
|
|
|
When you dial an empty number, and have early B3 enabled, with:
|
2005-07-17 19:01:14 +00:00
|
|
|
Dial(CAPI/g1//b)
|
2005-06-07 04:26:12 +00:00
|
|
|
The channel will come up at once and give you the dialtone it gets from the
|
|
|
|
local exchange.
|
|
|
|
At this point the channel is like a legacy phone, now you can send DTMF digits
|
|
|
|
to dial.
|
2005-06-02 18:47:35 +00:00
|
|
|
|
|
|
|
Example context for incoming calls on MSN 12345678:
|
|
|
|
===================================================
|
|
|
|
|
|
|
|
[capi-in]
|
|
|
|
exten => 12345678,1,Dial(SIP/phone1)
|
|
|
|
exten => 12345678,2,Hangup
|
|
|
|
|
2005-08-14 12:32:18 +00:00
|
|
|
|
|
|
|
Short HOWTO of capicommand(receivefax|<filename>[|<stationid>|<headline>]):
|
|
|
|
==========================================================================
|
2005-06-07 04:26:12 +00:00
|
|
|
For those of you who have a CAPI card with an on-board DSP (like some Eicon and
|
|
|
|
DIVA Server), this patch allows you to receive faxes.
|
2005-08-14 12:32:18 +00:00
|
|
|
If you want to answer a channel in fax mode, use capicommand(receivefax|...)
|
|
|
|
instead of Answer()
|
2005-06-07 04:26:12 +00:00
|
|
|
If you use Answer(), you will be in voice mode. If the hardware DSP detects
|
2005-08-14 12:32:18 +00:00
|
|
|
fax tone, you can switch from voice to fax mode by calling capicommand(receivefax|...).
|
|
|
|
The parameter <filename> is mandatory and the parameters <stationid> and
|
|
|
|
<headline> are optional.
|
2005-06-04 14:28:52 +00:00
|
|
|
|
|
|
|
Example of use :
|
|
|
|
line number 123, play something, if a fax tone is detected, handle it
|
|
|
|
line number 124, answer directly in fax mode
|
|
|
|
|
|
|
|
[incoming]
|
|
|
|
exten => 123,1,Answer()
|
|
|
|
exten => 123,2,BackGround(jpop)
|
|
|
|
exten => 124,1,Goto(handle_fax,s,1)
|
|
|
|
exten => fax,1,Goto(handle_fax,s,1)
|
|
|
|
|
|
|
|
[handle_fax]
|
2005-08-14 12:32:18 +00:00
|
|
|
exten => s,1,capicommand(receivefax|/tmp/${UNIQUEID}[|<stationid>|<headline>])
|
2005-06-04 14:28:52 +00:00
|
|
|
exten => s,2,Hangup()
|
|
|
|
exten => h,1,deadagi,fax.php // Run sfftobmp and mail it.
|
|
|
|
|
2005-08-14 12:32:18 +00:00
|
|
|
The output of capicommand(receivefax|...) is a SFF file.
|
|
|
|
Use sfftobmp to convert it.
|
2005-06-07 04:26:12 +00:00
|
|
|
With a DIVA Server, following features are provided:
|
|
|
|
- fax up to 33600
|
|
|
|
- high resolution
|
|
|
|
- Color Fax
|
2005-07-17 19:01:14 +00:00
|
|
|
- JPEG Compression is disabled (not tested yet)
|
2005-06-02 18:47:35 +00:00
|
|
|
|
2005-08-25 17:35:21 +00:00
|
|
|
|
|
|
|
Asterisk variables used/set by chan_capi
|
|
|
|
========================================
|
|
|
|
|
|
|
|
CALLEDTON
|
|
|
|
The 'type of number' value of the called number is saved in this variable on
|
|
|
|
incomming call.
|
|
|
|
|
|
|
|
_CALLERHOLDID
|
|
|
|
If a call is put on hold (ISDN-HOLD), the reference id is saved in this variable.
|
|
|
|
This variable is inherited as CALLERHOLDID to the dialed channel and will be used
|
|
|
|
if e.g. capicommand(ect) is used to transfer the held call.
|
|
|
|
|
|
|
|
CONNECTEDNUMBER
|
|
|
|
Can be set before answering and if set, the content is used for
|
|
|
|
IE 'Connected Number' on answering.
|
|
|
|
|
|
|
|
FAXEXTEN
|
|
|
|
If chan_capi sends the call to extensions 'fax', the original extension number
|
|
|
|
is saved in this variable.
|
|
|
|
|
|
|
|
PRI_CAUSE
|
|
|
|
If set, this value will be used as hangup cause on hangup.
|
|
|
|
|
|
|
|
REDIRECTINGNUMBER
|
|
|
|
On incoming call, if the call was redirected to you by someone, the
|
|
|
|
number of the redirecting party is saved in this variable.
|
|
|
|
|
2005-08-28 14:14:23 +00:00
|
|
|
REDIRECTREASON
|
|
|
|
If the incoming call was redirected to you, this variable is set
|
|
|
|
with the reason value.
|
|
|
|
|
2005-09-10 14:17:50 +00:00
|
|
|
CALLINGSUBADDRESS
|
|
|
|
If set on dial(), the calling subaddress will be set to the content.
|
2005-08-25 17:35:21 +00:00
|
|
|
|
2005-09-10 14:17:50 +00:00
|
|
|
CALLEDSUBADDRESS
|
|
|
|
If set on dial(), the called subaddress will be set to the content.
|
2005-09-17 10:49:34 +00:00
|
|
|
|
|
|
|
|
|
|
|
Functions (available with newer Asterisk only)
|
|
|
|
==============================================
|
|
|
|
|
|
|
|
VANITYNUMBER(<vanitynumber>)
|
|
|
|
Converts the 'vanitynumber' into a digit-only string. International keypad is
|
|
|
|
used, e.g. ABC=1, DEF=2, ...
|
|
|
|
|
|
|
|
|
|
|
|
|