git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@267181 65c4cc65-6c06-0410-ace0-fbb531ad65f3
190 lines
8.2 KiB
Text
190 lines
8.2 KiB
Text
================
|
|
Advice of Charge
|
|
================
|
|
|
|
Written by: David Vossel
|
|
Initial version: 04-19-2010
|
|
Email: dvossel@digium.com
|
|
|
|
This document is designed to give an overview of how to configure and
|
|
generate Advice of Charge along with a detailed explanation of how each
|
|
option works.
|
|
|
|
--------------------------------------
|
|
| READ THIS FIRST |
|
|
--------------------------------------
|
|
PLEASE REPORT ANY ISSUES ENCOUNTERED WHILE USING AOC. This feature
|
|
has had very little community feedback so far. If you are using this
|
|
feature please share with us any problems you are having and any
|
|
improvements that could make this feature more useful. Thank you!
|
|
|
|
--------------------------------------
|
|
| Terminology |
|
|
--------------------------------------
|
|
AOC: Advice of Charge
|
|
|
|
AOC-S: Advice of Charge message sent at the beginning of a call during
|
|
call setup. This message contains a list of rates associated with the
|
|
call.
|
|
|
|
AOC-D: Advice of Charge message sent during the call. This message
|
|
is typically used to update the endpoint with the current call charge.
|
|
|
|
AOC-E: Advice of Charge message sent at the end of a call. This
|
|
message is used to indicate to the endpoint the final call charge.
|
|
|
|
AMI: Asterisk Manager Interface. This interface is used to generate
|
|
AOC messages and listen for AOC events.
|
|
|
|
--------------------------------------
|
|
| AOC in chan_dahdi |
|
|
--------------------------------------
|
|
----- LibPRI Support:
|
|
ETSI, or euroisdn, is the only switchtype that LibPRI currently supports
|
|
for AOC.
|
|
|
|
----- Enable AOC Pass-through in chan_dahdi
|
|
To enable AOC pass-through between the ISDN and Asterisk use the
|
|
'aoc_enable' config option. This option allows for any combination
|
|
of AOC-S, AOC-D, and AOC-E to be enabled or disabled.
|
|
|
|
For example:
|
|
aoc_enable=s,d,e ; enables pass-through of AOC-S, AOC-D, and AOC-E
|
|
|
|
aoc_enable=s,d ; enables pass-through of AOC-S and AOC-D. Rejects
|
|
; AOC-E and AOC-E request messages
|
|
|
|
Since AOC messages are often transported on facility messages, the
|
|
'facilityenable' option must be enabled as well to fully support AOC
|
|
pass-through.
|
|
|
|
----- Handling AOC-E in chan_dahdi
|
|
Whenever a dahdi channel receives an AOC-E message from Asterisk, it
|
|
stores that message to deliver it at the appropriate time during call
|
|
termination. This means that if two AOC-E messages are received on the
|
|
same call, the last one will override the first one and only one AOC-E
|
|
message will be sent during call termination.
|
|
|
|
There are some tricky situations involving the final AOC-E message. During
|
|
a bridged call, if the endpoint receiving the AOC messages terminates
|
|
the call before the endpoint delivering the AOC does, the final AOC-E
|
|
message sent by the sending side during termination will never make it to
|
|
the receiving end because Asterisk will have already torn down that channel.
|
|
This is where the chan_dahdi.conf 'aoce_delayhangup' option comes into play.
|
|
|
|
By enabling 'aoce_delayhangup', anytime a hangup is initiated by the
|
|
ISDN side of an Asterisk channel, instead of hanging up the channel,
|
|
the channel sends a unique internal AOC-E termination request to its bridge
|
|
channel. This indicates it is about to hangup and wishes to receive the
|
|
final AOC-E message from the bridged channel before completely tearing
|
|
down. If the bridged channel knows what to do with this AOC-E termination
|
|
request, it will do whatever is necessary to indicate to its endpoint that
|
|
the call is being terminated without actually hanging up the Asterisk channel.
|
|
This allows the final AOC-E message to come in and be sent across the bridge
|
|
while both channels are still up. If the channel delaying its hangup for
|
|
the final AOC-E message times out, the call will be torn down just as it
|
|
normally would. In chan_dahdi the timeout period is 1/2 the T305 timer
|
|
which by default is 15 seconds.
|
|
|
|
'aoce_delayhangup' currently only works when both bridged channels are
|
|
dahdi_channels. If a SIP channel receives an AOC-E termination request, it
|
|
just responds by immediately hanging up the channel. Using this option when
|
|
bridged to any channel technology besides SIP or DAHDI will result in the
|
|
15 second timeout period before tearing down the call completely.
|
|
|
|
----- Requesting AOC services
|
|
AOC can be requested on a call by call basis using the DAHDI dialstring
|
|
option, A(). The A() option takes in 's', 'd', and 'e' parameters which
|
|
represent the three types of AOC messages, AOC-S, AOC-D, and AOC-E. By using
|
|
this option Asterisk will indicate to the endpoint during call setup that it
|
|
wishes to receive the specified forms of AOC during the call.
|
|
|
|
Example Usage in extensions.conf
|
|
exten => 1111,1,Dial(DAHDI/g1/1112/A(s,d,e) ; requests AOC-S, AOC-D, and AOC-E on
|
|
; call setup
|
|
exten => 1111,1,Dial(DAHDI/g1/1112/A(d,e) ; requests only AOC-D, and AOC-E on
|
|
; call setup
|
|
|
|
--------------------------------------
|
|
| AOC in chan_sip |
|
|
--------------------------------------
|
|
Asterisk supports a very basic way of sending AOC on a SIP channel to Snom
|
|
phones using an AOC specification designed by Snom. This support is limited
|
|
to the sending of AOC-D and AOC-E pass-through messages. No support for
|
|
AOC-E on call termination is present, so if the Snom endpoint receiving the
|
|
AOC messages from Asterisk terminates the call, the channel will be torn
|
|
down before the phone can receive the final AOC-E message.
|
|
|
|
To enable passthrough of AOC messages via the snom specification, use
|
|
the 'snom_aoc_enabled' option in sip.conf.
|
|
|
|
--------------------------------------
|
|
| Generate AOC Messages via AMI |
|
|
--------------------------------------
|
|
Asterisk supports a way to generate AOC messages on a channel via
|
|
the AMI action AOCMessage. At the moment the AOCMessage action is limited
|
|
to AOC-D and AOC-E message generation. There are some limitations
|
|
involved with delivering the final AOC-E message as well. The AOCMessage
|
|
action has its own detailed parameter documentation so this discussion will
|
|
focus on higher level use. When generating AOC messages on a Dahdi channel
|
|
first make sure the appropriate chan_dahdi.conf options are enabled. Without
|
|
enabling 'aoc_enable' correctly for pass-through the AOC messages will never
|
|
make it out the pri. The same goes with SIP, the 'snom_aoc_enabled' option
|
|
must be configured before messages can successfully be set to the endpoint.
|
|
|
|
----- AOC-D Message Generation
|
|
AOC-D message generation can happen anytime throughout the call. This
|
|
message type is very straight forward.
|
|
|
|
Example: AOCMessage action generating AOC-D currency message with Success
|
|
response.
|
|
|
|
Action: AOCMessage
|
|
Channel: DAHDI/i1/1111-1
|
|
MsgType: d
|
|
ChargeType: Currency
|
|
CurrencyAmount: 16
|
|
CurrencyName: USD
|
|
CurrencyMultiplier: OneThousandth
|
|
AOCBillingId: Normal
|
|
ActionID: 1234
|
|
|
|
Response: Success
|
|
ActionID: 1234
|
|
Message: AOC Message successfully queued on channel
|
|
|
|
----- AOC-E Message Generation
|
|
AOC-E messages are sent during call termination and represent the final charge
|
|
total for the call. Since Asterisk call termination results in the channel
|
|
being destroyed, it is currently not possible for the AOCMessage AMI action to
|
|
be used to send the final AOC-E message on call hangup. There is however a
|
|
work around for this issue that can be used for Dahdi channels. By default
|
|
chan_dahdi saves any AOC-E message it receives from Asterisk during a call and
|
|
waits to deliver that message during call termination. If multiple AOC-E messages
|
|
are received from Asterisk on the same Dahdi channel, only the last message received
|
|
is stored for delivery. This means that each new AOC-E message received on the
|
|
channel overrides the previous one. Knowing this the final AOC-E message can be
|
|
continually updated on a Dahdi channel until call termination occurs allowing
|
|
the last update to be sent on hangup. This method is only as accurate as the
|
|
intervals in which it is updated, but allows some form of AOC-E to be generated.
|
|
|
|
Example: AOCMessage action generating AOC-E unit message with Success response.
|
|
|
|
Action: AOCMessage
|
|
Channel: DAHDI/i1/1111-1
|
|
MsgType: e
|
|
ChargeType: Unit
|
|
UnitAmount(0): 111
|
|
UnitType(0): 6
|
|
UnitAmount(1): 222
|
|
UnitType(1): 5
|
|
UnitAmount(2): 333
|
|
UnitType(3): 4
|
|
UnitAmount(4): 444
|
|
AOCBillingId: Normal
|
|
ActionID: 1234
|
|
|
|
Response: Success
|
|
ActionID: 1234
|
|
Message: AOC Message successfully queued on channel
|