mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 10:47:18 +00:00 
			
		
		
		
	git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@267181 65c4cc65-6c06-0410-ace0-fbb531ad65f3
		
			
				
	
	
		
			190 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			190 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ================
 | |
| 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
 |