402 lines
15 KiB
Raw Normal View History

2005-11-20 16:15:33 +00:00
(CAPI*) chan_capi a Common ISDN API 2.0 implementation
for Asterisk/OpenPBX
2005-06-02 18:47:35 +00:00
2007-02-11 14:51:30 +00:00
Copyright (C) 2005-2007 Cytronics & Melware
2005-06-02 18:47:35 +00:00
Armin Schindler <>
Reworked, but based on the work of
Copyright (C) 2002-2005 Junghanns.NET GmbH
Klaus-Peter Junghanns <>
2005-11-20 16:15:33 +00:00
Ported to 22nd October 2004,
Rob Thomas, <>
2005-06-02 18:47:35 +00:00
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!
Thanks go to the debuggers, bugfixers and contributors :)
2005-06-02 18:47:35 +00:00
Lele Forzani <>
Florian Overkamp <>
Gareth Watts <>
Jeff Noxon <>
Petr Michalek <>
Jan Stocker
Frank Sautter, levigo group
Hans Petter Selasky
2006-12-18 22:18:16 +00:00
Simon Peter <>
(...and all the others that have been forgotten...) :-)
2005-06-02 18:47:35 +00:00
No support for Asterisk 1.0.x any more, you need at least
Asterisk 1.2.x
To support all fax features (e.g. fax polling), you
need version 3 of libcapi20.
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)
2006-12-18 22:18:16 +00:00
- Supplementary services: CD (deflect/reroute),HOLD,RETRIEVE,ECT,3PTY
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
- 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!)
- 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)
- Rx/Tx gains using positive linar value (rxgain=1.0, txgain=1.0 means no change)
2005-06-07 04:26:12 +00:00
- (Inter)national dialing prefix (for callerid) configurable in capi.conf
- CLI command "capi info" shows B channel status of chan_capi
- Catch all MSN (incomingmsn=*)
- Some configuration enhancements (msn=123,124,125)
2005-06-07 04:26:12 +00:00
- Added accountcode=
- Echo squelching (echosquelch=1)
- Callgroup support
- 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)
- receive/send faxes over CAPI (see below)
- Fixes and compatibility for BSD (Jan Stocker and Hans Petter Selasky)
- Support 'type of number'.
- ISDN hold.
- CAPI Line Interconnect.
- Eicon DIVA Server VoIP/RTP
- CLI command "capi show channels" shows details on channel status.
- Asterisk 1.4 jitterbuffer configuration.
- some QSIG extensions (see README.qsig)
2005-06-02 18:47:35 +00:00
2005-11-20 16:15:33 +00:00
===========, by default, runs as the non-root user/group
openpbx/openpbx. You must make sure that the /dev/capi* device files
are readable by either by changing the ownership or the
permissions of the the device files or by running as root.
The Dial string
Example: Dial(CAPI/g<group>/[<callerid>:]<destination>[/<params>])
Or: Dial(CAPI/contr<controller>/[<callerid>:]<destination>[/<params>])
Or: Dial(CAPI/<interface-name>/[<callerid>:]<destination>[/<params>])
'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.
The optional <callerid> followed by an ':' can be used to set a callerid
for this dial() command, without changing the original channel's callerid.
'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.
'd' : use the default caller id which is set by defaultcid= in capi.conf
'o' : use overlap sending of number.
(Useful if additional digits shall be send afterwards or together
with 'b' to get dialtone and then send the number, e.g. if otherwise
no progress tones are available)
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'.
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
CAPI command application
chan_capi provides an additional Asterisk application
With this application, special capi commands and features can be used.
Call Deflection:
Forwards an unanswered call to another number.
exten => s,1,capicommand(deflect|12345678)
Fax receive:
Receive a fax using CAPI.
2007-04-05 19:34:21 +00:00
exten => s,1,capicommand(receivefax|/tmp/${UNIQUEID}|+49 6137 555123|Asterisk|k)
(more see below)
Fax send:
Send a fax using CAPI.
exten => s,1,capicommand(sendfax|/path/to/faxfile.sff|+49 6137 555123|Asterisk)
(more see below)
Enable/Disable echosquelch:
Enable or disable a very primitive echo suppressor.
Disable this before you start recording voicemail or your files may get choppy.
exten => s,1,capicommand(echosquelch|yes)
2005-08-14 14:57:04 +00:00
exten => s,1,capicommand(echosquelch|no)
Enable/Disable echocancel:
Enable or disable echo-cancel provided by CAPI driver/hardware.
You may need to disable echo-cancel when e.g. data/fax transmission handled
by non-CAPI application. After hangup, this setting is restored to value
set in capi.conf.
exten => s,1,capicommand(echocancel|yes)
exten => s,1,capicommand(echocancel|no)
2005-08-14 14:57:04 +00:00
Malicious Call Identification:
Report a call of malicious nature.
exten => s,1,capicommand(malicious)
Puts an answered call on hold, this has nothing to do with asterisk's onhold
thingie (music et al).
An optional parameter is the name of the variable which shall be set with
the reference ID of the call on hold.
exten => s,1,capicommand(hold)
exten => s,1,capicommand(hold|MYHOLDVAR)
Set the type of 'hold'. When Asterisk wants to put the call on hold, the specified method
will be used.
exten => s,1,capicommand(holdtype|local) ;no hold, Asterisk can play MOH
exten => s,1,capicommand(holdtype|hold) ;ISDN-HOLD
; not yet implemented
exten => s,1,capicommand(holdtype|notify) ;notify the peer only, Asterisk can play MOH
Gets back the holded call. An optional parameter is the reference ID of the call
on hold.
exten => s,1,capicommand(retrieve)
exten => s,1,capicommand(retrieve|${MYHOLDVAR})
Explicit call transfer of the call on hold (must put call on hold first!)
exten => s,1,capicommand(ect|${MYHOLDVAR})
exten => s,1,capicommand(ect)
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
2006-12-18 22:18:16 +00:00
Initiate a Three-Party Conference (must have one call on hold and one active call!).
exten => s,1,capicommand(3pty_begin|${MYHOLDVAR})
exten => s,1,capicommand(3pty_begin)
exten => s,1,capicommand(hold)
exten => s,2,Dial(CAPI/contr1/1234,,M(capi3pty))
2005-06-02 18:47:35 +00:00
Using CLIR
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)
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
exten => _X.,1,Dial(CAPI/contr1/${EXTEN}/B,30)
2005-06-07 04:26:12 +00:00
(early B3 on success)
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)
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
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
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-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:
exten => 12345678,1,Dial(SIP/phone1)
exten => 12345678,2,Hangup
Short HOWTO of capicommand(receivefax...) and capicommand(sendfax...):
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 allows you to receive/send faxes.
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
fax tone, you can switch from voice to fax mode by calling capicommand(receivefax|...).
The parameter <filename> is mandatory and the parameters <stationid>,
<headline> and <options> 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 <options>:
2006-05-27 12:52:28 +00:00
To enable fax tone detection and redirect to extension 'fax', use config variable
'faxdetect' in capi.conf.
Example of use :
line number 123, play something, if a fax tone is detected, handle it
line number 124, answer directly in fax mode
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)
exten => s,1,capicommand(receivefax|/tmp/${UNIQUEID}[|<stationid>|<headline>|<options>])
exten => s,2,Hangup()
exten => h,1,deadagi,fax.php // Run sfftobmp and mail it.
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
- JPEG Compression is disabled (not tested yet)
2005-06-02 18:47:35 +00:00
To send a fax, you can use the same mechanism like with receivefax.
Just replace the <filename> with the path to the .SFF file to send.
After disconnect of a fax connection, the following variables
will be set for that channel:
FAXSTATUS : 0 = OK, 1 = Error.
FAXREASON : Value of B3 disconnect reason.
FAXREASONTEXT : Decoded text of FAXREASON value.
FAXRATE : The baud rate of the fax connection.
FAXRESOLUTION : 0 = standard, 1 = high.
FAXPAGES : Number of pages received.
FAXID : The ID of the remote fax maschine.
2005-08-25 17:35:21 +00:00
CLI command "capi show channels"
This CLI command shows detailed info on all CAPI channels.
Column description:
Line-Name : the name of the interface as defined in capi.conf
NTmode : is the line in NT mode instead fo TE mode
state : the state of the channel, like 'Conn', 'Disc', 'Dial', ...
i/o : incoming or outgoing line
bproto : protocol on CAPI ('fax', 'trans' or 'rtp')
isdnstate : a string which may consists of the following characters
* = PBX is active
G = Line-Interconnect (CAPI bridge) active
B = b-channel is up
b = b-channel is requested
P = Progress was signaled
H = this line is on hold
T = this line is in transfer (ECT) mode
S = SETUP[_ACK] was signaled
ton : type of number value
number : the caller-number and destination-number
2005-08-25 17:35:21 +00:00
Asterisk variables used/set by chan_capi
On incomming call, this variable is set with the B-channel information value:
'0' : B-channel is used (default)
'1' : D-channel is used (not implemented yet)
'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|<number>) to initiate call deflection to another destination.
2005-08-25 17:35:21 +00:00
The 'type of number' value of the called number is saved in this variable on
incomming call.
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.
If set on dial(), the calling subaddress will be set to the content.
If set on dial(), the called subaddress will be set to the content.
2005-08-25 17:35:21 +00:00
Can be set before answering and if set, the content is used for
IE 'Connected Number' on answering.
If chan_capi sends the call to extensions 'fax', the original extension number
is saved in this variable.
If set, this value will be used as hangup cause on hangup.
On incoming call, if the call was redirected to you by someone, the
number of the redirecting party is saved in this variable.
RDNIS is set as well.
2005-08-25 17:35:21 +00:00
If the incoming call was redirected to you, this variable is set
with the reason value.
If an outgoing call is redirected, this variable may be set to the
new destination.