There are a number of variables that are defined or read by Asterisk. Here is a list of them. More information is available in each application’s help text. All these variables are in UPPER CASE only.
To display all channel variable use this command:
DumpChan([<min_verbose_level>])
Variables marked with a * are builtin functions and can’t be set, only read in the dialplan. Writes to such variables are silently ignored.
Asterisk standard channel variables:
- ${ACCOUNTCODE} * Account code (if specified) (Deprecated; use ${CDR(accountcode)})
- ${BLINDTRANSFER} The name of the channel on the other side of a blind transfer
- ${BRIDGEPEER} Bridged peer
- ${CALLERANI} * Caller ANI (PRI channels) (Deprecated; use ${CALLERID(ani)})
- ${CALLERID} * Caller ID (Deprecated; use ${CALLERID(all)})
- ${CALLERIDNAME} * Caller ID Name only (Deprecated; use ${CALLERID(name)})
- ${CALLERIDNUM} * Caller ID Number only (Deprecated; use ${CALLERID(num)})
- ${CALLINGANI2} * Caller ANI2 (PRI channels)
- ${CALLINGPRES} * Caller ID presentation for incoming calls (PRI channels)
- ${CALLINGTNS} * Transit Network Selector (PRI channels)
- ${CALLINGTON} * Caller Type of Number (PRI channels)
- ${CHANNEL} * Current channel name
- ${CONTEXT} * Current context
- ${DATETIME} * Current date time in the format: DDMMYYYY-HH:MM:SS (Deprecated; use ${STRFTIME(${EPOCH},,%d%m%Y-%H:%M:%S)})
- ${DB_RESULT} Result value of DB_EXISTS() dial plan function
- ${DNID} * Dialed Number Identifier (Deprecated; use ${CALLERID(dnid)})
- ${EPOCH} * Current unix style epoch
- ${EXTEN} * Current extension
- ${ENV(VAR)} Environmental variable VAR
- ${GOTO_ON_BLINDXFR} Transfer to the specified context/extension/priority after a blind transfer (use ^ characters in place of | to separate context/extension/priority when setting this variable from the dialplan)
- ${HANGUPCAUSE} * Asterisk cause of hangup (inbound/outbound)
- ${HINT} * Channel hints for this extension
- ${HINTNAME} * Suggested Caller*ID name for this extension
- ${INVALID_EXTEN} The invalid called extension (used in the “i” extension)
- ${LANGUAGE} * Current language (Deprecated; use ${LANGUAGE()})
- ${LEN(VAR)} * String length of VAR (integer)
- ${PRIORITY} * Current priority in the dialplan
- ${PRIREDIRECTREASON} Reason for redirect on PRI, if a call was directed
- ${RDNIS} * Redirected Dial Number ID Service (Deprecated; use ${CALLERID(rdnis)})
- ${TIMESTAMP} * Current date time in the format: YYYYMMDD-HHMMSS (Deprecated; use
- ${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)})
- ${TRANSFER_CONTEXT} Context for transferred calls
- ${FORWARD_CONTEXT} Context for forwarded calls
- ${UNIQUEID} * Current call unique identifier
- ${SYSTEMNAME} * value of the systemname option of asterisk.conf~/pp~
Application return values:
In Asterisk 1.2, many applications return the result in a variable instead of, as in Asterisk 1.0, changing the dial plan priority (+101). For the various status values, see each application’s help text.
- ${AGISTATUS} * agi()
- ${AQMSTATUS} * addqueuemember()
- ${AVAILSTATUS} * chanisavail()
- ${CHECKGROUPSTATUS} * checkgroup()
- ${CHECKMD5STATUS} * checkmd5()
- ${CPLAYBACKSTATUS} * controlplayback()
- ${DIALSTATUS} * dial() – see also ${HANGUPCAUSE}
- ${DBGETSTATUS} * dbget()
- ${ENUMSTATUS} * enumlookup()
- ${HASVMSTATUS} * hasnewvoicemail()
- ${LOOKUPBLSTATUS} * lookupblacklist()
- ${OSPAUTHSTATUS} * ospauth()
- ${OSPLOOKUPSTATUS} * osplookup()
- ${OSPNEXTSTATUS} * ospnext()
- ${OSPFINISHSTATUS} * ospfinish()
- ${PARKEDAT} * parkandannounce()
- ${PLAYBACKSTATUS} * playback()
- ${PQMSTATUS} * pausequeuemember()
- ${PRIVACYMGRSTATUS} * privacymanager()
- ${QUEUESTATUS} * queue()
- ${RQMSTATUS} * removequeuemember()
- ${SENDIMAGESTATUS} * sendimage()
- ${SENDTEXTSTATUS} * sendtext()
- ${SENDURLSTATUS} * sendurl()
- ${SYSTEMSTATUS} * system()
- ${TRANSFERSTATUS} * transfer()
- ${TXTCIDNAMESTATUS} * txtcidname()
- ${UPQMSTATUS} * unpausequeuemember()
- ${VMSTATUS} * voicmail()
- ${VMBOXEXISTSSTATUS} * vmboxexists()
- ${WAITSTATUS} * waitforsilence()
Various application variables:
- ${CURL} * Resulting page content for curl()
- ${ENUM} * Result of application EnumLookup
- ${EXITCONTEXT} Context to exit to in IVR menu (app background()) or in the RetryDial() application
- ${MONITOR} * Set to “TRUE” if the channel is/has been monitored (app monitor())
- ${MONITOR_EXEC} Application to execute after monitoring a call
- ${MONITOR_EXEC_ARGS} Arguments to application
- ${MONITOR_FILENAME} File for monitoring (recording) calls in queue
- ${QUEUE_PRIO} Queue priority
- ${QUEUE_MAX_PENALTY} Maximum member penalty allowed to answer caller
- ${QUEUESTATUS} Status of the call, one of: (TIMEOUT | FULL | JOINEMPTY | LEAVEEMPTY | JOINUNAVAIL | LEAVEUNAVAIL)
- ${RECORDED_FILE} * Recorded file in record()
- ${TALK_DETECTED} * Result from talkdetect()
- ${TOUCH_MONITOR} The filename base to use with Touch Monitor (auto record)
- ${TOUCH_MONITOR_FORMAT} The audio format to use with Touch Monitor (auto record)
- ${TOUCH_MONITOR_OUTPUT} * Recorded file from Touch Monitor (auto record)
- ${TXTCIDNAME} * Result of application TXTCIDName
- ${VPB_GETDTMF} chan_vpb
MeetMe Conference Bridge variables:
- ${MEETME_RECORDINGFILE} Name of file for recording a conference with the “r” option
- ${MEETME_RECORDINGFORMAT} Format of file to be recorded
- ${MEETME_EXIT_CONTEXT} Context for exit out of meetme meeting
- ${MEETME_AGI_BACKGROUND} AGI script for Meetme (zap only)
- ${MEETMESECS} * Number of seconds a user participated in a MeetMe conference
VoiceMail() application variables:
- ${VM_CATEGORY} * Sets voicemail category
- ${VM_NAME} * Full name in voicemail
- ${VM_MAILBOX} * Mailbox Number
- ${VM_DUR} * Voicemail duration
- ${VM_MSGNUM} * Number of voicemail message in mailbox
- ${VM_CALLERID} * Voicemail Caller ID (Person leaving vm)
- ${VM_CIDNAME} * Voicemail Caller ID Name
- ${VM_CIDNUM} * Voicemail Caller ID Number
- ${VM_DATE} * Voicemail Date
- ${VM_MESSAGEFILE} * Path to message left by caller
VMAuthenticate() variables:
- ${AUTH_MAILBOX} * Authenticated mailbox
- ${AUTH_CONTEXT} * Authenticated mailbox context
DUNDiLookup() variables:
- ${DUNDTECH} * The Technology of the result from a call to DUNDiLookup()
- ${DUNDDEST} * The Destination of the result from a call to DUNDiLookup()
Zaptel channel variables:
- ${ANI2} * The ANI2 Code provided by the network on the incoming call. (ie, Code 29 identifies call as a Prison/Inmate Call)
- ${CALLTYPE} * Type of call (Speech, Digital, etc)
- ${CALLEDTON} * Dialplan for called number on PRI/BRI calls (17=international, 33=national, 65=local, 73=private, 0=unknown). Note: this is a misnomer, TON != dialplan.
- ${CALLINGSUBADDR} * Called PRI Subaddress
- ${FAXEXTEN} * The extension called before being redirected to “fax”
- ${PRIREDIRECTREASON} * Reason for redirect, if a call was directed
- ${SMDI_VM_TYPE} * When an call is received with an SMDI message, the ‘type’ of message ‘b’ or ‘u’
SIP channel variables:
- ${SIPCALLID} * SIP Call-ID: header verbatim (for logging or CDR matching)
- ${SIPDOMAIN} * SIP destination domain of an inbound call (if appropriate)
- ${SIPUSERAGENT} * SIP user agent (This doesn’t work in 1.8(+?))
- ${SIPURI} * SIP uri
- ${SIP_CODEC} Set the SIP codec for a call
- ${SIP_URI_OPTIONS} * additional options to add to the URI for an outgoing call
- ${RTPAUDIOQOS} RTCP QoS report for the audio of this call
- ${RTPVIDEOQOS} RTCP QoS report for the video of this call
Agent channel variables:
- ${AGENTMAXLOGINTRIES} Set the maximum number of failed logins
- ${AGENTUPDATECDR} Whether to update the CDR record with Agent channel data
- ${AGENTGOODBYE} Sound file to use for “Good Bye” when agent logs out
- ${AGENTACKCALL} Whether the agent should acknowledge the incoming call
- ${AGENTAUTOLOGOFF} Auto logging off for an agent
- ${AGENTWRAPUPTIME} Setting the time for wrapup between incoming calls
- ${AGENTNUMBER} * Agent number (username) set at login
- ${AGENTSTATUS} * Status of login ( fail | on | off )
- ${AGENTEXTEN} * Extension for logged in agent
Dial() application variables:
- ${DIALEDPEERNAME} * Dialed peer name
- ${DIALEDPEERNUMBER} * Dialed peer number
- ${DIALEDTIME} * Time for the call (seconds)
- ${ANSWEREDTIME} * Time from dial to answer (seconds)
- ${DIALSTATUS} * Status of the call, one of: (CHANUNAVAIL | CONGESTION | BUSY | NOANSWER | ANSWER | CANCEL | DONTCALL | TORTURE)
- ${DYNAMIC_FEATURES} * The list of features (from the [applicationmap] section of features.conf) to activate during the call, with feature names separated by ‘#’ characters
- ${LIMIT_PLAYAUDIO_CALLER} Soundfile for call limits
- ${LIMIT_PLAYAUDIO_CALLEE} Soundfile for call limits
- ${LIMIT_WARNING_FILE} Soundfile for call limits
- ${LIMIT_TIMEOUT_FILE} Soundfile for call limits
- ${LIMIT_CONNECT_FILE} Soundfile for call limits
- ${OUTBOUND_GROUP} Default groups for peer channels (as in SetGroup)
Note: See “show application dial” for more information
Chanisavail() application variables:
- ${AVAILCHAN} * the name of the available channel if one was found
- ${AVAILORIGCHAN} * the canonical channel name that was used to create the channel
- ${AVAILSTATUS} * Status of requested channel
When using macros in the dialplan:
- ${MACRO_EXTEN} * The calling extensions
- ${MACRO_CONTEXT} * The calling context
- ${MACRO_PRIORITY} * The calling priority
- ${MACRO_OFFSET} Offset to add to priority at return from macro
ChanSpy() application variables:
- ${SPYGROUP} * A ‘:’ (colon) separated list of group names. (To be set on spied on channel and matched against the g(grp) option)
If you compile with OSP support:
- ${OSPINHANDLE} OSP handle of in_bound call
- ${OSPINTIMELIMIT} Duration limit for in_bound call
- ${OSPOUTHANDLE} OSP handle of out_bound call
- ${OSPTECH} OSP technology
- ${OSPDEST} OSP destination
- ${OSPCALLING} OSP calling number
- ${OSPOUTTOKEN} OSP token to use for out_bound call
- ${OSPOUTTIMELIMIT} Duration limit for out_bound call
- ${OSPRESULTS} Number of remained destinations
Call File extension variables:
- ${REASON} The reason why an auto-dialout call failed
CDR Variables:
If the channel has a cdr, that cdr record has it’s own set of variables which can be accessed just like channel variables. The following builtin variables are available and, unless specified, read-only.
- ${CDR(clid)} Caller ID
- ${CDR(src)} Source
- ${CDR(dst)} Destination
- ${CDR(dcontext)} Destination context
- ${CDR(channel)} Channel name
- ${CDR(dstchannel)} Destination channel
- ${CDR(lastapp)} Last app executed
- ${CDR(lastdata)} Last app’s arguments
- ${CDR(start)} Time the call started.
- ${CDR(answer)} Time the call was answered.
- ${CDR(end)} Time the call ended.
- ${CDR(duration)} Duration of the call.
- ${CDR(billsec)} Duration of the call once it was answered.
- ${CDR(disposition)} ANSWERED, NO ANSWER, BUSY
- ${CDR(amaflags)} DOCUMENTATION, BILL, IGNORE etc
- ${CDR(accountcode)} The channel’s account code (read-write).
- ${CDR(uniqueid)} The channel’s unique id.
- ${CDR(userfield)} The channels uses specified field (read-write).
In addition, you can set your own extra variables with a traditional Set(CDR(var)=val) to anything you want.
NOTE Some CDR values (eg: duration & billsec) can’t be accessed until the call has terminated. As of 91617, those values will be calculated on-demand if requested. Until that makes it into a stable release, you can set endbeforehexten=yes in cdr.conf, and then use the “hangup” context to wrap up your call.
Certain functional variables may be accessed with ${foo(<args>)}. A list of these functional variables may be found by typing “show functions” at the Asterisk CLI.