<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE docs SYSTEM "appdocsxml.dtd">
<docs xmlns:xi="http://www.w3.org/2001/XInclude">
	<application name="AgentLogin" language="en_US">
		<synopsis>
			Call agent login.
		</synopsis>
		<syntax>
			<parameter name="AgentNo" />
			<parameter name="options">
				<optionlist>
					<option name="s">
						<para>silent login - do not announce the login ok segment after
						agent logged on/off</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>Asks the agent to login to the system. Always returns <literal>-1</literal>.
			While logged in, the agent can receive calls and will hear a <literal>beep</literal>
			when a new call comes in. The agent can dump the call by pressing the star key.</para>
		</description>
		<see-also>
			<ref type="application">Queue</ref>
			<ref type="application">AddQueueMember</ref>
			<ref type="application">RemoveQueueMember</ref>
			<ref type="application">PauseQueueMember</ref>
			<ref type="application">UnpauseQueueMember</ref>
			<ref type="function">AGENT</ref>
			<ref type="filename">agents.conf</ref>
			<ref type="filename">queues.conf</ref>
		</see-also>
	</application>
	<application name="AgentMonitorOutgoing" language="en_US">
		<synopsis>
			Record agent's outgoing call.
		</synopsis>
		<syntax>
			<parameter name="options">
				<optionlist>
					<option name="d">
						<para>make the app return <literal>-1</literal> if there is an error condition.</para>
					</option>
					<option name="c">
						<para>change the CDR so that the source of the call is
						<literal>Agent/agent_id</literal></para>
					</option>
					<option name="n">
						<para>don't generate the warnings when there is no callerid or the
						agentid is not known. It's handy if you want to have one context
						for agent and non-agent calls.</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>Tries to figure out the id of the agent who is placing outgoing call based on
			comparison of the callerid of the current interface and the global variable
			placed by the AgentCallbackLogin application. That's why it should be used only
			with the AgentCallbackLogin app. Uses the monitoring functions in chan_agent
			instead of Monitor application. That has to be configured in the
			<filename>agents.conf</filename> file.</para>
			<para>Normally the app returns <literal>0</literal> unless the options are passed.</para>
		</description>
		<see-also>
			<ref type="filename">agents.conf</ref>
		</see-also>
	</application>
	<function name="AGENT" language="en_US">
		<synopsis>
			Gets information about an Agent
		</synopsis>
		<syntax argsep=":">
			<parameter name="agentid" required="true" />
			<parameter name="item">
				<para>The valid items to retrieve are:</para>
				<enumlist>
					<enum name="status">
						<para>(default) The status of the agent (LOGGEDIN | LOGGEDOUT)</para>
					</enum>
					<enum name="password">
						<para>The password of the agent</para>
					</enum>
					<enum name="name">
						<para>The name of the agent</para>
					</enum>
					<enum name="mohclass">
						<para>MusicOnHold class</para>
					</enum>
					<enum name="channel">
						<para>The name of the active channel for the Agent (AgentLogin)</para>
					</enum>
					<enum name="fullchannel">
						<para>The untruncated name of the active channel for the Agent (AgentLogin)</para>
					</enum>
				</enumlist>
			</parameter>
		</syntax>
		<description></description>
	</function>
	<manager name="Agents" language="en_US">
		<synopsis>
			Lists agents and their status.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
		</syntax>
		<description>
			<para>Will list info about all possible agents.</para>
		</description>
	</manager>
	<manager name="AgentLogoff" language="en_US">
		<synopsis>
			Sets an agent as no longer logged in.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Agent" required="true">
				<para>Agent ID of the agent to log off.</para>
			</parameter>
			<parameter name="Soft">
				<para>Set to <literal>true</literal> to not hangup existing calls.</para>
			</parameter>
		</syntax>
		<description>
			<para>Sets an agent as no longer logged in.</para>
		</description>
	</manager>
	<application name="DAHDISendKeypadFacility" language="en_US">
		<synopsis>
			Send digits out of band over a PRI.
		</synopsis>
		<syntax>
			<parameter name="digits" required="true" />
		</syntax>
		<description>
			<para>This application will send the given string of digits in a Keypad
			Facility IE over the current channel.</para>
		</description>
	</application>
	<application name="DAHDISendCallreroutingFacility" language="en_US">
		<synopsis>
			Send an ISDN call rerouting/deflection facility message.
		</synopsis>
		<syntax argsep=",">
			<parameter name="destination" required="true">
				<para>Destination number.</para>
			</parameter>
			<parameter name="original">
				<para>Original called number.</para>
			</parameter>
			<parameter name="reason">
				<para>Diversion reason, if not specified defaults to <literal>unknown</literal></para>
			</parameter>
		</syntax>
		<description>
			<para>This application will send an ISDN switch specific call
			rerouting/deflection facility message over the current channel.
			Supported switches depend upon the version of libpri in use.</para>
		</description>
	</application>
	<application name="DAHDIAcceptR2Call" language="en_US">
		<synopsis>
			Accept an R2 call if its not already accepted (you still need to answer it)
		</synopsis>
		<syntax>
			<parameter name="charge" required="true">
				<para>Yes or No.</para>
				<para>Whether you want to accept the call with charge or without charge.</para>
			</parameter>
		</syntax>
		<description>
			<para>This application will Accept the R2 call either with charge or no charge.</para>
		</description>
	</application>
	<manager name="DAHDITransfer" language="en_US">
		<synopsis>
			Transfer DAHDI Channel.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="DAHDIChannel" required="true">
				<para>DAHDI channel number to transfer.</para>
			</parameter>
		</syntax>
		<description>
			<para>Simulate a flash hook event by the user connected to the channel.</para>
			<note><para>Valid only for analog channels.</para></note>
		</description>
	</manager>
	<manager name="DAHDIHangup" language="en_US">
		<synopsis>
			Hangup DAHDI Channel.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="DAHDIChannel" required="true">
				<para>DAHDI channel number to hangup.</para>
			</parameter>
		</syntax>
		<description>
			<para>Simulate an on-hook event by the user connected to the channel.</para>
			<note><para>Valid only for analog channels.</para></note>
		</description>
	</manager>
	<manager name="DAHDIDialOffhook" language="en_US">
		<synopsis>
			Dial over DAHDI channel while offhook.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="DAHDIChannel" required="true">
				<para>DAHDI channel number to dial digits.</para>
			</parameter>
			<parameter name="Number" required="true">
				<para>Digits to dial.</para>
			</parameter>
		</syntax>
		<description>
			<para>Generate DTMF control frames to the bridged peer.</para>
		</description>
	</manager>
	<manager name="DAHDIDNDon" language="en_US">
		<synopsis>
			Toggle DAHDI channel Do Not Disturb status ON.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="DAHDIChannel" required="true">
				<para>DAHDI channel number to set DND on.</para>
			</parameter>
		</syntax>
		<description>
			<para>Equivalent to the CLI command "dahdi set dnd <variable>channel</variable> on".</para>
			<note><para>Feature only supported by analog channels.</para></note>
		</description>
	</manager>
	<manager name="DAHDIDNDoff" language="en_US">
		<synopsis>
			Toggle DAHDI channel Do Not Disturb status OFF.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="DAHDIChannel" required="true">
				<para>DAHDI channel number to set DND off.</para>
			</parameter>
		</syntax>
		<description>
			<para>Equivalent to the CLI command "dahdi set dnd <variable>channel</variable> off".</para>
			<note><para>Feature only supported by analog channels.</para></note>
		</description>
	</manager>
	<manager name="DAHDIShowChannels" language="en_US">
		<synopsis>
			Show status of DAHDI channels.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="DAHDIChannel">
				<para>Specify the specific channel number to show.  Show all channels if zero or not present.</para>
			</parameter>
		</syntax>
		<description>
			<para>Similar to the CLI command "dahdi show channels".</para>
		</description>
	</manager>
	<manager name="DAHDIRestart" language="en_US">
		<synopsis>
			Fully Restart DAHDI channels (terminates calls).
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
		</syntax>
		<description>
			<para>Equivalent to the CLI command "dahdi restart".</para>
		</description>
	</manager>
	<application name="IAX2Provision" language="en_US">
		<synopsis>
			Provision a calling IAXy with a given template.
		</synopsis>
		<syntax>
			<parameter name="template">
				<para>If not specified, defaults to <literal>default</literal>.</para>
			</parameter>
		</syntax>
		<description>
			<para>Provisions the calling IAXy (assuming the calling entity is in fact an IAXy) with the
			given <replaceable>template</replaceable>. Returns <literal>-1</literal> on error
			or <literal>0</literal> on success.</para>
		</description>
	</application>
	<function name="IAXPEER" language="en_US">
		<synopsis>
			Gets IAX peer information.
		</synopsis>
		<syntax>
			<parameter name="peername" required="true">
				<enumlist>
					<enum name="CURRENTCHANNEL">
						<para>If <replaceable>peername</replaceable> is specified to this value, return the IP address of the
						endpoint of the current channel</para>
					</enum>
				</enumlist>
			</parameter>
			<parameter name="item">
				<para>If <replaceable>peername</replaceable> is specified, valid items are:</para>
				<enumlist>
					<enum name="ip">
						<para>(default) The IP address.</para>
					</enum>
					<enum name="status">
						<para>The peer's status (if <literal>qualify=yes</literal>)</para>
					</enum>
					<enum name="mailbox">
						<para>The configured mailbox.</para>
					</enum>
					<enum name="context">
						<para>The configured context.</para>
					</enum>
					<enum name="expire">
						<para>The epoch time of the next expire.</para>
					</enum>
					<enum name="dynamic">
						<para>Is it dynamic? (yes/no).</para>
					</enum>
					<enum name="callerid_name">
						<para>The configured Caller ID name.</para>
					</enum>
					<enum name="callerid_num">
						<para>The configured Caller ID number.</para>
					</enum>
					<enum name="codecs">
						<para>The configured codecs.</para>
					</enum>
					<enum name="codec[x]">
						<para>Preferred codec index number <replaceable>x</replaceable> (beginning
						with <literal>0</literal>)</para>
					</enum>
				</enumlist>
			</parameter>
		</syntax>
		<description></description>
		<see-also>
			<ref type="function">SIPPEER</ref>
		</see-also>
	</function>
	<function name="IAXVAR" language="en_US">
		<synopsis>
			Sets or retrieves a remote variable.
		</synopsis>
		<syntax>
			<parameter name="varname" required="true" />
		</syntax>
		<description></description>
	</function>
	<manager name="IAXpeers" language="en_US">
		<synopsis>
			List IAX peers.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
		</syntax>
		<description>
		</description>
	</manager>
	<manager name="IAXpeerlist" language="en_US">
		<synopsis>
			List IAX Peers.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
		</syntax>
		<description>
			<para>List all the IAX peers.</para>
		</description>
	</manager>
	<manager name="IAXnetstats" language="en_US">
		<synopsis>
			Show IAX Netstats.
		</synopsis>
		<syntax />
		<description>
			<para>Show IAX channels network statistics.</para>
		</description>
	</manager>
	<manager name="IAXregistry" language="en_US">
		<synopsis>
			Show IAX registrations.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
		</syntax>
		<description>
			<para>Show IAX registrations.</para>
		</description>
	</manager>
	<manager name="LocalOptimizeAway" language="en_US">
		<synopsis>
			Optimize away a local channel when possible.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Channel" required="true">
				<para>The channel name to optimize away.</para>
			</parameter>
		</syntax>
		<description>
			<para>A local channel created with "/n" will not automatically optimize away.
			Calling this command on the local channel will clear that flag and allow
			it to optimize away if it's bridged or when it becomes bridged.</para>
		</description>
	</manager>
	<application name="SIPDtmfMode" language="en_US">
		<synopsis>
			Change the dtmfmode for a SIP call.
		</synopsis>
		<syntax>
			<parameter name="mode" required="true">
				<enumlist>
					<enum name="inband" />
					<enum name="info" />
					<enum name="rfc2833" />
				</enumlist>
			</parameter>
		</syntax>
		<description>
			<para>Changes the dtmfmode for a SIP call.</para>
		</description>
	</application>
	<application name="SIPAddHeader" language="en_US">
		<synopsis>
			Add a SIP header to the outbound call.
		</synopsis>
		<syntax argsep=":">
			<parameter name="Header" required="true" />
			<parameter name="Content" required="true" />
		</syntax>
		<description>
			<para>Adds a header to a SIP call placed with DIAL.</para>
			<para>Remember to use the X-header if you are adding non-standard SIP
			headers, like <literal>X-Asterisk-Accountcode:</literal>. Use this with care.
			Adding the wrong headers may jeopardize the SIP dialog.</para>
			<para>Always returns <literal>0</literal>.</para>
		</description>
	</application>
	<application name="SIPRemoveHeader" language="en_US">
		<synopsis>
			Remove SIP headers previously added with SIPAddHeader
		</synopsis>
		<syntax>
			<parameter name="Header" required="false" />
		</syntax>
		<description>
			<para>SIPRemoveHeader() allows you to remove headers which were previously
			added with SIPAddHeader(). If no parameter is supplied, all previously added
			headers will be removed. If a parameter is supplied, only the matching headers
			will be removed.</para>
			<para>For example you have added these 2 headers:</para>
			<para>SIPAddHeader(P-Asserted-Identity: sip:foo@bar);</para>
			<para>SIPAddHeader(P-Preferred-Identity: sip:bar@foo);</para>
			<para></para>
			<para>// remove all headers</para>
			<para>SIPRemoveHeader();</para>
			<para>// remove all P- headers</para>
			<para>SIPRemoveHeader(P-);</para>
			<para>// remove only the PAI header (note the : at the end)</para>
			<para>SIPRemoveHeader(P-Asserted-Identity:);</para>
			<para></para>
			<para>Always returns <literal>0</literal>.</para>
		</description>
	</application>
	<function name="SIP_HEADER" language="en_US">
		<synopsis>
			Gets the specified SIP header from an incoming INVITE message.
		</synopsis>
		<syntax>
			<parameter name="name" required="true" />
			<parameter name="number">
				<para>If not specified, defaults to <literal>1</literal>.</para>
			</parameter>
		</syntax>
		<description>
			<para>Since there are several headers (such as Via) which can occur multiple
			times, SIP_HEADER takes an optional second argument to specify which header with
			that name to retrieve. Headers start at offset <literal>1</literal>.</para>
		</description>
	</function>
	<function name="SIPPEER" language="en_US">
		<synopsis>
			Gets SIP peer information.
		</synopsis>
		<syntax>
			<parameter name="peername" required="true" />
			<parameter name="item">
				<enumlist>
					<enum name="ip">
						<para>(default) The ip address.</para>
					</enum>
					<enum name="port">
						<para>The port number.</para>
					</enum>
					<enum name="mailbox">
						<para>The configured mailbox.</para>
					</enum>
					<enum name="context">
						<para>The configured context.</para>
					</enum>
					<enum name="expire">
						<para>The epoch time of the next expire.</para>
					</enum>
					<enum name="dynamic">
						<para>Is it dynamic? (yes/no).</para>
					</enum>
					<enum name="callerid_name">
						<para>The configured Caller ID name.</para>
					</enum>
					<enum name="callerid_num">
						<para>The configured Caller ID number.</para>
					</enum>
					<enum name="callgroup">
						<para>The configured Callgroup.</para>
					</enum>
					<enum name="pickupgroup">
						<para>The configured Pickupgroup.</para>
					</enum>
					<enum name="codecs">
						<para>The configured codecs.</para>
					</enum>
					<enum name="status">
						<para>Status (if qualify=yes).</para>
					</enum>
					<enum name="regexten">
						<para>Registration extension.</para>
					</enum>
					<enum name="limit">
						<para>Call limit (call-limit).</para>
					</enum>
					<enum name="busylevel">
						<para>Configured call level for signalling busy.</para>
					</enum>
					<enum name="curcalls">
						<para>Current amount of calls. Only available if call-limit is set.</para>
					</enum>
					<enum name="language">
						<para>Default language for peer.</para>
					</enum>
					<enum name="accountcode">
						<para>Account code for this peer.</para>
					</enum>
					<enum name="useragent">
						<para>Current user agent id for peer.</para>
					</enum>
					<enum name="maxforwards">
						<para>The value used for SIP loop prevention in outbound requests</para>
					</enum>
					<enum name="chanvar[name]">
						<para>A channel variable configured with setvar for this peer.</para>
					</enum>
					<enum name="codec[x]">
						<para>Preferred codec index number <replaceable>x</replaceable> (beginning with zero).</para>
					</enum>
				</enumlist>
			</parameter>
		</syntax>
		<description></description>
	</function>
	<function name="SIPCHANINFO" language="en_US">
		<synopsis>
			Gets the specified SIP parameter from the current channel.
		</synopsis>
		<syntax>
			<parameter name="item" required="true">
				<enumlist>
					<enum name="peerip">
						<para>The IP address of the peer.</para>
					</enum>
					<enum name="recvip">
						<para>The source IP address of the peer.</para>
					</enum>
					<enum name="from">
						<para>The URI from the <literal>From:</literal> header.</para>
					</enum>
					<enum name="uri">
						<para>The URI from the <literal>Contact:</literal> header.</para>
					</enum>
					<enum name="useragent">
						<para>The useragent.</para>
					</enum>
					<enum name="peername">
						<para>The name of the peer.</para>
					</enum>
					<enum name="t38passthrough">
						<para><literal>1</literal> if T38 is offered or enabled in this channel,
						otherwise <literal>0</literal>.</para>
					</enum>
				</enumlist>
			</parameter>
		</syntax>
		<description></description>
	</function>
	<function name="CHECKSIPDOMAIN" language="en_US">
		<synopsis>
			Checks if domain is a local domain.
		</synopsis>
		<syntax>
			<parameter name="domain" required="true" />
		</syntax>
		<description>
			<para>This function checks if the <replaceable>domain</replaceable> in the argument is configured
			as a local SIP domain that this Asterisk server is configured to handle.
			Returns the domain name if it is locally handled, otherwise an empty string.
			Check the <literal>domain=</literal> configuration in <filename>sip.conf</filename>.</para>
		</description>
	</function>
	<manager name="SIPpeers" language="en_US">
		<synopsis>
			List SIP peers (text format).
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
		</syntax>
		<description>
			<para>Lists SIP peers in text format with details on current status.
			Peerlist will follow as separate events, followed by a final event called
			PeerlistComplete.</para>
		</description>
	</manager>
	<manager name="SIPshowpeer" language="en_US">
		<synopsis>
			show SIP peer (text format).
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Peer" required="true">
				<para>The peer name you want to check.</para>
			</parameter>
		</syntax>
		<description>
			<para>Show one SIP peer with details on current status.</para>
		</description>
	</manager>
	<manager name="SIPqualifypeer" language="en_US">
		<synopsis>
			Qualify SIP peers.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Peer" required="true">
				<para>The peer name you want to qualify.</para>
			</parameter>
		</syntax>
		<description>
			<para>Qualify a SIP peer.</para>
		</description>
	</manager>
	<manager name="SIPshowregistry" language="en_US">
		<synopsis>
			Show SIP registrations (text format).
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
		</syntax>
		<description>
			<para>Lists all registration requests and status. Registrations will follow as separate
			events. followed by a final event called RegistrationsComplete.</para>
		</description>
	</manager>
	<manager name="SIPnotify" language="en_US">
		<synopsis>
			Send a SIP notify.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Channel" required="true">
				<para>Peer to receive the notify.</para>
			</parameter>
			<parameter name="Variable" required="true">
				<para>At least one variable pair must be specified.
				<replaceable>name</replaceable>=<replaceable>value</replaceable></para>
			</parameter>
		</syntax>
		<description>
			<para>Sends a SIP Notify event.</para>
			<para>All parameters for this event must be specified in the body of this request
			via multiple Variable: name=value sequences.</para>
		</description>
	</manager>
	<manager name="SKINNYdevices" language="en_US">
		<synopsis>
			List SKINNY devices (text format).
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
		</syntax>
		<description>
			<para>Lists Skinny devices in text format with details on current status.
			Devicelist will follow as separate events, followed by a final event called
			DevicelistComplete.</para>
		</description>
	</manager>
	<manager name="SKINNYshowdevice" language="en_US">
		<synopsis>
			Show SKINNY device (text format).
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Device" required="true">
				<para>The device name you want to check.</para>
			</parameter>
		</syntax>
		<description>
			<para>Show one SKINNY device with details on current status.</para>
		</description>
	</manager>
	<manager name="SKINNYlines" language="en_US">
		<synopsis>
			List SKINNY lines (text format).
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
		</syntax>
		<description>
			<para>Lists Skinny lines in text format with details on current status.
			Linelist will follow as separate events, followed by a final event called
			LinelistComplete.</para>
		</description>
	</manager>
	<manager name="SKINNYshowline" language="en_US">
		<synopsis>
			Show SKINNY line (text format).
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Line" required="true">
				<para>The line name you want to check.</para>
			</parameter>
		</syntax>
		<description>
			<para>Show one SKINNY line with details on current status.</para>
		</description>
	</manager>
	<application name="AELSub" language="en_US">
		<synopsis>
			Launch subroutine built with AEL
		</synopsis>
		<syntax>
			<parameter name="routine" required="true">
				<para>Named subroutine to execute.</para>
			</parameter>
			<parameter name="args" required="false" />
		</syntax>
		<description>
			<para>Execute the named subroutine, defined in AEL, from another dialplan
			language, such as extensions.conf, Realtime extensions, or Lua.</para>
			<para>The purpose of this application is to provide a sane entry point into
			AEL subroutines, the implementation of which may change from time to time.</para>
		</description>
	</application>
	<function name="DUNDILOOKUP" language="en_US">
		<synopsis>
			Do a DUNDi lookup of a phone number.
		</synopsis>
		<syntax>
			<parameter name="number" required="true"/>
			<parameter name="context">
				<para>If not specified the default will be <literal>e164</literal>.</para>
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="b">
						<para>Bypass the internal DUNDi cache</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>This will do a DUNDi lookup of the given phone number.</para>
			<para>This function will return the Technology/Resource found in the first result
			in the DUNDi lookup. If no results were found, the result will be blank.</para>
		</description>
	</function>
			
		
	<function name="DUNDIQUERY" language="en_US">
		<synopsis>
			Initiate a DUNDi query.
		</synopsis>
		<syntax>
			<parameter name="number" required="true"/>
			<parameter name="context">
				<para>If not specified the default will be <literal>e164</literal>.</para>
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="b">
						<para>Bypass the internal DUNDi cache</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>This will do a DUNDi lookup of the given phone number.</para>
			<para>The result of this function will be a numeric ID that can be used to retrieve
			the results with the <literal>DUNDIRESULT</literal> function.</para>
		</description>
	</function>

	<function name="DUNDIRESULT" language="en_US">
		<synopsis>
			Retrieve results from a DUNDIQUERY.
		</synopsis>
		<syntax>
			<parameter name="id" required="true">
				<para>The identifier returned by the <literal>DUNDIQUERY</literal> function.</para>
			</parameter>
			<parameter name="resultnum">
				<optionlist>
					<option name="number">
						<para>The number of the result that you want to retrieve, this starts at <literal>1</literal></para>
					</option>
					<option name="getnum">
						<para>The total number of results that are available.</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>This function will retrieve results from a previous use\n"
			of the <literal>DUNDIQUERY</literal> function.</para>
		</description>
	</function>
	<application name="ADSIProg" language="en_US">
		<synopsis>
			Load Asterisk ADSI Scripts into phone
		</synopsis>
		<syntax>
			<parameter name="script" required="false">
				<para>adsi script to use. If not given uses the default script <filename>asterisk.adsi</filename></para>
			</parameter>
		</syntax>
		<description>
			<para>This application programs an ADSI Phone with the given script</para>
		</description>
		<see-also>
			<ref type="application">GetCPEID</ref>
			<ref type="filename">adsi.conf</ref>
		</see-also>
	</application>
	<application name="AlarmReceiver" language="en_US">
		<synopsis>
			Provide support for receiving alarm reports from a burglar or fire alarm panel.
		</synopsis>
		<syntax />
		<description>
			<para>This application should be called whenever there is an alarm panel calling in to dump its events.
			The application will handshake with the alarm panel, and receive events, validate them, handshake them,
			and store them until the panel hangs up. Once the panel hangs up, the application will run the system
			command specified by the eventcmd setting in <filename>alarmreceiver.conf</filename> and pipe the
			events to the standard input of the application.
			The configuration file also contains settings for DTMF timing, and for the loudness of the
			acknowledgement tones.</para>
			<note><para>Only 1 signalling format is supported at this time: Ademco Contact ID.</para></note>
		</description>
		<see-also>
			<ref type="filename">alarmreceiver.conf</ref>
		</see-also>
	</application>
	<application name="AMD" language="en_US">
		<synopsis>
			Attempt to detect answering machines.
		</synopsis>
		<syntax>
			<parameter name="initialSilence" required="false">
				<para>Is maximum initial silence duration before greeting.</para>
				<para>If this is exceeded set as MACHINE</para>
			</parameter>
			<parameter name="greeting" required="false">
				<para>is the maximum length of a greeting.</para>
				<para>If this is exceeded set as MACHINE</para>
			</parameter>
			<parameter name="afterGreetingSilence" required="false">
				<para>Is the silence after detecting a greeting.</para>
				<para>If this is exceeded set as HUMAN</para>
			</parameter>
			<parameter name="totalAnalysis Time" required="false">
				<para>Is the maximum time allowed for the algorithm</para>
				<para>to decide HUMAN or MACHINE</para>
			</parameter>
			<parameter name="miniumWordLength" required="false">
				<para>Is the minimum duration of Voice considered to be a word</para>
			</parameter>
			<parameter name="betweenWordSilence" required="false">
				<para>Is the minimum duration of silence after a word to
				consider the audio that follows to be a new word</para>
			</parameter>
			<parameter name="maximumNumberOfWords" required="false">
				<para>Is the maximum number of words in a greeting</para>
				<para>If this is exceeded set as MACHINE</para>
			</parameter>
			<parameter name="silenceThreshold" required="false">
				<para>How long do we consider silence</para>
			</parameter>
			<parameter name="maximumWordLength" required="false">
				<para>Is the maximum duration of a word to accept.</para>
				<para>If exceeded set as MACHINE</para>
			</parameter>
		</syntax>
		<description>
			<para>This application attempts to detect answering machines at the beginning
			of outbound calls. Simply call this application after the call
			has been answered (outbound only, of course).</para>
			<para>When loaded, AMD reads amd.conf and uses the parameters specified as
			default values. Those default values get overwritten when the calling AMD
			with parameters.</para>
			<para>This application sets the following channel variables:</para>
			<variablelist>
				<variable name="AMDSTATUS">
					<para>This is the status of the answering machine detection</para>
					<value name="MACHINE" />
					<value name="HUMAN" />
					<value name="NOTSURE" />
					<value name="HANGUP" />
				</variable>
				<variable name="AMDCAUSE">
					<para>Indicates the cause that led to the conclusion</para>
					<value name="TOOLONG">
						Total Time.
					</value>
					<value name="INITIALSILENCE">
						Silence Duration - Initial Silence.
					</value>
					<value name="HUMAN">
						Silence Duration - afterGreetingSilence.
					</value>
					<value name="LONGGREETING">
						Voice Duration - Greeting.
					</value>
					<value name="MAXWORDLENGTH">
						Word Count - maximum number of words.
					</value>	
				</variable>
			</variablelist>
		</description>
		<see-also>
			<ref type="application">WaitForSilence</ref>
			<ref type="application">WaitForNoise</ref>
		</see-also>
	</application>

	<application name="Authenticate" language="en_US">
		<synopsis>
			Authenticate a user
		</synopsis>
		<syntax>
			<parameter name="password" required="true">
				<para>Password the user should know</para>
			</parameter>
			<parameter name="options" required="false">
				<optionlist>
					<option name="a">
						<para>Set the channels' account code to the password that is entered</para>
					</option>
					<option name="d">
						<para>Interpret the given path as database key, not a literal file.</para>
						<note>
							<para>The value is not used at all in the authentication when using this option.
							If the family/key is set to <literal>/pin/100</literal> (value does not matter)
							then the password field needs to be set to <literal>/pin</literal> and the pin entered
							by the user would be authenticated against <literal>100</literal>.</para>
						</note>
					</option>
					<option name="m">
						<para>Interpret the given path as a file which contains a list of account
						codes and password hashes delimited with <literal>:</literal>, listed one per line in
						the file. When one of the passwords is matched, the channel will have
						its account code set to the corresponding account code in the file.</para>
					</option>
					<option name="r">
						<para>Remove the database key upon successful entry (valid with <literal>d</literal> only)</para>
					</option>
				</optionlist>
			</parameter>
			<parameter name="maxdigits" required="false">
				<para>maximum acceptable number of digits. Stops reading after
				maxdigits have been entered (without requiring the user to press the <literal>#</literal> key).
				Defaults to 0 - no limit - wait for the user press the <literal>#</literal> key.</para>
			</parameter>
			<parameter name="prompt" required="false">
				<para>Override the agent-pass prompt file.</para>
			</parameter>
		</syntax>
		<description>
			<para>This application asks the caller to enter a given password in order to continue dialplan execution.</para>
			<para>If the password begins with the <literal>/</literal> character, 
			it is interpreted as a file which contains a list of valid passwords, listed 1 password per line in the file.</para>
			<para>When using a database key, the value associated with the key can be anything.</para>
			<para>Users have three attempts to authenticate before the channel is hung up.</para>
		</description>
		<see-also>
			<ref type="application">VMAuthenticate</ref>
			<ref type="application">DISA</ref>
		</see-also>
	</application>
	<application name="NoCDR" language="en_US">
		<synopsis>
			Tell Asterisk to not maintain a CDR for the current call
		</synopsis>
		<syntax />
		<description>
			<para>This application will tell Asterisk not to maintain a CDR for the current call.</para>
		</description>
	</application>
	<application name="CELGenUserEvent" language="en_US">
		<synopsis>
			Generates a CEL User Defined Event.
		</synopsis>
		<syntax>
			<parameter name="event-name" required="true">
				<argument name="event-name" required="true">
				</argument>
				<argument name="extra" required="false">
					<para>Extra text to be included with the event.</para>
				</argument>
			</parameter>
		</syntax>
		<description>
			<para>A CEL event will be immediately generated by this channel, with the supplied name for a type.</para>
		</description>
	</application>
	<application name="ChanIsAvail" language="en_US">
		<synopsis>
			Check channel availability
		</synopsis>
		<syntax>
			<parameter name="Technology/Resource" required="true" argsep="&amp;">
				<argument name="Technology2/Resource2" multiple="true">
					<para>Optional extra devices to check</para>
					<para>If you need more then one enter them as
					Technology2/Resource2&amp;Technology3/Resourse3&amp;.....</para>
				</argument>
				<para>Specification of the device(s) to check.  These must be in the format of 
				<literal>Technology/Resource</literal>, where <replaceable>Technology</replaceable>
				represents a particular channel driver, and <replaceable>Resource</replaceable>
				represents a resource available to that particular channel driver.</para>
			</parameter>
			<parameter name="options" required="false">
				<optionlist>
					<option name="a">
						<para>Check for all available channels, not only the first one</para>
					</option>
					<option name="s">
						<para>Consider the channel unavailable if the channel is in use at all</para>
					</option>
					<option name="t" implies="s">
						<para>Simply checks if specified channels exist in the channel list</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>This application will check to see if any of the specified channels are available.</para>
			<para>This application sets the following channel variables:</para>
			<variablelist>
				<variable name="AVAILCHAN">
					<para>The name of the available channel, if one exists</para>
				</variable>
				<variable name="AVAILORIGCHAN">
					<para>The canonical channel name that was used to create the channel</para>
				</variable>
				<variable name="AVAILSTATUS">
					<para>The device state for the device</para>
				</variable>
				<variable name="AVAILCAUSECODE">
				        <para>The cause code returned when requesting the channel</para>
				</variable>	
			</variablelist>
		</description>
	</application>
	<application name="ChannelRedirect" language="en_US">
		<synopsis>
			Redirects given channel to a dialplan target
		</synopsis>
		<syntax>
			<parameter name="channel" required="true" />
			<parameter name="context" required="false" />
			<parameter name="extension" required="false" />
			<parameter name="priority" required="true" />
		</syntax>
		<description>
			<para>Sends the specified channel to the specified extension priority</para>

			<para>This application sets the following channel variables upon completion</para>
			<variablelist>
				<variable name="CHANNELREDIRECT_STATUS">
					<value name="NOCHANNEL" />
					<value name="SUCCESS" />
					<para>Are set to the result of the redirection</para>
				</variable>
			</variablelist>
		</description>
	</application>
	<application name="ChanSpy" language="en_US">
		<synopsis>
			Listen to a channel, and optionally whisper into it.
		</synopsis>
		<syntax>
			<parameter name="chanprefix" />
			<parameter name="options">
				<optionlist>
					<option name="b">
						<para>Only spy on channels involved in a bridged call.</para>
					</option>
					<option name="B">
						<para>Instead of whispering on a single channel barge in on both
						channels involved in the call.</para>
					</option>
					<option name="c">
						<argument name="digit" required="true">
							<para>Specify a DTMF digit that can be used to spy on the next available channel.</para>
						</argument>
					</option>
					<option name="d">
						<para>Override the typical numeric DTMF functionality and instead
						use DTMF to switch between spy modes.</para>
						<enumlist>
							<enum name="4">
								<para>spy mode</para>
							</enum>
							<enum name="5">
								<para>whisper mode</para>
							</enum>
							<enum name="6">
								<para>barge mode</para>
							</enum>
						</enumlist>
					</option>
					<option name="e">
						<argument name="ext" required="true" />
						<para>Enable <emphasis>enforced</emphasis> mode, so the spying channel can
						only monitor extensions whose name is in the <replaceable>ext</replaceable> : delimited 
						list.</para>
					</option>
					<option name="E">
						<para>Exit when the spied-on channel hangs up.</para>
					</option>
					<option name="g">
						<argument name="grp" required="true">
							<para>Only spy on channels in which one or more of the groups
							listed in <replaceable>grp</replaceable> matches one or more groups from the
							<variable>SPYGROUP</variable> variable set on the channel to be spied upon.</para>
						</argument>
						<note><para>both <replaceable>grp</replaceable> and <variable>SPYGROUP</variable> can contain 
						either a single group or a colon-delimited list of groups, such
						as <literal>sales:support:accounting</literal>.</para></note>
					</option>
					<option name="n" argsep="@">
						<para>Say the name of the person being spied on if that person has recorded
						his/her name. If a context is specified, then that voicemail context will
						be searched when retrieving the name, otherwise the <literal>default</literal> context
						be used when searching for the name (i.e. if SIP/1000 is the channel being
						spied on and no mailbox is specified, then <literal>1000</literal> will be used when searching
						for the name).</para>
						<argument name="mailbox" />
						<argument name="context" />
					</option>
					<option name="o">
						<para>Only listen to audio coming from this channel.</para>
					</option>
					<option name="q">
						<para>Don't play a beep when beginning to spy on a channel, or speak the
						selected channel name.</para>
					</option>
					<option name="r">
						<para>Record the session to the monitor spool directory. An optional base for the filename 
						may be specified. The default is <literal>chanspy</literal>.</para>
						<argument name="basename" />
					</option>
					<option name="s">
						<para>Skip the playback of the channel type (i.e. SIP, IAX, etc) when
						speaking the selected channel name.</para>
					</option>
					<option name="S">
						<para>Stop when no more channels are left to spy on.</para>
					</option>
					<option name="v">
						<argument name="value" />
						<para>Adjust the initial volume in the range from <literal>-4</literal> 
						to <literal>4</literal>. A negative value refers to a quieter setting.</para>
					</option>
					<option name="w">
						<para>Enable <literal>whisper</literal> mode, so the spying channel can talk to
						the spied-on channel.</para>
					</option>
					<option name="W">
						<para>Enable <literal>private whisper</literal> mode, so the spying channel can
						talk to the spied-on channel but cannot listen to that channel.</para>
					</option>
					<option name="x">
						<argument name="digit" required="true">
							<para>Specify a DTMF digit that can be used to exit the application.</para>
						</argument>
					</option>
					<option name="X">
						<para>Allow the user to exit ChanSpy to a valid single digit
						numeric extension in the current context or the context
						specified by the <variable>SPY_EXIT_CONTEXT</variable> channel variable. The
						name of the last channel that was spied on will be stored
						in the <variable>SPY_CHANNEL</variable> variable.</para>
					</option>
				</optionlist>		
			</parameter>
		</syntax>
		<description>
			<para>This application is used to listen to the audio from an Asterisk channel. This includes the audio 
			coming in and out of the channel being spied on. If the <literal>chanprefix</literal> parameter is specified,
			only channels beginning with this string will be spied upon.</para>
			<para>While spying, the following actions may be performed:</para>
			<para> - Dialing <literal>#</literal> cycles the volume level.</para>
			<para> - Dialing <literal>*</literal> will stop spying and look for another channel to spy on.</para>
			<para> - Dialing a series of digits followed by <literal>#</literal> builds a channel name to append
			to 'chanprefix'. For example, executing ChanSpy(Agent) and then dialing the digits '1234#' 
			while spying will begin spying on the channel 'Agent/1234'. Note that this feature will be overridden if the 'd' option
			is used</para>
			<note><para>The <replaceable>X</replaceable> option supersedes the three features above in that if a valid
			single digit extension exists in the correct context ChanSpy will exit to it.
			This also disables choosing a channel based on <literal>chanprefix</literal> and a digit sequence.</para></note>
		</description>
		<see-also>
			<ref type="application">ExtenSpy</ref>
		</see-also>
	</application>
	<application name="ExtenSpy" language="en_US">
		<synopsis>
			Listen to a channel, and optionally whisper into it.
		</synopsis>
		<syntax>
			<parameter name="exten" required="true" argsep="@">
				<argument name="exten" required="true">
					<para>Specify extension.</para>
				</argument>
				<argument name="context">
					<para>Optionally specify a context, defaults to <literal>default</literal>.</para>
				</argument>
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="b">
						<para>Only spy on channels involved in a bridged call.</para>
					</option>
					<option name="B">
						<para>Instead of whispering on a single channel barge in on both
						channels involved in the call.</para>
					</option>
					<option name="c">
						<argument name="digit" required="true">
							<para>Specify a DTMF digit that can be used to spy on the next available channel.</para>
						</argument>
					</option>
					<option name="d">
						<para>Override the typical numeric DTMF functionality and instead
						use DTMF to switch between spy modes.</para>
						<enumlist>
							<enum name="4">
								<para>spy mode</para>
							</enum>
							<enum name="5">
								<para>whisper mode</para>
							</enum>
							<enum name="6">
								<para>barge mode</para>
							</enum>
						</enumlist>
					</option>
					<option name="e">
						<argument name="ext" required="true" />
						<para>Enable <emphasis>enforced</emphasis> mode, so the spying channel can
						only monitor extensions whose name is in the <replaceable>ext</replaceable> : delimited 
						list.</para>
					</option>
					<option name="E">
						<para>Exit when the spied-on channel hangs up.</para>
					</option>
					<option name="g">
						<argument name="grp" required="true">
							<para>Only spy on channels in which one or more of the groups
							listed in <replaceable>grp</replaceable> matches one or more groups from the
							<variable>SPYGROUP</variable> variable set on the channel to be spied upon.</para>
						</argument>
						<note><para>both <replaceable>grp</replaceable> and <variable>SPYGROUP</variable> can contain 
						either a single group or a colon-delimited list of groups, such
						as <literal>sales:support:accounting</literal>.</para></note>
					</option>
					<option name="n" argsep="@">
						<para>Say the name of the person being spied on if that person has recorded
						his/her name. If a context is specified, then that voicemail context will
						be searched when retrieving the name, otherwise the <literal>default</literal> context
						be used when searching for the name (i.e. if SIP/1000 is the channel being
						spied on and no mailbox is specified, then <literal>1000</literal> will be used when searching
						for the name).</para>
						<argument name="mailbox" />
						<argument name="context" />
					</option>
					<option name="o">
						<para>Only listen to audio coming from this channel.</para>
					</option>
					<option name="q">
						<para>Don't play a beep when beginning to spy on a channel, or speak the
						selected channel name.</para>
					</option>
					<option name="r">
						<para>Record the session to the monitor spool directory. An optional base for the filename 
						may be specified. The default is <literal>chanspy</literal>.</para>
						<argument name="basename" />
					</option>
					<option name="s">
						<para>Skip the playback of the channel type (i.e. SIP, IAX, etc) when
						speaking the selected channel name.</para>
					</option>
					<option name="S">
						<para>Stop when there are no more extensions left to spy on.</para>
					</option>
					<option name="v">
						<argument name="value" />
						<para>Adjust the initial volume in the range from <literal>-4</literal> 
						to <literal>4</literal>. A negative value refers to a quieter setting.</para>
					</option>
					<option name="w">
						<para>Enable <literal>whisper</literal> mode, so the spying channel can talk to
						the spied-on channel.</para>
					</option>
					<option name="W">
						<para>Enable <literal>private whisper</literal> mode, so the spying channel can
						talk to the spied-on channel but cannot listen to that channel.</para>
					</option>
					<option name="x">
						<argument name="digit" required="true">
							<para>Specify a DTMF digit that can be used to exit the application.</para>
						</argument>
					</option>
					<option name="X">
						<para>Allow the user to exit ChanSpy to a valid single digit
						numeric extension in the current context or the context
						specified by the <variable>SPY_EXIT_CONTEXT</variable> channel variable. The
						name of the last channel that was spied on will be stored
						in the <variable>SPY_CHANNEL</variable> variable.</para>
					</option>
				</optionlist>	
			</parameter>
		</syntax>
		<description>
			<para>This application is used to listen to the audio from an Asterisk channel. This includes 
			the audio coming in and out of the channel being spied on. Only channels created by outgoing calls for the
			specified extension will be selected for spying. If the optional context is not supplied, 
			the current channel's context will be used.</para>
			<para>While spying, the following actions may be performed:</para>
			<para> - Dialing <literal>#</literal> cycles the volume level.</para>
                        <para> - Dialing <literal>*</literal> will stop spying and look for another channel to spy on.</para>
			<note><para>The <replaceable>X</replaceable> option supersedes the three features above in that if a valid
			single digit extension exists in the correct context ChanSpy will exit to it.
			This also disables choosing a channel based on <literal>chanprefix</literal> and a digit sequence.</para></note>
		</description>
		<see-also>
			<ref type="application">ChanSpy</ref>
		</see-also>
	</application>
	
	<application name="DAHDIScan" language="en_US">
		<synopsis>
			Scan DAHDI channels to monitor calls.
		</synopsis>
		<syntax>
			<parameter name="group">
				<para>Limit scanning to a channel <replaceable>group</replaceable> by setting this option.</para>
			</parameter>
		</syntax>
		<description>
			<para>Allows a call center manager to monitor DAHDI channels in a
			convenient way.  Use <literal>#</literal> to select the next channel and use <literal>*</literal> to exit.</para>
		</description>
	</application>
        <application name="ConfBridge" language="en_US">
                <synopsis>
                        Conference bridge application.
                </synopsis>
                <syntax>
                        <parameter name="confno">
                                <para>The conference number</para>
                        </parameter>
                        <parameter name="options">
                                <optionlist>
                                        <option name="a">
                                                <para>Set admin mode.</para>
                                        </option>
                                        <option name="A">
                                                <para>Set marked mode.</para>
                                        </option>
                                        <option name="c">
                                                <para>Announce user(s) count on joining a conference.</para>
                                        </option>
                                        <option name="m">
                                                <para>Set initially muted.</para>
                                        </option>
                                        <option name="M" hasparams="optional">
                                                <para>Enable music on hold when the conference has a single caller. Optionally,
                                                specify a musiconhold class to use. If one is not provided, it will use the
                                                channel's currently set music class, or <literal>default</literal>.</para>
                                                <argument name="class" required="true" />
                                        </option>
                                        <option name="1">
                                                <para>Do not play message when first person enters</para>
                                        </option>
                                        <option name="s">
                                                <para>Present menu (user or admin) when <literal>#</literal> is received
                                                (send to menu).</para>
                                        </option>
                                        <option name="w">
                                                <para>Wait until the marked user enters the conference.</para>
                                        </option>
                                        <option name="q">
                                                <para>Quiet mode (don't play enter/leave sounds).</para>
                                        </option>
				</optionlist>
		      </parameter>
                </syntax>
                <description>
                        <para>Enters the user into a specified conference bridge. The user can exit the conference by hangup only.</para>
                        <para>The join sound can be set using the <literal>CONFBRIDGE_JOIN_SOUND</literal> variable and the leave sound can be set using the <literal>CONFBRIDGE_LEAVE_SOUND</literal> variable. These can be unique to the caller.</para>
			<note><para>This application will not automatically answer the channel.</para></note>
                </description>
        </application>
	<application name="ControlPlayback" language="en_US">
		<synopsis>
			Play a file with fast forward and rewind.
		</synopsis>
		<syntax>
			<parameter name="filename" required="true" />
			<parameter name="skipms">
				<para>This is number of milliseconds to skip when rewinding or
				fast-forwarding.</para>
			</parameter>
			<parameter name="ff">
				<para>Fast-forward when this DTMF digit is received. (defaults to <literal>#</literal>)</para>
			</parameter>
			<parameter name="rew">
				<para>Rewind when this DTMF digit is received. (defaults to <literal>*</literal>)</para>
			</parameter>
			<parameter name="stop">
				<para>Stop playback when this DTMF digit is received.</para>
			</parameter>
			<parameter name="pause">
				<para>Pause playback when this DTMF digit is received.</para>
			</parameter>
			<parameter name="restart">
				<para>Restart playback when this DTMF digit is received.</para>
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="o">
						<argument name="time" required="true">
							<para>Start at <replaceable>time</replaceable> ms from the
							beginning of the file.</para>
						</argument>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>This application will play back the given <replaceable>filename</replaceable>.</para>
			<para>It sets the following channel variables upon completion:</para>
			<variablelist>
				<variable name="CPLAYBACKSTATUS">
					<para>Contains the status of the attempt as a text string</para>
					<value name="SUCCESS" />
					<value name="USERSTOPPED" />
					<value name="ERROR" />
				</variable>
				<variable name="CPLAYBACKOFFSET">
					<para>Contains the offset in ms into the file where playback
					was at when it stopped. <literal>-1</literal> is end of file.</para>
				</variable>
				<variable name="CPLAYBACKSTOPKEY">
					<para>If the playback is stopped by the user this variable contains
					the key that was pressed.</para>
				</variable>
			</variablelist>
		</description>
	</application>
	<application name="DAHDIBarge" language="en_US">
		<synopsis>
			Barge in (monitor) DAHDI channel.
		</synopsis>
		<syntax>
			<parameter name="channel">
				<para>Channel to barge.</para>
			</parameter>
		</syntax>
		<description>
			<para>Barges in on a specified DAHDI <replaceable>channel</replaceable> or prompts
			if one is not specified. Returns <literal>-1</literal> when caller user hangs
			up and is independent of the state of the channel being monitored.
			</para>
		</description>
	</application>
	<application name="DAHDIRAS" language="en_US">
		<synopsis>
			Executes DAHDI ISDN RAS application.
		</synopsis>
		<syntax>
			<parameter name="args" required="true">
				<para>A list of parameters to pass to the pppd daemon,
				separated by <literal>,</literal> characters.</para>
			</parameter>
		</syntax>
		<description>
			<para>Executes a RAS server using pppd on the given channel.
			The channel must be a clear channel (i.e. PRI source) and a DAHDI
			channel to be able to use this function (No modem emulation is included).</para>
			<para>Your pppd must be patched to be DAHDI aware.</para>
		</description>
	</application>

	<application name="DBdel" language="en_US">
		<synopsis>
			Delete a key from the asterisk database.
		</synopsis>
		<syntax argsep="/">
			<parameter name="family" required="true" />
			<parameter name="key" required="true" />
		</syntax>
		<description>
			<para>This application will delete a <replaceable>key</replaceable> from the Asterisk
			database.</para>
			<note><para>This application has been DEPRECATED in favor of the DB_DELETE function.</para></note>
		</description>
		<see-also>
			<ref type="function">DB_DELETE</ref>
			<ref type="application">DBdeltree</ref>
			<ref type="function">DB</ref>
		</see-also>
	</application>
	<application name="DBdeltree" language="en_US">
		<synopsis>
			Delete a family or keytree from the asterisk database.
		</synopsis>
		<syntax argsep="/">
			<parameter name="family" required="true" />
			<parameter name="keytree" />
		</syntax>
		<description>
			<para>This application will delete a <replaceable>family</replaceable> or <replaceable>keytree</replaceable>
			from the Asterisk database.</para>
		</description>
		<see-also>
			<ref type="function">DB_DELETE</ref>
			<ref type="application">DBdel</ref>
			<ref type="function">DB</ref>
		</see-also>
	</application>
	<application name="Dial" language="en_US">
		<synopsis>
			Attempt to connect to another device or endpoint and bridge the call.
		</synopsis>
		<syntax>
			<parameter name="Technology/Resource" required="true" argsep="&amp;">
				<argument name="Technology/Resource" required="true">
					<para>Specification of the device(s) to dial.  These must be in the format of
					<literal>Technology/Resource</literal>, where <replaceable>Technology</replaceable>
					represents a particular channel driver, and <replaceable>Resource</replaceable>
					represents a resource available to that particular channel driver.</para>
				</argument>
				<argument name="Technology2/Resource2" required="false" multiple="true">
					<para>Optional extra devices to dial in parallel</para>
					<para>If you need more then one enter them as
					Technology2/Resource2&amp;Technology3/Resourse3&amp;.....</para>
				</argument>
			</parameter>
			<parameter name="timeout" required="false">
				<para>Specifies the number of seconds we attempt to dial the specified devices</para>
				<para>If not specified, this defaults to 136 years.</para>
			</parameter>
			<parameter name="options" required="false">
			   <optionlist>
				<option name="A">
					<argument name="x" required="true">
						<para>The file to play to the called party</para>
					</argument>
					<para>Play an announcement to the called party, where <replaceable>x</replaceable> is the prompt to be played</para>
				</option>
				<option name="a">
					<para>Immediately answer the calling channel when the called channel answers in
					all cases. Normally, the calling channel is answered when the called channel
					answers, but when options such as A() and M() are used, the calling channel is
					not answered until all actions on the called channel (such as playing an
					announcement) are completed.  This option can be used to answer the calling
					channel before doing anything on the called channel. You will rarely need to use
					this option, the default behavior is adequate in most cases.</para>
				</option>
				<option name="C">
					<para>Reset the call detail record (CDR) for this call.</para>
				</option>
				<option name="c">
					<para>If the Dial() application cancels this call, always set the flag to tell the channel
					driver that the call is answered elsewhere.</para>
				</option>
				<option name="d">
					<para>Allow the calling user to dial a 1 digit extension while waiting for
					a call to be answered. Exit to that extension if it exists in the
					current context, or the context defined in the <variable>EXITCONTEXT</variable> variable,
					if it exists.</para>
					<note>
						<para>Many SIP and ISDN phones cannot send DTMF digits until the call is
						connected.  If you wish to use this option with these phones, you
						can use the <literal>Answer</literal> application before dialing.</para>
					</note>
				</option>
				<option name="D" argsep=":">
					<argument name="called" />
					<argument name="calling" />
					<argument name="progress" />
					<para>Send the specified DTMF strings <emphasis>after</emphasis> the called
					party has answered, but before the call gets bridged. The 
					<replaceable>called</replaceable> DTMF string is sent to the called party, and the 
					<replaceable>calling</replaceable> DTMF string is sent to the calling party. Both arguments 
					can be used alone.  If <replaceable>progress</replaceable> is specified, its DTMF is sent
					immediately after receiving a PROGRESS message.</para>
				</option>
				<option name="e">
					<para>Execute the <literal>h</literal> extension for peer after the call ends</para>
				</option>
				<option name="f">
					<argument name="x" required="false" />
					<para>If <replaceable>x</replaceable> is not provided, force the CallerID sent on a call-forward or
					deflection to the dialplan extension of this Dial() using a dialplan <literal>hint</literal>.
					For example, some PSTNs do not allow CallerID to be set to anything
					other than the numbers assigned to you.
					If <replaceable>x</replaceable> is provided, force the CallerID sent to <replaceable>x</replaceable>.</para>
				</option>
				<option name="F" argsep="^">
					<argument name="context" required="false" />
					<argument name="exten" required="false" />
					<argument name="priority" required="true" />
					<para>When the caller hangs up, transfer the <emphasis>called</emphasis> party
					to the specified destination and <emphasis>start</emphasis> execution at that location.</para>
					<note>
						<para>Any channel variables you want the called channel to inherit from the caller channel must be
						prefixed with one or two underbars ('_').</para>
					</note>
				</option>
				<option name="F">
					<para>When the caller hangs up, transfer the <emphasis>called</emphasis> party to the next priority of the current extension
					and <emphasis>start</emphasis> execution at that location.</para>
					<note>
						<para>Any channel variables you want the called channel to inherit from the caller channel must be
						prefixed with one or two underbars ('_').</para>
					</note>
					<note>
						<para>Using this option from a Macro() or GoSub() might not make sense as there would be no return points.</para>
					</note>
				</option>
				<option name="g">
					<para>Proceed with dialplan execution at the next priority in the current extension if the
					destination channel hangs up.</para>
				</option>
				<option name="G" argsep="^">
					<argument name="context" required="false" />
					<argument name="exten" required="false" />
					<argument name="priority" required="true" />
					<para>If the call is answered, transfer the calling party to
					the specified <replaceable>priority</replaceable> and the called party to the specified 
					<replaceable>priority</replaceable> plus one.</para>
					<note>
						<para>You cannot use any additional action post answer options in conjunction with this option.</para>
					</note>
				</option>
				<option name="h">
					<para>Allow the called party to hang up by sending the DTMF sequence
					defined for disconnect in <filename>features.conf</filename>.</para>
				</option>
				<option name="H">
					<para>Allow the calling party to hang up by sending the DTMF sequence
					defined for disconnect in <filename>features.conf</filename>.</para>
					<note>
						<para>Many SIP and ISDN phones cannot send DTMF digits until the call is
						connected.  If you wish to allow DTMF disconnect before the dialed
						party answers with these phones, you can use the <literal>Answer</literal>
						application before dialing.</para>
					</note>
				</option>
				<option name="i">
					<para>Asterisk will ignore any forwarding requests it may receive on this dial attempt.</para>
				</option>
				<option name="I">
					<para>Asterisk will ignore any connected line update requests or redirecting party update
					requests it may receiveon this dial attempt.</para>
				</option>
				<option name="k">
					<para>Allow the called party to enable parking of the call by sending
					the DTMF sequence defined for call parking in <filename>features.conf</filename>.</para>
				</option>
				<option name="K">
					<para>Allow the calling party to enable parking of the call by sending
					the DTMF sequence defined for call parking in <filename>features.conf</filename>.</para>
				</option>
				<option name="L" argsep=":">
					<argument name="x" required="true">
						<para>Maximum call time, in milliseconds</para>
					</argument>
					<argument name="y">
						<para>Warning time, in milliseconds</para>
					</argument>
					<argument name="z">
						<para>Repeat time, in milliseconds</para>
					</argument>
					<para>Limit the call to <replaceable>x</replaceable> milliseconds. Play a warning when <replaceable>y</replaceable> milliseconds are
					left. Repeat the warning every <replaceable>z</replaceable> milliseconds until time expires.</para>
					<para>This option is affected by the following variables:</para>
					<variablelist>
						<variable name="LIMIT_PLAYAUDIO_CALLER">
							<value name="yes" default="true" />
							<value name="no" />
							<para>If set, this variable causes Asterisk to play the prompts to the caller.</para>
						</variable>
						<variable name="LIMIT_PLAYAUDIO_CALLEE">
							<value name="yes" />
							<value name="no" default="true"/>
							<para>If set, this variable causes Asterisk to play the prompts to the callee.</para>
						</variable>
						<variable name="LIMIT_TIMEOUT_FILE">
							<value name="filename"/>
							<para>If specified, <replaceable>filename</replaceable> specifies the sound prompt to play when the timeout is reached.
							If not set, the time remaining will be announced.</para>
						</variable>
						<variable name="LIMIT_CONNECT_FILE">
							<value name="filename"/>
							<para>If specified, <replaceable>filename</replaceable> specifies the sound prompt to play when the call begins.
							If not set, the time remaining will be announced.</para>
						</variable>
						<variable name="LIMIT_WARNING_FILE">
							<value name="filename"/>
							<para>If specified, <replaceable>filename</replaceable> specifies the sound prompt to play as
							a warning when time <replaceable>x</replaceable> is reached. If not set, the time remaining will be announced.</para>
						</variable>
					</variablelist>
				</option>
				<option name="m">
					<argument name="class" required="false"/>
					<para>Provide hold music to the calling party until a requested
					channel answers. A specific music on hold <replaceable>class</replaceable>
					(as defined in <filename>musiconhold.conf</filename>) can be specified.</para>
				</option>
				<option name="M" argsep="^">
					<argument name="macro" required="true">
						<para>Name of the macro that should be executed.</para>
					</argument>
					<argument name="arg" multiple="true">
						<para>Macro arguments</para>
					</argument>
					<para>Execute the specified <replaceable>macro</replaceable> for the <emphasis>called</emphasis> channel 
					before connecting to the calling channel. Arguments can be specified to the Macro
					using <literal>^</literal> as a delimiter. The macro can set the variable
					<variable>MACRO_RESULT</variable> to specify the following actions after the macro is
					finished executing:</para>
					<variablelist>
						<variable name="MACRO_RESULT">
							<para>If set, this action will be taken after the macro finished executing.</para>
							<value name="ABORT">
								Hangup both legs of the call
							</value>
							<value name="CONGESTION">
								Behave as if line congestion was encountered
							</value>
							<value name="BUSY">
								Behave as if a busy signal was encountered
							</value>
							<value name="CONTINUE">
								Hangup the called party and allow the calling party to continue dialplan execution at the next priority
							</value>
							<!-- TODO: Fix this syntax up, once we've figured out how to specify the GOTO syntax -->
							<value name="GOTO:&lt;context&gt;^&lt;exten&gt;^&lt;priority&gt;">
								Transfer the call to the specified destination.
							</value>
						</variable>
					</variablelist>
					<note>
						<para>You cannot use any additional action post answer options in conjunction
						with this option. Also, pbx services are not run on the peer (called) channel,
						so you will not be able to set timeouts via the TIMEOUT() function in this macro.</para>
					</note>
					<warning><para>Be aware of the limitations that macros have, specifically with regards to use of
					the <literal>WaitExten</literal> application. For more information, see the documentation for
					Macro()</para></warning>
				</option>
				<option name="n">
				        <argument name="delete">
					        <para>With <replaceable>delete</replaceable> either not specified or set to <literal>0</literal>,
						the recorded introduction will not be deleted if the caller hangs up while the remote party has not
						yet answered.</para>
						<para>With <replaceable>delete</replaceable> set to <literal>1</literal>, the introduction will
						always be deleted.</para>
					</argument>
					<para>This option is a modifier for the call screening/privacy mode. (See the 
					<literal>p</literal> and <literal>P</literal> options.) It specifies
					that no introductions are to be saved in the <directory>priv-callerintros</directory>
					directory.</para>
				</option>
				<option name="N">
					<para>This option is a modifier for the call screening/privacy mode. It specifies
					that if Caller*ID is present, do not screen the call.</para>
				</option>
				<option name="o">
					<argument name="x" required="false" />
					<para>If <replaceable>x</replaceable> is not provided, specify that the CallerID that was present on the
					<emphasis>calling</emphasis> channel be stored as the CallerID on the <emphasis>called</emphasis> channel.
					This was the behavior of Asterisk 1.0 and earlier.
					If <replaceable>x</replaceable> is provided, specify the CallerID stored on the <emphasis>called</emphasis> channel.
					Note that o(${CALLERID(all)}) is similar to option o without the parameter.</para>
				</option>
				<option name="O">
					<argument name="mode">
						<para>With <replaceable>mode</replaceable> either not specified or set to <literal>1</literal>,
						the originator hanging up will cause the phone to ring back immediately.</para>
						<para>With <replaceable>mode</replaceable> set to <literal>2</literal>, when the operator 
						flashes the trunk, it will ring their phone back.</para>
					</argument>
					<para>Enables <emphasis>operator services</emphasis> mode.  This option only
					works when bridging a DAHDI channel to another DAHDI channel
					only. if specified on non-DAHDI interfaces, it will be ignored.
					When the destination answers (presumably an operator services
					station), the originator no longer has control of their line.
					They may hang up, but the switch will not release their line
					until the destination party (the operator) hangs up.</para>
				</option>
				<option name="p">
					<para>This option enables screening mode. This is basically Privacy mode
					without memory.</para>
				</option>
				<option name="P">
					<argument name="x" />
					<para>Enable privacy mode. Use <replaceable>x</replaceable> as the family/key in the AstDB database if
					it is provided. The current extension is used if a database family/key is not specified.</para>
				</option>
				<option name="r">
					<para>Default: Indicate ringing to the calling party, even if the called party isn't actually ringing. Pass no audio to the calling
					party until the called channel has answered.</para>
					<argument name="tone" required="false">
						<para>Indicate progress to calling party. Send audio 'tone' from indications.conf</para>
					</argument>
				</option>
				<option name="S">
					<argument name="x" required="true" />
					<para>Hang up the call <replaceable>x</replaceable> seconds <emphasis>after</emphasis> the called party has
					answered the call.</para>
				</option>
				<option name="s">
					<argument name="x" required="true" />
					<para>Force the outgoing callerid tag parameter to be set to the string <replaceable>x</replaceable>.</para>
					<para>Works with the f option.</para>
				</option>
				<option name="t">
					<para>Allow the called party to transfer the calling party by sending the
					DTMF sequence defined in <filename>features.conf</filename>. This setting does not perform policy enforcement on
					transfers initiated by other methods.</para>
				</option>
				<option name="T">
					<para>Allow the calling party to transfer the called party by sending the
					DTMF sequence defined in <filename>features.conf</filename>. This setting does not perform policy enforcement on
					transfers initiated by other methods.</para>
				</option>
				<option name="U" argsep="^">
					<argument name="x" required="true">
						<para>Name of the subroutine to execute via Gosub</para>
					</argument>
					<argument name="arg" multiple="true" required="false">
						<para>Arguments for the Gosub routine</para>
					</argument>
					<para>Execute via Gosub the routine <replaceable>x</replaceable> for the <emphasis>called</emphasis> channel before connecting
					to the calling channel. Arguments can be specified to the Gosub
					using <literal>^</literal> as a delimiter. The Gosub routine can set the variable
					<variable>GOSUB_RESULT</variable> to specify the following actions after the Gosub returns.</para>
					<variablelist>
						<variable name="GOSUB_RESULT">
							<value name="ABORT">
								Hangup both legs of the call.
							</value>
							<value name="CONGESTION">
								Behave as if line congestion was encountered.
							</value>
							<value name="BUSY">
								Behave as if a busy signal was encountered.
							</value>
							<value name="CONTINUE">
								Hangup the called party and allow the calling party
								to continue dialplan execution at the next priority.
							</value>
							<!-- TODO: Fix this syntax up, once we've figured out how to specify the GOTO syntax -->
							<value name="GOTO:&lt;context&gt;^&lt;exten&gt;^&lt;priority&gt;">
								Transfer the call to the specified priority. Optionally, an extension, or
								extension and priority can be specified.
							</value>
						</variable>
					</variablelist>
					<note>
						<para>You cannot use any additional action post answer options in conjunction
						with this option. Also, pbx services are not run on the peer (called) channel,
						so you will not be able to set timeouts via the TIMEOUT() function in this routine.</para>
					</note>
				</option>
				<option name="u">
					<argument name = "x" required="true">
						<para>Force the outgoing callerid presentation indicator parameter to be set
						to one of the values passed in <replaceable>x</replaceable>:
						<literal>allowed_not_screened</literal>
						<literal>allowed_passed_screen</literal>
						<literal>allowed_failed_screen</literal>
						<literal>allowed</literal>
						<literal>prohib_not_screened</literal>
						<literal>prohib_passed_screen</literal>
						<literal>prohib_failed_screen</literal>
						<literal>prohib</literal>
						<literal>unavailable</literal></para>
					</argument>
					<para>Works with the f option.</para>
				</option>
				<option name="w">
					<para>Allow the called party to enable recording of the call by sending
					the DTMF sequence defined for one-touch recording in <filename>features.conf</filename>.</para>
				</option>
				<option name="W">
					<para>Allow the calling party to enable recording of the call by sending
					the DTMF sequence defined for one-touch recording in <filename>features.conf</filename>.</para>
				</option>
				<option name="x">
					<para>Allow the called party to enable recording of the call by sending
					the DTMF sequence defined for one-touch automixmonitor in <filename>features.conf</filename>.</para>
				</option>
				<option name="X">
					<para>Allow the calling party to enable recording of the call by sending
					the DTMF sequence defined for one-touch automixmonitor in <filename>features.conf</filename>.</para>
				</option>
				<option name="z">
					<para>On a call forward, cancel any dial timeout which has been set for this call.</para>
				</option>
				</optionlist>
			</parameter>
			<parameter name="URL">
				<para>The optional URL will be sent to the called party if the channel driver supports it.</para>
			</parameter>
		</syntax>
		<description>
			<para>This application will place calls to one or more specified channels. As soon
			as one of the requested channels answers, the originating channel will be
			answered, if it has not already been answered. These two channels will then
			be active in a bridged call. All other channels that were requested will then
			be hung up.</para>

			<para>Unless there is a timeout specified, the Dial application will wait
			indefinitely until one of the called channels answers, the user hangs up, or
			if all of the called channels are busy or unavailable. Dialplan executing will
			continue if no requested channels can be called, or if the timeout expires.
			This application will report normal termination if the originating channel
			hangs up, or if the call is bridged and either of the parties in the bridge
			ends the call.</para>
			<para>If the <variable>OUTBOUND_GROUP</variable> variable is set, all peer channels created by this
			application will be put into that group (as in Set(GROUP()=...).
			If the <variable>OUTBOUND_GROUP_ONCE</variable> variable is set, all peer channels created by this
			application will be put into that group (as in Set(GROUP()=...). Unlike <variable>OUTBOUND_GROUP</variable>,
			however, the variable will be unset after use.</para>

			<para>This application sets the following channel variables:</para>
			<variablelist>
				<variable name="DIALEDTIME">
					<para>This is the time from dialing a channel until when it is disconnected.</para>
				</variable>
				<variable name="ANSWEREDTIME">
					<para>This is the amount of time for actual call.</para>
				</variable>
				<variable name="DIALSTATUS">
					<para>This is the status of the call</para>
					<value name="CHANUNAVAIL" />
					<value name="CONGESTION" />
					<value name="NOANSWER" />
					<value name="BUSY" />
					<value name="ANSWER" />
					<value name="CANCEL" />
					<value name="DONTCALL">
						For the Privacy and Screening Modes.
						Will be set if the called party chooses to send the calling party to the 'Go Away' script.
					</value>
					<value name="TORTURE">
						For the Privacy and Screening Modes.
						Will be set if the called party chooses to send the calling party to the 'torture' script.
					</value>
					<value name="INVALIDARGS" />
				</variable>
			</variablelist>
		</description>
	</application>
	<application name="RetryDial" language="en_US">
		<synopsis>
			Place a call, retrying on failure allowing an optional exit extension.
		</synopsis>
		<syntax>
			<parameter name="announce" required="true">
				<para>Filename of sound that will be played when no channel can be reached</para>
			</parameter>
			<parameter name="sleep" required="true">
				<para>Number of seconds to wait after a dial attempt failed before a new attempt is made</para>
			</parameter>
			<parameter name="retries" required="true">
				<para>Number of retries</para>
				<para>When this is reached flow will continue at the next priority in the dialplan</para>
			</parameter>
			<parameter name="dialargs" required="true">
				<para>Same format as arguments provided to the Dial application</para>
			</parameter>
		</syntax>
		<description>
			<para>This application will attempt to place a call using the normal Dial application.
			If no channel can be reached, the <replaceable>announce</replaceable> file will be played.
			Then, it will wait <replaceable>sleep</replaceable> number of seconds before retrying the call.
			After <replaceable>retries</replaceable> number of attempts, the calling channel will continue at the next priority in the dialplan.
			If the <replaceable>retries</replaceable> setting is set to 0, this application will retry endlessly.
			While waiting to retry a call, a 1 digit extension may be dialed. If that
			extension exists in either the context defined in <variable>EXITCONTEXT</variable> or the current
			one, The call will jump to that extension immediately.
			The <replaceable>dialargs</replaceable> are specified in the same format that arguments are provided
			to the Dial application.</para>
		</description>
	</application>
	<application name="Dictate" language="en_US">
		<synopsis>
			Virtual Dictation Machine.
		</synopsis>
		<syntax>
			<parameter name="base_dir" />
			<parameter name="filename" />
		</syntax>
		<description>
			<para>Start dictation machine using optional <replaceable>base_dir</replaceable> for files.</para>
		</description>
	</application>
	<application name="Pickup" language="en_US">
		<synopsis>
			Directed extension call pickup.
		</synopsis>
		<syntax argsep="&amp;">
			<parameter name="ext" argsep="@" required="true">
				<argument name="extension" required="true"/>
				<argument name="context" />
			</parameter>
			<parameter name="ext2" argsep="@" multiple="true">
				<argument name="extension2" required="true"/>
				<argument name="context2"/>
			</parameter>
		</syntax>
		<description>
			<para>This application can pickup any ringing channel that is calling
			the specified <replaceable>extension</replaceable>. If no <replaceable>context</replaceable>
			is specified, the current context will be used. If you use the special string <literal>PICKUPMARK</literal>
			for the context parameter, for example 10@PICKUPMARK, this application
			tries to find a channel which has defined a <variable>PICKUPMARK</variable>
			channel variable with the same value as <replaceable>extension</replaceable>
			(in this example, <literal>10</literal>). When no parameter is specified, the application
			will pickup a channel matching the pickup group of the active channel.</para>
		</description>
	</application>
	<application name="PickupChan" language="en_US">
		<synopsis>
			Pickup a ringing channel.
		</synopsis>
		<syntax >
			<parameter name="Technology/Resource" argsep="&amp;" required="true">
				<argument name="Technology/Resource" required="true" />
				<argument name="Technology2/Resource2" required="false" multiple="true" />
			</parameter>
			<parameter name="options" required="false">
				<optionlist>
					<option name="p">
						<para>Channel name specified partial name. Used when find channel by callid.</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>This will pickup a specified <replaceable>channel</replaceable> if ringing.</para>
		</description>
	</application>
	<application name="Directory" language="en_US">
		<synopsis>
			Provide directory of voicemail extensions.
		</synopsis>
		<syntax>
			<parameter name="vm-context">
				<para>This is the context within voicemail.conf to use for the Directory. If not 
				specified and <literal>searchcontexts=no</literal> in 
				<filename>voicemail.conf</filename>, then <literal>default</literal> 
				will be assumed.</para>
			</parameter>
			<parameter name="dial-context" required="false">
				<para>This is the dialplan context to use when looking for an
				extension that the user has selected, or when jumping to the
				<literal>o</literal> or <literal>a</literal> extension. If not
				specified, the current context will be used.</para>
			</parameter>
			<parameter name="options" required="false">
				<optionlist>
					<option name="e">
						<para>In addition to the name, also read the extension number to the
						caller before presenting dialing options.</para>
					</option>
					<option name="f">
						<para>Allow the caller to enter the first name of a user in the
						directory instead of using the last name.  If specified, the
						optional number argument will be used for the number of
						characters the user should enter.</para>
						<argument name="n" required="true" />
					</option>
					<option name="l">
						<para>Allow the caller to enter the last name of a user in the
						directory.  This is the default.  If specified, the
						optional number argument will be used for the number of
						characters the user should enter.</para>
						<argument name="n" required="true" />
					</option>
					<option name="b">
						<para> Allow the caller to enter either the first or the last name
						of a user in the directory.  If specified, the optional number
						argument will be used for the number of characters the user should enter.</para>
						<argument name="n" required="true" />
					</option>
					<option name="m">
						<para>Instead of reading each name sequentially and asking for
						confirmation, create a menu of up to 8 names.</para>
					</option>
					<option name="n">
						<para>Read digits even if the channel is not answered.</para>
					</option>
					<option name="p">
						<para>Pause for n milliseconds after the digits are typed.  This is
						helpful for people with cellphones, who are not holding the
						receiver to their ear while entering DTMF.</para>
						<argument name="n" required="true" />
					</option>
				</optionlist>
				<note><para>Only one of the <replaceable>f</replaceable>, <replaceable>l</replaceable>, or <replaceable>b</replaceable>
				options may be specified. <emphasis>If more than one is specified</emphasis>, then Directory will act as 
				if <replaceable>b</replaceable> was specified.  The number
				of characters for the user to type defaults to <literal>3</literal>.</para></note>
			</parameter>
		</syntax>
		<description>
			<para>This application will present the calling channel with a directory of extensions from which they can search
			by name. The list of names and corresponding extensions is retrieved from the
			voicemail configuration file, <filename>voicemail.conf</filename>.</para>
			<para>This application will immediately exit if one of the following DTMF digits are
			received and the extension to jump to exists:</para>
			<para><literal>0</literal> - Jump to the 'o' extension, if it exists.</para>
			<para><literal>*</literal> - Jump to the 'a' extension, if it exists.</para>
		</description>
	</application>

	<application name="DISA" language="en_US">
		<synopsis>
			Direct Inward System Access.
		</synopsis>
		<syntax>
			<parameter name="passcode|filename" required="true">
				<para>If you need to present a DISA dialtone without entering a password,
				simply set <replaceable>passcode</replaceable> to <literal>no-password</literal></para>
				<para>You may specified a <replaceable>filename</replaceable> instead of a
				<replaceable>passcode</replaceable>, this filename must contain individual passcodes</para>
			</parameter>
			<parameter name="context">
				<para>Specifies the dialplan context in which the user-entered extension
				will be matched. If no context is specified, the DISA application defaults
				to the <literal>disa</literal> context. Presumably a normal system will have a special
				context set up for DISA use with some or a lot of restrictions.</para>
			</parameter>
			<parameter name="cid">
				<para>Specifies a new (different) callerid to be used for this call.</para>
			</parameter>
			<parameter name="mailbox" argsep="@">
				<para>Will cause a stutter-dialtone (indication <emphasis>dialrecall</emphasis>)
				to be used, if the specified mailbox contains any new messages.</para>
				<argument name="mailbox" required="true" />
				<argument name="context" required="false" />
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="n">
						<para>The DISA application will not answer initially.</para>
					</option>
					<option name="p">
						<para>The extension entered will be considered complete when a <literal>#</literal>
						is entered.</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>The DISA, Direct Inward System Access, application allows someone from
			outside the telephone switch (PBX) to obtain an <emphasis>internal</emphasis> system
			dialtone and to place calls from it as if they were placing a call from
			within the switch.
			DISA plays a dialtone. The user enters their numeric passcode, followed by
			the pound sign <literal>#</literal>. If the passcode is correct, the user is then given
			system dialtone within <replaceable>context</replaceable> on which a call may be placed.
			If the user enters an invalid extension and extension <literal>i</literal> exists in the specified
			<replaceable>context</replaceable>, it will be used.
			</para>
			<para>Be aware that using this may compromise the security of your PBX.</para>
			<para>The arguments to this application (in <filename>extensions.conf</filename>) allow either
			specification of a single global <replaceable>passcode</replaceable> (that everyone uses), or
			individual passcodes contained in a file (<replaceable>filename</replaceable>).</para>
			<para>The file that contains the passcodes (if used) allows a complete
			specification of all of the same arguments available on the command
			line, with the sole exception of the options. The file may contain blank
			lines, or comments starting with <literal>#</literal> or <literal>;</literal>.</para>
		</description>
		<see-also>
			<ref type="application">Authenticate</ref>
			<ref type="application">VMAuthenticate</ref>
		</see-also>
	</application>
	<application name="DumpChan" language="en_US">
		<synopsis>
			Dump Info About The Calling Channel.
		</synopsis>
		<syntax>
			<parameter name="level">
				<para>Minimun verbose level</para>
			</parameter>
		</syntax>
		<description>
			<para>Displays information on channel and listing of all channel
			variables. If <replaceable>level</replaceable> is specified, output is only
			displayed when the verbose level is currently set to that number
			or greater.</para>
		</description>
		<see-also>
			<ref type="application">NoOp</ref>
			<ref type="application">Verbose</ref>
		</see-also>
	</application>
	<application name="Echo" language="en_US">
		<synopsis>
			Echo audio, video, DTMF back to the calling party
		</synopsis>
		<syntax />
		<description>
			<para>Echos back any audio, video or DTMF frames read from the calling 
			channel back to itself. Note: If '#' detected application exits</para>
			<para>This application does not automatically answer and should be
			preceeded by an application such as Answer() or Progress().</para>
		</description>
	</application>
	<application name="Exec" language="en_US">
		<synopsis>
			Executes dialplan application.
		</synopsis>
		<syntax>
			<parameter name="appname" required="true" hasparams="true">
				<para>Application name and arguments of the dialplan application to execute.</para>
				<argument name="arguments" required="true" />
			</parameter>
		</syntax>
		<description>
			<para>Allows an arbitrary application to be invoked even when not
			hard coded into the dialplan.  If the underlying application
			terminates the dialplan, or if the application cannot be found,
			Exec will terminate the dialplan.</para>
			<para>To invoke external applications, see the application System.
			If you would like to catch any error instead, see TryExec.</para>
		</description>
	</application>
	<application name="TryExec" language="en_US">
		<synopsis>
			Executes dialplan application, always returning.
		</synopsis>
		<syntax>
			<parameter name="appname" required="true" hasparams="true">
				<argument name="arguments" required="true" />
			</parameter>
		</syntax>
		<description>
			<para>Allows an arbitrary application to be invoked even when not
			hard coded into the dialplan. To invoke external applications
			see the application System.  Always returns to the dialplan.
			The channel variable TRYSTATUS will be set to one of:
			</para>
			<variablelist>
				<variable name="TRYSTATUS">
					<value name="SUCCESS">
						If the application returned zero.
					</value>
					<value name="FAILED">
						If the application returned non-zero.
					</value>
					<value name="NOAPP">
						If the application was not found or was not specified.
					</value>
				</variable>
			</variablelist>
		</description>
	</application>
	<application name="ExecIf" language="en_US">
		<synopsis>
			Executes dialplan application, conditionally.
		</synopsis>
		<syntax argsep="?">
			<parameter name="expression" required="true" />
			<parameter name="execapp" required="true" argsep=":">
				<argument name="appiftrue" required="true" hasparams="true">
					<argument name="args" required="true" />
				</argument>
				<argument name="appiffalse" required="false" hasparams="true">
					<argument name="args" required="true" />
				</argument>
			</parameter>
		</syntax>
		<description>
			<para>If <replaceable>expr</replaceable> is true, execute and return the
			result of <replaceable>appiftrue(args)</replaceable>.</para>
			<para>If <replaceable>expr</replaceable> is true, but <replaceable>appiftrue</replaceable> is not found,
			then the application will return a non-zero value.</para>
		</description>
	</application>
	<application name="ExternalIVR" language="en_US">
		<synopsis>
			Interfaces with an external IVR application.
		</synopsis>
		<syntax>
			<parameter name="command|ivr://host" required="true" hasparams="true">
				<argument name="arg1" />
				<argument name="arg2" multiple="yes" />
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="n">
						<para>Tells ExternalIVR() not to answer the channel.</para>
					</option>
					<option name="i">
						<para>Tells ExternalIVR() not to send a hangup and exit when the
						channel receives a hangup, instead it sends an <literal>I</literal>
						informative message meaning that the external application MUST hang
						up the call with an <literal>H</literal> command.</para>
					</option>
					<option name="d">
						<para>Tells ExternalIVR() to run on a channel that has been hung up
						and will not look for hangups. The external application must exit with
						an <literal>E</literal> command.</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>Either forks a process to run given command or makes a socket to connect
			to given host and starts a generator on the channel. The generator's play list
			is controlled by the external application, which can add and clear entries via
			simple commands issued over its stdout. The external application will receive
			all DTMF events received on the channel, and notification if the channel is
			hung up. The received on the channel, and notification if the channel is hung
			up. The application will not be forcibly terminated when the channel is hung up.
			For more information see <filename>doc/AST.pdf</filename>.</para>
		</description>
	</application>
	<application name="SendFAX" language="en_US" module="app_fax">
		<synopsis>
			Send a Fax
		</synopsis>
		<syntax>
			<parameter name="filename" required="true">
				<para>Filename of TIFF file to fax</para>
			</parameter>
			<parameter name="a" required="false">
				<para>Makes the application behave as the answering machine</para>
				<para>(Default behavior is as calling machine)</para>
			</parameter>
		</syntax>
		<description>
			<para>Send a given TIFF file to the channel as a FAX.</para>
			<para>This application sets the following channel variables:</para>
			<variablelist>
				<variable name="LOCALSTATIONID">
					<para>To identify itself to the remote end</para>
				</variable>
				<variable name="LOCALHEADERINFO">
					<para>To generate a header line on each page</para>
				</variable>
				<variable name="FAXSTATUS">
					<value name="SUCCESS"/>
					<value name="FAILED"/>
				</variable>
				<variable name="FAXERROR">
					<para>Cause of failure</para>
				</variable>
				<variable name="REMOTESTATIONID">
					<para>The CSID of the remote side</para>
				</variable>
				<variable name="FAXPAGES">
					<para>Number of pages sent</para>
				</variable>
				<variable name="FAXBITRATE">
					<para>Transmission rate</para>
				</variable>
				<variable name="FAXRESOLUTION">
					<para>Resolution of sent fax</para>
				</variable>
			</variablelist>
		</description>
	</application>
	<application name="ReceiveFAX" language="en_US" module="app_fax">
		<synopsis>
			Receive a Fax
		</synopsis>
		<syntax>
			<parameter name="filename" required="true">
				<para>Filename of TIFF file save incoming fax</para>
			</parameter>
			<parameter name="c" required="false">
				<para>Makes the application behave as the calling machine</para> 
				<para>(Default behavior is as answering machine)</para>
			</parameter>
		</syntax>
		<description>
			<para>Receives a FAX from the channel into the given filename 
			overwriting the file if it already exists.</para>
			<para>File created will be in TIFF format.</para>

			<para>This application sets the following channel variables:</para>
			<variablelist>
				<variable name="LOCALSTATIONID">
					<para>To identify itself to the remote end</para>
				</variable>
				<variable name="LOCALHEADERINFO">
					<para>To generate a header line on each page</para>
				</variable>
				<variable name="FAXSTATUS">
					<value name="SUCCESS"/>
					<value name="FAILED"/>
				</variable>
				<variable name="FAXERROR">
					<para>Cause of failure</para>
				</variable>
				<variable name="REMOTESTATIONID">
					<para>The CSID of the remote side</para>
				</variable>
				<variable name="FAXPAGES">
					<para>Number of pages sent</para>
				</variable>
				<variable name="FAXBITRATE">
					<para>Transmission rate</para>
				</variable>
				<variable name="FAXRESOLUTION">
					<para>Resolution of sent fax</para>
				</variable>
			</variablelist>
		</description>
	</application>

	<application name="Festival" language="en_US">
		<synopsis>
			Say text to the user.
		</synopsis>
		<syntax>
			<parameter name="text" required="true" />
			<parameter name="intkeys" />
		</syntax>
		<description>
			<para>Connect to Festival, send the argument, get back the waveform, play it to the user,
			allowing any given interrupt keys to immediately terminate and return the value, or
			<literal>any</literal> to allow any number back (useful in dialplan).</para>
		</description>
	</application>
	<application name="Flash" language="en_US">
		<synopsis>
			Flashes a DAHDI Trunk.
		</synopsis>
		<syntax />
		<description>
			<para>Performs a flash on a DAHDI trunk. This can be used to access features
			provided on an incoming analogue circuit such as conference and call waiting.
			Use with SendDTMF() to perform external transfers.</para>
		</description>
		<see-also>
			<ref type="application">SendDTMF</ref>
		</see-also>
	</application>
	<application name="FollowMe" language="en_US">
		<synopsis>
			Find-Me/Follow-Me application.
		</synopsis>
		<syntax>
			<parameter name="followmeid" required="true" />
			<parameter name="options">
				<optionlist>
					<option name="s">
						<para>Playback the incoming status message prior to starting
						the follow-me step(s)</para>
					</option>
					<option name="a">
						<para>Record the caller's name so it can be announced to the
						callee on each step.</para>
					</option>
					<option name="n">
						<para>Playback the unreachable status message if we've run out
						of steps to reach the or the callee has elected not to be reachable.</para>
					</option>
					<option name="d">
						<para>Disable the 'Please hold while we try to connect your call' announcement.</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>This application performs Find-Me/Follow-Me functionality for the caller
			as defined in the profile matching the <replaceable>followmeid</replaceable> parameter in
			<filename>followme.conf</filename>. If the specified <replaceable>followmeid</replaceable>
			profile doesn't exist in <filename>followme.conf</filename>, execution will be returned
			to the dialplan and call execution will continue at the next priority.</para>
			<para>Returns -1 on hangup.</para>
		</description>
	</application>
	<application name="ForkCDR" language="en_US">
		<synopsis>
			Forks the Call Data Record.
		</synopsis>
		<syntax>
			<parameter name="options">
				<optionlist>
					<option name="a">
						<para>Update the answer time on the NEW CDR just after it's been inited.
						The new CDR may have been answered already. The reset that forkcdr does
						will erase the answer time. This will bring it back, but the answer time
						will be a copy of the fork/start time. It will only do this if the initial
						cdr was indeed already answered.</para>
					</option>
					<option name="A">
						<para>Lock the original CDR against the answer time being updated. This
						will allow the disposition on the original CDR to remain the same.</para>
					</option>
					<option name="d">
						<para>Copy the disposition forward from the old cdr, after the init.</para>
					</option>
					<option name="D">
						<para>Clear the <literal>dstchannel</literal> on the new CDR after
						reset.</para>
					</option>
					<option name="e">
						<para>End the original CDR. Do this after all the necessary data is copied
						from the original CDR to the new forked CDR.</para>
					</option>
					<option name="r">
						<para>Do <emphasis>NOT</emphasis> reset the new cdr.</para>
					</option>
					<option name="s(name=val)">
						<para>Set the CDR var <replaceable>name</replaceable> in the original CDR,
						with value <replaceable>val</replaceable>.</para>
					</option>
					<option name="T">
						<para>Mark the original CDR with a DONT_TOUCH flag. setvar, answer, and end
						cdr funcs will obey this flag; normally they don't honor the LOCKED flag
						set on the original CDR record.</para>
						<note><para>Using this flag may cause CDR's not to have their end times
						updated! It is suggested that if you specify this flag, you might wish
						to use the <literal>e</literal> flag as well!.</para></note>
					</option>
					<option name="v">
						<para>When the new CDR is forked, it gets a copy of the vars attached to
						the current CDR. The vars attached to the original CDR are removed unless
						this option is specified.</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para> Causes the Call Data Record to fork an additional cdr record starting from the time
			of the fork call. This new cdr record will be linked to end of the list of cdr records attached
			to the channel.	The original CDR has a LOCKED flag set, which forces most cdr operations to skip
			it, except for the functions that set the answer and end times, which ignore the LOCKED flag. This
			allows all the cdr records in the channel to be 'ended' together when the channel is closed.</para>
			<para>The CDR() func (when setting CDR values) normally ignores the LOCKED flag also, but has options
			to vary its behavior. The 'T' option (described below), can override this behavior, but beware
			the risks.</para>
			<para>First, this app finds the last cdr record in the list, and makes a copy of it. This new copy
			will be the newly forked cdr record. Next, this new record is linked to the end of the cdr record list.
			Next, The new cdr record is RESET (unless you use an option to prevent this)</para>
			<para>This means that:</para>
			<para>   1. All flags are unset on the cdr record</para>
			<para>   2. the start, end, and answer times are all set to zero.</para>
			<para>   3. the billsec and duration fields are set to zero.</para>
			<para>   4. the start time is set to the current time.</para>
			<para>   5. the disposition is set to NULL.</para>
			<para>Next, unless you specified the <literal>v</literal> option, all variables will be removed from
			the original cdr record. Thus, the <literal>v</literal> option allows any CDR variables to be replicated
			to all new forked cdr records. Without the <literal>v</literal> option, the variables on the original
			are effectively moved to the new forked cdr record.</para>
			<para>Next, if the <literal>s</literal> option is set, the provided variable and value are set on the
			original cdr record.</para>
			<para>Next, if the <literal>a</literal> option is given, and the original cdr record has an answer time
			set, then the new forked cdr record will have its answer time set to its start time. If the old answer
			time were carried forward, the answer time would be earlier than the start time, giving strange
			duration and billsec times.</para>
			<para>If the <literal>d</literal> option was specified, the disposition is copied from
			the original cdr record to the new forked cdr. If the <literal>D</literal> option was specified,
			the destination channel field in the new forked CDR is erased. If the <literal>e</literal> option
			was specified, the 'end' time for the original cdr record is set to the current time. Future hang-up or
			ending events will not override this time stamp. If the <literal>A</literal> option is specified,
			the original cdr record will have it ANS_LOCKED flag set, which prevent future answer events from updating
			the original cdr record's disposition. Normally, an <literal>ANSWERED</literal> event would mark all cdr
			records in the chain as <literal>ANSWERED</literal>. If the <literal>T</literal> option is specified,
			the original cdr record will have its <literal>DONT_TOUCH</literal> flag set, which will force the
			cdr_answer, cdr_end, and cdr_setvar functions to leave that cdr record alone.</para>
			<para>And, last but not least, the original cdr record has its LOCKED flag set. Almost all internal
			CDR functions (except for the funcs that set the end, and answer times, and set a variable) will honor
			this flag and leave a LOCKED cdr record alone. This means that the newly created forked cdr record
			will be affected by events transpiring within Asterisk, with the previously noted exceptions.</para>
		</description>
		<see-also>
			<ref type="function">CDR</ref>
			<ref type="application">NoCDR</ref>
			<ref type="application">ResetCDR</ref>
		</see-also>
	</application>
	<application name="GetCPEID" language="en_US">
		<synopsis>
			Get ADSI CPE ID.
		</synopsis>
		<syntax />
		<description>
			<para>Obtains and displays ADSI CPE ID and other information in order
			to properly setup <filename>dahdi.conf</filename> for on-hook operations.</para>
		</description>
	</application>
	<application name="ICES" language="en_US">
		<synopsis>
			Encode and stream using 'ices'.
		</synopsis>
		<syntax>
			<parameter name="config" required="true">
				<para>ICES configuration file.</para>
			</parameter>
		</syntax>
		<description>
			<para>Streams to an icecast server using ices (available separately).
			A configuration file must be supplied for ices (see contrib/asterisk-ices.xml).</para>
			<note><para>ICES version 2 client and server required.</para></note>
		</description>
	</application>

	<application name="SendImage" language="en_US">
		<synopsis>
			Sends an image file.
		</synopsis>
		<syntax>
			<parameter name="filename" required="true">
				<para>Path of the filename (image) to send.</para>
			</parameter>
		</syntax>
		<description>
			<para>Send an image file on a channel supporting it.</para>
			<para>Result of transmission will be stored in <variable>SENDIMAGESTATUS</variable></para>
			<variablelist>
				<variable name="SENDIMAGESTATUS">
					<value name="SUCCESS">
						Transmission succeeded.
					</value>
					<value name="FAILURE">
						Transmission failed.
					</value>
					<value name="UNSUPPORTED">
						Image transmission not supported by channel.
					</value>
				</variable>
			</variablelist>
		</description>
		<see-also>
			<ref type="application">SendText</ref>
			<ref type="application">SendURL</ref>
		</see-also>
	</application>
	<application name="IVRDemo" language="en_US">
		<synopsis>
			IVR Demo Application.
		</synopsis>
		<syntax>
			<parameter name="filename" required="true" />
		</syntax>
		<description>
			<para>This is a skeleton application that shows you the basic structure to create your
			own asterisk applications and demonstrates the IVR demo.</para>
		</description>
	</application>
	<application name="JACK" language="en_US">
		<synopsis>
			Jack Audio Connection Kit
		</synopsis>
		<syntax>
			<parameter name="options" required="false">
				<optionlist>
					<option name="s">
						<argument name="name" required="true">
							<para>Connect to the specified jack server name</para>
						</argument>
					</option>
					<option name="i">
						<argument name="name" required="true">
							<para>Connect the output port that gets created to the specified jack input port</para>
						</argument>
					</option>
					<option name="o">
						<argument name="name" required="true">
							<para>Connect the input port that gets created to the specified jack output port</para>
						</argument>
					</option>
					<option name="c">
						<argument name="name" required="true">
							<para>By default, Asterisk will use the channel name for the jack client name.</para>
							<para>Use this option to specify a custom client name.</para>
						</argument>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>When executing this application, two jack ports will be created;
			one input and one output. Other applications can be hooked up to
			these ports to access audio coming from, or being send to the channel.</para>
		</description>
	</application>
	<application name="Macro" language="en_US">
		<synopsis>
			Macro Implementation.
		</synopsis>
		<syntax>
			<parameter name="name" required="true">
				<para>The name of the macro</para>
			</parameter>
			<parameter name="args">
				<argument name="arg1" required="true" />
				<argument name="arg2" multiple="true" />
			</parameter>
		</syntax>
		<description>
			<para>Executes a macro using the context macro-<replaceable>name</replaceable>,
			jumping to the <literal>s</literal> extension of that context and executing each step,
			then returning when the steps end.</para>
			<para>The calling extension, context, and priority are stored in <variable>MACRO_EXTEN</variable>,
			<variable>MACRO_CONTEXT</variable> and <variable>MACRO_PRIORITY</variable> respectively. Arguments
			become <variable>ARG1</variable>, <variable>ARG2</variable>, etc in the macro context.</para>
			<para>If you Goto out of the Macro context, the Macro will terminate and control will be returned
			at the location of the Goto.</para>
			<para>If <variable>MACRO_OFFSET</variable> is set at termination, Macro will attempt to continue
			at priority MACRO_OFFSET + N + 1 if such a step exists, and N + 1 otherwise.</para>
			<warning><para>Because of the way Macro is implemented (it executes the priorities contained within
			it via sub-engine), and a fixed per-thread memory stack allowance, macros are limited to 7 levels
			of nesting (macro calling macro calling macro, etc.); It may be possible that stack-intensive
			applications in deeply nested macros could cause asterisk to crash earlier than this limit.
			It is advised that if you need to deeply nest macro calls, that you use the Gosub application
			(now allows arguments like a Macro) with explict Return() calls instead.</para></warning>
			<warning><para>Use of the application <literal>WaitExten</literal> within a macro will not function
			as expected. Please use the <literal>Read</literal> application in order to read DTMF from a channel
			currently executing a macro.</para></warning>
		</description>
		<see-also>
			<ref type="application">MacroExit</ref>
			<ref type="application">Goto</ref>
			<ref type="application">Gosub</ref>
		</see-also>
	</application>
	<application name="MacroIf" language="en_US">
		<synopsis>
			Conditional Macro implementation.
		</synopsis>
		<syntax argsep="?">
			<parameter name="expr" required="true" />
			<parameter name="destination" required="true" argsep=":">
				<argument name="macroiftrue" required="true">
					<argument name="macroiftrue" required="true" />
					<argument name="arg1" multiple="true" />
				</argument>
				<argument name="macroiffalse">
					<argument name="macroiffalse" required="true" />
					<argument name="arg1" multiple="true" />
				</argument>
			</parameter>
		</syntax>
		<description>
			<para>Executes macro defined in <replaceable>macroiftrue</replaceable> if
			<replaceable>expr</replaceable> is true (otherwise <replaceable>macroiffalse</replaceable>
			if provided)</para>
			<para>Arguments and return values as in application Macro()</para>
			<xi:include xpointer="xpointer(/docs/application[@name='Macro']/description/warning[2])" />
		</description>
		<see-also>
			<ref type="application">GotoIf</ref>
			<ref type="application">GosubIf</ref>
			<ref type="function">IF</ref>
		</see-also>
	</application>
	<application name="MacroExclusive" language="en_US">
		<synopsis>
			Exclusive Macro Implementation.
		</synopsis>
		<syntax>
			<parameter name="name" required="true">
				<para>The name of the macro</para>
			</parameter>
			<parameter name="arg1" />
			<parameter name="arg2" multiple="true" />
		</syntax>
		<description>
			<para>Executes macro defined in the context macro-<replaceable>name</replaceable>.
			Only one call at a time may run the macro. (we'll wait if another call is busy
			executing in the Macro)</para>
			<para>Arguments and return values as in application Macro()</para>
			<xi:include xpointer="xpointer(/docs/application[@name='Macro']/description/warning[2])" />
		</description>
		<see-also>
			<ref type="application">Macro</ref>
		</see-also>
	</application>
	<application name="MacroExit" language="en_US">
		<synopsis>
			Exit from Macro.
		</synopsis>
		<syntax />
		<description>
			<para>Causes the currently running macro to exit as if it had
			ended normally by running out of priorities to execute.
			If used outside a macro, will likely cause unexpected behavior.</para>
		</description>
		<see-also>
			<ref type="application">Macro</ref>
		</see-also>
	</application>
	<application name="MeetMe" language="en_US">
		<synopsis>
			MeetMe conference bridge.
		</synopsis>
		<syntax>
			<parameter name="confno">
				<para>The conference number</para>
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="a">
						<para>Set admin mode.</para>
					</option>
					<option name="A">
						<para>Set marked mode.</para>
					</option>
					<option name="b">
						<para>Run AGI script specified in <variable>MEETME_AGI_BACKGROUND</variable>
						Default: <literal>conf-background.agi</literal>.</para>
						<note><para>This does not work with non-DAHDI channels in the same
						conference).</para></note>
					</option>
					<option name="c">
						<para>Announce user(s) count on joining a conference.</para>
					</option>
					<option name="C">
						<para>Continue in dialplan when kicked out of conference.</para>
					</option>
					<option name="d">
						<para>Dynamically add conference.</para>
					</option>
					<option name="D">
						<para>Dynamically add conference, prompting for a PIN.</para>
					</option>
					<option name="e">
						<para>Select an empty conference.</para>
					</option>
					<option name="E">
						<para>Select an empty pinless conference.</para>
					</option>
					<option name="F">
						<para>Pass DTMF through the conference.</para>
					</option>
					<option name="G">
						<argument name="x" required="true">
							<para>The file to playback</para>
						</argument>
						<para>Play an intro announcement in conference.</para>
					</option>
					<option name="i">
						<para>Announce user join/leave with review.</para>
					</option>
					<option name="I">
						<para>Announce user join/leave without review.</para>
					</option>
					<option name="l">
						<para>Set listen only mode (Listen only, no talking).</para>
					</option>
					<option name="m">
						<para>Set initially muted.</para>
					</option>
					<option name="M" hasparams="optional">
						<para>Enable music on hold when the conference has a single caller. Optionally,
						specify a musiconhold class to use. If one is not provided, it will use the
						channel's currently set music class, or <literal>default</literal>.</para>
						<argument name="class" required="true" />
					</option>
					<option name="o">
						<para>Set talker optimization - treats talkers who aren't speaking as
						being muted, meaning (a) No encode is done on transmission and (b)
						Received audio that is not registered as talking is omitted causing no
						buildup in background noise.</para>
					</option>
					<option name="p" hasparams="optional">
						<para>Allow user to exit the conference by pressing <literal>#</literal> (default)
						or any of the defined keys.  The key used is set to channel variable
						<variable>MEETME_EXIT_KEY</variable>.</para>
						<argument name="keys" required="true" />
						<note>
							<para>Option <literal>s</literal> has priority for <literal>*</literal>
							since it cannot change its activation code.</para>
						</note>
					</option>
					<option name="P">
						<para>Always prompt for the pin even if it is specified.</para>
					</option>
					<option name="q">
						<para>Quiet mode (don't play enter/leave sounds).</para>
					</option>
					<option name="r">
						<para>Record conference (records as <variable>MEETME_RECORDINGFILE</variable>
						using format <variable>MEETME_RECORDINGFORMAT</variable>. Default filename is
						<literal>meetme-conf-rec-${CONFNO}-${UNIQUEID}</literal> and the default format is
						wav.</para>
					</option>
					<option name="s">
						<para>Present menu (user or admin) when <literal>*</literal> is received
						(send to menu).</para>
					</option>
					<option name="t">
						<para>Set talk only mode. (Talk only, no listening).</para>
					</option>
					<option name="T">
						<para>Set talker detection (sent to manager interface and meetme list).</para>
					</option>
					<option name="w" hasparams="optional">
						<para>Wait until the marked user enters the conference.</para>
						<argument name="secs" required="true" />
					</option>
					<option name="x">
						<para>Close the conference when last marked user exits</para>
					</option>
					<option name="X">
						<para>Allow user to exit the conference by entering a valid single digit
						extension <variable>MEETME_EXIT_CONTEXT</variable> or the current context
						if that variable is not defined.</para>
						<note>
							<para>Option <literal>s</literal> has priority for <literal>*</literal>
							since it cannot change its activation code.</para>
						</note>
					</option>
					<option name="1">
						<para>Do not play message when first person enters</para>
					</option>
					<option name="S">
						<para>Kick the user <replaceable>x</replaceable> seconds <emphasis>after</emphasis> he entered into
						the conference.</para>
						<argument name="x" required="true" />
					</option>
					<option name="L" argsep=":">
						<para>Limit the conference to <replaceable>x</replaceable> ms. Play a warning when
						<replaceable>y</replaceable> ms are left. Repeat the warning every <replaceable>z</replaceable> ms.
						The following special variables can be used with this option:</para>
						<variablelist>
							<variable name="CONF_LIMIT_TIMEOUT_FILE">
								<para>File to play when time is up.</para>
							</variable>
							<variable name="CONF_LIMIT_WARNING_FILE">
								<para>File to play as warning if <replaceable>y</replaceable> is defined. The
								default is to say the time remaining.</para>
							</variable>
						</variablelist>
						<argument name="x" />
						<argument name="y" />
						<argument name="z" />
					</option>
				</optionlist>
			</parameter>
			<parameter name="pin" />
		</syntax>
		<description>
			<para>Enters the user into a specified MeetMe conference.  If the <replaceable>confno</replaceable>
			is omitted, the user will be prompted to enter one.  User can exit the conference by hangup, or
			if the <literal>p</literal> option is specified, by pressing <literal>#</literal>.</para>
			<note><para>The DAHDI kernel modules and a functional DAHDI timing source (see dahdi_test)
			must be present for conferencing to operate properly. In addition, the chan_dahdi channel driver
			must be loaded for the <literal>i</literal> and <literal>r</literal> options to operate at
			all.</para></note>
		</description>
		<see-also>
			<ref type="application">MeetMeCount</ref>
			<ref type="application">MeetMeAdmin</ref>
			<ref type="application">MeetMeChannelAdmin</ref>
		</see-also>
	</application>
	<application name="MeetMeCount" language="en_US">
		<synopsis>
			MeetMe participant count.
		</synopsis>
		<syntax>
			<parameter name="confno" required="true">
				<para>Conference number.</para>
			</parameter>
			<parameter name="var" />
		</syntax>
		<description>
			<para>Plays back the number of users in the specified MeetMe conference.
			If <replaceable>var</replaceable> is specified, playback will be skipped and the value
			will be returned in the variable. Upon application completion, MeetMeCount will hangup
			the channel, unless priority <literal>n+1</literal> exists, in which case priority progress will
			continue.</para>
		</description>
		<see-also>
			<ref type="application">MeetMe</ref>
		</see-also>
	</application>
	<application name="MeetMeAdmin" language="en_US">
		<synopsis>
			MeetMe conference administration.
		</synopsis>
		<syntax>
			<parameter name="confno" required="true" />
			<parameter name="command" required="true">
				<optionlist>
					<option name="e">
						<para>Eject last user that joined.</para>
					</option>
					<option name="E">
						<para>Extend conference end time, if scheduled.</para>
					</option>
					<option name="k">
						<para>Kick one user out of conference.</para>
					</option>
					<option name="K">
						<para>Kick all users out of conference.</para>
					</option>
					<option name="l">
						<para>Unlock conference.</para>
					</option>
					<option name="L">
						<para>Lock conference.</para>
					</option>
					<option name="m">
						<para>Unmute one user.</para>
					</option>
					<option name="M">
						<para>Mute one user.</para>
					</option>
					<option name="n">
						<para>Unmute all users in the conference.</para>
					</option>
					<option name="N">
						<para>Mute all non-admin users in the conference.</para>
					</option>
					<option name="r">
						<para>Reset one user's volume settings.</para>
					</option>
					<option name="R">
						<para>Reset all users volume settings.</para>
					</option>
					<option name="s">
						<para>Lower entire conference speaking volume.</para>
					</option>
					<option name="S">
						<para>Raise entire conference speaking volume.</para>
					</option>
					<option name="t">
						<para>Lower one user's talk volume.</para>
					</option>
					<option name="T">
						<para>Raise one user's talk volume.</para>
					</option>
					<option name="u">
						<para>Lower one user's listen volume.</para>
					</option>
					<option name="U">
						<para>Raise one user's listen volume.</para>
					</option>
					<option name="v">
						<para>Lower entire conference listening volume.</para>
					</option>
					<option name="V">
						<para>Raise entire conference listening volume.</para>
					</option>
				</optionlist>
			</parameter>
			<parameter name="user" />
		</syntax>
		<description>
			<para>Run admin <replaceable>command</replaceable> for conference <replaceable>confno</replaceable>.</para>
			<para>Will additionally set the variable <variable>MEETMEADMINSTATUS</variable> with one of
			the following values:</para>
			<variablelist>
				<variable name="MEETMEADMINSTATUS">
					<value name="NOPARSE">
						Invalid arguments.
					</value>
					<value name="NOTFOUND">
						User specified was not found.
					</value>
					<value name="FAILED">
						Another failure occurred.
					</value>
					<value name="OK">
						The operation was completed successfully.
					</value>
				</variable>
			</variablelist>
		</description>
		<see-also>
			<ref type="application">MeetMe</ref>
		</see-also>
	</application>
	<application name="MeetMeChannelAdmin" language="en_US">
		<synopsis>
			MeetMe conference Administration (channel specific).
		</synopsis>
		<syntax>
			<parameter name="channel" required="true" />
			<parameter name="command" required="true">
				<optionlist>
					<option name="k">
						<para>Kick the specified user out of the conference he is in.</para>
					</option>
					<option name="m">
						<para>Unmute the specified user.</para>
					</option>
					<option name="M">
						<para>Mute the specified user.</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>Run admin <replaceable>command</replaceable> for a specific
			<replaceable>channel</replaceable> in any conference.</para>
		</description>
	</application>
	<application name="SLAStation" language="en_US">
		<synopsis>
			Shared Line Appearance Station.
		</synopsis>
		<syntax>
			<parameter name="station" required="true">
				<para>Station name</para>
			</parameter>
		</syntax>
		<description>
			<para>This application should be executed by an SLA station. The argument depends
			on how the call was initiated. If the phone was just taken off hook, then the argument
			<replaceable>station</replaceable> should be just the station name. If the call was
			initiated by pressing a line key, then the station name should be preceded by an underscore
			and the trunk name associated with that line button.</para>
			<para>For example: <literal>station1_line1</literal></para>
			<para>On exit, this application will set the variable <variable>SLASTATION_STATUS</variable> to
			one of the following values:</para>
			<variablelist>
				<variable name="SLASTATION_STATUS">
					<value name="FAILURE" />
					<value name="CONGESTION" />
					<value name="SUCCESS" />
				</variable>
			</variablelist>
		</description>
	</application>
	<application name="SLATrunk" language="en_US">
		<synopsis>
			Shared Line Appearance Trunk.
		</synopsis>
		<syntax>
			<parameter name="trunk" required="true">
				<para>Trunk name</para>
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="M" hasparams="optional">
						<para>Play back the specified MOH <replaceable>class</replaceable>
						instead of ringing</para>
						<argument name="class" required="true" />
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>This application should be executed by an SLA trunk on an inbound call. The channel calling
			this application should correspond to the SLA trunk with the name <replaceable>trunk</replaceable>
			that is being passed as an argument.</para>
			<para>On exit, this application will set the variable <variable>SLATRUNK_STATUS</variable> to
			one of the following values:</para>
			<variablelist>
				<variable name="SLATRUNK_STATUS">
					<value name="FAILURE" />
					<value name="SUCCESS" />
					<value name="UNANSWERED" />
					<value name="RINGTIMEOUT" />
				</variable>
			</variablelist>
		</description>
	</application>
	<function name="MEETME_INFO" language="en_US">
		<synopsis>
			Query a given conference of various properties.
		</synopsis>
		<syntax>
			<parameter name="keyword" required="true">
				<para>Options:</para>
				<enumlist>
					<enum name="lock">
						<para>Boolean of whether the corresponding conference is locked.</para>
					</enum>
					<enum name="parties">
						<para>Number of parties in a given conference</para>
					</enum>
					<enum name="activity">
						<para>Duration of conference in seconds.</para>
					</enum>
					<enum name="dynamic">
						<para>Boolean of whether the corresponding conference is dynamic.</para>
					</enum>
				</enumlist>
			</parameter>
			<parameter name="confno" required="true">
				<para>Conference number to retrieve information from.</para>
			</parameter>
		</syntax>
		<description />
		<see-also>
			<ref type="application">MeetMe</ref>
			<ref type="application">MeetMeCount</ref>
			<ref type="application">MeetMeAdmin</ref>
			<ref type="application">MeetMeChannelAdmin</ref>
		</see-also>
	</function>
	<manager name="MeetmeMute" language="en_US">
		<synopsis>
			Mute a Meetme user.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Meetme" required="true" />
			<parameter name="Usernum" required="true" />
		</syntax>
		<description>
		</description>
	</manager>
	<manager name="MeetmeUnmute" language="en_US">
		<synopsis>
			Unmute a Meetme user.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Meetme" required="true" />
			<parameter name="Usernum" required="true" />
		</syntax>
		<description>
		</description>
	</manager>
	<manager name="MeetmeList" language="en_US">
		<synopsis>
			List participants in a conference.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Conference" required="false">
				<para>Conference number.</para>
			</parameter>
		</syntax>
		<description>
			<para>Lists all users in a particular MeetMe conference.
			MeetmeList will follow as separate events, followed by a final event called
			MeetmeListComplete.</para>
		</description>
	</manager>
	<application name="Milliwatt" language="en_US">
		<synopsis>
			Generate a Constant 1004Hz tone at 0dbm (mu-law).
		</synopsis>
		<syntax>
			<parameter name="options">
				<optionlist>
					<option name="o">
						<para>Generate the tone at 1000Hz like previous version.</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>Previous versions of this application generated the tone at 1000Hz.  If for
			some reason you would prefer that behavior, supply the <literal>o</literal> option to get the
			old behavior.</para>
		</description>
	</application>
<application name="MinivmRecord" language="en_US">
	<synopsis>
		Receive Mini-Voicemail and forward via e-mail.
	</synopsis>
	<syntax>
		<parameter name="mailbox" required="true" argsep="@">
			<argument name="username" required="true">
				<para>Voicemail username</para>
			</argument>
			<argument name="domain" required="true">
				<para>Voicemail domain</para>
			</argument>
		</parameter>
		<parameter name="options" required="false">
			<optionlist>
				<option name="0">
					<para>Jump to the <literal>o</literal> extension in the current dialplan context.</para>
				</option>
				<option name="*">
					<para>Jump to the <literal>a</literal> extension in the current dialplan context.</para>
				</option>
				<option name="g">
					<argument name="gain">
						<para>Amount of gain to use</para>
					</argument>
					<para>Use the specified amount of gain when recording the voicemail message.
					The units are whole-number decibels (dB).</para>
				</option>
			</optionlist>
		</parameter>
	</syntax>
	<description>
		<para>This application is part of the Mini-Voicemail system, configured in <filename>minivm.conf</filename></para>
		<para>MiniVM records audio file in configured format and forwards message to e-mail and pager.</para>
		<para>If there's no user account for that address, a temporary account will be used with default options.</para>
		<para>The recorded file name and path will be stored in <variable>MVM_FILENAME</variable> and the duration
		of the message will be stored in <variable>MVM_DURATION</variable></para>
		<note><para>If the caller hangs up after the recording, the only way to send the message and clean up is to
		execute in the <literal>h</literal> extension. The application will exit if any of the following DTMF digits
		are received and the requested extension exist in the current context.</para></note>
		<variablelist>
			<variable name="MVM_RECORD_STATUS">
				<para>This is the status of the record operation</para>
				<value name="SUCCESS" />
				<value name="USEREXIT" />
				<value name="FAILED" />
			</variable>
		</variablelist>
	</description>
</application>
<application name="MinivmGreet" language="en_US">
	<synopsis>
		Play Mini-Voicemail prompts.
	</synopsis>
	<syntax>
		<parameter name="mailbox" required="true" argsep="@">
			<argument name="username" required="true">
				<para>Voicemail username</para>
			</argument>
			<argument name="domain" required="true">
				<para>Voicemail domain</para>
			</argument>
		</parameter>
		<parameter name="options" required="false">
			<optionlist>
				<option name="b">
					<para>Play the <literal>busy</literal> greeting to the calling party.</para>
				</option>
				<option name="s">
					<para>Skip the playback of instructions for leaving a message to the calling party.</para>
				</option>
				<option name="u">
					<para>Play the <literal>unavailable</literal> greeting.</para>
				</option>
			</optionlist>
		</parameter>
	</syntax>
	<description>
		<para>This application is part of the Mini-Voicemail system, configured in minivm.conf.</para>
		<para>MinivmGreet() plays default prompts or user specific prompts for an account.</para>
		<para>Busy and unavailable messages can be choosen, but will be overridden if a temporary
		message exists for the account.</para>
		<variablelist>
			<variable name="MVM_GREET_STATUS">
				<para>This is the status of the greeting playback.</para>
				<value name="SUCCESS" />
				<value name="USEREXIT" />
				<value name="FAILED" />
			</variable>
		</variablelist>
	</description>
</application>
<application name="MinivmNotify" language="en_US">
	<synopsis>
		Notify voicemail owner about new messages.
	</synopsis>
	<syntax>
		<parameter name="mailbox" required="true" argsep="@">
			<argument name="username" required="true">
				<para>Voicemail username</para>
			</argument>
			<argument name="domain" required="true">
				<para>Voicemail domain</para>
			</argument>
		</parameter>
		<parameter name="options" required="false">
			<optionlist>
				<option name="template">
					<para>E-mail template to use for voicemail notification</para>
				</option>
			</optionlist>
		</parameter>
	</syntax>
	<description>
		<para>This application is part of the Mini-Voicemail system, configured in minivm.conf.</para>
		<para>MiniVMnotify forwards messages about new voicemail to e-mail and pager. If there's no user
		account for that address, a temporary account will be used with default options (set in
		<filename>minivm.conf</filename>).</para>
		<para>If the channel variable <variable>MVM_COUNTER</variable> is set, this will be used in the message
		file name and available in the template for the message.</para>
		<para>If no template is given, the default email template will be used to send email and default pager
		template to send paging message (if the user account is configured with a paging address.</para>
		<variablelist>
			<variable name="MVM_NOTIFY_STATUS">
				<para>This is the status of the notification attempt</para>
				<value name="SUCCESS" />
				<value name="FAILED" />
			</variable>
		</variablelist>
	</description>
</application>
<application name="MinivmDelete" language="en_US">
	<synopsis>
		Delete Mini-Voicemail voicemail messages.
	</synopsis>
	<syntax>
		<parameter name="filename" required="true">
			<para>File to delete</para>
		</parameter>
	</syntax>
	<description>
		<para>This application is part of the Mini-Voicemail system, configured in <filename>minivm.conf</filename>.</para>
		<para>It deletes voicemail file set in MVM_FILENAME or given filename.</para>
		<variablelist>
			<variable name="MVM_DELETE_STATUS">
				<para>This is the status of the delete operation.</para>
				<value name="SUCCESS" />
				<value name="FAILED" />
			</variable>
		</variablelist>
	</description>
</application>

<application name="MinivmAccMess" language="en_US">
	<synopsis>
		Record account specific messages.
	</synopsis>
	<syntax>
		<parameter name="mailbox" required="true" argsep="@">
			<argument name="username" required="true">
				<para>Voicemail username</para>
			</argument>
			<argument name="domain" required="true">
				<para>Voicemail domain</para>
			</argument>
		</parameter>
		<parameter name="options" required="false">
			<optionlist>
				<option name="u">
					<para>Record the <literal>unavailable</literal> greeting.</para>
				</option>
				<option name="b">
					<para>Record the <literal>busy</literal> greeting.</para>
				</option>
				<option name="t">
					<para>Record the temporary greeting.</para>
				</option>
				<option name="n">
					<para>Account name.</para>
				</option>
			</optionlist>
		</parameter>
	</syntax>
	<description>
		<para>This application is part of the Mini-Voicemail system, configured in <filename>minivm.conf</filename>.</para>
		<para>Use this application to record account specific audio/video messages for busy, unavailable
		and temporary messages.</para>
		<para>Account specific directories will be created if they do not exist.</para>
		<variablelist>
			<variable name="MVM_ACCMESS_STATUS">
				<para>This is the result of the attempt to record the specified greeting.</para>
				<para><literal>FAILED</literal> is set if the file can't be created.</para>
				<value name="SUCCESS" />
				<value name="FAILED" />
			</variable>
		</variablelist>
	</description>
</application>
<application name="MinivmMWI" language="en_US">
	<synopsis>
		Send Message Waiting Notification to subscriber(s) of mailbox.
	</synopsis>
	<syntax>
		<parameter name="mailbox" required="true" argsep="@">
			<argument name="username" required="true">
				<para>Voicemail username</para>
			</argument>
			<argument name="domain" required="true">
				<para>Voicemail domain</para>
			</argument>
		</parameter>
		<parameter name="urgent" required="true">
			<para>Number of urgent messages in mailbox.</para>
		</parameter>
		<parameter name="new" required="true">
			<para>Number of new messages in mailbox.</para>
		</parameter>
		<parameter name="old" required="true">
			<para>Number of old messages in mailbox.</para>
		</parameter>
	</syntax>
	<description>
		<para>This application is part of the Mini-Voicemail system, configured in <filename>minivm.conf</filename>.</para>
		<para>MinivmMWI is used to send message waiting indication to any devices whose channels have
		subscribed to the mailbox passed in the first parameter.</para>
	</description>
</application>
<function name="MINIVMCOUNTER" language="en_US">
	<synopsis>
		Reads or sets counters for MiniVoicemail message.
	</synopsis>
	<syntax argsep=":">
		<parameter name="account" required="true">
			<para>If account is given and it exists, the counter is specific for the account.</para>
			<para>If account is a domain and the domain directory exists, counters are specific for a domain.</para>
		</parameter>
		<parameter name="name" required="true">
			<para>The name of the counter is a string, up to 10 characters.</para>
		</parameter>
		<parameter name="operand">
			<para>The counters never goes below zero. Valid operands for changing the value of a counter when assigning a value are:</para>
			<enumlist>
				<enum name="i"><para>Increment by value.</para></enum>
				<enum name="d"><para>Decrement by value.</para></enum>
				<enum name="s"><para>Set to value.</para></enum>
			</enumlist>
		</parameter>
	</syntax>
	<description>
		<para>The operation is atomic and the counter is locked while changing the value. The counters are stored as text files in the minivm account directories. It might be better to use realtime functions if you are using a database to operate your Asterisk.</para>
	</description>
	<see-also>
		<ref type="application">MinivmRecord</ref>
		<ref type="application">MinivmGreet</ref>
		<ref type="application">MinivmNotify</ref>
		<ref type="application">MinivmDelete</ref>
		<ref type="application">MinivmAccMess</ref>
		<ref type="application">MinivmMWI</ref>
		<ref type="function">MINIVMACCOUNT</ref>
	</see-also>
</function>
<function name="MINIVMACCOUNT" language="en_US">
	<synopsis>
		Gets MiniVoicemail account information.
	</synopsis>
	<syntax argsep=":">
		<parameter name="account" required="true" />
		<parameter name="item" required="true">
			<para>Valid items are:</para>
			<enumlist>
				<enum name="path">
					<para>Path to account mailbox (if account exists, otherwise temporary mailbox).</para>
				</enum>
				<enum name="hasaccount">
					<para>1 is static Minivm account exists, 0 otherwise.</para>
				</enum>
				<enum name="fullname">
					<para>Full name of account owner.</para>
				</enum>
				<enum name="email">
					<para>Email address used for account.</para>
				</enum>
				<enum name="etemplate">
					<para>Email template for account (default template if none is configured).</para>
				</enum>
				<enum name="ptemplate">
					<para>Pager template for account (default template if none is configured).</para>
				</enum>
				<enum name="accountcode">
					<para>Account code for the voicemail account.</para>
				</enum>
				<enum name="pincode">
					<para>Pin code for voicemail account.</para>
				</enum>
				<enum name="timezone">
					<para>Time zone for voicemail account.</para>
				</enum>
				<enum name="language">
					<para>Language for voicemail account.</para>
				</enum>
				<enum name="&lt;channel variable name&gt;">
					<para>Channel variable value (set in configuration for account).</para>
				</enum>
			</enumlist>
		</parameter>
	</syntax>
	<description>
		<para />
	</description>
	<see-also>
		<ref type="application">MinivmRecord</ref>
		<ref type="application">MinivmGreet</ref>
		<ref type="application">MinivmNotify</ref>
		<ref type="application">MinivmDelete</ref>
		<ref type="application">MinivmAccMess</ref>
		<ref type="application">MinivmMWI</ref>
		<ref type="function">MINIVMCOUNTER</ref>
	</see-also>
</function>

	<application name="MixMonitor" language="en_US">
		<synopsis>
			Record a call and mix the audio during the recording.  Use of StopMixMonitor is required
			to guarantee the audio file is available for processing during dialplan execution.
		</synopsis>
		<syntax>
			<parameter name="file" required="true" argsep=".">
				<argument name="filename" required="true">
					<para>If <replaceable>filename</replaceable> is an absolute path, uses that path, otherwise
					creates the file in the configured monitoring directory from <filename>asterisk.conf.</filename></para>
				</argument>
				<argument name="extension" required="true" />
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="a">
						<para>Append to the file instead of overwriting it.</para>
					</option>
					<option name="b">
						<para>Only save audio to the file while the channel is bridged.</para>
						<note><para>Does not include conferences or sounds played to each bridged party</para></note>
						<note><para>If you utilize this option inside a Local channel, you must make sure the Local
						channel is not optimized away. To do this, be sure to call your Local channel with the
						<literal>/n</literal> option. For example: Dial(Local/start@mycontext/n)</para></note>
					</option>
					<option name="v">
						<para>Adjust the <emphasis>heard</emphasis> volume by a factor of <replaceable>x</replaceable>
						(range <literal>-4</literal> to <literal>4</literal>)</para>
						<argument name="x" required="true" />
					</option>
					<option name="V">
						<para>Adjust the <emphasis>spoken</emphasis> volume by a factor
						of <replaceable>x</replaceable> (range <literal>-4</literal> to <literal>4</literal>)</para>
						<argument name="x" required="true" />
					</option>
					<option name="W">
						<para>Adjust both, <emphasis>heard and spoken</emphasis> volumes by a factor
						of <replaceable>x</replaceable> (range <literal>-4</literal> to <literal>4</literal>)</para>
						<argument name="x" required="true" />
					</option>
				</optionlist>
			</parameter>
			<parameter name="command">
				<para>Will be executed when the recording is over.</para>
				<para>Any strings matching <literal>^{X}</literal> will be unescaped to <variable>X</variable>.</para>
				<para>All variables will be evaluated at the time MixMonitor is called.</para>
			</parameter>
		</syntax>
		<description>
			<para>Records the audio on the current channel to the specified file.</para>
			<para>This application does not automatically answer and should be preceeded by
			an application such as Answer or Progress().</para>
			<variablelist>
				<variable name="MIXMONITOR_FILENAME">
					<para>Will contain the filename used to record.</para>
				</variable>
			</variablelist>	
		</description>
		<see-also>
			<ref type="application">Monitor</ref>
			<ref type="application">StopMixMonitor</ref>
			<ref type="application">PauseMonitor</ref>
			<ref type="application">UnpauseMonitor</ref>
		</see-also>
	</application>
	<application name="StopMixMonitor" language="en_US">
		<synopsis>
			Stop recording a call through MixMonitor, and free the recording's file handle.
		</synopsis>
		<syntax />
		<description>
			<para>Stops the audio recording that was started with a call to <literal>MixMonitor()</literal>
			on the current channel.</para>
		</description>
		<see-also>
			<ref type="application">MixMonitor</ref>
		</see-also>
	</application>
	<manager name="MixMonitorMute" language="en_US">
		<synopsis>
			Mute / unMute a Mixmonitor recording.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Channel" required="true">
				<para>Used to specify the channel to mute.</para>
			</parameter>
			<parameter name="Direction">
				<para>Which part of the recording to mute:  read, write or both (from channel, to channel or both channels).</para>
			</parameter>
			<parameter name="State">
				<para>Turn mute on or off : 1 to turn on, 0 to turn off.</para>
			</parameter>
		</syntax>
		<description>
			<para>This action may be used to mute a MixMonitor recording.</para>
		</description>
	</manager>

	<application name="Morsecode" language="en_US">
		<synopsis>
			Plays morse code.
		</synopsis>
		<syntax>
			<parameter name="string" required="true">
				<para>String to playback as morse code to channel</para>
			</parameter>
		</syntax>
		<description>
			<para>Plays the Morse code equivalent of the passed string.</para>
			<para>This application does not automatically answer and should be preceeded by
			an application such as Answer() or Progress().</para>
			<para>This application uses the following variables:</para>
			<variablelist>
				<variable name="MORSEDITLEN">
					<para>Use this value in (ms) for length of dit</para>
				</variable>
				<variable name="MORSETONE">
					<para>The pitch of the tone in (Hz), default is 800</para>
				</variable>
			</variablelist>
		</description>
		<see-also>
			<ref type="application">SayAlpha</ref>
			<ref type="application">SayPhonetic</ref>
		</see-also>
	</application>
	<application name="MP3Player" language="en_US">
		<synopsis>
			Play an MP3 file or M3U playlist file or stream.
		</synopsis>
		<syntax>
			<parameter name="Location" required="true">
				<para>Location of the file to be played.
				(argument passed to mpg123)</para>
			</parameter>
		</syntax>
		<description>
			<para>Executes mpg123 to play the given location, which typically would be a mp3 filename
			or m3u playlist filename or a URL. Please read http://en.wikipedia.org/wiki/M3U
			to see how M3U playlist file format is like, Example usage would be
			exten => 1234,1,MP3Player(/var/lib/asterisk/playlist.m3u)
			User can exit by pressing any key on the dialpad, or by hanging up.</para>
			<para>This application does not automatically answer and should be preceeded by an
			application such as Answer() or Progress().</para>
		</description>
	</application>

	<application name="NBScat" language="en_US">
		<synopsis>
			Play an NBS local stream.
		</synopsis>
		<syntax />
		<description>
			<para>Executes nbscat to listen to the local NBS stream.
			User can exit by pressing any key.</para>
		</description>
	</application>
	<application name="Originate" language="en_US">
		<synopsis>
			Originate a call.
		</synopsis>
		<syntax>
			<parameter name="tech_data" required="true">
				<para>Channel technology and data for creating the outbound channel.
                      For example, SIP/1234.</para>
			</parameter>
			<parameter name="type" required="true">
				<para>This should be <literal>app</literal> or <literal>exten</literal>, depending on whether the outbound channel should be connected to an application or extension.</para>
			</parameter>
			<parameter name="arg1" required="true">
				<para>If the type is <literal>app</literal>, then this is the application name.  If the type is <literal>exten</literal>, then this is the context that the channel will be sent to.</para>
			</parameter>
			<parameter name="arg2" required="false">
				<para>If the type is <literal>app</literal>, then this is the data passed as arguments to the application.  If the type is <literal>exten</literal>, then this is the extension that the channel will be sent to.</para>
			</parameter>
			<parameter name="arg3" required="false">
				<para>If the type is <literal>exten</literal>, then this is the priority that the channel is sent to.  If the type is <literal>app</literal>, then this parameter is ignored.</para>
			</parameter>
		</syntax>
		<description>
		<para>This application originates an outbound call and connects it to a specified extension or application.  This application will block until the outgoing call fails or gets answered.  At that point, this application will exit with the status variable set and dialplan processing will continue.</para>

		<para>This application sets the following channel variable before exiting:</para>
		<variablelist>
			<variable name="ORIGINATE_STATUS">
				<para>This indicates the result of the call origination.</para>
				<value name="FAILED"/>
				<value name="SUCCESS"/>
				<value name="BUSY"/>
				<value name="CONGESTION"/>
				<value name="HANGUP"/>
				<value name="RINGING"/>
				<value name="UNKNOWN">
				In practice, you should never see this value.  Please report it to the issue tracker if you ever see it.
				</value>
			</variable>
		</variablelist>
		</description>
	</application>
	<application name="OSPAuth" language="en_US">
		<synopsis>
			OSP Authentication.
		</synopsis>
		<syntax>
			<parameter name="provider">
				<para>The name of the provider that authenticates the call.</para>
			</parameter>
			<parameter name="options">
				<para>Reserverd.</para>
			</parameter>
		</syntax>
		<description>
			<para>Authenticate a call by OSP.</para>
			<para>Input variables:</para>
			<variablelist>
				<variable name="OSPINPEERIP">
					<para>The last hop IP address.</para>
				</variable>
				<variable name="OSPINTOKEN">
					<para>The inbound OSP token.</para>
				</variable>
			</variablelist>
			<para>Output variables:</para>
			<variablelist>
				<variable name="OSPINHANDLE">
					<para>The inbound call OSP transaction handle.</para>
				</variable>
				<variable name="OSPINTIMELIMIT">
					<para>The inbound call duration limit in seconds.</para>
				</variable>
			</variablelist>
			<para>This application sets the following channel variable upon completion:</para>
			<variablelist>
				<variable name="OSPAUTHSTATUS">
					<para>The status of OSPAuth attempt as a text string, one of</para>
					<value name="SUCCESS" />
					<value name="FAILED" />
					<value name="ERROR" />
				</variable>
			</variablelist>
		</description>
		<see-also>
			<ref type="application">OSPLookup</ref>
			<ref type="application">OSPNext</ref>
			<ref type="application">OSPFinish</ref>
		</see-also>
	</application>
	<application name="OSPLookup" language="en_US">
		<synopsis>
			Lookup destination by OSP.
		</synopsis>
		<syntax>
			<parameter name="exten" required="true">
				<para>The exten of the call.</para>
			</parameter>
			<parameter name="provider">
				<para>The name of the provider that is used to route the call.</para>
			</parameter>
			<parameter name="options">
				<enumlist>
					<enum name="h">
						<para>generate H323 call id for the outbound call</para>
					</enum>
					<enum name="s">
						<para>generate SIP call id for the outbound call. Have not been implemented</para>
					</enum>
					<enum name="i">
						<para>generate IAX call id for the outbound call. Have not been implemented</para>
					</enum>
				</enumlist>
			</parameter>
		</syntax>
		<description>
			<para>Looks up destination via OSP.</para>
			<para>Input variables:</para>
			<variablelist>
				<variable name="OSPINACTUALSRC">
					<para>The actual source device IP address in indirect mode.</para>
				</variable>
				<variable name="OSPINPEERIP">
					<para>The last hop IP address.</para>
				</variable>
				<variable name="OSPINHANDLE">
					<para>The inbound call OSP transaction handle.</para>
				</variable>
				<variable name="OSPINTIMELIMIT">
					<para>The inbound call duration limit in seconds.</para>
				</variable>
				<variable name="OSPINNETWORKID">
					<para>The inbound source network ID.</para>
				</variable>
				<variable name="OSPINNPRN">
					<para>The inbound routing number.</para>
				</variable>
				<variable name="OSPINNPCIC">
					<para>The inbound carrier identification code.</para>
				</variable>
				<variable name="OSPINNPDI">
					<para>The inbound number portability database dip indicator.</para>
				</variable>
				<variable name="OSPINSPID">
					<para>The inbound service provider identity.</para>
				</variable>
				<variable name="OSPINOCN">
					<para>The inbound operator company number.</para>
				</variable>
				<variable name="OSPINSPN">
					<para>The inbound service provider name.</para>
				</variable>
				<variable name="OSPINALTSPN">
					<para>The inbound alternate service provider name.</para>
				</variable>
				<variable name="OSPINMCC">
					<para>The inbound mobile country code.</para>
				</variable>
				<variable name="OSPINMNC">
					<para>The inbound mobile network code.</para>
				</variable>
				<variable name="OSPINTOHOST">
					<para>The inbound To header host part.</para>
				</variable>
				<variable name="OSPINDIVUSER">
					<para>The inbound Diversion header user part.</para>
				</variable>
				<variable name="OSPINDIVHOST">
					<para>The inbound Diversion header host part.</para>
				</variable>
				<variable name="OSPINCUSTOMINFOn">
					<para>The inbound custom information, where <literal>n</literal> is the index beginning with <literal>1</literal>
					upto <literal>8</literal>.</para>
				</variable>
			</variablelist>
			<para>Output variables:</para>
			<variablelist>
				<variable name="OSPOUTHANDLE">
					<para>The outbound call OSP transaction handle.</para>
				</variable>
				<variable name="OSPOUTTECH">
					<para>The outbound channel technology for the call.</para>
				</variable>
				<variable name="OSPDESTINATION">
					<para>The outbound destination IP address.</para>
				</variable>
				<variable name="OSPOUTCALLING">
					<para>The outbound calling number.</para>
				</variable>
				<variable name="OSPOUTCALLED">
					<para>The outbound called number.</para>
				</variable>
				<variable name="OSPOUTNETWORKID">
					<para>The outbound destination network ID.</para>
				</variable>
				<variable name="OSPOUTNPRN">
					<para>The outbound routing number.</para>
				</variable>
				<variable name="OSPOUTNPCIC">
					<para>The outbound carrier identification code.</para>
				</variable>
				<variable name="OSPOUTNPDI">
					<para>The outbound number portability database dip indicator.</para>
				</variable>
				<variable name="OSPOUTSPID">
					<para>The outbound service provider identity.</para>
				</variable>
				<variable name="OSPOUTOCN">
					<para>The outbound operator company number.</para>
				</variable>
				<variable name="OSPOUTSPN">
					<para>The outbound service provider name.</para>
				</variable>
				<variable name="OSPOUTALTSPN">
					<para>The outbound alternate service provider name.</para>
				</variable>
				<variable name="OSPOUTMCC">
					<para>The outbound mobile country code.</para>
				</variable>
				<variable name="OSPOUTMNC">
					<para>The outbound mobile network code.</para>
				</variable>
				<variable name="OSPOUTTOKEN">
					<para>The outbound OSP token.</para>
				</variable>
				<variable name="OSPDESTREMAILS">
					<para>The number of remained destinations.</para>
				</variable>
				<variable name="OSPOUTTIMELIMIT">
					<para>The outbound call duration limit in seconds.</para>
				</variable>
				<variable name="OSPOUTCALLIDTYPES">
					<para>The outbound Call-ID types.</para>
				</variable>
				<variable name="OSPOUTCALLID">
					<para>The outbound Call-ID. Only for H.323.</para>
				</variable>
				<variable name="OSPDIALSTR">
					<para>The outbound Dial command string.</para>
				</variable>
			</variablelist>
			<para>This application sets the following channel variable upon completion:</para>
			<variablelist>
				<variable name="OSPLOOKUPSTATUS">
					<para>The status of OSPLookup attempt as a text string, one of</para>
					<value name="SUCCESS" />
					<value name="FAILED" />
					<value name="ERROR" />
				</variable>
			</variablelist>
		</description>
		<see-also>
			<ref type="application">OSPAuth</ref>
			<ref type="application">OSPNext</ref>
			<ref type="application">OSPFinish</ref>
		</see-also>
	</application>
	<application name="OSPNext" language="en_US">
		<synopsis>
			Lookup next destination by OSP.
		</synopsis>
		<description>
			<para>Looks up the next destination via OSP.</para>
			<para>Input variables:</para>
			<variablelist>
				<variable name="OSPINHANDLE">
					<para>The inbound call OSP transaction handle.</para>
				</variable>
				<variable name="OSPOUTHANDLE">
					<para>The outbound call OSP transaction handle.</para>
				</variable>
				<variable name="OSPINTIMELIMIT">
					<para>The inbound call duration limit in seconds.</para>
				</variable>
				<variable name="OSPOUTCALLIDTYPES">
					<para>The outbound Call-ID types.</para>
				</variable>
				<variable name="OSPDESTREMAILS">
					<para>The number of remained destinations.</para>
				</variable>
			</variablelist>
			<para>Output variables:</para>
			<variablelist>
				<variable name="OSPOUTTECH">
					<para>The outbound channel technology.</para>
				</variable>
				<variable name="OSPDESTINATION">
					<para>The destination IP address.</para>
				</variable>
				<variable name="OSPOUTCALLING">
					<para>The outbound calling number.</para>
				</variable>
				<variable name="OSPOUTCALLED">
					<para>The outbound called number.</para>
				</variable>
				<variable name="OSPOUTNETWORKID">
					<para>The outbound destination network ID.</para>
				</variable>
				<variable name="OSPOUTNPRN">
					<para>The outbound routing number.</para>
				</variable>
				<variable name="OSPOUTNPCIC">
					<para>The outbound carrier identification code.</para>
				</variable>
				<variable name="OSPOUTNPDI">
					<para>The outbound number portability database dip indicator.</para>
				</variable>
				<variable name="OSPOUTSPID">
					<para>The outbound service provider identity.</para>
				</variable>
				<variable name="OSPOUTOCN">
					<para>The outbound operator company number.</para>
				</variable>
				<variable name="OSPOUTSPN">
					<para>The outbound service provider name.</para>
				</variable>
				<variable name="OSPOUTALTSPN">
					<para>The outbound alternate service provider name.</para>
				</variable>
				<variable name="OSPOUTMCC">
					<para>The outbound mobile country code.</para>
				</variable>
				<variable name="OSPOUTMNC">
					<para>The outbound mobile network code.</para>
				</variable>
				<variable name="OSPOUTTOKEN">
					<para>The outbound OSP token.</para>
				</variable>
				<variable name="OSPDESTREMAILS">
					<para>The number of remained destinations.</para>
				</variable>
				<variable name="OSPOUTTIMELIMIT">
					<para>The outbound call duration limit in seconds.</para>
				</variable>
				<variable name="OSPOUTCALLID">
					<para>The outbound Call-ID. Only for H.323.</para>
				</variable>
				<variable name="OSPDIALSTR">
					<para>The outbound Dial command string.</para>
				</variable>
			</variablelist>
			<para>This application sets the following channel variable upon completion:</para>
			<variablelist>
				<variable name="OSPNEXTSTATUS">
					<para>The status of the OSPNext attempt as a text string, one of</para>
					<value name="SUCCESS" />
					<value name="FAILED" />
					<value name="ERROR" />
				</variable>
			</variablelist>
		</description>
		<see-also>
			<ref type="application">OSPAuth</ref>
			<ref type="application">OSPLookup</ref>
			<ref type="application">OSPFinish</ref>
		</see-also>
	</application>
	<application name="OSPFinish" language="en_US">
		<synopsis>
			Report OSP entry.
		</synopsis>
		<syntax>
			<parameter name="cause">
				<para>Hangup cause.</para>
			</parameter>
			<parameter name="options">
				<para>Reserved.</para>
			</parameter>
		</syntax>
		<description>
			<para>Report call state.</para>
			<para>Input variables:</para>
			<variablelist>
				<variable name="OSPINHANDLE">
					<para>The inbound call OSP transaction handle.</para>
				</variable>
				<variable name="OSPOUTHANDLE">
					<para>The outbound call OSP transaction handle.</para>
				</variable>
				<variable name="OSPAUTHSTATUS">
					<para>The OSPAuth status.</para>
				</variable>
				<variable name="OSPLOOKUPSTATUS">
					<para>The OSPLookup status.</para>
				</variable>
				<variable name="OSPNEXTSTATUS">
					<para>The OSPNext status.</para>
				</variable>
				<variable name="OSPINAUDIOQOS">
					<para>The inbound call leg audio QoS string.</para>
				</variable>
				<variable name="OSPOUTAUDIOQOS">
					<para>The outbound call leg audio QoS string.</para>
				</variable>
			</variablelist>
			<para>This application sets the following channel variable upon completion:</para>
			<variablelist>
				<variable name="OSPFINISHSTATUS">
					<para>The status of the OSPFinish attempt as a text string, one of</para>
					<value name="SUCCESS" />
					<value name="FAILED" />
					<value name="ERROR" />
				</variable>
			</variablelist>
		</description>
		<see-also>
			<ref type="application">OSPAuth</ref>
			<ref type="application">OSPLookup</ref>
			<ref type="application">OSPNext</ref>
		</see-also>
	</application>
	<application name="Page" language="en_US">
		<synopsis>
			Page series of phones
		</synopsis>
		<syntax>
			<parameter name="Technology/Resource" required="true" argsep="&amp;">
				<argument name="Technology/Resource" required="true">
					<para>Specification of the device(s) to dial. These must be in the format of
					<literal>Technology/Resource</literal>, where <replaceable>Technology</replaceable>
					represents a particular channel driver, and <replaceable>Resource</replaceable> represents a resource
					available to that particular channel driver.</para>
				</argument>
				<argument name="Technology2/Resource2" multiple="true">
					<para>Optional extra devices to dial inparallel</para>
					<para>If you need more then one enter them as Technology2/Resource2&amp;
					Technology3/Resourse3&amp;.....</para>
				</argument>
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="d">
						<para>Full duplex audio</para>
					</option>
					<option name="i">
						<para>Ignore attempts to forward the call</para>
					</option>
					<option name="q">
						<para>Quiet, do not play beep to caller</para>
					</option>
					<option name="r">
						<para>Record the page into a file (meetme option <literal>r</literal>)</para>
					</option>
					<option name="s">
						<para>Only dial a channel if its device state says that it is <literal>NOT_INUSE</literal></para>
					</option>
					<option name="A">
						<argument name="x" required="true">
							<para>The announcement to playback in all devices</para>
						</argument>
						<para>Play an announcement simultaneously to all paged participants</para>
					</option>
					<option name="n">
						<para>Do not play simultaneous announcement to caller (implies <literal>A(x)</literal>)</para>
					</option>
				</optionlist>
			</parameter>
			<parameter name="timeout">
				<para>Specify the length of time that the system will attempt to connect a call.
				After this duration, any intercom calls that have not been answered will be hung up by the
				system.</para>
			</parameter>
		</syntax>
		<description>
			<para>Places outbound calls to the given <replaceable>technology</replaceable>/<replaceable>resource</replaceable>
			and dumps them into a conference bridge as muted participants. The original
			caller is dumped into the conference as a speaker and the room is
			destroyed when the original callers leaves.</para>
		</description>
		<see-also>
			<ref type="application">MeetMe</ref>
		</see-also>
	</application>
	<application name="ParkAndAnnounce" language="en_US">
		<synopsis>
			Park and Announce.
		</synopsis>
		<syntax>
			<parameter name="announce_template" required="true" argsep=":">
				<argument name="announce" required="true">
					<para>Colon-separated list of files to announce. The word
					<literal>PARKED</literal> will be replaced by a say_digits of the extension in which
					the call is parked.</para>
				</argument>
				<argument name="announce1" multiple="true" />
			</parameter>
			<parameter name="timeout" required="true">
				<para>Time in seconds before the call returns into the return
				context.</para>
			</parameter>
			<parameter name="dial" required="true">
				<para>The app_dial style resource to call to make the
				announcement. Console/dsp calls the console.</para>
			</parameter>
			<parameter name="return_context">
				<para>The goto-style label to jump the call back into after
				timeout. Default <literal>priority+1</literal>.</para>
			</parameter>
		</syntax>
		<description>
			<para>Park a call into the parkinglot and announce the call to another channel.</para>
			<para>The variable <variable>PARKEDAT</variable> will contain the parking extension
			into which the call was placed.  Use with the Local channel to allow the dialplan to make
			use of this information.</para>
		</description>
		<see-also>
			<ref type="application">Park</ref>
			<ref type="application">ParkedCall</ref>
		</see-also>
	</application>
	<application name="Playback" language="en_US">
		<synopsis>
			Play a file.
		</synopsis>
		<syntax>
			<parameter name="filenames" required="true" argsep="&amp;">
				<argument name="filename" required="true" />
				<argument name="filename2" multiple="true" />
			</parameter>
			<parameter name="options">
				<para>Comma separated list of options</para>
				<optionlist>
					<option name="skip">
						<para>Do not play if not answered</para>
					</option>
					<option name="noanswer">
						<para>Playback without answering, otherwise the channel will
						be answered before the sound is played.</para>
						<note><para>Not all channel types support playing messages while still on hook.</para></note>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>Plays back given filenames (do not put extension of wav/alaw etc).
			The playback command answer the channel if no options are specified.
			If the file is non-existant it will fail</para>
			<para>This application sets the following channel variable upon completion:</para>
			<variablelist>
				<variable name="PLAYBACKSTATUS">
					<para>The status of the playback attempt as a text string.</para>
					<value name="SUCCESS"/>
					<value name="FAILED"/>
				</variable>
			</variablelist>
			<para>See Also: Background (application) -- for playing sound files that are interruptible</para>
			<para>WaitExten (application) -- wait for digits from caller, optionally play music on hold</para>
		</description>
	</application>
	<application name="PlayTones" language="en_US">
		<synopsis>
			Play a tone list.
		</synopsis>
		<syntax>
			<parameter name="arg" required="true">
				<para>Arg is either the tone name defined in the <filename>indications.conf</filename>
				configuration file, or a directly specified list of frequencies and durations.</para>
			</parameter>
		</syntax>
		<description>
			<para>Plays a tone list. Execution will continue with the next step in the dialplan
			immediately while the tones continue to play.</para>
			<para>See the sample <filename>indications.conf</filename> for a description of the
			specification of a tonelist.</para>
		</description>
		<see-also>
			<ref type="application">StopPlayTones</ref>
		</see-also>
	</application>
	<application name="StopPlayTones" language="en_US">
		<synopsis>
			Stop playing a tone list.
		</synopsis>
		<syntax />
		<description>
			<para>Stop playing a tone list, initiated by PlayTones().</para>
		</description>
		<see-also>
			<ref type="application">PlayTones</ref>
		</see-also>
	</application>
	<application name="PrivacyManager" language="en_US">
		<synopsis>
			Require phone number to be entered, if no CallerID sent
		</synopsis>
		<syntax>
			<parameter name="maxretries">
				<para>Total tries caller is allowed to input a callerid. Defaults to <literal>3</literal>.</para>
			</parameter>
			<parameter name="minlength">
				<para>Minimum allowable digits in the input callerid number. Defaults to <literal>10</literal>.</para>
			</parameter>
			<parameter name="options">
				<para>Position reserved for options.</para>
			</parameter>
			<parameter name="context">
				<para>Context to check the given callerid against patterns.</para>
			</parameter>
		</syntax>
		<description>
			<para>If no Caller*ID is sent, PrivacyManager answers the channel and asks
			the caller to enter their phone number. The caller is given
			<replaceable>maxretries</replaceable> attempts to do so. The application does
			<emphasis>nothing</emphasis> if Caller*ID was received on the channel.</para>
			<para>The application sets the following channel variable upon completion:</para>
			<variablelist>
				<variable name="PRIVACYMGRSTATUS">
					<para>The status of the privacy manager's attempt to collect a phone number from the user.</para>
					<value name="SUCCESS"/>
					<value name="FAILED"/>
				</variable>
			</variablelist>
		</description>
		<see-also>
			<ref type="application">Zapateller</ref>
		</see-also>
	</application>
	<application name="Queue" language="en_US">
		<synopsis>
			Queue a call for a call queue.
		</synopsis>
		<syntax>
			<parameter name="queuename" required="true" />
			<parameter name="options">
				<optionlist>
					<option name="C">
						<para>Mark all calls as "answered elsewhere" when cancelled.</para>
					</option>
					<option name="c">
						<para>Continue in the dialplan if the callee hangs up.</para>
					</option>
					<option name="d">
						<para>data-quality (modem) call (minimum delay).</para>
					</option>
					<option name="h">
						<para>Allow <emphasis>callee</emphasis> to hang up by pressing <literal>*</literal>.</para>
					</option>
					<option name="H">
						<para>Allow <emphasis>caller</emphasis> to hang up by pressing <literal>*</literal>.</para>
					</option>
					<option name="n">
						<para>No retries on the timeout; will exit this application and
						go to the next step.</para>
					</option>
					<option name="i">
						<para>Ignore call forward requests from queue members and do nothing
						when they are requested.</para>
					</option>
					<option name="I">
						<para>Asterisk will ignore any connected line update requests or any redirecting party
						update requests it may receive on this dial attempt.</para>
					</option>
					<option name="r">
						<para>Ring instead of playing MOH. Periodic Announcements are still made, if applicable.</para>
					</option>
					<option name="R">
						<para>Ring instead of playing MOH when a member channel is actually ringing.</para>
					</option>
					<option name="t">
						<para>Allow the <emphasis>called</emphasis> user to transfer the calling user.</para>
					</option>
					<option name="T">
						<para>Allow the <emphasis>calling</emphasis> user to transfer the call.</para>
					</option>
					<option name="w">
						<para>Allow the <emphasis>called</emphasis> user to write the conversation to
						disk via Monitor.</para>
					</option>
					<option name="W">
						<para>Allow the <emphasis>calling</emphasis> user to write the conversation to
						disk via Monitor.</para>
					</option>
					<option name="k">
						<para>Allow the <emphasis>called</emphasis> party to enable parking of the call by sending
						the DTMF sequence defined for call parking in <filename>features.conf</filename>.</para>
					</option>
					<option name="K">
						<para>Allow the <emphasis>calling</emphasis> party to enable parking of the call by sending
						the DTMF sequence defined for call parking in <filename>features.conf</filename>.</para>
					</option>
					<option name="x">
						<para>Allow the <emphasis>called</emphasis> user to write the conversation
						to disk via MixMonitor.</para>
					</option>
					<option name="X">
						<para>Allow the <emphasis>calling</emphasis> user to write the conversation to
						disk via MixMonitor.</para>
					</option>
				</optionlist>
			</parameter>
			<parameter name="URL">
				<para><replaceable>URL</replaceable> will be sent to the called party if the channel supports it.</para>
			</parameter>
			<parameter name="announceoverride" />
			<parameter name="timeout">
				<para>Will cause the queue to fail out after a specified number of
				seconds, checked between each <filename>queues.conf</filename> <replaceable>timeout</replaceable> and
				<replaceable>retry</replaceable> cycle.</para>
			</parameter>
			<parameter name="AGI">
				<para>Will setup an AGI script to be executed on the calling party's channel once they are
				connected to a queue member.</para>
			</parameter>
			<parameter name="macro">
				<para>Will run a macro on the calling party's channel once they are connected to a queue member.</para>
			</parameter>
			<parameter name="gosub">
				<para>Will run a gosub on the calling party's channel once they are connected to a queue member.</para>
			</parameter>
			<parameter name="rule">
				<para>Will cause the queue's defaultrule to be overridden by the rule specified.</para>
			</parameter>
			<parameter name="position">
				<para>Attempt to enter the caller into the queue at the numerical position specified. <literal>1</literal>
				would attempt to enter the caller at the head of the queue, and <literal>3</literal> would attempt to place
				the caller third in the queue.</para>
			</parameter>
		</syntax>
		<description>
			<para>In addition to transferring the call, a call may be parked and then picked
			up by another user.</para>
			<para>This application will return to the dialplan if the queue does not exist, or
			any of the join options cause the caller to not enter the queue.</para>
			<para>This application does not automatically answer and should be preceeded
			by an application such as Answer(), Progress(), or Ringing().</para>
			<para>This application sets the following channel variable upon completion:</para>
			<variablelist>
				<variable name="QUEUESTATUS">
					<para>The status of the call as a text string.</para>
					<value name="TIMEOUT" />
					<value name="FULL" />
					<value name="JOINEMPTY" />
					<value name="LEAVEEMPTY" />
					<value name="JOINUNAVAIL" />
					<value name="LEAVEUNAVAIL" />
					<value name="CONTINUE" />
				</variable>
			</variablelist>
		</description>
		<see-also>
			<ref type="application">Queue</ref>
			<ref type="application">QueueLog</ref>
			<ref type="application">AddQueueMember</ref>
			<ref type="application">RemoveQueueMember</ref>
			<ref type="application">PauseQueueMember</ref>
			<ref type="application">UnpauseQueueMember</ref>
			<ref type="function">QUEUE_VARIABLES</ref>
			<ref type="function">QUEUE_MEMBER</ref>
			<ref type="function">QUEUE_MEMBER_COUNT</ref>
			<ref type="function">QUEUE_EXISTS</ref>
			<ref type="function">QUEUE_WAITING_COUNT</ref>
			<ref type="function">QUEUE_MEMBER_LIST</ref>
			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
		</see-also>
	</application>
	<application name="AddQueueMember" language="en_US">
		<synopsis>
			Dynamically adds queue members.
		</synopsis>
		<syntax>
			<parameter name="queuename" required="true" />
			<parameter name="interface" />
			<parameter name="penalty" />
			<parameter name="options" />
			<parameter name="membername" />
			<parameter name="stateinterface" />
		</syntax>
		<description>
			<para>Dynamically adds interface to an existing queue. If the interface is
			already in the queue it will return an error.</para>
			<para>This application sets the following channel variable upon completion:</para>
			<variablelist>
				<variable name="AQMSTATUS">
					<para>The status of the attempt to add a queue member as a text string.</para>
					<value name="ADDED" />
					<value name="MEMBERALREADY" />
					<value name="NOSUCHQUEUE" />
				</variable>
			</variablelist>
		</description>
		<see-also>
			<ref type="application">Queue</ref>
			<ref type="application">QueueLog</ref>
			<ref type="application">AddQueueMember</ref>
			<ref type="application">RemoveQueueMember</ref>
			<ref type="application">PauseQueueMember</ref>
			<ref type="application">UnpauseQueueMember</ref>
			<ref type="function">QUEUE_VARIABLES</ref>
			<ref type="function">QUEUE_MEMBER</ref>
			<ref type="function">QUEUE_MEMBER_COUNT</ref>
			<ref type="function">QUEUE_EXISTS</ref>
			<ref type="function">QUEUE_WAITING_COUNT</ref>
			<ref type="function">QUEUE_MEMBER_LIST</ref>
			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
		</see-also>
	</application>
	<application name="RemoveQueueMember" language="en_US">
		<synopsis>
			Dynamically removes queue members.
		</synopsis>
		<syntax>
			<parameter name="queuename" required="true" />
			<parameter name="interface" />
			<parameter name="options" />
		</syntax>
		<description>
			<para>If the interface is <emphasis>NOT</emphasis> in the queue it will return an error.</para>
			<para>This application sets the following channel variable upon completion:</para>
			<variablelist>
				<variable name="RQMSTATUS">
					<value name="REMOVED" />
					<value name="NOTINQUEUE" />
					<value name="NOSUCHQUEUE" />
				</variable>
			</variablelist>
			<para>Example: RemoveQueueMember(techsupport,SIP/3000)</para>
		</description>
		<see-also>
			<ref type="application">Queue</ref>
			<ref type="application">QueueLog</ref>
			<ref type="application">AddQueueMember</ref>
			<ref type="application">RemoveQueueMember</ref>
			<ref type="application">PauseQueueMember</ref>
			<ref type="application">UnpauseQueueMember</ref>
			<ref type="function">QUEUE_VARIABLES</ref>
			<ref type="function">QUEUE_MEMBER</ref>
			<ref type="function">QUEUE_MEMBER_COUNT</ref>
			<ref type="function">QUEUE_EXISTS</ref>
			<ref type="function">QUEUE_WAITING_COUNT</ref>
			<ref type="function">QUEUE_MEMBER_LIST</ref>
			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
		</see-also>
	</application>
	<application name="PauseQueueMember" language="en_US">
		<synopsis>
			Pauses a queue member.
		</synopsis>
		<syntax>
			<parameter name="queuename" />
			<parameter name="interface" required="true" />
			<parameter name="options" />
			<parameter name="reason">
				<para>Is used to add extra information to the appropriate queue_log entries and manager events.</para>
			</parameter>
		</syntax>
		<description>
			<para>Pauses (blocks calls for) a queue member. The given interface will be paused in the given queue.
			This prevents any calls from being sent from the queue to the interface until it is
			unpaused with UnpauseQueueMember or the manager interface.  If no queuename is given,
			the interface is paused in every queue it is a member of. The application will fail if the
			interface is not found.</para>
			<para>This application sets the following channel variable upon completion:</para>
			<variablelist>
				<variable name="PQMSTATUS">
					<para>The status of the attempt to pause a queue member as a text string.</para>
					<value name="PAUSED" />
					<value name="NOTFOUND" />
				</variable>
			</variablelist>
			<para>Example: PauseQueueMember(,SIP/3000)</para>
		</description>
		<see-also>
			<ref type="application">Queue</ref>
			<ref type="application">QueueLog</ref>
			<ref type="application">AddQueueMember</ref>
			<ref type="application">RemoveQueueMember</ref>
			<ref type="application">PauseQueueMember</ref>
			<ref type="application">UnpauseQueueMember</ref>
			<ref type="function">QUEUE_VARIABLES</ref>
			<ref type="function">QUEUE_MEMBER</ref>
			<ref type="function">QUEUE_MEMBER_COUNT</ref>
			<ref type="function">QUEUE_EXISTS</ref>
			<ref type="function">QUEUE_WAITING_COUNT</ref>
			<ref type="function">QUEUE_MEMBER_LIST</ref>
			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
		</see-also>
	</application>
	<application name="UnpauseQueueMember" language="en_US">
		<synopsis>
			Unpauses a queue member.		
		</synopsis>
		<syntax>
			<parameter name="queuename" />
			<parameter name="interface" required="true" />
			<parameter name="options" />
			<parameter name="reason">
				<para>Is used to add extra information to the appropriate queue_log entries and manager events.</para>
			</parameter>
		</syntax>
		<description>
			<para>Unpauses (resumes calls to) a queue member. This is the counterpart to <literal>PauseQueueMember()</literal>
			and operates exactly the same way, except it unpauses instead of pausing the given interface.</para>
			<para>This application sets the following channel variable upon completion:</para>
			<variablelist>
				<variable name="UPQMSTATUS">
					<para>The status of the attempt to unpause a queue member as a text string.</para>
					<value name="UNPAUSED" />
					<value name="NOTFOUND" />
				</variable>
			</variablelist>
			<para>Example: UnpauseQueueMember(,SIP/3000)</para>
		</description>
		<see-also>
			<ref type="application">Queue</ref>
			<ref type="application">QueueLog</ref>
			<ref type="application">AddQueueMember</ref>
			<ref type="application">RemoveQueueMember</ref>
			<ref type="application">PauseQueueMember</ref>
			<ref type="application">UnpauseQueueMember</ref>
			<ref type="function">QUEUE_VARIABLES</ref>
			<ref type="function">QUEUE_MEMBER</ref>
			<ref type="function">QUEUE_MEMBER_COUNT</ref>
			<ref type="function">QUEUE_EXISTS</ref>
			<ref type="function">QUEUE_WAITING_COUNT</ref>
			<ref type="function">QUEUE_MEMBER_LIST</ref>
			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
		</see-also>
	</application>
	<application name="QueueLog" language="en_US">
		<synopsis>
			Writes to the queue_log file.
		</synopsis>
		<syntax>
			<parameter name="queuename" required="true" />
			<parameter name="uniqueid" required="true" />
			<parameter name="agent" required="true" />
			<parameter name="event" required="true" />
			<parameter name="additionalinfo" />
		</syntax>
		<description>
			<para>Allows you to write your own events into the queue log.</para>
			<para>Example: QueueLog(101,${UNIQUEID},${AGENT},WENTONBREAK,600)</para>
		</description>
		<see-also>
			<ref type="application">Queue</ref>
			<ref type="application">QueueLog</ref>
			<ref type="application">AddQueueMember</ref>
			<ref type="application">RemoveQueueMember</ref>
			<ref type="application">PauseQueueMember</ref>
			<ref type="application">UnpauseQueueMember</ref>
			<ref type="function">QUEUE_VARIABLES</ref>
			<ref type="function">QUEUE_MEMBER</ref>
			<ref type="function">QUEUE_MEMBER_COUNT</ref>
			<ref type="function">QUEUE_EXISTS</ref>
			<ref type="function">QUEUE_WAITING_COUNT</ref>
			<ref type="function">QUEUE_MEMBER_LIST</ref>
			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
		</see-also>
	</application>
	<function name="QUEUE_VARIABLES" language="en_US">
		<synopsis>
			Return Queue information in variables.
		</synopsis>
		<syntax>
			<parameter name="queuename" required="true">
				<enumlist>
					<enum name="QUEUEMAX">
						<para>Maxmimum number of calls allowed.</para>
					</enum>
					<enum name="QUEUESTRATEGY">
						<para>The strategy of the queue.</para>
					</enum>
					<enum name="QUEUECALLS">
						<para>Number of calls currently in the queue.</para>
					</enum>
					<enum name="QUEUEHOLDTIME">
						<para>Current average hold time.</para>
					</enum>
					<enum name="QUEUECOMPLETED">
						<para>Number of completed calls for the queue.</para>
					</enum>
					<enum name="QUEUEABANDONED">
						<para>Number of abandoned calls.</para>
					</enum>
					<enum name="QUEUESRVLEVEL">
						<para>Queue service level.</para>
					</enum>
					<enum name="QUEUESRVLEVELPERF">
						<para>Current service level performance.</para>
					</enum>
				</enumlist>
			</parameter>
		</syntax>
		<description>
			<para>Makes the following queue variables available.</para>
			<para>Returns <literal>0</literal> if queue is found and setqueuevar is defined, <literal>-1</literal> otherwise.</para>
		</description>
		<see-also>
			<ref type="application">Queue</ref>
			<ref type="application">QueueLog</ref>
			<ref type="application">AddQueueMember</ref>
			<ref type="application">RemoveQueueMember</ref>
			<ref type="application">PauseQueueMember</ref>
			<ref type="application">UnpauseQueueMember</ref>
			<ref type="function">QUEUE_VARIABLES</ref>
			<ref type="function">QUEUE_MEMBER</ref>
			<ref type="function">QUEUE_MEMBER_COUNT</ref>
			<ref type="function">QUEUE_EXISTS</ref>
			<ref type="function">QUEUE_WAITING_COUNT</ref>
			<ref type="function">QUEUE_MEMBER_LIST</ref>
			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
		</see-also>
	</function>
	<function name="QUEUE_MEMBER" language="en_US">
		<synopsis>
			Count number of members answering a queue.
		</synopsis>
		<syntax>
			<parameter name="queuename" required="true" />
			<parameter name="option" required="true">
				<enumlist>
					<enum name="logged">
						<para>Returns the number of logged-in members for the specified queue.</para>
					</enum>
					<enum name="free">
						<para>Returns the number of logged-in members for the specified queue that either can take calls or are currently wrapping up after a previous call.</para>
					</enum>
					<enum name="ready">
						<para>Returns the number of logged-in members for the specified queue that are immediately available to answer a call.</para>
					</enum>
					<enum name="count">
						<para>Returns the total number of members for the specified queue.</para>
					</enum>
				</enumlist>
			</parameter>
		</syntax>
		<description>
			<para>Returns the number of members currently associated with the specified <replaceable>queuename</replaceable>.</para>
		</description>
		<see-also>
			<ref type="application">Queue</ref>
			<ref type="application">QueueLog</ref>
			<ref type="application">AddQueueMember</ref>
			<ref type="application">RemoveQueueMember</ref>
			<ref type="application">PauseQueueMember</ref>
			<ref type="application">UnpauseQueueMember</ref>
			<ref type="function">QUEUE_VARIABLES</ref>
			<ref type="function">QUEUE_MEMBER</ref>
			<ref type="function">QUEUE_MEMBER_COUNT</ref>
			<ref type="function">QUEUE_EXISTS</ref>
			<ref type="function">QUEUE_WAITING_COUNT</ref>
			<ref type="function">QUEUE_MEMBER_LIST</ref>
			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
		</see-also>
	</function>
	<function name="QUEUE_MEMBER_COUNT" language="en_US">
		<synopsis>
			Count number of members answering a queue.
		</synopsis>
		<syntax>
			<parameter name="queuename" required="true" />
		</syntax>
		<description>
			<para>Returns the number of members currently associated with the specified <replaceable>queuename</replaceable>.</para>
			<warning><para>This function has been deprecated in favor of the <literal>QUEUE_MEMBER()</literal> function</para></warning>
		</description>
		<see-also>
			<ref type="application">Queue</ref>
			<ref type="application">QueueLog</ref>
			<ref type="application">AddQueueMember</ref>
			<ref type="application">RemoveQueueMember</ref>
			<ref type="application">PauseQueueMember</ref>
			<ref type="application">UnpauseQueueMember</ref>
			<ref type="function">QUEUE_VARIABLES</ref>
			<ref type="function">QUEUE_MEMBER</ref>
			<ref type="function">QUEUE_MEMBER_COUNT</ref>
			<ref type="function">QUEUE_EXISTS</ref>
			<ref type="function">QUEUE_WAITING_COUNT</ref>
			<ref type="function">QUEUE_MEMBER_LIST</ref>
			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
		</see-also>
	</function>
	<function name="QUEUE_EXISTS" language="en_US">
		<synopsis>
			Check if a named queue exists on this server
		</synopsis>
		<syntax>
			<parameter name="queuename" />
		</syntax>
		<description>
			<para>Returns 1 if the specified queue exists, 0 if it does not</para>
		</description>
		<see-also>
			<ref type="application">Queue</ref>
			<ref type="application">QueueLog</ref>
			<ref type="application">AddQueueMember</ref>
			<ref type="application">RemoveQueueMember</ref>
			<ref type="application">PauseQueueMember</ref>
			<ref type="application">UnpauseQueueMember</ref>
			<ref type="function">QUEUE_VARIABLES</ref>
			<ref type="function">QUEUE_MEMBER</ref>
			<ref type="function">QUEUE_MEMBER_COUNT</ref>
			<ref type="function">QUEUE_EXISTS</ref>
			<ref type="function">QUEUE_WAITING_COUNT</ref>
			<ref type="function">QUEUE_MEMBER_LIST</ref>
			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
		</see-also>
	</function>
	<function name="QUEUE_WAITING_COUNT" language="en_US">
		<synopsis>
			Count number of calls currently waiting in a queue.
		</synopsis>
		<syntax>
			<parameter name="queuename" />
		</syntax>
		<description>
			<para>Returns the number of callers currently waiting in the specified <replaceable>queuename</replaceable>.</para>
		</description>
		<see-also>
			<ref type="application">Queue</ref>
			<ref type="application">QueueLog</ref>
			<ref type="application">AddQueueMember</ref>
			<ref type="application">RemoveQueueMember</ref>
			<ref type="application">PauseQueueMember</ref>
			<ref type="application">UnpauseQueueMember</ref>
			<ref type="function">QUEUE_VARIABLES</ref>
			<ref type="function">QUEUE_MEMBER</ref>
			<ref type="function">QUEUE_MEMBER_COUNT</ref>
			<ref type="function">QUEUE_EXISTS</ref>
			<ref type="function">QUEUE_WAITING_COUNT</ref>
			<ref type="function">QUEUE_MEMBER_LIST</ref>
			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
		</see-also>
	</function>
	<function name="QUEUE_MEMBER_LIST" language="en_US">
		<synopsis>
			Returns a list of interfaces on a queue.
		</synopsis>
		<syntax>
			<parameter name="queuename" required="true" />
		</syntax>
		<description>
			<para>Returns a comma-separated list of members associated with the specified <replaceable>queuename</replaceable>.</para>
		</description>
		<see-also>
			<ref type="application">Queue</ref>
			<ref type="application">QueueLog</ref>
			<ref type="application">AddQueueMember</ref>
			<ref type="application">RemoveQueueMember</ref>
			<ref type="application">PauseQueueMember</ref>
			<ref type="application">UnpauseQueueMember</ref>
			<ref type="function">QUEUE_VARIABLES</ref>
			<ref type="function">QUEUE_MEMBER</ref>
			<ref type="function">QUEUE_MEMBER_COUNT</ref>
			<ref type="function">QUEUE_EXISTS</ref>
			<ref type="function">QUEUE_WAITING_COUNT</ref>
			<ref type="function">QUEUE_MEMBER_LIST</ref>
			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
		</see-also>
	</function>
	<function name="QUEUE_MEMBER_PENALTY" language="en_US">
		<synopsis>
			Gets or sets queue members penalty.
		</synopsis>
		<syntax>
			<parameter name="queuename" required="true" />
			<parameter name="interface" required="true" />
		</syntax>
		<description>
			<para>Gets or sets queue members penalty.</para>
		</description>
		<see-also>
			<ref type="application">Queue</ref>
			<ref type="application">QueueLog</ref>
			<ref type="application">AddQueueMember</ref>
			<ref type="application">RemoveQueueMember</ref>
			<ref type="application">PauseQueueMember</ref>
			<ref type="application">UnpauseQueueMember</ref>
			<ref type="function">QUEUE_VARIABLES</ref>
			<ref type="function">QUEUE_MEMBER</ref>
			<ref type="function">QUEUE_MEMBER_COUNT</ref>
			<ref type="function">QUEUE_EXISTS</ref>
			<ref type="function">QUEUE_WAITING_COUNT</ref>
			<ref type="function">QUEUE_MEMBER_LIST</ref>
			<ref type="function">QUEUE_MEMBER_PENALTY</ref>
		</see-also>
	</function>
	<manager name="Queues" language="en_US">
		<synopsis>
			Queues.
		</synopsis>
		<syntax>
		</syntax>
		<description>
		</description>
	</manager>
	<manager name="QueueStatus" language="en_US">
		<synopsis>
			Show queue status.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Queue" />
			<parameter name="Member" />
		</syntax>
		<description>
		</description>
	</manager>
	<manager name="QueueSummary" language="en_US">
		<synopsis>
			Show queue summary.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Queue" />
		</syntax>
		<description>
		</description>
	</manager>
	<manager name="QueueAdd" language="en_US">
		<synopsis>
			Add interface to queue.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Queue" required="true" />
			<parameter name="Interface" required="true" />
			<parameter name="Penalty" />
			<parameter name="Paused" />
			<parameter name="MemberName" />
			<parameter name="StateInterface" />
		</syntax>
		<description>
		</description>
	</manager>
	<manager name="QueueRemove" language="en_US">
		<synopsis>
			Remove interface from queue.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Queue" required="true" />
			<parameter name="Interface" required="true" />
		</syntax>
		<description>
		</description>
	</manager>
	<manager name="QueuePause" language="en_US">
		<synopsis>
			Makes a queue member temporarily unavailable.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Interface" required="true" />
			<parameter name="Paused" required="true" />
			<parameter name="Queue" />
			<parameter name="Reason" />
		</syntax>
		<description>
		</description>
	</manager>
	<manager name="QueueLog" language="en_US">
		<synopsis>
			Adds custom entry in queue_log.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Queue" required="true" />
			<parameter name="Event" required="true" />
			<parameter name="Uniqueid" />
			<parameter name="Interface" />
			<parameter name="Message" />
		</syntax>
		<description>
		</description>
	</manager>
	<manager name="QueuePenalty" language="en_US">
		<synopsis>
			Set the penalty for a queue member.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Interface" required="true" />
			<parameter name="Penalty" required="true" />
			<parameter name="Queue" />
		</syntax>
		<description>
		</description>
	</manager>
	<manager name="QueueRule" language="en_US">
		<synopsis>
			Queue Rules.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Rule" />
		</syntax>
		<description>
		</description>
	</manager>
	<manager name="QueueReload" language="en_US">
		<synopsis>
			Reload a queue, queues, or any sub-section of a queue or queues.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Queue" />
			<parameter name="Members">
				<enumlist>
					<enum name="yes" />
					<enum name="no" />
				</enumlist>
			</parameter>
			<parameter name="Rules">
				<enumlist>
					<enum name="yes" />
					<enum name="no" />
				</enumlist>
			</parameter>
			<parameter name="Parameters">
				<enumlist>
					<enum name="yes" />
					<enum name="no" />
				</enumlist>
			</parameter>
		</syntax>
		<description>
		</description>
	</manager>
	<manager name="QueueReset" language="en_US">
		<synopsis>
			Reset queue statistics.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Queue" />
		</syntax>
		<description>
		</description>
	</manager>
	<application name="Read" language="en_US">
		<synopsis>
			Read a variable.
		</synopsis>
		<syntax>
			<parameter name="variable" required="true">
				<para>The input digits will be stored in the given <replaceable>variable</replaceable>
				name.</para>
			</parameter>
			<parameter name="filenames" argsep="&amp;">
				<argument name="filename" required="true">
					<para>file(s) to play before reading digits or tone with option i</para>
				</argument>
				<argument name="filename2" multiple="true" />
			</parameter>
			<parameter name="maxdigits">
				<para>Maximum acceptable number of digits. Stops reading after
				<replaceable>maxdigits</replaceable> have been entered (without
				requiring the user to press the <literal>#</literal> key).</para>
				<para>Defaults to <literal>0</literal> - no limit - wait for the
				user press the <literal>#</literal> key. Any value below
				<literal>0</literal> means the same. Max accepted value is
				<literal>255</literal>.</para>
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="s">
						<para>to return immediately if the line is not up.</para>
					</option>
					<option name="i">
						<para>to play  filename as an indication tone from your
						<filename>indications.conf</filename>.</para>
					</option>
					<option name="n">
						<para>to read digits even if the line is not up.</para>
					</option>
				</optionlist>
			</parameter>
			<parameter name="attempts">
				<para>If greater than <literal>1</literal>, that many
				<replaceable>attempts</replaceable> will be made in the
				event no data is entered.</para>
			</parameter>
			<parameter name="timeout">
				<para>The number of seconds to wait for a digit response. If greater
				than <literal>0</literal>, that value will override the default timeout.
				Can be floating point.</para>
			</parameter>
		</syntax>
		<description>
			<para>Reads a #-terminated string of digits a certain number of times from the
			user in to the given <replaceable>variable</replaceable>.</para>
			<para>This application sets the following channel variable upon completion:</para>
			<variablelist>
				<variable name="READSTATUS">
					<para>This is the status of the read operation.</para>
					<value name="OK" />
					<value name="ERROR" />
					<value name="HANGUP" />
					<value name="INTERRUPTED" />
					<value name="SKIPPED" />
					<value name="TIMEOUT" />
				</variable>
			</variablelist>
		</description>
		<see-also>
			<ref type="application">SendDTMF</ref>
		</see-also>
	</application>
	<application name="ReadExten" language="en_US">
		<synopsis>
			Read an extension into a variable.
		</synopsis>
		<syntax>
			<parameter name="variable" required="true" />
			<parameter name="filename">
				<para>File to play before reading digits or tone with option <literal>i</literal></para>
			</parameter>
			<parameter name="context">
				<para>Context in which to match extensions.</para>
			</parameter>
			<parameter name="option">
				<optionlist>
					<option name="s">
						<para>Return immediately if the channel is not answered.</para>
					</option>
					<option name="i">
						<para>Play <replaceable>filename</replaceable> as an indication tone from your
						<filename>indications.conf</filename> or a directly specified list of
						frequencies and durations.</para>
					</option>
					<option name="n">
						<para>Read digits even if the channel is not answered.</para>
					</option>
				</optionlist>
			</parameter>
			<parameter name="timeout">
				<para>An integer number of seconds to wait for a digit response. If
				greater than <literal>0</literal>, that value will override the default timeout.</para>
			</parameter>
		</syntax>
		<description>
			<para>Reads a <literal>#</literal> terminated string of digits from the user into the given variable.</para>
			<para>Will set READEXTENSTATUS on exit with one of the following statuses:</para>
			<variablelist>
				<variable name="READEXTENSTATUS">
					<value name="OK">
						A valid extension exists in ${variable}.
					</value>
					<value name="TIMEOUT">
						No extension was entered in the specified time.  Also sets ${variable} to "t".
					</value>
					<value name="INVALID">
						An invalid extension, ${INVALID_EXTEN}, was entered.  Also sets ${variable} to "i".
					</value>
					<value name="SKIP">
						Line was not up and the option 's' was specified.
					</value>
					<value name="ERROR">
						Invalid arguments were passed.
					</value>
				</variable>
			</variablelist>
		</description>
	</application>
	<function name="VALID_EXTEN" language="en_US">
		<synopsis>
			Determine whether an extension exists or not.
		</synopsis>
		<syntax>
			<parameter name="context">
				<para>Defaults to the current context</para>
			</parameter>
			<parameter name="extension" required="true" />
			<parameter name="priority">
				<para>Priority defaults to <literal>1</literal>.</para>
			</parameter>
		</syntax>
		<description>
			<para>Returns a true value if the indicated <replaceable>context</replaceable>,
			<replaceable>extension</replaceable>, and <replaceable>priority</replaceable> exist.</para>
		</description>
	</function>
	<application name="ReadFile" language="en_US">
		<synopsis>
			Read the contents of a text file into a channel variable.
		</synopsis>
		<syntax argsep="=">
			<parameter name="varname" required="true">
				<para>Result stored here.</para>
			</parameter>
			<parameter name="fileparams" required="true">
				<argument name="file" required="true">
					<para>The name of the file to read.</para>
				</argument>
				<argument name="length" required="false">
					<para>Maximum number of characters to capture.</para>
					<para>If not specified defaults to max.</para>
				</argument>
			</parameter>
		</syntax>
		<description>
			<para>Read the contents of a text file into channel variable <replaceable>varname</replaceable></para>
			<warning><para>ReadFile has been deprecated in favor of Set(varname=${FILE(file,0,length)})</para></warning>
		</description>
		<see-also>
			<ref type="application">System</ref>
			<ref type="application">Read</ref>
		</see-also>
	</application>
	<application name="Record" language="en_US">
		<synopsis>
			Record to a file.
		</synopsis>
		<syntax>
			<parameter name="filename" required="true" argsep=".">
				<argument name="filename" required="true" />
				<argument name="format" required="true">
					<para>Is the format of the file type to be recorded (wav, gsm, etc).</para>
				</argument>
			</parameter>
			<parameter name="silence">
				<para>Is the number of seconds of silence to allow before returning.</para>
			</parameter>
			<parameter name="maxduration">
				<para>Is the maximum recording duration in seconds. If missing
				or 0 there is no maximum.</para>
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="a">
						<para>Append to existing recording rather than replacing.</para>
					</option>
					<option name="n">
						<para>Do not answer, but record anyway if line not yet answered.</para>
					</option>
					<option name="q">
						<para>quiet (do not play a beep tone).</para>
					</option>
					<option name="s">
						<para>skip recording if the line is not yet answered.</para>
					</option>
					<option name="t">
						<para>use alternate '*' terminator key (DTMF) instead of default '#'</para>
					</option>
					<option name="x">
						<para>Ignore all terminator keys (DTMF) and keep recording until hangup.</para>
					</option>
					<option name="k">
					        <para>Keep recorded file upon hangup.</para>
					</option>
					<option name="y">
					        <para>Terminate recording if *any* DTMF digit is received.</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>If filename contains <literal>%d</literal>, these characters will be replaced with a number
			incremented by one each time the file is recorded.
			Use <astcli>core show file formats</astcli> to see the available formats on your system
			User can press <literal>#</literal> to terminate the recording and continue to the next priority.
			If the user hangs up during a recording, all data will be lost and the application will terminate.</para>
			<variablelist>
				<variable name="RECORDED_FILE">
					<para>Will be set to the final filename of the recording.</para>
				</variable>
				<variable name="RECORD_STATUS">
					<para>This is the final status of the command</para>
					<value name="DTMF">A terminating DTMF was received ('#' or '*', depending upon option 't')</value>
					<value name="SILENCE">The maximum silence occurred in the recording.</value>
					<value name="SKIP">The line was not yet answered and the 's' option was specified.</value>
					<value name="TIMEOUT">The maximum length was reached.</value>
					<value name="HANGUP">The channel was hung up.</value>
					<value name="ERROR">An unrecoverable error occurred, which resulted in a WARNING to the logs.</value>
				</variable>
			</variablelist>
		</description>
	</application>

	<application name="SayCountedNoun" language="en_US">
		<synopsis>
			Say a noun in declined form in order to count things
		</synopsis>
		<syntax>
			<parameter name="number" required="true">
				<para>The number of things</para>
			</parameter>
			<parameter name="filename" required="true">
				<para>File name stem for the noun that is the the name of the things</para>
			</parameter>
		</syntax>
		<description>
			<para>Selects and plays the proper singular or plural form of a noun
			when saying things such as "five calls".  English has simple rules
			for deciding when to say "call" and when to say "calls", but other
			languages have complicated rules which would be extremely difficult
			to implement in the Asterisk dialplan language.</para>
			<para>The correct sound file is selected by examining the
			<replaceable>number</replaceable> and adding the appropriate suffix
			to <replaceable>filename</replaceable>. If the channel language is
			English, then the suffix will be either empty or "s". If the channel
			language is Russian or some other Slavic language, then the suffix
			will be empty for nominative, "x1" for genative singular, and "x2"
			for genative plural.</para>
			<para>Note that combining <replaceable>filename</replaceable> with
			a suffix will not necessarily produce a correctly spelled plural
			form. For example, SayCountedNoun(2,man) will play the sound file
			"mans" rather than "men". This behavior is intentional. Since the
			file name is never seen by the end user, there is no need to
			implement complicated spelling rules.  We simply record the word
			"men" in the sound file named "mans".</para>
			<para>This application does not automatically answer and should be
			preceeded by an application such as Answer() or Progress.</para>
		</description>
		<see-also>
			<ref type="application">SayCountedAdj</ref>
			<ref type="application">SayNumber</ref>
		</see-also>
	</application>
	<application name="SayCountedAdj" language="en_US">
		<synopsis>
			Say a adjective in declined form in order to count things
		</synopsis>
		<syntax>
			<parameter name="number" required="true">
				<para>The number of things</para>
			</parameter>
			<parameter name="filename" required="true">
				<para>File name stem for the adjective</para>
			</parameter>
			<parameter name="gender">
				<para>The gender of the noun modified, one of 'm', 'f', 'n', or 'c'</para>
			</parameter>
		</syntax>
		<description>
			<para>Selects and plays the proper form of an adjective according to
			the gender and of the noun which it modifies and the number of
			objects named by the noun-verb combination which have been counted.
			Used when saying things such as "5 new messages".  The various
			singular and plural forms of the adjective are selected by adding
			suffixes to <replaceable>filename</replaceable>.</para>
			<para>If the channel language is English, then no suffix will ever
			be added (since, in English, adjectives are not declined). If the
			channel language is Russian or some other slavic language, then the
			suffix will the specified <replaceable>gender</replaceable> for
			nominative, and "x" for genative plural. (The genative singular is
			not used when counting things.) For example, SayCountedAdj(1,new,f)
			will play sound file "newa" (containing the word "novaya"), but
			SayCountedAdj(5,new,f) will play sound file "newx" (containing the
			word "novikh").</para>
			<para>This application does not automatically answer and should be
			preceeded by an application such as Answer(), Progress(), or
			Proceeding().</para>
		</description>
		<see-also>
			<ref type="application">SayCountedNoun</ref>
			<ref type="application">SayNumber</ref>
		</see-also>
	</application>
	<application name="SayUnixTime" language="en_US">
		<synopsis>
			Says a specified time in a custom format.
		</synopsis>
		<syntax>
			<parameter name="unixtime">
				<para>time, in seconds since Jan 1, 1970.  May be negative. Defaults to now.</para>
			</parameter>
			<parameter name="timezone">
				<para>timezone, see <directory>/usr/share/zoneinfo</directory> for a list. Defaults to machine default.</para>
			</parameter>
			<parameter name="format">
				<para>a format the time is to be said in.  See <filename>voicemail.conf</filename>.
				Defaults to <literal>ABdY "digits/at" IMp</literal></para>
			</parameter>
		</syntax>
		<description>
			<para>Uses some of the sound files stored in <directory>/var/lib/asterisk/sounds</directory> to construct a phrase 
			saying the specified date and/or time in the specified format. </para>
		</description>
		<see-also>
			<ref type="function">STRFTIME</ref>
			<ref type="function">STRPTIME</ref>
			<ref type="function">IFTIME</ref>
		</see-also>
	</application>
	<application name="DateTime" language="en_US">
		<synopsis>
			Says a specified time in a custom format.
		</synopsis>
		<syntax>
			<parameter name="unixtime">
				<para>time, in seconds since Jan 1, 1970.  May be negative. Defaults to now.</para>
			</parameter>
			<parameter name="timezone">
				<para>timezone, see <filename>/usr/share/zoneinfo</filename> for a list. Defaults to machine default.</para>
			</parameter>
			<parameter name="format">
				<para>a format the time is to be said in.  See <filename>voicemail.conf</filename>.
				Defaults to <literal>ABdY "digits/at" IMp</literal></para>
			</parameter>
		</syntax>
		<description>
			<para>Say the date and time in a specified format.</para>
		</description>
	</application>

	<application name="SendDTMF" language="en_US">
		<synopsis>
			Sends arbitrary DTMF digits
		</synopsis>
		<syntax>
			<parameter name="digits" required="true">
				<para>List of digits 0-9,*#,abcd</para>
			</parameter>
			<parameter name="timeout_ms" required="false">
				<para>Amount of time to wait in ms between tones. (defaults to .25s)</para>
			</parameter>
			<parameter name="duration_ms" required="false">
				<para>Duration of each digit</para>
			</parameter>
                        <parameter name="channel" required="false">
                                <para>Channel where digits will be played</para>
                        </parameter>
		</syntax>
		<description>
			<para>DTMF digits sent to a channel with half second pause</para>
			<para>It will pass all digits or terminate if it encounters an error.</para>
		</description>
		<see-also>
			<ref type="application">Read</ref>
		</see-also>
	</application>
	<manager name="PlayDTMF" language="en_US">
		<synopsis>
			Play DTMF signal on a specific channel.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Channel" required="true">
				<para>Channel name to send digit to.</para>
			</parameter>
			<parameter name="Digit" required="true">
				<para>The DTMF digit to play.</para>
			</parameter>
		</syntax>
		<description>
			<para>Plays a dtmf digit on the specified channel.</para>
		</description>
	</manager>
	<application name="SendText" language="en_US">
		<synopsis>
			Send a Text Message.
		</synopsis>
		<syntax>
			<parameter name="text" required="true" />
		</syntax>
		<description>
			<para>Sends <replaceable>text</replaceable> to current channel (callee).</para>
			<para>Result of transmission will be stored in the <variable>SENDTEXTSTATUS</variable></para>
			<variablelist>
				<variable name="SENDTEXTSTATUS">
					<value name="SUCCESS">
						Transmission succeeded.
					</value>
					<value name="FAILURE">
						Transmission failed.
					</value>
					<value name="UNSUPPORTED">
						Text transmission not supported by channel.
					</value>
				</variable>
			</variablelist>
			<note><para>At this moment, text is supposed to be 7 bit ASCII in most channels.</para></note>
		</description>
		<see-also>
			<ref type="application">SendImage</ref>
			<ref type="application">SendURL</ref>
		</see-also>
	</application>
	<application name="SetCallerPres" language="en_US">
		<synopsis>
			Set CallerID Presentation.
		</synopsis>
		<syntax>
			<parameter name="presentation" required="true">
				<enumlist>
					<enum name="allowed_not_screened">
						<para>Presentation Allowed, Not Screened.</para>
					</enum>
					<enum name="allowed_passed_screen">
						<para>Presentation Allowed, Passed Screen.</para>
					</enum>
					<enum name="allowed_failed_screen">
						<para>Presentation Allowed, Failed Screen.</para>
					</enum>
					<enum name="allowed">
						<para>Presentation Allowed, Network Number.</para>
					</enum>
					<enum name="prohib_not_screened">
						<para>Presentation Prohibited, Not Screened.</para>
					</enum>
					<enum name="prohib_passed_screen">
						<para>Presentation Prohibited, Passed Screen.</para>
					</enum>
					<enum name="prohib_failed_screen">
						<para>Presentation Prohibited, Failed Screen.</para>
					</enum>
					<enum name="prohib">
						<para>Presentation Prohibited, Network Number.</para>
					</enum>
					<enum name="unavailable">
						<para>Number Unavailable.</para>
					</enum>
				</enumlist>
			</parameter>
		</syntax>
		<description>
			<para>Set Caller*ID presentation on a call.</para>
		</description>
	</application>
	<application name="Skel" language="en_US">
		<synopsis>
			Simple one line explaination.
		</synopsis>
		<syntax>
			<parameter name="dummy" required="true"/>
			<parameter name="options">
				<optionlist>
					<option name="a">
						<para>Option A.</para>
					</option>
					<option name="b">
						<para>Option B.</para>
					</option>
					<option name="c">
						<para>Option C.</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
		<para>This application is a template to build other applications from. 
		It shows you the basic structure to create your own Asterisk applications.</para>
		</description>
	</application>
	<application name="SMS" language="en_US">
		<synopsis>
			Communicates with SMS service centres and SMS capable analogue phones.
		</synopsis>
		<syntax>
			<parameter name="name" required="true">
				<para>The name of the queue used in <filename>/var/spool/asterisk/sms</filename></para>
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="a">
						<para>Answer, i.e. send initial FSK packet.</para>
					</option>
					<option name="s">
						<para>Act as service centre talking to a phone.</para>
					</option>
					<option name="t">
						<para>Use protocol 2 (default used is protocol 1).</para>
					</option>
					<option name="p">
						<para>Set the initial delay to N ms (default is <literal>300</literal>).
						addr and body are a deprecated format to send messages out.</para>
					</option>
					<option name="r">
						<para>Set the Status Report Request (SRR) bit.</para>
					</option>
					<option name="o">
						<para>The body should be coded as octets not 7-bit symbols.</para>
					</option>
				</optionlist>
			</parameter>
			<parameter name="addr" />
			<parameter name="body" />
		</syntax>
		<description>
			<para>SMS handles exchange of SMS data with a call to/from SMS capable phone or SMS PSTN service center.
			Can send and/or receive SMS messages. Works to ETSI ES 201 912; compatible with BT SMS PSTN service in
			UK and Telecom Italia in Italy.</para>
			<para>Typical usage is to use to handle calls from the SMS service centre CLI, or to set up a call using
			<literal>outgoing</literal> or manager interface to connect service centre to SMS().</para>
			<para>"Messages are processed as per text file message queues. smsq (a separate software) is a command to
			generate message queues and send messages.</para>
			<note><para>The protocol has tight delay bounds. Please use short frames and disable/keep short the
			jitter buffer on the ATA to make sure that respones (ACK etc.) are received in time.</para></note>
		</description>
	</application>
	<application name="SoftHangup" language="en_US">
		<synopsis>
			Hangs up the requested channel.
		</synopsis>
		<syntax>
			<parameter name="Technology/Resource" required="true" />
			<parameter name="options">
				<optionlist>
					<option name="a">
						<para>Hang up all channels on a specified device instead of a single resource</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>	
		<description>
			<para>Hangs up the requested channel.  If there are no channels to 
			hangup, the application will report it.</para>
		</description>
	</application>

	<application name="SpeechCreate" language="en_US">
		<synopsis>
			Create a Speech Structure.
		</synopsis>
		<syntax>
			<parameter name="engine_name" required="true" />
		</syntax>
		<description>
			<para>This application creates information to be used by all the other applications.
			It must be called before doing any speech recognition activities such as activating a grammar.
			It takes the engine name to use as the argument, if not specified the default engine will be used.</para>
		</description>
	</application>
	<application name="SpeechActivateGrammar" language="en_US">
		<synopsis>
			Activate a grammar.
		</synopsis>
		<syntax>
			<parameter name="grammar_name" required="true" />
		</syntax>
		<description>
			<para>This activates the specified grammar to be recognized by the engine.
			A grammar tells the speech recognition engine what to recognize, and how to portray it back to you
			in the dialplan. The grammar name is the only argument to this application.</para>
		</description>
	</application>
	<application name="SpeechStart" language="en_US">
		<synopsis>
			Start recognizing voice in the audio stream.
		</synopsis>
		<syntax />
		<description>
			<para>Tell the speech recognition engine that it should start trying to get results from audio being
			fed to it.</para>
		</description>
	</application>
	<application name="SpeechBackground" language="en_US">
		<synopsis>
			Play a sound file and wait for speech to be recognized.
		</synopsis>
		<syntax>
			<parameter name="sound_file" required="true" />
			<parameter name="timeout">
				<para>Timeout integer in seconds. Note the timeout will only start
				once the sound file has stopped playing.</para>
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="n">
						<para>Don't answer the channel if it has not already been answered.</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>This application plays a sound file and waits for the person to speak. Once they start speaking playback
			of the file stops, and silence is heard. Once they stop talking the processing sound is played to indicate
			the speech recognition engine is working. Once results are available the application returns and results
			(score and text) are available using dialplan functions.</para>
			<para>The first text and score are ${SPEECH_TEXT(0)} AND ${SPEECH_SCORE(0)} while the second are ${SPEECH_TEXT(1)}
			and ${SPEECH_SCORE(1)}.</para>
			<para>The first argument is the sound file and the second is the timeout integer in seconds.</para>
			
		</description>
	</application>
	<application name="SpeechDeactivateGrammar" language="en_US">
		<synopsis>
			Deactivate a grammar.
		</synopsis>
		<syntax>
			<parameter name="grammar_name" required="true">
				<para>The grammar name to deactivate</para>
			</parameter>
		</syntax>
		<description>
			<para>This deactivates the specified grammar so that it is no longer recognized.</para>
		</description>
	</application>
	<application name="SpeechProcessingSound" language="en_US">
		<synopsis>
			Change background processing sound.
		</synopsis>
		<syntax>
			<parameter name="sound_file" required="true" />
		</syntax>
		<description>
			<para>This changes the processing sound that SpeechBackground plays back when the speech recognition engine is
			processing and working to get results.</para>
		</description>
	</application>
	<application name="SpeechDestroy" language="en_US">
		<synopsis>
			End speech recognition.
		</synopsis>
		<syntax />
		<description>
			<para>This destroys the information used by all the other speech recognition applications.
			If you call this application but end up wanting to recognize more speech, you must call SpeechCreate()
			again before calling any other application.</para>
		</description>
	</application>
	<application name="SpeechLoadGrammar" language="en_US">
		<synopsis>
			Load a grammar.
		</synopsis>
		<syntax>
			<parameter name="grammar_name" required="true" />
			<parameter name="path" required="true" />
		</syntax>
		<description>
			<para>Load a grammar only on the channel, not globally.</para>
		</description>
	</application>
	<application name="SpeechUnloadGrammar" language="en_US">
		<synopsis>
			Unload a grammar.
		</synopsis>
		<syntax>
			<parameter name="grammar_name" required="true" />
		</syntax>
		<description>
			<para>Unload a grammar.</para>
		</description>
	</application>
	<function name="SPEECH_SCORE" language="en_US">
		<synopsis>
			Gets the confidence score of a result.
		</synopsis>
		<syntax argsep="/">
			<parameter name="nbest_number" />
			<parameter name="result_number" required="true" />
		</syntax>
		<description>
			<para>Gets the confidence score of a result.</para>
		</description>
	</function>
	<function name="SPEECH_TEXT" language="en_US">
		<synopsis>
			Gets the recognized text of a result.
		</synopsis>
		<syntax argsep="/">
			<parameter name="nbest_number" />
			<parameter name="result_number" required="true" />
		</syntax>
		<description>
			<para>Gets the recognized text of a result.</para>
		</description>
	</function>
	<function name="SPEECH_GRAMMAR" language="en_US">
		<synopsis>
			Gets the matched grammar of a result if available.
		</synopsis>
		<syntax argsep="/">
			<parameter name="nbest_number" />
			<parameter name="result_number" required="true" />
		</syntax>
		<description>
			<para>Gets the matched grammar of a result if available.</para>
		</description>
	</function>
	<function name="SPEECH_ENGINE" language="en_US">
		<synopsis>
			Change a speech engine specific attribute.
		</synopsis>
		<syntax>
			<parameter name="name" required="true" />
		</syntax>
		<description>
			<para>Changes a speech engine specific attribute.</para>
		</description>
	</function>
	<function name="SPEECH_RESULTS_TYPE" language="en_US">
		<synopsis>
			Sets the type of results that will be returned.
		</synopsis>
		<syntax />
		<description>
			<para>Sets the type of results that will be returned. Valid options are normal or nbest.</para>
		</description>
	</function>
	<function name="SPEECH" language="en_US">
		<synopsis>
			Gets information about speech recognition results.
		</synopsis>
		<syntax>
			<parameter name="argument" required="true">
				<enumlist>
					<enum name="status">
						<para>Returns <literal>1</literal> upon speech object existing,
						or <literal>0</literal> if not</para>
					</enum>
					<enum name="spoke">
						<para>Returns <literal>1</literal> if spoker spoke,
						or <literal>0</literal> if not</para>
					</enum>
					<enum name="results">
						<para>Returns number of results that were recognized.</para>
					</enum>
				</enumlist>
			</parameter>
		</syntax>
		<description>
			<para>Gets information about speech recognition results.</para>
		</description>
	</function>
	<application name="Gosub" language="en_US">
		<synopsis>
			Jump to label, saving return address.
		</synopsis>
		<syntax>
			<parameter name="context" />
			<parameter name="exten" />
			<parameter name="priority" required="true" hasparams="optional">
				<argument name="arg1" multiple="true" required="true" />
				<argument name="argN" />
			</parameter>
		</syntax>
		<description>
			<para>Jumps to the label specified, saving the return address.</para>
		</description>
		<see-also>
			<ref type="application">GosubIf</ref>
			<ref type="application">Macro</ref>
			<ref type="application">Goto</ref>
			<ref type="application">Return</ref>
			<ref type="application">StackPop</ref>
		</see-also>
	</application>
	<application name="GosubIf" language="en_US">
		<synopsis>
			Conditionally jump to label, saving return address.
		</synopsis>
		<syntax argsep="?">
			<parameter name="condition" required="true" />
			<parameter name="destination" required="true" argsep=":">
				<argument name="labeliftrue" hasparams="optional">
					<argument name="arg1" required="true" multiple="true" />
					<argument name="argN" />
				</argument>
				<argument name="labeliffalse" hasparams="optional">
					<argument name="arg1" required="true" multiple="true" />
					<argument name="argN" />
				</argument>
			</parameter>
		</syntax>
		<description>
			<para>If the condition is true, then jump to labeliftrue.  If false, jumps to
			labeliffalse, if specified.  In either case, a jump saves the return point
			in the dialplan, to be returned to with a Return.</para>
		</description>
		<see-also>
			<ref type="application">Gosub</ref>
			<ref type="application">Return</ref>
			<ref type="application">MacroIf</ref>
			<ref type="function">IF</ref>
			<ref type="application">GotoIf</ref>
		</see-also>
	</application>
	<application name="Return" language="en_US">
		<synopsis>
			Return from gosub routine.
		</synopsis>
		<syntax>
			<parameter name="value">
				<para>Return value.</para>
			</parameter>
		</syntax>
		<description>
			<para>Jumps to the last label on the stack, removing it. The return <replaceable>value</replaceable>, if
			any, is saved in the channel variable <variable>GOSUB_RETVAL</variable>.</para>
		</description>
		<see-also>
			<ref type="application">Gosub</ref>
			<ref type="application">StackPop</ref>
		</see-also>
	</application>
	<application name="StackPop" language="en_US">
		<synopsis>
			Remove one address from gosub stack.
		</synopsis>
		<syntax />
		<description>
			<para>Removes last label on the stack, discarding it.</para>
		</description>
		<see-also>
			<ref type="application">Return</ref>
			<ref type="application">Gosub</ref>
		</see-also>
	</application>
	<function name="LOCAL" language="en_US">
		<synopsis>
			Manage variables local to the gosub stack frame.
		</synopsis>
		<syntax>
			<parameter name="varname" required="true" />
		</syntax>
		<description>
			<para>Read and write a variable local to the gosub stack frame, once we Return() it will be lost
			(or it will go back to whatever value it had before the Gosub()).</para>
		</description>
		<see-also>
			<ref type="application">Gosub</ref>
			<ref type="application">GosubIf</ref>
			<ref type="application">Return</ref>
		</see-also>
	</function>
	<function name="LOCAL_PEEK" language="en_US">
		<synopsis>
			Retrieve variables hidden by the local gosub stack frame.
		</synopsis>
		<syntax>
			<parameter name="n" required="true" />
			<parameter name="varname" required="true" />
		</syntax>
		<description>
			<para>Read a variable <replaceable>varname</replaceable> hidden by
			<replaceable>n</replaceable> levels of gosub stack frames.  Note that ${LOCAL_PEEK(0,foo)}
			is the same as <variable>foo</variable>, since the value of <replaceable>n</replaceable>
			peeks under 0 levels of stack frames; in other words, 0 is the current level.  If
			<replaceable>n</replaceable> exceeds the available number of stack frames, then an empty
			string is returned.</para>
		</description>
		<see-also>
			<ref type="application">Gosub</ref>
			<ref type="application">GosubIf</ref>
			<ref type="application">Return</ref>
		</see-also>
	</function>
	<agi name="gosub" language="en_US">
		<synopsis>
			Cause the channel to execute the specified dialplan subroutine.
		</synopsis>
		<syntax>
			<parameter name="context" required="true" />
			<parameter name="extension" required="true" />
			<parameter name="priority" required="true" />
			<parameter name="optional-argument" />
		</syntax>
		<description>
			<para>Cause the channel to execute the specified dialplan subroutine,
			returning to the dialplan with execution of a Return().</para>
		</description>
	</agi>
	<application name="System" language="en_US">
		<synopsis>
			Execute a system command.
		</synopsis>
		<syntax>
			<parameter name="command" required="true">
				<para>Command to execute</para>
			</parameter>
		</syntax>
		<description>
			<para>Executes a command  by  using  system(). If the command
			fails, the console should report a fallthrough.</para>
			<para>Result of execution is returned in the <variable>SYSTEMSTATUS</variable> channel variable:</para>
			<variablelist>
				<variable name="SYSTEMSTATUS">
					<value name="FAILURE">
						Could not execute the specified command.
					</value>
					<value name="SUCCESS">
						Specified command successfully executed.
					</value>
				</variable>
			</variablelist>
		</description>
	</application>
	<application name="TrySystem" language="en_US">
		<synopsis>
			Try executing a system command.
		</synopsis>
		<syntax>
			<parameter name="command" required="true">
				<para>Command to execute</para>
			</parameter>
		</syntax>
		<description>
			<para>Executes a command  by  using  system().</para>
			<para>Result of execution is returned in the <variable>SYSTEMSTATUS</variable> channel variable:</para>
			<variablelist>
				<variable name="SYSTEMSTATUS">
					<value name="FAILURE">
						Could not execute the specified command.
					</value>
					<value name="SUCCESS">
						Specified command successfully executed.
					</value>
					<value name="APPERROR">
						Specified command successfully executed, but returned error code.
					</value>
				</variable>
			</variablelist>
		</description>
	</application>

	<application name="BackgroundDetect" language="en_US">
		<synopsis>
			Background a file with talk detect.
		</synopsis>
		<syntax>
			<parameter name="filename" required="true" />
			<parameter name="sil">
				<para>If not specified, defaults to <literal>1000</literal>.</para>
			</parameter>
			<parameter name="min">
				<para>If not specified, defaults to <literal>100</literal>.</para>
			</parameter>
			<parameter name="max">
				<para>If not specified, defaults to <literal>infinity</literal>.</para>
			</parameter>
			<parameter name="analysistime">
				<para>If not specified, defaults to <literal>infinity</literal>.</para>
			</parameter>
		</syntax>
		<description>
			<para>Plays back <replaceable>filename</replaceable>, waiting for interruption from a given digit (the digit
			must start the beginning of a valid extension, or it will be ignored). During
			the playback of the file, audio is monitored in the receive direction, and if
			a period of non-silence which is greater than <replaceable>min</replaceable> ms yet less than
			<replaceable>max</replaceable> ms is followed by silence for at least <replaceable>sil</replaceable> ms,
			which occurs during the first <replaceable>analysistime</replaceable> ms, then the audio playback is
			aborted and processing jumps to the <replaceable>talk</replaceable> extension, if available.</para>
		</description>
	</application>
	<application name="TestServer" language="en_US">
		<synopsis>
			Execute Interface Test Server.
		</synopsis>
		<syntax />
		<description>
			<para>Perform test server function and write call report. Results stored in
			<filename>/var/log/asterisk/testreports/&lt;testid&gt;-server.txt</filename></para>
		</description>
		<see-also>
			<ref type="application">TestClient</ref>
		</see-also>
	</application>
	<application name="TestClient" language="en_US">
		<synopsis>
			Execute Interface Test Client.
		</synopsis>
		<syntax>
			<parameter name="testid" required="true">
				<para>An ID to identify this test.</para>
			</parameter>
		</syntax>
		<description>
			<para>Executes test client with given <replaceable>testid</replaceable>. Results stored in
			<filename>/var/log/asterisk/testreports/&lt;testid&gt;-client.txt</filename></para>
		</description>
		<see-also>
			<ref type="application">TestServer</ref>
		</see-also>
	</application>
	<application name="Transfer" language="en_US">
		<synopsis>
			Transfer caller to remote extension.
		</synopsis>
		<syntax>
			<parameter name="dest" required="true" argsep="/">
				<argument name="Tech" />
				<argument name="destination" required="true" />
			</parameter>
		</syntax>
		<description>
			<para>Requests the remote caller be transferred
			to a given destination. If TECH (SIP, IAX2, LOCAL etc) is used, only
			an incoming call with the same channel technology will be transfered.
			Note that for SIP, if you transfer before call is setup, a 302 redirect
			SIP message will be returned to the caller.</para>
			<para>The result of the application will be reported in the <variable>TRANSFERSTATUS</variable>
			channel variable:</para>
			<variablelist>
				<variable name="TRANSFERSTATUS">
					<value name="SUCCESS">
						Transfer succeeded.
					</value>
					<value name="FAILURE">
						Transfer failed.
					</value>
					<value name="UNSUPPORTED">
						Transfer unsupported by channel driver.
					</value>
				</variable>
			</variablelist>
		</description>
	</application>
	<application name="SendURL" language="en_US">
		<synopsis>
			Send a URL.
		</synopsis>
		<syntax>
			<parameter name="URL" required="true" />
			<parameter name="option">
				<optionlist>
					<option name="w">
						<para>Execution will wait for an acknowledgement that the
						URL has been loaded before continuing.</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>Requests client go to <replaceable>URL</replaceable> (IAX2) or sends the
			URL to the client (other channels).</para>
			<para>Result is returned in the <variable>SENDURLSTATUS</variable> channel variable:</para>
			<variablelist>
				<variable name="SENDURLSTATUS">
					<value name="SUCCESS">
						URL successfully sent to client.
					</value>
					<value name="FAILURE">
						Failed to send URL.
					</value>
					<value name="NOLOAD">
						Client failed to load URL (wait enabled).
					</value>
					<value name="UNSUPPORTED">
						Channel does not support URL transport.
					</value>
				</variable>
			</variablelist>
			<para>SendURL continues normally if the URL was sent correctly or if the channel
			does not support HTML transport.  Otherwise, the channel is hung up.</para>
		</description>
		<see-also>
			<ref type="application">SendImage</ref>
			<ref type="application">SendText</ref>
		</see-also>
	</application>
	<application name="UserEvent" language="en_US">
		<synopsis>
			Send an arbitrary event to the manager interface.
		</synopsis>
		<syntax>
			<parameter name="eventname" required="true" />
			<parameter name="body" />
		</syntax>
		<description>
			<para>Sends an arbitrary event to the manager interface, with an optional
			<replaceable>body</replaceable> representing additional arguments. The
			<replaceable>body</replaceable> may be specified as
			a <literal>,</literal> delimited list of headers. Each additional
			argument will be placed on a new line in the event. The format of the
			event will be:</para>
			<para>    Event: UserEvent</para>
			<para>    UserEvent: &lt;specified event name&gt;</para>
			<para>    [body]</para>
			<para>If no <replaceable>body</replaceable> is specified, only Event and UserEvent headers will be present.</para>
		</description>
	</application>
	<application name="Verbose" language="en_US">
 		<synopsis>
			Send arbitrary text to verbose output.
		</synopsis>
		<syntax>
			<parameter name="level">
				<para>Must be an integer value.  If not specified, defaults to 0.</para>
			</parameter>
			<parameter name="message" required="true">
				<para>Output text message.</para>
			</parameter>
		</syntax>
		<description>
			<para>Sends an arbitrary text message to verbose output.</para>
		</description>
	</application>
	<application name="Log" language="en_US">
		<synopsis>
			Send arbitrary text to a selected log level.
		</synopsis>
		<syntax>
			<parameter name="level" required="true">
				<para>Level must be one of <literal>ERROR</literal>, <literal>WARNING</literal>, <literal>NOTICE</literal>,
				<literal>DEBUG</literal>, <literal>VERBOSE</literal> or <literal>DTMF</literal>.</para>	
			</parameter>
			<parameter name="message" required="true">
				<para>Output text message.</para>
			</parameter>
		</syntax>
		<description>
			<para>Sends an arbitrary text message to a selected log level.</para>
		</description>
	</application>
	<application name="VoiceMail" language="en_US">
		<synopsis>
			Leave a Voicemail message.
		</synopsis>
		<syntax>
			<parameter name="mailboxs" argsep="&amp;" required="true">
				<argument name="mailbox1" argsep="@" required="true">
					<argument name="mailbox" required="true" />
					<argument name="context" />
				</argument>
				<argument name="mailbox2" argsep="@" multiple="true">
					<argument name="mailbox" required="true" />
					<argument name="context" />
				</argument>
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="b">
						<para>Play the <literal>busy</literal> greeting to the calling party.</para>
					</option>
					<option name="d">
						<argument name="c" />
						<para>Accept digits for a new extension in context <replaceable>c</replaceable>,
						if played during the greeting. Context defaults to the current context.</para>
					</option>
					<option name="g">
						<argument name="#" required="true" />
						<para>Use the specified amount of gain when recording the voicemail
						message. The units are whole-number decibels (dB). Only works on supported
						technologies, which is DAHDI only.</para>
					</option>
					<option name="s">
						<para>Skip the playback of instructions for leaving a message to the
						calling party.</para>
					</option>
					<option name="u">
						<para>Play the <literal>unavailable</literal> greeting.</para>
					</option>
					<option name="U">
						<para>Mark message as <literal>URGENT</literal>.</para>
					</option>
					<option name="P">
						<para>Mark message as <literal>PRIORITY</literal>.</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>This application allows the calling party to leave a message for the specified
			list of mailboxes. When multiple mailboxes are specified, the greeting will be taken from
			the first mailbox specified. Dialplan execution will stop if the specified mailbox does not
			exist.</para>
			<para>The Voicemail application will exit if any of the following DTMF digits are received:</para>
			<enumlist>
				<enum name="0">
					<para>Jump to the <literal>o</literal> extension in the current dialplan context.</para>
				</enum>
				<enum name="*">
					<para>Jump to the <literal>a</literal> extension in the current dialplan context.</para>
				</enum>
			</enumlist>
			<para>This application will set the following channel variable upon completion:</para>
			<variablelist>
				<variable name="VMSTATUS">
					<para>This indicates the status of the execution of the VoiceMail application.</para>
					<value name="SUCCESS" />
					<value name="USEREXIT" />
					<value name="FAILED" />
				</variable>
			</variablelist>
		</description>
		<see-also>
			<ref type="application">VoiceMailMain</ref>
		</see-also>
	</application>
	<application name="VoiceMailMain" language="en_US">
		<synopsis>
			Check Voicemail messages.
		</synopsis>
		<syntax>
			<parameter name="mailbox" required="true" argsep="@">
				<argument name="mailbox" />
				<argument name="context" />
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="p">
						<para>Consider the <replaceable>mailbox</replaceable> parameter as a prefix to
						the mailbox that is entered by the caller.</para>
					</option>
					<option name="g">
						<argument name="#" required="true" />
						<para>Use the specified amount of gain when recording a voicemail message.
						The units are whole-number decibels (dB).</para>
					</option>
					<option name="s">
						<para>Skip checking the passcode for the mailbox.</para>
					</option>
					<option name="a">
						<argument name="folder" required="true" />
						<para>Skip folder prompt and go directly to <replaceable>folder</replaceable> specified.
						Defaults to <literal>INBOX</literal> (or <literal>0</literal>).</para>
						<enumlist>
							<enum name="0"><para>INBOX</para></enum>
							<enum name="1"><para>Old</para></enum>
							<enum name="2"><para>Work</para></enum>
							<enum name="3"><para>Family</para></enum>
							<enum name="4"><para>Friends</para></enum>
							<enum name="5"><para>Cust1</para></enum>
							<enum name="6"><para>Cust2</para></enum>
							<enum name="7"><para>Cust3</para></enum>
							<enum name="8"><para>Cust4</para></enum>
							<enum name="9"><para>Cust5</para></enum>
						</enumlist>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>This application allows the calling party to check voicemail messages. A specific
			<replaceable>mailbox</replaceable>, and optional corresponding <replaceable>context</replaceable>,
			may be specified. If a <replaceable>mailbox</replaceable> is not provided, the calling party will
			be prompted to enter one. If a <replaceable>context</replaceable> is not specified, the
			<literal>default</literal> context will be used.</para>
			<para>The VoiceMailMain application will exit if the following DTMF digit is entered as Mailbox
			or Password, and the extension exists:</para>
			<enumlist>
				<enum name="*">
					<para>Jump to the <literal>a</literal> extension in the current dialplan context.</para>
				</enum>
			</enumlist>
		</description>
		<see-also>
			<ref type="application">VoiceMail</ref>
		</see-also>
	</application>
	<application name="MailboxExists" language="en_US">
		<synopsis>
			Check to see if Voicemail mailbox exists.
		</synopsis>
		<syntax>
			<parameter name="mailbox" required="true" argsep="@">
				<argument name="mailbox" required="true" />
				<argument name="context" />
			</parameter>
			<parameter name="options">
				<para>None options.</para>
			</parameter>
		</syntax>
		<description>
			<para>Check to see if the specified <replaceable>mailbox</replaceable> exists. If no voicemail
			<replaceable>context</replaceable> is specified, the <literal>default</literal> context
			will be used.</para>
			<para>This application will set the following channel variable upon completion:</para>
			<variablelist>
				<variable name="VMBOXEXISTSSTATUS">
					<para>This will contain the status of the execution of the MailboxExists application.
					Possible values include:</para>
					<value name="SUCCESS" />
					<value name="FAILED" />
				</variable>
			</variablelist>
		</description>
	</application>
	<application name="VMAuthenticate" language="en_US">
		<synopsis>
			Authenticate with Voicemail passwords.
		</synopsis>
		<syntax>
			<parameter name="mailbox" required="true" argsep="@">
				<argument name="mailbox" />
				<argument name="context" />
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="s">
						<para>Skip playing the initial prompts.</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>This application behaves the same way as the Authenticate application, but the passwords
			are taken from <filename>voicemail.conf</filename>. If the <replaceable>mailbox</replaceable> is
			specified, only that mailbox's password will be considered valid. If the <replaceable>mailbox</replaceable>
			is not specified, the channel variable <variable>AUTH_MAILBOX</variable> will be set with the authenticated
			mailbox.</para>
			<para>The VMAuthenticate application will exit if the following DTMF digit is entered as Mailbox
			or Password, and the extension exists:</para>
			<enumlist>
				<enum name="*">
					<para>Jump to the <literal>a</literal> extension in the current dialplan context.</para>
				</enum>
			</enumlist>
		</description>
	</application>
	<application name="VMSayName" language="en_US">
		<synopsis>
			Play the name of a voicemail user
		</synopsis>
		<syntax>
			<parameter name="mailbox" required="true" argsep="@">
				<argument name="mailbox" />
				<argument name="context" />
			</parameter>
		</syntax>
		<description>
			<para>This application will say the recorded name of the voicemail user specified as the
			argument to this application. If no context is provided, <literal>default</literal> is assumed.</para>
		</description>
	</application>
	<function name="MAILBOX_EXISTS" language="en_US">
		<synopsis>
			Tell if a mailbox is configured.
		</synopsis>
		<syntax argsep="@">
			<parameter name="mailbox" required="true" />
			<parameter name="context" />
		</syntax>
		<description>
			<para>Returns a boolean of whether the corresponding <replaceable>mailbox</replaceable> exists.
			If <replaceable>context</replaceable> is not specified, defaults to the <literal>default</literal>
			context.</para>
		</description>
	</function>
	<manager name="VoicemailUsersList" language="en_US">
		<synopsis>
			List All Voicemail User Information.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
		</syntax>
		<description>
		</description>
	</manager>
	<application name="WaitForRing" language="en_US">
		<synopsis>
			Wait for Ring Application.
		</synopsis>
		<syntax>
			<parameter name="timeout" required="true" />
		</syntax>
		<description>
			<para>Returns <literal>0</literal> after waiting at least <replaceable>timeout</replaceable> seconds,
			and only after the next ring has completed. Returns <literal>0</literal> on success or
			<literal>-1</literal> on hangup.</para>
		</description>
	</application>
	<application name="WaitForSilence" language="en_US">
		<synopsis>
			Waits for a specified amount of silence.
		</synopsis>
		<syntax>
			<parameter name="silencerequired" required="true" />
			<parameter name="iterations">
				<para>If not specified, defaults to <literal>1</literal>.</para>
			</parameter>
			<parameter name="timeout">
				<para>Is specified only to avoid an infinite loop in cases where silence is never achieved.</para>
			</parameter>
		</syntax>
		<description>
			<para>Waits for up to <replaceable>silencerequired</replaceable> milliseconds of silence,
			<replaceable>iterations</replaceable> times. An optional <replaceable>timeout</replaceable>
			specified the number of seconds to return after, even if we do not receive the specified amount of silence.
			Use <replaceable>timeout</replaceable> with caution, as it may defeat the purpose of this application, which
			is to wait indefinitely until silence is detected on the line. This is particularly useful for reverse-911-type
			call broadcast applications where you need to wait for an answering machine to complete its spiel before
			playing a message.</para>
			<para>Typically you will want to include two or more calls to WaitForSilence when dealing with an answering
			machine; first waiting for the spiel to finish, then waiting for the beep, etc.</para>
			<para>Examples:</para>
			<para>WaitForSilence(500,2) will wait for 1/2 second of silence, twice</para>
			<para>WaitForSilence(1000) will wait for 1 second of silence, once</para>
			<para>WaitForSilence(300,3,10) will wait for 300ms silence, 3 times, and returns after 10 sec, even if silence
			is not detected</para>
			<para>Sets the channel variable <variable>WAITSTATUS</variable> to one of these values:</para>
			<variablelist>
				<variable name="WAITSTATUS">
					<value name="SILENCE">
						if exited with silence detected.
					</value>
					<value name="TIMEOUT">
						if exited without silence detected after timeout.
					</value>
				</variable>
			</variablelist>
		</description>
		<see-also>
			<ref type="application">WaitForNoise</ref>
		</see-also>
	</application>
	<application name="WaitForNoise" language="en_US">
		<synopsis>
			Waits for a specified amount of noise.
		</synopsis>
		<syntax>
			<parameter name="noiserequired" required="true" />
			<parameter name="iterations">
				<para>If not specified, defaults to <literal>1</literal>.</para>
			</parameter>
			<parameter name="timeout">
				<para>Is specified only to avoid an infinite loop in cases where silence is never achieved.</para>
			</parameter>
		</syntax>
		<description>
			<para>Waits for up to <replaceable>noiserequired</replaceable> milliseconds of noise,
			<replaceable>iterations</replaceable> times. An optional <replaceable>timeout</replaceable>
			specified the number of seconds to return after, even if we do not receive the specified amount of noise.
			Use <replaceable>timeout</replaceable> with caution, as it may defeat the purpose of this application, which
			is to wait indefinitely until noise is detected on the line.</para>
		</description>
		<see-also>
			<ref type="application">WaitForSilence</ref>
		</see-also>
	</application>
	<application name="WaitUntil" language="en_US">
		<synopsis>
			Wait (sleep) until the current time is the given epoch.
		</synopsis>
		<syntax>
			<parameter name="epoch" required="true" />
		</syntax>
		<description>
			<para>Waits until the given <replaceable>epoch</replaceable>.</para>
			<para>Sets <variable>WAITUNTILSTATUS</variable> to one of the following values:</para>
			<variablelist>
				<variable name="WAITUNTILSTATUS">
					<value name="OK">
						Wait succeeded.
					</value>
					<value name="FAILURE">
						Invalid argument.
					</value>
					<value name="HANGUP">
						Channel hungup before time elapsed.
					</value>
					<value name="PAST">
						Time specified had already past.
					</value>
				</variable>
			</variablelist>
		</description>
	</application>
	<application name="While" language="en_US">
		<synopsis>
			Start a while loop.
		</synopsis>
		<syntax>
			<parameter name="expr" required="true" />
		</syntax>
		<description>
			<para>Start a While Loop.  Execution will return to this point when
			<literal>EndWhile()</literal> is called until expr is no longer true.</para>
		</description>
		<see-also>
			<ref type="application">EndWhile</ref>
			<ref type="application">ExitWhile</ref>
			<ref type="application">ContinueWhile</ref>
		</see-also>
	</application>
	<application name="EndWhile" language="en_US">
		<synopsis>
			End a while loop.
		</synopsis>
		<syntax />
		<description>
			<para>Return to the previous called <literal>While()</literal>.</para>
		</description>
		<see-also>
			<ref type="application">While</ref>
			<ref type="application">ExitWhile</ref>
			<ref type="application">ContinueWhile</ref>
		</see-also>
	</application>
	<application name="ExitWhile" language="en_US">
		<synopsis>
			End a While loop.
		</synopsis>
		<syntax />
		<description>
			<para>Exits a <literal>While()</literal> loop, whether or not the conditional has been satisfied.</para>
		</description>
		<see-also>
			<ref type="application">While</ref>
			<ref type="application">EndWhile</ref>
			<ref type="application">ContinueWhile</ref>
		</see-also>
	</application>
	<application name="ContinueWhile" language="en_US">
		<synopsis>
			Restart a While loop.
		</synopsis>
		<syntax />
		<description>
			<para>Returns to the top of the while loop and re-evaluates the conditional.</para>
		</description>
		<see-also>
			<ref type="application">While</ref>
			<ref type="application">EndWhile</ref>
			<ref type="application">ExitWhile</ref>
		</see-also>
	</application>
	<application name="Zapateller" language="en_US">
		<synopsis>
			Block telemarketers with SIT.
		</synopsis>
		<syntax>
			<parameter name="options" required="true">
				<para>Comma delimited list of options.</para>
				<optionlist>
					<option name="answer">
						<para>Causes the line to be answered before playing the tone.</para>
					</option>
					<option name="nocallerid">
						<para>Causes Zapateller to only play the tone if there is no
						callerid information available.</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>Generates special information tone to block telemarketers from calling you.</para>
			<para>This application will set the following channel variable upon completion:</para>
			<variablelist>
				<variable name="ZAPATELLERSTATUS">
					<para>This will contain the last action accomplished by the
					Zapateller application. Possible values include:</para>
					<value name="NOTHING" />
					<value name="ANSWERED" />
					<value name="ZAPPED" />
				</variable>
			</variablelist>
		</description>
	</application>
	<function name="AES_ENCRYPT" language="en_US">
		<synopsis>
			Encrypt a string with AES given a 16 character key.
		</synopsis>
		<syntax>
			<parameter name="key" required="true">
				<para>AES Key</para>
			</parameter>
			<parameter name="string" required="true">
				<para>Input string</para>
			</parameter>
		</syntax>
		<description>
			<para>Returns an AES encrypted string encoded in base64.</para>
		</description>
		<see-also>
			<ref type="function">AES_DECRYPT</ref>
			<ref type="function">BASE64_ENCODE</ref>
			<ref type="function">BASE64_DECODE</ref>
		</see-also>
	</function>
	<function name="AES_DECRYPT" language="en_US">
		<synopsis>
			Decrypt a string encoded in base64 with AES given a 16 character key.
		</synopsis>
		<syntax>
			<parameter name="key" required="true">
				<para>AES Key</para>
			</parameter>
			<parameter name="string" required="true">
				<para>Input string.</para>
			</parameter>
		</syntax>
		<description>
			<para>Returns the plain text string.</para>
		</description>
		<see-also>
			<ref type="function">AES_ENCRYPT</ref>
			<ref type="function">BASE64_ENCODE</ref>
			<ref type="function">BASE64_DECODE</ref>
		</see-also>
	</function>
 	<function name = "AUDIOHOOK_INHERIT" language="en_US">
		<synopsis>
			Set whether an audiohook may be inherited to another channel
		</synopsis>
		<syntax>
			<parameter name="source" required="true">
				<para>The built-in sources in Asterisk are</para>
				<enumlist>
					<enum name="MixMonitor" />
					<enum name="Chanspy" />
					<enum name="Volume" />
					<enum name="Speex" />
					<enum name="JACK_HOOK" />
				</enumlist>
				<para>Note that the names are not case-sensitive</para>
			</parameter>
		</syntax>
		<description>
			<para>By enabling audiohook inheritance on the channel, you are giving
			permission for an audiohook to be inherited by a descendent channel.
			Inheritance may be be disabled at any point as well.</para>

			<para>Example scenario:</para>
			<para>exten => 2000,1,MixMonitor(blah.wav)</para>
			<para>exten => 2000,n,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes)</para>
			<para>exten => 2000,n,Dial(SIP/2000)</para>
			<para>
			</para>
			<para>exten => 4000,1,Dial(SIP/4000)</para>
			<para>
			</para>
			<para>exten => 5000,1,MixMonitor(blah2.wav)</para>
			<para>exten => 5000,n,Dial(SIP/5000)</para>
			<para>
			</para>
			<para>In this basic dialplan scenario, let's consider the following sample calls</para>
			<para>Call 1: Caller dials 2000. The person who answers then executes an attended</para>
			<para>        transfer to 4000.</para>
			<para>Result: Since extension 2000 set MixMonitor to be inheritable, after the</para>
			<para>        transfer to 4000 has completed, the call will continue to be recorded
			to blah.wav</para>
			<para>
			</para>
			<para>Call 2: Caller dials 5000. The person who answers then executes an attended</para>
			<para>        transfer to 4000.</para>
			<para>Result: Since extension 5000 did not set MixMonitor to be inheritable, the</para>
			<para>        recording will stop once the call has been transferred to 4000.</para>
		</description>
	</function>
	<function name="BASE64_ENCODE" language="en_US">
		<synopsis>
			Encode a string in base64.
		</synopsis>
		<syntax>
			<parameter name="string" required="true">
				<para>Input string</para>
			</parameter>
		</syntax>
		<description>
			<para>Returns the base64 string.</para>
		</description>
		<see-also>
			<ref type="function">BASE64_DECODE</ref>
			<ref type="function">AES_DECRYPT</ref>
			<ref type="function">AES_ENCRYPT</ref>
		</see-also>
	</function>
	<function name="BASE64_DECODE" language="en_US">
		<synopsis>
			Decode a base64 string.
		</synopsis>
		<syntax>
			<parameter name="string" required="true">
				<para>Input string.</para>
			</parameter>
		</syntax>
		<description>
			<para>Returns the plain text string.</para>
		</description>
		<see-also>
			<ref type="function">BASE64_ENCODE</ref>
			<ref type="function">AES_DECRYPT</ref>
			<ref type="function">AES_ENCRYPT</ref>
		</see-also>
	</function>
	<function name="BLACKLIST" language="en_US">
		<synopsis>
			Check if the callerid is on the blacklist.
		</synopsis>
		<syntax />
		<description>
			<para>Uses astdb to check if the Caller*ID is in family <literal>blacklist</literal>.
			Returns <literal>1</literal> or <literal>0</literal>.</para>
		</description>
		<see-also>
			<ref type="function">DB</ref>
		</see-also>
	</function>

	<function name="CALLCOMPLETION" language="en_US">
		<synopsis>
			Get or set a call completion configuration parameter for a channel.
		</synopsis>
		<syntax>
			<parameter name="option" required="true">
				<para>The allowable options are:</para>
				<enumlist>
					<enum name="cc_agent_policy" />
					<enum name="cc_monitor_policy" />
					<enum name="cc_offer_timer" />
					<enum name="ccnr_available_timer" />
					<enum name="ccbs_available_timer" />
					<enum name="cc_recall_timer" />
					<enum name="cc_max_agents" />
					<enum name="cc_max_monitors" />
					<enum name="cc_callback_macro" />
					<enum name="cc_agent_dialstring" />
				</enumlist>
			</parameter>
		</syntax>
		<description>
			<para>The CALLCOMPLETION function can be used to get or set a call
			completion configuration parameter for a channel. Note that setting
			a configuration parameter will only change the parameter for the
			duration of the call.

			For more information see <filename>doc/AST.pdf</filename>.
			For more information on call completion parameters, see <filename>configs/ccss.conf.sample</filename>.</para>
		</description>
	</function>
	<function name="CALLERID" language="en_US">
		<synopsis>
			Gets or sets Caller*ID data on the channel.
		</synopsis>
		<syntax>
			<parameter name="datatype" required="true">
				<para>The allowable datatypes are:</para>
				<enumlist>
					<enum name = "all" />
					<enum name = "name" />
					<enum name = "name-valid" />
					<enum name = "name-charset" />
					<enum name = "name-pres" />
					<enum name = "num" />
					<enum name = "num-valid" />
					<enum name = "num-plan" />
					<enum name = "num-pres" />
					<enum name = "subaddr" />
					<enum name = "subaddr-valid" />
					<enum name = "subaddr-type" />
					<enum name = "subaddr-odd" />
					<enum name = "tag" />
					<enum name = "ANI-all" />
					<enum name = "ANI-name" />
					<enum name = "ANI-name-valid" />
					<enum name = "ANI-name-charset" />
					<enum name = "ANI-name-pres" />
					<enum name = "ANI-num" />
					<enum name = "ANI-num-valid" />
					<enum name = "ANI-num-plan" />
					<enum name = "ANI-num-pres" />
					<enum name = "ANI-tag" />
					<enum name = "RDNIS" />
					<enum name = "DNID" />
					<enum name = "dnid-num-plan" />
					<enum name = "dnid-subaddr" />
					<enum name = "dnid-subaddr-valid" />
					<enum name = "dnid-subaddr-type" />
					<enum name = "dnid-subaddr-odd" />
				</enumlist>
			</parameter>
			<parameter name="CID">
				<para>Optional Caller*ID to parse instead of using the Caller*ID from the
				channel. This parameter is only optional when reading the Caller*ID.</para>
			</parameter>
		</syntax>
		<description>
			<para>Gets or sets Caller*ID data on the channel. Uses channel callerid by
			default or optional callerid, if specified.</para>
			<para>The allowable values for the <replaceable>name-charset</replaceable>
			field are the following:</para>
			<enumlist>
				<enum name = "unknown"><para>Unknown</para></enum>
				<enum name = "iso8859-1"><para>ISO8859-1</para></enum>
				<enum name = "withdrawn"><para>Withdrawn</para></enum>
				<enum name = "iso8859-2"><para>ISO8859-2</para></enum>
				<enum name = "iso8859-3"><para>ISO8859-3</para></enum>
				<enum name = "iso8859-4"><para>ISO8859-4</para></enum>
				<enum name = "iso8859-5"><para>ISO8859-5</para></enum>
				<enum name = "iso8859-7"><para>ISO8859-7</para></enum>
				<enum name = "bmp"><para>ISO10646 Bmp String</para></enum>
				<enum name = "utf8"><para>ISO10646 UTF-8 String</para></enum>
			</enumlist>
		</description>
	</function>
	<function name="CALLERPRES" language="en_US">
		<synopsis>
			Gets or sets Caller*ID presentation on the channel.
		</synopsis>
		<syntax />
		<description>
			<para>Gets or sets Caller*ID presentation on the channel.
			This function is deprecated in favor of CALLERID(num-pres)
			and CALLERID(name-pres).
			The following values are valid:</para>
			<enumlist>
				<enum name="allowed_not_screened">
					<para>Presentation Allowed, Not Screened.</para>
				</enum>
				<enum name="allowed_passed_screen">
					<para>Presentation Allowed, Passed Screen.</para>
				</enum>
				<enum name="allowed_failed_screen">
					<para>Presentation Allowed, Failed Screen.</para>
				</enum>
				<enum name="allowed">
					<para>Presentation Allowed, Network Number.</para>
				</enum>
				<enum name="prohib_not_screened">
					<para>Presentation Prohibited, Not Screened.</para>
				</enum>
				<enum name="prohib_passed_screen">
					<para>Presentation Prohibited, Passed Screen.</para>
				</enum>
				<enum name="prohib_failed_screen">
					<para>Presentation Prohibited, Failed Screen.</para>
				</enum>
				<enum name="prohib">
					<para>Presentation Prohibited, Network Number.</para>
				</enum>
				<enum name="unavailable">
					<para>Number Unavailable.</para>
				</enum>
			</enumlist>
		</description>
	</function>
	<function name="CONNECTEDLINE" language="en_US">
		<synopsis>
			Gets or sets Connected Line data on the channel.
		</synopsis>
		<syntax>
			<parameter name="datatype" required="true">
				<para>The allowable datatypes are:</para>
				<enumlist>
					<enum name = "all" />
					<enum name = "name" />
					<enum name = "name-valid" />
					<enum name = "name-charset" />
					<enum name = "name-pres" />
					<enum name = "num" />
					<enum name = "num-valid" />
					<enum name = "num-plan" />
					<enum name = "num-pres" />
					<enum name = "subaddr" />
					<enum name = "subaddr-valid" />
					<enum name = "subaddr-type" />
					<enum name = "subaddr-odd" />
					<enum name = "tag" />
				</enumlist>
			</parameter>
			<parameter name="i">
				<para>If set, this will prevent the channel from sending out protocol
				messages because of the value being set</para>
			</parameter>
		</syntax>
		<description>
			<para>Gets or sets Connected Line data on the channel.</para>
			<para>The allowable values for the <replaceable>name-charset</replaceable>
			field are the following:</para>
			<enumlist>
				<enum name = "unknown"><para>Unknown</para></enum>
				<enum name = "iso8859-1"><para>ISO8859-1</para></enum>
				<enum name = "withdrawn"><para>Withdrawn</para></enum>
				<enum name = "iso8859-2"><para>ISO8859-2</para></enum>
				<enum name = "iso8859-3"><para>ISO8859-3</para></enum>
				<enum name = "iso8859-4"><para>ISO8859-4</para></enum>
				<enum name = "iso8859-5"><para>ISO8859-5</para></enum>
				<enum name = "iso8859-7"><para>ISO8859-7</para></enum>
				<enum name = "bmp"><para>ISO10646 Bmp String</para></enum>
				<enum name = "utf8"><para>ISO10646 UTF-8 String</para></enum>
			</enumlist>
		</description>
	</function>
	<function name="REDIRECTING" language="en_US">
		<synopsis>
			Gets or sets Redirecting data on the channel.
		</synopsis>
		<syntax>
			<parameter name="datatype" required="true">
				<para>The allowable datatypes are:</para>
				<enumlist>
					<enum name = "from-all" />
					<enum name = "from-name" />
					<enum name = "from-name-valid" />
					<enum name = "from-name-charset" />
					<enum name = "from-name-pres" />
					<enum name = "from-num" />
					<enum name = "from-num-valid" />
					<enum name = "from-num-plan" />
					<enum name = "from-num-pres" />
					<enum name = "from-subaddr" />
					<enum name = "from-subaddr-valid" />
					<enum name = "from-subaddr-type" />
					<enum name = "from-subaddr-odd" />
					<enum name = "from-tag" />
					<enum name = "to-all" />
					<enum name = "to-name" />
					<enum name = "to-name-valid" />
					<enum name = "to-name-charset" />
					<enum name = "to-name-pres" />
					<enum name = "to-num" />
					<enum name = "to-num-valid" />
					<enum name = "to-num-plan" />
					<enum name = "to-num-pres" />
					<enum name = "to-subaddr" />
					<enum name = "to-subaddr-valid" />
					<enum name = "to-subaddr-type" />
					<enum name = "to-subaddr-odd" />
					<enum name = "to-tag" />
					<enum name = "reason" />
					<enum name = "count" />
				</enumlist>
			</parameter>
			<parameter name="i">
				<para>If set, this will prevent the channel from sending out protocol
				messages because of the value being set</para>
			</parameter>
		</syntax>
		<description>
			<para>Gets or sets Redirecting data on the channel.</para>
			<para>The allowable values for the <replaceable>reason</replaceable>
			field are the following:</para>
			<enumlist>
				<enum name = "unknown"><para>Unknown</para></enum>
				<enum name = "cfb"><para>Call Forwarding Busy</para></enum>
				<enum name = "cfnr"><para>Call Forwarding No Reply</para></enum>
				<enum name = "unavailable"><para>Callee is Unavailable</para></enum>
				<enum name = "time_of_day"><para>Time of Day</para></enum>
				<enum name = "dnd"><para>Do Not Disturb</para></enum>
				<enum name = "deflection"><para>Call Deflection</para></enum>
				<enum name = "follow_me"><para>Follow Me</para></enum>
				<enum name = "out_of_order"><para>Called DTE Out-Of-Order</para></enum>
				<enum name = "away"><para>Callee is Away</para></enum>
				<enum name = "cf_dte"><para>Call Forwarding By The Called DTE</para></enum>
				<enum name = "cfu"><para>Call Forwarding Unconditional</para></enum>
			</enumlist>
			<para>The allowable values for the <replaceable>xxx-name-charset</replaceable>
			field are the following:</para>
			<enumlist>
				<enum name = "unknown"><para>Unknown</para></enum>
				<enum name = "iso8859-1"><para>ISO8859-1</para></enum>
				<enum name = "withdrawn"><para>Withdrawn</para></enum>
				<enum name = "iso8859-2"><para>ISO8859-2</para></enum>
				<enum name = "iso8859-3"><para>ISO8859-3</para></enum>
				<enum name = "iso8859-4"><para>ISO8859-4</para></enum>
				<enum name = "iso8859-5"><para>ISO8859-5</para></enum>
				<enum name = "iso8859-7"><para>ISO8859-7</para></enum>
				<enum name = "bmp"><para>ISO10646 Bmp String</para></enum>
				<enum name = "utf8"><para>ISO10646 UTF-8 String</para></enum>
			</enumlist>
		</description>
	</function>
	<function name="CDR" language="en_US">
		<synopsis>
			Gets or sets a CDR variable.
		</synopsis>	
		<syntax>
			<parameter name="name" required="true">
				<para>CDR field name:</para>
				<enumlist>
					<enum name="clid">
						<para>Caller ID.</para>
					</enum>
					<enum name="lastdata">
						<para>Last application arguments.</para>
					</enum>
					<enum name="disposition">
						<para>ANSWERED, NO ANSWER, BUSY, FAILED.</para>
					</enum>
					<enum name="src">
						<para>Source.</para>
					</enum>
					<enum name="start">
						<para>Time the call started.</para>
					</enum>
					<enum name="amaflags">
						<para>DOCUMENTATION, BILL, IGNORE, etc.</para>
					</enum>
					<enum name="dst">
						<para>Destination.</para>
					</enum>
					<enum name="answer">
						<para>Time the call was answered.</para>
					</enum>
					<enum name="accountcode">
						<para>The channel's account code.</para>
					</enum>
					<enum name="dcontext">
						<para>Destination context.</para>
					</enum>
					<enum name="end">
						<para>Time the call ended.</para>
					</enum>
					<enum name="uniqueid">
						<para>The channel's unique id.</para>
					</enum>
					<enum name="dstchannel">
						<para>Destination channel.</para>
					</enum>
					<enum name="duration">
						<para>Duration of the call.</para>
					</enum>
					<enum name="userfield">
						<para>The channel's user specified field.</para>
					</enum>
					<enum name="lastapp">
						<para>Last application.</para>
					</enum>
					<enum name="billsec">
						<para>Duration of the call once it was answered.</para>
					</enum>
					<enum name="channel">
						<para>Channel name.</para>
					</enum>
					<enum name="sequence">
						<para>CDR sequence number.</para>
					</enum>
				</enumlist>
			</parameter>
			<parameter name="options" required="false">
				<optionlist>
					<option name="f">
						<para>Returns billsec or duration fields as floating point values.</para>
					</option>
					<option name="l">
						<para>Uses the most recent CDR on a channel with multiple records</para>
					</option>
					<option name="r">
						<para>Searches the entire stack of CDRs on the channel.</para>
					</option>
					<option name="s">
						<para>Skips any CDR's that are marked 'LOCKED' due to forkCDR() calls.
						(on setting/writing CDR vars only)</para>
					</option>
					<option name="u">
						<para>Retrieves the raw, unprocessed value.</para>
						<para>For example, 'start', 'answer', and 'end' will be retrieved as epoch
						values, when the <literal>u</literal> option is passed, but formatted as YYYY-MM-DD HH:MM:SS
						otherwise.  Similarly, disposition and amaflags will return their raw
						integral values.</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>All of the CDR field names are read-only, except for <literal>accountcode</literal>,
			<literal>userfield</literal>, and <literal>amaflags</literal>. You may, however, supply
			a name not on the above list, and create your own variable, whose value can be changed
			with this function, and this variable will be stored on the cdr.</para>
			<note><para>For setting CDR values, the <literal>l</literal> flag does not apply to
			setting the <literal>accountcode</literal>, <literal>userfield</literal>, or
			<literal>amaflags</literal>.</para></note>
			<para>Raw values for <literal>disposition</literal>:</para>
			<enumlist>
				<enum name="0">
					<para>NO ANSWER</para>
				</enum>
				<enum name="1">
					<para>NO ANSWER (NULL record)</para>
				</enum>
				<enum name="2">
					<para>FAILED</para>
				</enum>
				<enum name="4">
					<para>BUSY</para>
				</enum>
				<enum name="8">
					<para>ANSWERED</para>
				</enum>
			</enumlist>
			<para>Raw values for <literal>amaflags</literal>:</para>
			<enumlist>
				<enum name="1">
					<para>OMIT</para>
				</enum>
				<enum name="2">
					<para>BILLING</para>
				</enum>
				<enum name="3">
					<para>DOCUMENTATION</para>
				</enum>
			</enumlist>
			<para>Example: exten => 1,1,Set(CDR(userfield)=test)</para>
		</description>
	</function>
	<function name="CHANNELS" language="en_US">
		<synopsis>
			Gets the list of channels, optionally filtering by a regular expression.
		</synopsis>
		<syntax>
			<parameter name="regular_expression" />
		</syntax>
		<description>
			<para>Gets the list of channels, optionally filtering by a <replaceable>regular_expression</replaceable>. If
			no argument is provided, all known channels are returned. The
			<replaceable>regular_expression</replaceable> must correspond to
			the POSIX.2 specification, as shown in <emphasis>regex(7)</emphasis>. The list returned
			will be space-delimited.</para>
		</description>
	</function>
	<function name="MASTER_CHANNEL" language="en_US">
		<synopsis>
			Gets or sets variables on the master channel
		</synopsis>
		<description>
			<para>Allows access to the channel which created the current channel, if any.  If the channel is already
			a master channel, then accesses local channel variables.</para>
		</description>
	</function>
	<function name="CHANNEL" language="en_US">
		<synopsis>
			Gets/sets various pieces of information about the channel.
		</synopsis>
		<syntax>
			<parameter name="item" required="true">
				<para>Standard items (provided by all channel technologies) are:</para>
				<enumlist>
					<enum name="audioreadformat">
						<para>R/O format currently being read.</para>
					</enum>
					<enum name="audionativeformat">
						<para>R/O format used natively for audio.</para>
					</enum>
					<enum name="audiowriteformat">
						<para>R/O format currently being written.</para>
					</enum>
					<enum name="callgroup">
						<para>R/W call groups for call pickup.</para>
					</enum>
					<enum name="channeltype">
						<para>R/O technology used for channel.</para>
					</enum>
					<enum name="checkhangup">
						<para>R/O Whether the channel is hanging up (1/0)</para>
					</enum>
					<enum name="language">
						<para>R/W language for sounds played.</para>
					</enum>
					<enum name="musicclass">
						<para>R/W class (from musiconhold.conf) for hold music.</para>
					</enum>
					<enum name="name">
						<para>The name of the channel</para>
					</enum>
					<enum name="parkinglot">
						<para>R/W parkinglot for parking.</para>
					</enum>
					<enum name="rxgain">
						<para>R/W set rxgain level on channel drivers that support it.</para>
					</enum>
					<enum name="secure_bridge_signaling">
						<para>Whether or not channels bridged to this channel require secure signaling</para>
					</enum>
					<enum name="secure_bridge_media">
						<para>Whether or not channels bridged to this channel require secure media</para>
					</enum>
					<enum name="state">
						<para>R/O state for channel</para>
					</enum>
					<enum name="tonezone">
						<para>R/W zone for indications played</para>
					</enum>
					<enum name="transfercapability">
						<para>R/W ISDN Transfer Capability, one of:</para>
						<enumlist>
							<enum name="SPEECH" />
							<enum name="DIGITAL" />
							<enum name="RESTRICTED_DIGITAL" />
							<enum name="3K1AUDIO" />
							<enum name="DIGITAL_W_TONES" />
							<enum name="VIDEO" />
						</enumlist>
					</enum>
					<enum name="txgain">
						<para>R/W set txgain level on channel drivers that support it.</para>
					</enum>
					<enum name="videonativeformat">
						<para>R/O format used natively for video</para>
					</enum>
					<enum name="trace">
						<para>R/W whether or not context tracing is enabled, only available
						<emphasis>if CHANNEL_TRACE is defined</emphasis>.</para>
					</enum>
				</enumlist>
				<para><emphasis>chan_sip</emphasis> provides the following additional options:</para>
				<enumlist>
					<enum name="peerip">
						<para>R/O Get the IP address of the peer.</para>
					</enum>
					<enum name="recvip">
						<para>R/O Get the source IP address of the peer.</para>
					</enum>
					<enum name="from">
						<para>R/O Get the URI from the From: header.</para>
					</enum>
					<enum name="uri">
						<para>R/O Get the URI from the Contact: header.</para>
					</enum>
					<enum name="useragent">
						<para>R/O Get the useragent.</para>
					</enum>
					<enum name="peername">
						<para>R/O Get the name of the peer.</para>
					</enum>
					<enum name="t38passthrough">
						<para>R/O <literal>1</literal> if T38 is offered or enabled in this channel,
						otherwise <literal>0</literal></para>
					</enum>
					<enum name="rtpqos">
						<para>R/O Get QOS information about the RTP stream</para>
						<para>    This option takes two additional arguments:</para>
						<para>    Argument 1:</para>
						<para>     <literal>audio</literal>             Get data about the audio stream</para>
						<para>     <literal>video</literal>             Get data about the video stream</para>
						<para>     <literal>text</literal>              Get data about the text stream</para>
						<para>    Argument 2:</para>
						<para>     <literal>local_ssrc</literal>        Local SSRC (stream ID)</para>
						<para>     <literal>local_lostpackets</literal> Local lost packets</para>
						<para>     <literal>local_jitter</literal>      Local calculated jitter</para>
						<para>     <literal>local_maxjitter</literal>   Local calculated jitter (maximum)</para>
						<para>     <literal>local_minjitter</literal>   Local calculated jitter (minimum)</para>
						<para>     <literal>local_normdevjitter</literal>Local calculated jitter (normal deviation)</para>
						<para>     <literal>local_stdevjitter</literal> Local calculated jitter (standard deviation)</para>
						<para>     <literal>local_count</literal>       Number of received packets</para>
						<para>     <literal>remote_ssrc</literal>       Remote SSRC (stream ID)</para>
						<para>     <literal>remote_lostpackets</literal>Remote lost packets</para>
						<para>     <literal>remote_jitter</literal>     Remote reported jitter</para>
						<para>     <literal>remote_maxjitter</literal>  Remote calculated jitter (maximum)</para>
						<para>     <literal>remote_minjitter</literal>  Remote calculated jitter (minimum)</para>
						<para>     <literal>remote_normdevjitter</literal>Remote calculated jitter (normal deviation)</para>
						<para>     <literal>remote_stdevjitter</literal>Remote calculated jitter (standard deviation)</para>
						<para>     <literal>remote_count</literal>      Number of transmitted packets</para>
						<para>     <literal>rtt</literal>               Round trip time</para>
						<para>     <literal>maxrtt</literal>            Round trip time (maximum)</para>
						<para>     <literal>minrtt</literal>            Round trip time (minimum)</para>
						<para>     <literal>normdevrtt</literal>        Round trip time (normal deviation)</para>
						<para>     <literal>stdevrtt</literal>          Round trip time (standard deviation)</para>
						<para>     <literal>all</literal>               All statistics (in a form suited to logging,
						but not for parsing)</para>
					</enum>
					<enum name="rtpdest">
						<para>R/O Get remote RTP destination information.</para>
						<para>   This option takes one additional argument:</para>
						<para>    Argument 1:</para>
						<para>     <literal>audio</literal>             Get audio destination</para>
						<para>     <literal>video</literal>             Get video destination</para>
						<para>     <literal>text</literal>              Get text destination</para>
					</enum>
				</enumlist>
				<para><emphasis>chan_iax2</emphasis> provides the following additional options:</para>
				<enumlist>
					<enum name="peerip">
						<para>R/O Get the peer's ip address.</para>
					</enum>
					<enum name="peername">
						<para>R/O Get the peer's username.</para>
					</enum>
				</enumlist>
				<para><emphasis>chan_dahdi</emphasis> provides the following additional options:</para>
				<enumlist>
					<enum name="dahdi_channel">
						<para>R/O DAHDI channel related to this channel.</para>
					</enum>
					<enum name="dahdi_span">
						<para>R/O DAHDI span related to this channel.</para>
					</enum>
					<enum name="dahdi_type">
						<para>R/O DAHDI channel type, one of:</para>
						<enumlist>
							<enum name="analog" />
							<enum name="mfc/r2" />
							<enum name="pri" />
							<enum name="pseudo" />
							<enum name="ss7" />
						</enumlist>
					</enum>
					<enum name="keypad_digits">
						<para>R/O PRI Keypad digits that came in with the SETUP message.</para>
					</enum>
					<enum name="reversecharge">
						<para>R/O PRI Reverse Charging Indication, one of:</para>
						<enumlist>
							<enum name="-1"> <para>None</para></enum>
							<enum name=" 1"> <para>Reverse Charging Requested</para></enum>
						</enumlist>
					</enum>
					<enum name="no_media_path">
						<para>R/O PRI Nonzero if the channel has no B channel.
						The channel is either on hold or a call waiting call.</para>
					</enum>
				</enumlist>
			</parameter>
		</syntax>
		<description>
			<para>Gets/sets various pieces of information about the channel, additional <replaceable>item</replaceable> may
			be available from the channel driver; see its documentation for details. Any <replaceable>item</replaceable>
			requested that is not available on the current channel will return an empty string.</para>
		</description>
	</function>
	<function name="AST_CONFIG" language="en_US">
		<synopsis>
			Retrieve a variable from a configuration file.
		</synopsis>
		<syntax>
			<parameter name="config_file" required="true" />
			<parameter name="category" required="true" />
			<parameter name="variable_name" required="true" />
		</syntax>
		<description>
			<para>This function reads a variable from an Asterisk configuration file.</para>
		</description>
	</function>

	<function name="SORT" language="en_US">
		<synopsis>
			Sorts a list of key/vals into a list of keys, based upon the vals.	
		</synopsis>
		<syntax>
			<parameter name="keyval" required="true" argsep=":">
				<argument name="key1" required="true" />
				<argument name="val1" required="true" />
			</parameter>
			<parameter name="keyvaln" multiple="true" argsep=":">
				<argument name="key2" required="true" />
				<argument name="val2" required="true" />
			</parameter>
		</syntax>
		<description>
			<para>Takes a comma-separated list of keys and values, each separated by a colon, and returns a
			comma-separated list of the keys, sorted by their values.  Values will be evaluated as
			floating-point numbers.</para>
		</description>
	</function>
	<function name="CUT" language="en_US">
		<synopsis>
			Slices and dices strings, based upon a named delimiter.		
		</synopsis>
		<syntax>
			<parameter name="varname" required="true">
				<para>Variable you want cut</para>
			</parameter>
			<parameter name="char-delim" required="true">
				<para>Delimiter, defaults to <literal>-</literal></para>
			</parameter>
			<parameter name="range-spec" required="true">
				<para>Number of the field you want (1-based offset), may also be specified as a range (with <literal>-</literal>)
				or group of ranges and fields (with <literal>&amp;</literal>)</para>
			</parameter>
		</syntax>
		<description>
			<para>Cut out information from a string (<replaceable>varname</replaceable>), based upon a named delimiter.</para>
		</description>	
	</function>
	<function name="DB" language="en_US">
		<synopsis>
			Read from or write to the Asterisk database.
		</synopsis>
		<syntax argsep="/">
			<parameter name="family" required="true" />
			<parameter name="key" required="true" />
		</syntax>
		<description>
			<para>This function will read from or write a value to the Asterisk database.  On a
			read, this function returns the corresponding value from the database, or blank
			if it does not exist.  Reading a database value will also set the variable
			DB_RESULT.  If you wish to find out if an entry exists, use the DB_EXISTS
			function.</para>
		</description>
		<see-also>
			<ref type="application">DBdel</ref>
			<ref type="function">DB_DELETE</ref>
			<ref type="application">DBdeltree</ref>
			<ref type="function">DB_EXISTS</ref>
		</see-also>
	</function>
	<function name="DB_EXISTS" language="en_US">
		<synopsis>
			Check to see if a key exists in the Asterisk database.
		</synopsis>
		<syntax argsep="/">
			<parameter name="family" required="true" />
			<parameter name="key" required="true" />
		</syntax>
		<description>
			<para>This function will check to see if a key exists in the Asterisk
			database. If it exists, the function will return <literal>1</literal>. If not,
			it will return <literal>0</literal>.  Checking for existence of a database key will
			also set the variable DB_RESULT to the key's value if it exists.</para>
		</description>
		<see-also>
			<ref type="function">DB</ref>
		</see-also>
	</function>
	<function name="DB_DELETE" language="en_US">
		<synopsis>
			Return a value from the database and delete it.
		</synopsis>
		<syntax argsep="/">
			<parameter name="family" required="true" />
			<parameter name="key" required="true" />
		</syntax>
		<description>
			<para>This function will retrieve a value from the Asterisk database
			and then remove that key from the database. <variable>DB_RESULT</variable>
			will be set to the key's value if it exists.</para>
		</description>
		<see-also>
			<ref type="application">DBdel</ref>
			<ref type="function">DB</ref>
			<ref type="application">DBdeltree</ref>
		</see-also>
	</function>
	<function name="DEVICE_STATE" language="en_US">
		<synopsis>
			Get or Set a device state.
		</synopsis>
		<syntax>
			<parameter name="device" required="true" />
		</syntax>
		<description>
			<para>The DEVICE_STATE function can be used to retrieve the device state from any
			device state provider. For example:</para>
			<para>NoOp(SIP/mypeer has state ${DEVICE_STATE(SIP/mypeer)})</para>
			<para>NoOp(Conference number 1234 has state ${DEVICE_STATE(MeetMe:1234)})</para>
			<para>The DEVICE_STATE function can also be used to set custom device state from
			the dialplan.  The <literal>Custom:</literal> prefix must be used. For example:</para>
			<para>Set(DEVICE_STATE(Custom:lamp1)=BUSY)</para>
			<para>Set(DEVICE_STATE(Custom:lamp2)=NOT_INUSE)</para>
			<para>You can subscribe to the status of a custom device state using a hint in
			the dialplan:</para>
			<para>exten => 1234,hint,Custom:lamp1</para>
			<para>The possible values for both uses of this function are:</para>
			<para>UNKNOWN | NOT_INUSE | INUSE | BUSY | INVALID | UNAVAILABLE | RINGING |
			RINGINUSE | ONHOLD</para>
		</description>
	</function>
	<function name="HINT" language="en_US">
		<synopsis>
			Get the devices set for a dialplan hint.
		</synopsis>
		<syntax>
			<parameter name="extension" required="true" argsep="@">
				<argument name="extension" required="true" />
				<argument name="context" />
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="n">
						<para>Retrieve name on the hint instead of list of devices.</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>The HINT function can be used to retrieve the list of devices that are
			mapped to a dialplan hint. For example:</para>
			<para>NoOp(Hint for Extension 1234 is ${HINT(1234)})</para>
		</description>
	</function>
	<function name="DIALGROUP" language="en_US">
		<synopsis>
			Manages a group of users for dialing.
		</synopsis>
		<syntax>
			<parameter name="group" required="true" />
			<parameter name="op">
				<para>The operation name, possible values are:</para>
				<para><literal>add</literal> - add a channel name or interface (write-only)</para>
				<para><literal>del</literal> - remove a channel name or interface (write-only)</para>
			</parameter>
		</syntax>
		<description>
			<para>Presents an interface meant to be used in concert with the Dial
			application, by presenting a list of channels which should be dialled when
			referenced.</para>
			<para>When DIALGROUP is read from, the argument is interpreted as the particular
			<replaceable>group</replaceable> for which a dial should be attempted.  When DIALGROUP is written to
			with no arguments, the entire list is replaced with the argument specified.</para>
			<para>Functionality is similar to a queue, except that when no interfaces are
			available, execution may continue in the dialplan.  This is useful when
			you want certain people to be the first to answer any calls, with immediate
			fallback to a queue when the front line people are busy or unavailable, but
			you still want front line people to log in and out of that group, just like
			a queue.</para>
			<para>Example:</para>
			<para>exten => 1,1,Set(DIALGROUP(mygroup,add)=SIP/10)</para>
			<para>exten => 1,n,Set(DIALGROUP(mygroup,add)=SIP/20)</para>
			<para>exten => 1,n,Dial(${DIALGROUP(mygroup)})</para>
		</description>
	</function>
	<function name="DIALPLAN_EXISTS" language="en_US">
		<synopsis>
			Checks the existence of a dialplan target.
		</synopsis>
		<syntax>
			<parameter name="context" required="true" />
			<parameter name="extension" />
			<parameter name="priority" />
		</syntax>
		<description>
			<para>This function returns <literal>1</literal> if the target exits. Otherwise, it returns <literal>0</literal>.</para>
		</description>
	</function>

	<function name="ENUMQUERY" language="en_US">
		<synopsis>
			Initiate an ENUM query.
		</synopsis>
		<syntax>
			<parameter name="number" required="true" />
			<parameter name="method-type">
				<para>If no <replaceable>method-type</replaceable> is given, the default will be
				<literal>sip</literal>.</para>
			</parameter>
			<parameter name="zone-suffix">
				<para>If no <replaceable>zone-suffix</replaceable> is given, the default will be
				<literal>e164.arpa</literal></para>
			</parameter>
		</syntax>
		<description>
			<para>This will do a ENUM lookup of the given phone number.</para>
		</description>
	</function>
	<function name="ENUMRESULT" language="en_US">
		<synopsis>
			Retrieve results from a ENUMQUERY.
		</synopsis>
		<syntax>
			<parameter name="id" required="true">
				<para>The identifier returned by the ENUMQUERY function.</para>
			</parameter>
			<parameter name="resultnum" required="true">
				<para>The number of the result that you want to retrieve.</para>
				<para>Results start at <literal>1</literal>. If this argument is specified
				as <literal>getnum</literal>, then it will return the total number of results 
				that are available.</para>
			</parameter>
		</syntax>
		<description>
			<para>This function will retrieve results from a previous use
			of the ENUMQUERY function.</para>
		</description>
	</function>	
	<function name="ENUMLOOKUP" language="en_US">
		<synopsis>
			General or specific querying of NAPTR records for ENUM or ENUM-like DNS pointers.
		</synopsis>
		<syntax>
			<parameter name="number" required="true" />
			<parameter name="method-type">
				<para>If no <replaceable>method-type</replaceable> is given, the default will be
                                <literal>sip</literal>.</para>
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="c">
						<para>Returns an integer count of the number of NAPTRs of a certain RR type.</para>
						<para>Combination of <literal>c</literal> and Method-type of <literal>ALL</literal> will
						return a count of all NAPTRs for the record.</para>
					</option>
					<option name="u">
						<para>Returns the full URI and does not strip off the URI-scheme.</para>
					</option>
					<option name="s">
						<para>Triggers ISN specific rewriting.</para>
					</option>
					<option name="i">
						<para>Looks for branches into an Infrastructure ENUM tree.</para>
					</option>
					<option name="d">
						<para>for a direct DNS lookup without any flipping of digits.</para>
					</option>
				</optionlist>	
			</parameter>
			<parameter name="record#">
				<para>If no <replaceable>record#</replaceable> is given, 
				defaults to <literal>1</literal>.</para>
			</parameter>
			<parameter name="zone-suffix">
				<para>If no <replaceable>zone-suffix</replaceable> is given, the default will be
				<literal>e164.arpa</literal></para>
			</parameter>
		</syntax>
		<description>
			<para>For more information see <filename>doc/AST.pdf</filename>.</para>
		</description>
	</function>
	<function name="TXTCIDNAME" language="en_US">
		<synopsis>
			TXTCIDNAME looks up a caller name via DNS.
		</synopsis>
		<syntax>
			<parameter name="number" required="true" />
			<parameter name="zone-suffix">
				<para>If no <replaceable>zone-suffix</replaceable> is given, the default will be
				<literal>e164.arpa</literal></para>
			</parameter>
		</syntax>
		<description>
			<para>This function looks up the given phone number in DNS to retrieve
			the caller id name.  The result will either be blank or be the value
			found in the TXT record in DNS.</para>
		</description>
	</function>
	<function name="ENV" language="en_US">
		<synopsis>
			Gets or sets the environment variable specified.
		</synopsis>
		<syntax>
			<parameter name="varname" required="true">
				<para>Environment variable name</para>
			</parameter>
		</syntax>
		<description>
			<para>Variables starting with <literal>AST_</literal> are reserved to the system and may not be set.</para>
		</description>
	</function>
	<function name="STAT" language="en_US">
		<synopsis>
			Does a check on the specified file.
		</synopsis>
		<syntax>
			<parameter name="flag" required="true">
				<para>Flag may be one of the following:</para>
				<para>d - Checks if the file is a directory.</para>
				<para>e - Checks if the file exists.</para>
				<para>f - Checks if the file is a regular file.</para>
				<para>m - Returns the file mode (in octal)</para>
				<para>s - Returns the size (in bytes) of the file</para>
				<para>A - Returns the epoch at which the file was last accessed.</para>
				<para>C - Returns the epoch at which the inode was last changed.</para>
				<para>M - Returns the epoch at which the file was last modified.</para>
			</parameter>
			<parameter name="filename" required="true" />
		</syntax>
		<description>
		</description>
	</function>
	<function name="FILE" language="en_US">
		<synopsis>
			Read or write text file.
		</synopsis>
		<syntax>
			<parameter name="filename" required="true" />
			<parameter name="offset">
				<para>Maybe specified as any number. If negative, <replaceable>offset</replaceable> specifies the number
				of bytes back from the end of the file.</para>
			</parameter>
			<parameter name="length">
				<para>If specified, will limit the length of the data read to that size. If negative,
				trims <replaceable>length</replaceable> bytes from the end of the file.</para>
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="l">
						<para>Line mode:  offset and length are assumed to be
						measured in lines, instead of byte offsets.</para>
					</option>
					<option name="a">
						<para>In write mode only, the append option is used to
						append to the end of the file, instead of overwriting
						the existing file.</para>
					</option>
					<option name="d">
						<para>In write mode and line mode only, this option does
						not automatically append a newline string to the end of
						a value.  This is useful for deleting lines, instead of
						setting them to blank.</para>
					</option>
				</optionlist>
			</parameter>
			<parameter name="format">
				<para>The <replaceable>format</replaceable> parameter may be
				used to delimit the type of line terminators in line mode.</para>
				<optionlist>
					<option name="u">
						<para>Unix newline format.</para>
					</option>
					<option name="d">
						<para>DOS newline format.</para>
					</option>
					<option name="m">
						<para>Macintosh newline format.</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>Read and write text file in character and line mode.</para>
			<para>Examples:</para>
			<para/>
			<para>Read mode (byte):</para>
			<para>    ;reads the entire content of the file.</para>
			<para>    Set(foo=${FILE(/tmp/test.txt)})</para>
			<para>    ;reads from the 11th byte to the end of the file (i.e. skips the first 10).</para>
			<para>    Set(foo=${FILE(/tmp/test.txt,10)})</para>
			<para>    ;reads from the 11th to 20th byte in the file (i.e. skip the first 10, then read 10 bytes).</para>
			<para>    Set(foo=${FILE(/tmp/test.txt,10,10)})</para>
			<para/>
			<para>Read mode (line):</para>
			<para>    ; reads the 3rd line of the file.</para>
			<para>    Set(foo=${FILE(/tmp/test.txt,3,1,l)})</para>
			<para>    ; reads the 3rd and 4th lines of the file.</para>
			<para>    Set(foo=${FILE(/tmp/test.txt,3,2,l)})</para>
			<para>    ; reads from the third line to the end of the file.</para>
			<para>    Set(foo=${FILE(/tmp/test.txt,3,,l)})</para>
			<para>    ; reads the last three lines of the file.</para>
			<para>    Set(foo=${FILE(/tmp/test.txt,-3,,l)})</para>
			<para>    ; reads the 3rd line of a DOS-formatted file.</para>
			<para>    Set(foo=${FILE(/tmp/test.txt,3,1,l,d)})</para>
			<para/>
			<para>Write mode (byte):</para>
			<para>    ; truncate the file and write "bar"</para>
			<para>    Set(FILE(/tmp/test.txt)=bar)</para>
			<para>    ; Append "bar"</para>
			<para>    Set(FILE(/tmp/test.txt,,,a)=bar)</para>
			<para>    ; Replace the first byte with "bar" (replaces 1 character with 3)</para>
			<para>    Set(FILE(/tmp/test.txt,0,1)=bar)</para>
			<para>    ; Replace 10 bytes beginning at the 21st byte of the file with "bar"</para>
			<para>    Set(FILE(/tmp/test.txt,20,10)=bar)</para>
			<para>    ; Replace all bytes from the 21st with "bar"</para>
			<para>    Set(FILE(/tmp/test.txt,20)=bar)</para>
			<para>    ; Insert "bar" after the 4th character</para>
			<para>    Set(FILE(/tmp/test.txt,4,0)=bar)</para>
			<para/>
			<para>Write mode (line):</para>
			<para>    ; Replace the first line of the file with "bar"</para>
			<para>    Set(FILE(/tmp/foo.txt,0,1,l)=bar)</para>
			<para>    ; Replace the last line of the file with "bar"</para>
			<para>    Set(FILE(/tmp/foo.txt,-1,,l)=bar)</para>
			<para>    ; Append "bar" to the file with a newline</para>
			<para>    Set(FILE(/tmp/foo.txt,,,al)=bar)</para>
		</description>
		<see-also>
			<ref type="function">FILE_COUNT_LINE</ref>
			<ref type="function">FILE_FORMAT</ref>
		</see-also>
	</function>
	<function name="FILE_COUNT_LINE" language="en_US">
		<synopsis>
			Obtains the number of lines of a text file.
		</synopsis>
		<syntax>
			<parameter name="filename" required="true" />
			<parameter name="format">
				<para>Format may be one of the following:</para>
				<optionlist>
					<option name="u">
						<para>Unix newline format.</para>
					</option>
					<option name="d">
						<para>DOS newline format.</para>
					</option>
					<option name="m">
						<para>Macintosh newline format.</para>
					</option>
				</optionlist>
				<note><para>If not specified, an attempt will be made to determine the newline format type.</para></note>
			</parameter>
		</syntax>
		<description>
			<para>Returns the number of lines, or <literal>-1</literal> on error.</para>
		</description>
		<see-also>
			<ref type="function">FILE</ref>
			<ref type="function">FILE_FORMAT</ref>
		</see-also>
	</function>
	<function name="FILE_FORMAT" language="en_US">
		<synopsis>
			Return the newline format of a text file.
		</synopsis>
		<syntax>
			<parameter name="filename" required="true" />
		</syntax>
		<description>
			<para>Return the line terminator type:</para>
			<para>'u' - Unix "\n" format</para>
			<para>'d' - DOS "\r\n" format</para>
			<para>'m' - Macintosh "\r" format</para>
			<para>'x' - Cannot be determined</para>
		</description>
		<see-also>
			<ref type="function">FILE</ref>
			<ref type="function">FILE_COUNT_LINE</ref>
		</see-also>
	</function>
	<function name="EXTENSION_STATE" language="en_US">
		<synopsis>
			Get an extension's state.
		</synopsis>	
		<syntax argsep="@">
			<parameter name="extension" required="true" />
			<parameter name="context">
				<para>If it is not specified defaults to <literal>default</literal>.</para>
			</parameter>
		</syntax>
		<description>
			<para>The EXTENSION_STATE function can be used to retrieve the state from any
			hinted extension. For example:</para>
			<para>NoOp(1234@default has state ${EXTENSION_STATE(1234)})</para>
			<para>NoOp(4567@home has state ${EXTENSION_STATE(4567@home)})</para>
			<para>The possible values returned by this function are:</para>
			<para>UNKNOWN | NOT_INUSE | INUSE | BUSY | INVALID | UNAVAILABLE | RINGING |
			RINGINUSE | HOLDINUSE | ONHOLD</para>
		</description>
	</function>
	<function name="FRAME_TRACE" language="en_US">
		<synopsis>
			View internal ast_frames as they are read and written on a channel.
		</synopsis>
		<syntax>
			<parameter name="filter list type" required="true">
				<para>A filter can be applied to the trace to limit what frames are viewed.  This
				filter can either be a <literal>white</literal> or <literal>black</literal> list
				of frame types.  When no filter type is present, <literal>white</literal> is
				used.  If no arguments are provided at all, all frames will be output.
				</para>

				<para>Below are the different types of frames that can be filtered.</para>
				<enumlist>
					<enum name = "DTMF_BEGIN" />
					<enum name = "DTMF_END" />
					<enum name = "VOICE" />
					<enum name = "VIDEO" />
					<enum name = "CONTROL" />
					<enum name = "NULL" />
					<enum name = "IAX" />
					<enum name = "TEXT" />
					<enum name = "IMAGE" />
					<enum name = "HTML" />
					<enum name = "CNG" />
					<enum name = "MODEM" />
				</enumlist>
			</parameter>
		</syntax>
		<description>
			<para>Examples:</para>
			<para>exten => 1,1,Set(FRAME_TRACE(white)=DTMF_BEGIN,DTMF_END); view only DTMF frames. </para>
			<para>exten => 1,1,Set(FRAME_TRACE()=DTMF_BEGIN,DTMF_END); view only DTMF frames. </para>
			<para>exten => 1,1,Set(FRAME_TRACE(black)=DTMF_BEGIN,DTMF_END); view everything except DTMF frames. </para>
		</description>
	</function>
	<function name="GLOBAL" language="en_US">
		<synopsis>
			Gets or sets the global variable specified.
		</synopsis>
		<syntax>
			<parameter name="varname" required="true">
				<para>Global variable name</para>
			</parameter>
		</syntax>
		<description>
			<para>Set or get the value of a global variable specified in <replaceable>varname</replaceable></para>
		</description>
	</function>
	<function name="SHARED" language="en_US">
		<synopsis>
			Gets or sets the shared variable specified.
		</synopsis>
		<syntax>
			<parameter name="varname" required="true">
				<para>Variable name</para>
			</parameter>
			<parameter name="channel">
				<para>If not specified will default to current channel. It is the complete
				channel name: <literal>SIP/12-abcd1234</literal> or the prefix only <literal>SIP/12</literal>.</para>
			</parameter>
		</syntax>
		<description>
			<para>Implements a shared variable area, in which you may share variables between
			channels.</para>
			<para>The variables used in this space are separate from the general namespace of
			the channel and thus <variable>SHARED(foo)</variable> and <variable>foo</variable> 
			represent two completely different variables, despite sharing the same name.</para>
			<para>Finally, realize that there is an inherent race between channels operating
			at the same time, fiddling with each others' internal variables, which is why
			this special variable namespace exists; it is to remind you that variables in
			the SHARED namespace may change at any time, without warning.  You should
			therefore take special care to ensure that when using the SHARED namespace,
			you retrieve the variable and store it in a regular channel variable before
			using it in a set of calculations (or you might be surprised by the result).</para>
		</description>
	</function>

	<function name="GROUP_COUNT" language="en_US">
		<synopsis>
			Counts the number of channels in the specified group.
		</synopsis>
		<syntax argsep="@">
			<parameter name="groupname">
				<para>Group name.</para>
			</parameter>
			<parameter name="category">
				<para>Category name</para>
			</parameter>
		</syntax>
		<description>
			<para>Calculates the group count for the specified group, or uses the
			channel's current group if not specifed (and non-empty).</para>
		</description>
	</function>
	<function name="GROUP_MATCH_COUNT" language="en_US">
		<synopsis>
			Counts the number of channels in the groups matching the specified pattern.
		</synopsis>
		<syntax argsep="@">
			<parameter name="groupmatch" required="true">
				<para>A standard regular expression used to match a group name.</para>
			</parameter>
			<parameter name="category">
				<para>A standard regular expression used to match a category name.</para>
			</parameter>
		</syntax>
		<description>
			<para>Calculates the group count for all groups that match the specified pattern.
			Note: category matching is applied after matching based on group.
			Uses standard regular expression matching on both (see regex(7)).</para>
		</description>
	</function>
	<function name="GROUP" language="en_US">
		<synopsis>
			Gets or sets the channel group.
		</synopsis>
		<syntax>
			<parameter name="category">
				<para>Category name.</para>
			</parameter>
		</syntax>
		<description>
			<para><replaceable>category</replaceable> can be employed for more fine grained group management. Each channel 
			can only be member of exactly one group per <replaceable>category</replaceable>.</para>
		</description>
	</function>
	<function name="GROUP_LIST" language="en_US">
		<synopsis>
			Gets a list of the groups set on a channel.
		</synopsis>
		<syntax />
		<description>
			<para>Gets a list of the groups set on a channel.</para>
		</description>
	</function>

	<function name="ICONV" language="en_US">
		<synopsis>
			Converts charsets of strings.	
		</synopsis>
		<syntax>
			<parameter name="in-charset" required="true">
				<para>Input charset</para>
			</parameter>
			<parameter name="out-charset" required="true">
				<para>Output charset</para>
			</parameter>
			<parameter name="string" required="true">
				<para>String to convert, from <replaceable>in-charset</replaceable> to <replaceable>out-charset</replaceable></para>
			</parameter>
		</syntax>
		<description>
			<para>Converts string from <replaceable>in-charset</replaceable> into <replaceable>out-charset</replaceable>.
			For available charsets, use <literal>iconv -l</literal> on your shell command line.</para>
			<note><para>Due to limitations within the API, ICONV will not currently work with
			charsets with embedded NULLs. If found, the string will terminate.</para></note>
		</description>
	</function>
	<function name="LOCK" language="en_US">
		<synopsis>
			Attempt to obtain a named mutex.
		</synopsis>
		<syntax>
			<parameter name="lockname" required="true" />
		</syntax>
		<description>
			<para>Attempts to grab a named lock exclusively, and prevents other channels from
			obtaining the same lock.  LOCK will wait for the lock to become available.
			Returns <literal>1</literal> if the lock was obtained or <literal>0</literal> on error.</para>
			<note><para>To avoid the possibility of a deadlock, LOCK will only attempt to
			obtain the lock for 3 seconds if the channel already has another lock.</para></note>
		</description>
	</function>
	<function name="TRYLOCK" language="en_US">
		<synopsis>
			Attempt to obtain a named mutex.
		</synopsis>
		<syntax>
			<parameter name="lockname" required="true" />
		</syntax>
		<description>
			<para>Attempts to grab a named lock exclusively, and prevents other channels
			from obtaining the same lock.  Returns <literal>1</literal> if the lock was 
			available or <literal>0</literal> otherwise.</para>
		</description>
	</function>
	<function name="UNLOCK" language="en_US">
		<synopsis>
			Unlocks a named mutex.
		</synopsis>
		<syntax>
			<parameter name="lockname" required="true" />
		</syntax>
		<description>
			<para>Unlocks a previously locked mutex. Returns <literal>1</literal> if the channel 
			had a lock or <literal>0</literal> otherwise.</para>
			<note><para>It is generally unnecessary to unlock in a hangup routine, as any locks 
			held are automatically freed when the channel is destroyed.</para></note>
		</description>
	</function>
	<function name="ISNULL" language="en_US">
		<synopsis>
			Check if a value is NULL.
		</synopsis>
		<syntax>
			<parameter name="data" required="true" />
		</syntax>
		<description>
			<para>Returns <literal>1</literal> if NULL or <literal>0</literal> otherwise.</para>
		</description>
	</function>
	<function name="SET" language="en_US">
		<synopsis>
			SET assigns a value to a channel variable.
		</synopsis>
		<syntax argsep="=">
			<parameter name="varname" required="true" />
			<parameter name="value" />
		</syntax>
		<description>
		</description>
	</function>
	<function name="EXISTS" language="en_US">
		<synopsis>
			Test the existence of a value.
		</synopsis>
		<syntax>
			<parameter name="data" required="true" />
		</syntax>
		<description>
			<para>Returns <literal>1</literal> if exists, <literal>0</literal> otherwise.</para>
		</description>
	</function>
	<function name="IF" language="en_US">
		<synopsis>
			Check for an expresion.
		</synopsis>
		<syntax argsep="?">
			<parameter name="expresion" required="true" />
			<parameter name="retvalue" argsep=":" required="true">
				<argument name="true" />
				<argument name="false" />
			</parameter>
		</syntax>
		<description>
			<para>Returns the data following <literal>?</literal> if true, else the data following <literal>:</literal></para>
		</description>	
	</function>
	<function name="IFTIME" language="en_US">
		<synopsis>
			Temporal Conditional.
		</synopsis>
		<syntax argsep="?">
			<parameter name="timespec" required="true" />
			<parameter name="retvalue" required="true" argsep=":">
				<argument name="true" />
				<argument name="false" />
			</parameter>
		</syntax>
		<description>
			<para>Returns the data following <literal>?</literal> if true, else the data following <literal>:</literal></para>
		</description>
	</function>
	<function name="IMPORT" language="en_US">
		<synopsis>
			Retrieve the value of a variable from another channel.
		</synopsis>
		<syntax>
			<parameter name="channel" required="true" />
			<parameter name="variable" required="true" />
		</syntax>
		<description>
		</description>
	</function>
	<function name="MATH" language="en_US">
		<synopsis>
			Performs Mathematical Functions.
		</synopsis>
		<syntax>
			<parameter name="expression" required="true">
				<para>Is of the form:
				<replaceable>number1</replaceable><replaceable>op</replaceable><replaceable>number2</replaceable>
				where the possible values for <replaceable>op</replaceable>
				are:</para>
				<para>+,-,/,*,%,&lt;&lt;,&gt;&gt;,^,AND,OR,XOR,&lt;,%gt;,&gt;=,&lt;=,== (and behave as their C equivalents)</para>
			</parameter>
			<parameter name="type">
				<para>Wanted type of result:</para>
				<para>f, float - float(default)</para>
				<para>i, int - integer</para>
				<para>h, hex - hex</para>
				<para>c, char - char</para>
			</parameter>
		</syntax>
		<description>
			<para>Performs mathematical functions based on two parameters and an operator.  The returned
			value type is <replaceable>type</replaceable></para>
			<para>Example: Set(i=${MATH(123%16,int)}) - sets var i=11</para>
		</description>
	</function>
	<function name="INC" language="en_US">
		<synopsis>
			Increments the value of a variable, while returning the updated value to the dialplan
		</synopsis>
		<syntax>
			<parameter name="variable" required="true">
				<para>
				The variable name to be manipulated, without the braces.
				</para>
			</parameter>
		</syntax>
		<description>
			<para>Increments the value of a variable, while returning the updated value to the dialplan</para>
			<para>Example: INC(MyVAR) - Increments MyVar</para>
			<para>Note: INC(${MyVAR}) - Is wrong, as INC expects the variable name, not its value</para>
		</description>
	</function>
	<function name="DEC" language="en_US">
		<synopsis>
			Decrements the value of a variable, while returning the updated value to the dialplan
		</synopsis>
		<syntax>
			<parameter name="variable" required="true">
				<para>
				The variable name to be manipulated, without the braces.
				</para>
			</parameter>
		</syntax>
		<description>
			<para>Decrements the value of a variable, while returning the updated value to the dialplan</para>
			<para>Example: DEC(MyVAR) - Increments MyVar</para>
			<para>Note: DEC(${MyVAR}) - Is wrong, as INC expects the variable name, not its value</para>
		</description>
	</function>
	<function name="MD5" language="en_US">
		<synopsis>
			Computes an MD5 digest.
		</synopsis>
		<syntax>
			<parameter name="data" required="true" />
		</syntax>
		<description>
			<para>Computes an MD5 digest.</para>
		</description>
	</function>
	<function name="IFMODULE" language="en_US">
		<synopsis>
			Checks if an Asterisk module is loaded in memory.
		</synopsis>
		<syntax>
			<parameter name="modulename.so" required="true">
				<para>Module name complete with <literal>.so</literal></para>
			</parameter>
		</syntax>
		<description>
			<para>Checks if a module is loaded. Use the full module name
			as shown by the list in <literal>module list</literal>.
			Returns <literal>1</literal> if module exists in memory, otherwise <literal>0</literal></para>
		</description>
	</function>
	<function name="ODBC_FETCH" language="en_US">
		<synopsis>
			Fetch a row from a multirow query.
		</synopsis>
		<syntax>
			<parameter name="result-id" required="true" />
		</syntax>
		<description>
			<para>For queries which are marked as mode=multirow, the original 
			query returns a <replaceable>result-id</replaceable> from which results 
			may be fetched.  This function implements the actual fetch of the results.</para>
			<para>This also sets <variable>ODBC_FETCH_STATUS</variable>.</para>
			<variablelist>
				<variable name="ODBC_FETCH_STATUS">
					<value name="SUCESS">
						If rows are available.
					</value>
					<value name="FAILURE">
						If no rows are available.
					</value>
				</variable>
			</variablelist>
		</description>
	</function>
	<application name="ODBCFinish" language="en_US">
		<synopsis>
			Clear the resultset of a sucessful multirow query.
		</synopsis>
		<syntax>
			<parameter name="result-id" required="true" />
		</syntax>
		<description>
			<para>For queries which are marked as mode=multirow, this will clear 
			any remaining rows of the specified resultset.</para>
		</description>
	</application>
	<function name="SQL_ESC" language="en_US">
		<synopsis>
			Escapes single ticks for use in SQL statements.
		</synopsis>
		<syntax>
			<parameter name="string" required="true" />
		</syntax>
		<description>
			<para>Used in SQL templates to escape data which may contain single ticks 
			<literal>'</literal> which are otherwise used to delimit data.</para>
		  	<para>Example: SELECT foo FROM bar WHERE baz='${SQL_ESC(${ARG1})}'</para>
		</description>
	</function>
	<function name="PITCH_SHIFT" language="en_US">
		<synopsis>
			Pitch shift both tx and rx audio streams on a channel.
		</synopsis>
		<syntax>
			<parameter name="channel direction" required="true">
				<para>Direction can be either <literal>rx</literal>, <literal>tx</literal>, or
				<literal>both</literal>.  The direction can either be set to a valid floating
				point number between 0.1 and 4.0 or one of the enum values listed below. A value
				of 1.0 has no effect.  Greater than 1 raises the pitch. Lower than 1 lowers
				the pitch.</para>

				<para>The pitch amount can also be set by the following values</para>
				<enumlist>
					<enum name = "highest" />
					<enum name = "higher" />
					<enum name = "high" />
					<enum name = "low" />
					<enum name = "lower" />
					<enum name = "lowest" />
				</enumlist>
			</parameter>
		</syntax>
		<description>
			<para>Examples:</para>
			<para>exten => 1,1,Set(PITCH_SHIFT(tx)=highest); raises pitch an octave </para>
			<para>exten => 1,1,Set(PITCH_SHIFT(rx)=higher) ; raises pitch more </para>
			<para>exten => 1,1,Set(PITCH_SHIFT(both)=high)   ; raises pitch </para>
			<para>exten => 1,1,Set(PITCH_SHIFT(rx)=low)    ; lowers pitch </para>
			<para>exten => 1,1,Set(PITCH_SHIFT(tx)=lower)  ; lowers pitch more </para>
			<para>exten => 1,1,Set(PITCH_SHIFT(both)=lowest) ; lowers pitch an octave </para>

			<para>exten => 1,1,Set(PITCH_SHIFT(rx)=0.8)    ; lowers pitch </para>
			<para>exten => 1,1,Set(PITCH_SHIFT(tx)=1.5)    ; raises pitch </para>
		</description>
	</function>
	<function name="RAND" language="en_US">
		<synopsis>
			Choose a random number in a range.			
		</synopsis>
		<syntax>
			<parameter name="min" />
			<parameter name="max" />
		</syntax>
		<description>
			<para>Choose a random number between <replaceable>min</replaceable> and <replaceable>max</replaceable>. 
			<replaceable>min</replaceable> defaults to <literal>0</literal>, if not specified, while <replaceable>max</replaceable> defaults 
			to <literal>RAND_MAX</literal> (2147483647 on many systems).</para>
			<para>Example:  Set(junky=${RAND(1,8)});
			Sets junky to a random number between 1 and 8, inclusive.</para>
		</description>
	</function>
	<function name="REALTIME" language="en_US">
		<synopsis>
			RealTime Read/Write Functions.
		</synopsis>
		<syntax>
			<parameter name="family" required="true" />
			<parameter name="fieldmatch" required="true" />
			<parameter name="value" />
			<parameter name="delim1|field">
				<para>Use <replaceable>delim1</replaceable> with <replaceable>delim2</replaceable> on
				read and <replaceable>field</replaceable> without <replaceable>delim2</replaceable> on
				write</para>
				<para>If we are reading and <replaceable>delim1</replaceable> is not specified, defaults
				to <literal>,</literal></para>
			</parameter>
			<parameter name="delim2">
				<para>Parameter only used when reading, if not specified defaults to <literal>=</literal></para>
			</parameter>
		</syntax>
		<description>
			<para>This function will read or write values from/to a RealTime repository.
			REALTIME(....) will read names/values from the repository, and 
			REALTIME(....)= will write a new value/field to the repository. On a
			read, this function returns a delimited text string. The name/value
			pairs are delimited by <replaceable>delim1</replaceable>, and the name and value are delimited
			between each other with delim2. 
			If there is no match, NULL will be returned by the function.
			On a write, this function will always return NULL.</para>
		</description>
		<see-also>
			<ref type="function">REALTIME_STORE</ref>
			<ref type="function">REALTIME_DESTROY</ref>
			<ref type="function">REALTIME_FIELD</ref>
			<ref type="function">REALTIME_HASH</ref>
		</see-also>
	</function>
	<function name="REALTIME_STORE" language="en_US">
		<synopsis>
			RealTime Store Function.
		</synopsis>
		<syntax>
			<parameter name="family" required="true" />
			<parameter name="field1" required="true" />
			<parameter name="fieldN" required="true" multiple="true" />
			<parameter name="field30" required="true" />
		</syntax>
		<description>
			<para>This function will insert a new set of values into the RealTime repository.
			If RT engine provides an unique ID of the stored record, REALTIME_STORE(...)=..
			creates channel variable named RTSTOREID, which contains value of unique ID.
			Currently, a maximum of 30 field/value pairs is supported.</para>
		</description>
		<see-also>
			<ref type="function">REALTIME</ref>
			<ref type="function">REALTIME_DESTROY</ref>
			<ref type="function">REALTIME_FIELD</ref>
			<ref type="function">REALTIME_HASH</ref>
		</see-also>
	</function>
	<function name="REALTIME_DESTROY" language="en_US">
		<synopsis>
			RealTime Destroy Function.
		</synopsis>
		<syntax>
			<parameter name="family" required="true" />
			<parameter name="fieldmatch" required="true" />
			<parameter name="value" />
			<parameter name="delim1" />
			<parameter name="delim2" />
		</syntax>
		<description>
			<para>This function acts in the same way as REALTIME(....) does, except that
			it destroys the matched record in the RT engine.</para>
		</description>
		<see-also>
			<ref type="function">REALTIME</ref>
			<ref type="function">REALTIME_STORE</ref>
			<ref type="function">REALTIME_FIELD</ref>
			<ref type="function">REALTIME_HASH</ref>
		</see-also>
	</function>
	<function name="REALTIME_FIELD" language="en_US">
		<synopsis>
			RealTime query function.
		</synopsis>
		<syntax>
			<parameter name="family" required="true" />
			<parameter name="fieldmatch" required="true" />
			<parameter name="value" required="true" />
			<parameter name="fieldname" required="true" />
		</syntax>
		<description>
			<para>This function retrieves a single item, <replaceable>fieldname</replaceable>
			from the RT engine, where <replaceable>fieldmatch</replaceable> contains the value
			<replaceable>value</replaceable>.  When written to, the REALTIME_FIELD() function
			performs identically to the REALTIME() function.</para>
		</description>
		<see-also>
			<ref type="function">REALTIME</ref>
			<ref type="function">REALTIME_STORE</ref>
			<ref type="function">REALTIME_DESTROY</ref>
			<ref type="function">REALTIME_HASH</ref>
		</see-also>
	</function>
	<function name="REALTIME_HASH" language="en_US">
		<synopsis>
			RealTime query function.
		</synopsis>
		<syntax>
			<parameter name="family" required="true" />
			<parameter name="fieldmatch" required="true" />
			<parameter name="value" required="true" />
		</syntax>
		<description>
			<para>This function retrieves a single record from the RT engine, where
			<replaceable>fieldmatch</replaceable> contains the value
			<replaceable>value</replaceable> and formats the output suitably, such that
			it can be assigned to the HASH() function.  The HASH() function then provides
			a suitable method for retrieving each field value of the record.</para>
		</description>
		<see-also>
			<ref type="function">REALTIME</ref>
			<ref type="function">REALTIME_STORE</ref>
			<ref type="function">REALTIME_DESTROY</ref>
			<ref type="function">REALTIME_FIELD</ref>
		</see-also>
	</function>
	<function name="SHA1" language="en_US">
		<synopsis>
			Computes a SHA1 digest.
		</synopsis>
		<syntax>
			<parameter name="data" required="true">
				<para>Input string</para>
			</parameter>
		</syntax>
		<description>
			<para>Generate a SHA1 digest via the SHA1 algorythm.</para>
			<para>Example:  Set(sha1hash=${SHA1(junky)})</para>
			<para>Sets the asterisk variable sha1hash to the string <literal>60fa5675b9303eb62f99a9cd47f9f5837d18f9a0</literal>
			which is known as his hash</para>	
		</description>
	</function>
	<function name="SHELL" language="en_US">
		<synopsis>
			Executes a command as if you were at a shell.
		</synopsis>
		<syntax>
			<parameter name="command" required="true">
				<para>This is the argument to the function, the command you want to pass to the shell.</para>
			</parameter>
		</syntax>
		<description>
			<para>Returns the value from a system command</para>
			<para>Example:  <literal>Set(foo=${SHELL(echo \bar\)})</literal></para>
			<note><para>When using the SHELL() dialplan function, your \SHELL\ is /bin/sh,
			which may differ as to the underlying shell, depending upon your production
			platform.  Also keep in mind that if you are using a common path, you should
			be mindful of race conditions that could result from two calls running
			SHELL() simultaneously.</para></note>
		</description>
 
	</function>
	<function name="AGC" language="en_US">
		<synopsis>
			Apply automatic gain control to audio on a channel.
		</synopsis>
		<syntax>
			<parameter name="channeldirection" required="true">
				<para>This can be either <literal>rx</literal> or <literal>tx</literal></para>
			</parameter>
		</syntax>
		<description>
			<para>The AGC function will apply automatic gain control to the audio on the
			channel that it is executed on. Using <literal>rx</literal> for audio received
			and <literal>tx</literal> for audio transmitted to the channel. When using this
			function you set a target audio level. It is primarily intended for use with
			analog lines, but could be useful for other channels as well. The target volume 
			is set with a number between <literal>1-32768</literal>. The larger the number
			the louder (more gain) the channel will receive.</para>
			<para>Examples:</para>
			<para>exten => 1,1,Set(AGC(rx)=8000)</para>
			<para>exten => 1,2,Set(AGC(tx)=off)</para>
		</description>
	</function>
	<function name="DENOISE" language="en_US">
		<synopsis>
			Apply noise reduction to audio on a channel.
		</synopsis>
		<syntax>
			<parameter name="channeldirection" required="true">
				<para>This can be either <literal>rx</literal> or <literal>tx</literal> 
				the values that can be set to this are either <literal>on</literal> and
				<literal>off</literal></para>
			</parameter>
		</syntax>
		<description>
			<para>The DENOISE function will apply noise reduction to audio on the channel
			that it is executed on. It is very useful for noisy analog lines, especially
			when adjusting gains or using AGC. Use <literal>rx</literal> for audio received from the channel
			and <literal>tx</literal> to apply the filter to the audio being sent to the channel.</para>
			<para>Examples:</para>
			<para>exten => 1,1,Set(DENOISE(rx)=on)</para>
			<para>exten => 1,2,Set(DENOISE(tx)=off)</para>
		</description>
	</function>
	<function name="SPRINTF" language="en_US">
		<synopsis>
			Format a variable according to a format string.
		</synopsis>
		<syntax>
			<parameter name="format" required="true" />
			<parameter name="arg1" required="true" />
			<parameter name="arg2" multiple="true" />
			<parameter name="argN" />
		</syntax>
		<description>
			<para>Parses the format string specified and returns a string matching 
			that format. Supports most options found in <emphasis>sprintf(3)</emphasis>.
			Returns a shortened string if a format specifier is not recognized.</para>
		</description>
		<see-also>
			<ref type="manpage">sprintf(3)</ref>
		</see-also>
	</function>
	<function name="SRVQUERY" language="en_US">
		<synopsis>
			Initiate an SRV query.
		</synopsis>
		<syntax>
			<parameter name="service" required="true">
				<para>The service for which to look up SRV records. An example would be something
				like <literal>_sip._udp.example.com</literal></para>
			</parameter>
		</syntax>
		<description>
			<para>This will do an SRV lookup of the given service.</para>
		</description>
	</function>
	<function name="SRVRESULT" language="en_US">
		<synopsis>
			Retrieve results from an SRVQUERY.
		</synopsis>
		<syntax>
			<parameter name="id" required="true">
				<para>The identifier returned by the SRVQUERY function.</para>
			</parameter>
			<parameter name="resultnum" required="true">
				<para>The number of the result that you want to retrieve.</para>
				<para>Results start at <literal>1</literal>. If this argument is specified
				as <literal>getnum</literal>, then it will return the total number of results
				that are available.</para>
			</parameter>
		</syntax>
		<description>
			<para>This function will retrieve results from a previous use
			of the SRVQUERY function.</para>
		</description>
	</function>
	<function name="FIELDQTY" language="en_US">
		<synopsis>
			Count the fields with an arbitrary delimiter
		</synopsis>
		<syntax>
			<parameter name="varname" required="true" />
			<parameter name="delim" required="true" />
		</syntax>
		<description>
			<para>The delimiter may be specified as a special or extended ASCII character, by encoding it.  The characters
			<literal>\n</literal>, <literal>\r</literal>, and <literal>\t</literal> are all recognized as the newline,
			carriage return, and tab characters, respectively.  Also, octal and hexadecimal specifications are recognized
			by the patterns <literal>\0nnn</literal> and <literal>\xHH</literal>, respectively.  For example, if you wanted
			to encode a comma as the delimiter, you could use either <literal>\054</literal> or <literal>\x2C</literal>.</para>
			<para>Example: If ${example} contains <literal>ex-amp-le</literal>, then ${FIELDQTY(example,-)} returns 3.</para>
		</description>
	</function>
	<function name="FIELDNUM" language="en_US">
		<synopsis>
			Return the 1-based offset of a field in a list
		</synopsis>
		<syntax>
			<parameter name="varname" required="true" />
			<parameter name="delim" required="true" />
			<parameter name="value" required="true" />
		</syntax>
		<description>
			<para>Search the variable named <replaceable>varname</replaceable> for the string <replaceable>value</replaceable>
			delimited by <replaceable>delim</replaceable> and return a 1-based offset as to its location. If not found
			or an error occured, return <literal>0</literal>.</para>
			<para>The delimiter may be specified as a special or extended ASCII character, by encoding it.  The characters
			<literal>\n</literal>, <literal>\r</literal>, and <literal>\t</literal> are all recognized as the newline,
			carriage return, and tab characters, respectively.  Also, octal and hexadecimal specifications are recognized
			by the patterns <literal>\0nnn</literal> and <literal>\xHH</literal>, respectively.  For example, if you wanted
			to encode a comma as the delimiter, you could use either <literal>\054</literal> or <literal>\x2C</literal>.</para>
		        <para>Example: If ${example} contains <literal>ex-amp-le</literal>, then ${FIELDNUM(example,-,amp)} returns 2.</para>
		</description>
	</function>
	<function name="LISTFILTER" language="en_US">
		<synopsis>Remove an item from a list, by name.</synopsis>
		<syntax>
			<parameter name="varname" required="true" />
			<parameter name="delim" required="true" default="," />
			<parameter name="value" required="true" />
		</syntax>
		<description>
			<para>Remove <replaceable>value</replaceable> from the list contained in the <replaceable>varname</replaceable>
			variable, where the list delimiter is specified by the <replaceable>delim</replaceable> parameter.  This is
			very useful for removing a single channel name from a list of channels, for example.</para>
		</description>
	</function>
	<function name="FILTER" language="en_US">
		<synopsis>
			Filter the string to include only the allowed characters
		</synopsis>
		<syntax>
			<parameter name="allowed-chars" required="true" />
			<parameter name="string" required="true" />
		</syntax>
		<description>
			<para>Permits all characters listed in <replaceable>allowed-chars</replaceable>, 
			filtering all others outs. In addition to literally listing the characters, 
			you may also use ranges of characters (delimited by a <literal>-</literal></para>
			<para>Hexadecimal characters started with a <literal>\x</literal>(i.e. \x20)</para>
			<para>Octal characters started with a <literal>\0</literal> (i.e. \040)</para>
			<para>Also <literal>\t</literal>,<literal>\n</literal> and <literal>\r</literal> are recognized.</para> 
			<note><para>If you want the <literal>-</literal> character it needs to be prefixed with a 
			<literal>\</literal></para></note>
		</description>
	</function>
	<function name="REPLACE" language="en_US">
		<synopsis>
			Replace a set of characters in a given string with another character.
		</synopsis>
		<syntax>
			<parameter name="varname" required="true" />
			<parameter name="find-chars" required="true" />
			<parameter name="replace-char" required="false" />
		</syntax>
		<description>
			<para>Iterates through a string replacing all the <replaceable>find-chars</replaceable> with
			<replaceable>replace-char</replaceable>.  <replaceable>replace-char</replaceable> may be either
			empty or contain one character.  If empty, all <replaceable>find-chars</replaceable> will be
			deleted from the output.</para>
			<note><para>The replacement only occurs in the output.  The original variable is not
			altered.</para></note>
		</description>
	</function>
	<function name="PASSTHRU" language="en_US">
		<synopsis>
			Pass the given argument back as a value.
		</synopsis>
		<syntax>
			<parameter name="string" required="false" />
		</syntax>
		<description>
			<para>Literally returns the given <replaceable>string</replaceable>.  The intent is to permit
			other dialplan functions which take a variable name as an argument to be able to take a literal
			string, instead.</para>
		</description>
	</function>
	<function name="REGEX" language="en_US">
		<synopsis>
			Check string against a regular expression.
		</synopsis>
		<syntax argsep=" ">
			<parameter name="&quot;regular expression&quot;" required="true" />
			<parameter name="string" required="true" />
		</syntax>
		<description>
			<para>Return <literal>1</literal> on regular expression match or <literal>0</literal> otherwise</para>
			<para>Please note that the space following the double quotes separating the 
			regex from the data is optional and if present, is skipped. If a space is 
			desired at the beginning of the data, then put two spaces there; the second 
			will not be skipped.</para>
		</description>
	</function>
	<application name="ClearHash" language="en_US">
		<synopsis>
			Clear the keys from a specified hashname.
		</synopsis>
		<syntax>
			<parameter name="hashname" required="true" />
		</syntax>
		<description>
			<para>Clears all keys out of the specified <replaceable>hashname</replaceable>.</para>
		</description>
	</application>
	<function name="HASH" language="en_US">
		<synopsis>
			Implementation of a dialplan associative array
		</synopsis>
		<syntax>
			<parameter name="hashname" required="true" />
			<parameter name="hashkey" />
		</syntax>
		<description>
			<para>In two arguments mode, gets and sets values to corresponding keys within
			a named associative array. The single-argument mode will only work when assigned
			to from a function defined by func_odbc</para>
		</description>
	</function>
	<function name="HASHKEYS" language="en_US">
		<synopsis>
			Retrieve the keys of the HASH() function.
		</synopsis>
		<syntax>
			<parameter name="hashname" required="true" />
		</syntax>
		<description>
			<para>Returns a comma-delimited list of the current keys of the associative array 
			defined by the HASH() function. Note that if you iterate over the keys of 
			the result, adding keys during iteration will cause the result of the HASHKEYS()
			function to change.</para>
		</description>
	</function>
	<function name="KEYPADHASH" language="en_US">
		<synopsis>
			Hash the letters in string into equivalent keypad numbers.
		</synopsis>
		<syntax>
			<parameter name="string" required="true" />
		</syntax>
		<description>
			<para>Example: ${KEYPADHASH(Les)} returns "537"</para>
		</description>
	</function>
	<function name="ARRAY" language="en_US">
		<synopsis>
			Allows setting multiple variables at once.
		</synopsis>
		<syntax>
			<parameter name="var1" required="true" />
			<parameter name="var2" required="false" multiple="true" />
			<parameter name="varN" required="false" />
		</syntax>
		<description>
			<para>The comma-delimited list passed as a value to which the function is set will 
			be interpreted as a set of values to which the comma-delimited list of 
			variable names in the argument should be set.</para>
			<para>Example: Set(ARRAY(var1,var2)=1,2) will set var1 to 1 and var2 to 2</para>
		</description>
	</function>
	<function name="STRPTIME" language="en_US">
		<synopsis>
			Returns the epoch of the arbitrary date/time string structured as described by the format.
		</synopsis>
		<syntax>
			<parameter name="datetime" required="true" />
			<parameter name="timezone" required="true" />
			<parameter name="format" required="true" />
		</syntax>
		<description>
			<para>This is useful for converting a date into <literal>EPOCH</literal> time, 
			possibly to pass to an application like SayUnixTime or to calculate the difference
			between the two date strings</para>
			<para>Example: ${STRPTIME(2006-03-01 07:30:35,America/Chicago,%Y-%m-%d %H:%M:%S)} returns 1141219835</para>
		</description>
	</function>
	<function name="STRFTIME" language="en_US">
		<synopsis>
			Returns the current date/time in the specified format.
		</synopsis>
		<syntax>
			<parameter name="epoch" />
			<parameter name="timezone" />
			<parameter name="format" />
		</syntax>
		<description>
			<para>STRFTIME supports all of the same formats as the underlying C function
			<emphasis>strftime(3)</emphasis>.
			It also supports the following format: <literal>%[n]q</literal> - fractions of a second,
			with leading zeros.</para>
			<para>Example: <literal>%3q</literal> will give milliseconds and <literal>%1q</literal>
			will give tenths of a second. The default is set at milliseconds (n=3).
			The common case is to use it in combination with %S, as in <literal>%S.%3q</literal>.</para>
		</description>
		<see-also>
			<ref type="manpage">strftime(3)</ref>
		</see-also>
	</function>
	<function name="EVAL" language="en_US">
		<synopsis>
			Evaluate stored variables
		</synopsis>
		<syntax>
			<parameter name="variable" required="true" />
		</syntax>
		<description>
			<para>Using EVAL basically causes a string to be evaluated twice.
			When a variable or expression is in the dialplan, it will be
			evaluated at runtime. However, if the results of the evaluation
			is in fact another variable or expression, using EVAL will have it
			evaluated a second time.</para>
			<para>Example: If the <variable>MYVAR</variable> contains
			<variable>OTHERVAR</variable>, then the result of ${EVAL(
			<variable>MYVAR</variable>)} in the dialplan will be the
			contents of <variable>OTHERVAR</variable>. Normally just
			putting <variable>MYVAR</variable> in the dialplan the result
			would be <variable>OTHERVAR</variable>.</para>
		</description>
	</function>
	<function name="TOUPPER" language="en_US">
		<synopsis>
			Convert string to all uppercase letters.
		</synopsis>
		<syntax>
			<parameter name="string" required="true" />
		</syntax>
		<description>
			<para>Example: ${TOUPPER(Example)} returns "EXAMPLE"</para>
		</description>
	</function>
	<function name="TOLOWER" language="en_US">
		<synopsis>
			Convert string to all lowercase letters.
		</synopsis>
		<syntax>
			<parameter name="string" required="true" />
		</syntax>
		<description>
			<para>Example: ${TOLOWER(Example)} returns "example"</para>
		</description>
	</function>
	<function name="LEN" language="en_US">
		<synopsis>
			Return the length of the string given.
		</synopsis>
		<syntax>
			<parameter name="string" required="true" />
		</syntax>
		<description>
			<para>Example: ${LEN(example)} returns 7</para>
		</description>
	</function>
	<function name="QUOTE" language="en_US">
		<synopsis>
			Quotes a given string, escaping embedded quotes as necessary
		</synopsis>
		<syntax>
			<parameter name="string" required="true" />
		</syntax>
		<description>
			<para>Example: ${QUOTE(ab"c"de)} will return "abcde"</para>
		</description>
	</function>
	<function name="CSV_QUOTE" language="en_US">
		<synopsis>
			Quotes a given string for use in a CSV file, escaping embedded quotes as necessary
		</synopsis>
		<syntax>
			<parameter name="string" required="true" />
		</syntax>
		<description>
			<para>Example: ${CSV_QUOTE("a,b" 123)} will return """a,b"" 123"</para>
		</description>
	</function>
	<function name="SHIFT" language="en_US">
		<synopsis>
			Removes and returns the first item off of a variable containing delimited text
		</synopsis>
		<syntax>
			<parameter name="varname" required="true" />
			<parameter name="delimiter" required="false" default="," />
		</syntax>
		<description>
			<para>Example:</para>
			<para>exten => s,1,Set(array=one,two,three)</para>
			<para>exten => s,n,While($["${SET(var=${SHIFT(array)})}" != ""])</para>
			<para>exten => s,n,NoOp(var is ${var})</para>
			<para>exten => s,n,EndWhile</para>
			<para>This would iterate over each value in array, left to right, and
				would result in NoOp(var is one), NoOp(var is two), and
				NoOp(var is three) being executed.
			</para>
		</description>
	</function>	
	<function name="POP" language="en_US">
		<synopsis>
			Removes and returns the last item off of a variable containing delimited text
		</synopsis>
		<syntax>
			<parameter name="varname" required="true" />
			<parameter name="delimiter" required="false" default="," />
		</syntax>
		<description>
			<para>Example:</para>
			<para>exten => s,1,Set(array=one,two,three)</para>
			<para>exten => s,n,While($["${SET(var=${POP(array)})}" != ""])</para>
			<para>exten => s,n,NoOp(var is ${var})</para>
			<para>exten => s,n,EndWhile</para>
			<para>This would iterate over each value in array, right to left, and
				would result in NoOp(var is three), NoOp(var is two), and
				NoOp(var is one) being executed.
			</para>
		</description>
	</function>	
	<function name="PUSH" language="en_US">
		<synopsis>
			Appends one or more values to the end of a variable containing delimited text
		</synopsis>
		<syntax>
			<parameter name="varname" required="true" />
			<parameter name="delimiter" required="false" default="," />
		</syntax>
		<description>
			<para>Example: Set(PUSH(array)=one,two,three) would append one,
				two, and three to the end of the values stored in the variable
				"array".
			</para>
		</description>
	</function>
	<function name="UNSHIFT" language="en_US">
		<synopsis>
			Inserts one or more values to the beginning of a variable containing delimited text
		</synopsis>
		<syntax>
			<parameter name="varname" required="true" />
			<parameter name="delimiter" required="false" default="," />
		</syntax>
		<description>
			<para>Example: Set(UNSHIFT(array)=one,two,three) would insert one,
				two, and three before the values stored in the variable
				"array".
			</para>
		</description>
	</function>
	<function name="SYSINFO" language="en_US">
		<synopsis>
			Returns system information specified by parameter.
		</synopsis>
		<syntax>
			<parameter name="parameter" required="true">
				<enumlist>
					<enum name="loadavg">
						<para>System load average from past minute.</para>
					</enum>
					<enum name="numcalls">
						<para>Number of active calls currently in progress.</para>
					</enum>
					<enum name="uptime">
						<para>System uptime in hours.</para>
						<note><para>This parameter is dependant upon operating system.</para></note>
					</enum>
					<enum name="totalram">
						<para>Total usable main memory size in KiB.</para>
						<note><para>This parameter is dependant upon operating system.</para></note>
					</enum>
					<enum name="freeram">
						<para>Available memory size in KiB.</para>
						<note><para>This parameter is dependant upon operating system.</para></note>
					</enum>
					<enum name="bufferram">
						<para>Memory used by buffers in KiB.</para>
						<note><para>This parameter is dependant upon operating system.</para></note>
					</enum>
					<enum name="totalswap">
						<para>Total swap space still available in KiB.</para>
						<note><para>This parameter is dependant upon operating system.</para></note>
					</enum>
					<enum name="freeswap">
						<para>Free swap space still available in KiB.</para>
						<note><para>This parameter is dependant upon operating system.</para></note>
					</enum>
					<enum name="numprocs">
						<para>Number of current processes.</para>
						<note><para>This parameter is dependant upon operating system.</para></note>
					</enum>
				</enumlist>
			</parameter>
		</syntax>
		<description>
			<para>Returns information from a given parameter.</para>
		</description>
	</function>
	<function name="TIMEOUT" language="en_US">
		<synopsis>
			Gets or sets timeouts on the channel. Timeout values are in seconds.
		</synopsis>
		<syntax>
			<parameter name="timeouttype" required="true">
				<para>The timeout that will be manipulated. The possible timeout types
				are: <literal>absolute</literal>, <literal>digit</literal> or 
				<literal>response</literal></para>
			</parameter>
		</syntax>
		<description>
			<para>The timeouts that can be manipulated are:</para>
			<para><literal>absolute</literal>: The absolute maximum amount of time permitted for a call.
			Setting of 0 disables the timeout.</para>
			<para><literal>digit</literal>: The maximum amount of time permitted between digits when the
			user is typing in an extension.  When this timeout expires,
			after the user has started to type in an extension, the
			extension will be considered complete, and will be
			interpreted.  Note that if an extension typed in is valid,
			it will not have to timeout to be tested, so typically at
			the expiry of this timeout, the extension will be considered
			invalid (and thus control would be passed to the <literal>i</literal>
			extension, or if it doesn't exist the call would be
			terminated).  The default timeout is 5 seconds.</para>
			<para><literal>response</literal>: The maximum amount of time permitted after falling through a
			series of priorities for a channel in which the user may
			begin typing an extension.  If the user does not type an
			extension in this amount of time, control will pass to the
			<literal>t</literal> extension if it exists, and if not the call would be
			terminated.  The default timeout is 10 seconds.</para>
		</description>
	</function>
	<function name="URIENCODE" language="en_US">
		<synopsis>
			Encodes a string to URI-safe encoding according to RFC 2396.
		</synopsis>
		<syntax>
			<parameter name="data" required="true">
				<para>Input string to be encoded.</para>
			</parameter>
		</syntax>
		<description>
			<para>Returns the encoded string defined in <replaceable>data</replaceable>.</para>
		</description>
	</function>
	<function name="URIDECODE" language="en_US">
		<synopsis>
			Decodes a URI-encoded string according to RFC 2396.
		</synopsis>
		<syntax>
			<parameter name="data" required="true">
				<para>Input string to be decoded.</para>
			</parameter>
		</syntax>
		<description>
			<para>Returns the decoded URI-encoded <replaceable>data</replaceable> string.</para>
		</description>
	</function>
	<function name="VERSION" language="en_US">
		<synopsis>
			Return the Version info for this Asterisk.
		</synopsis>
		<syntax>
			<parameter name="info">
				<para>The possible values are:</para>
				<enumlist>
					<enum name="ASTERISK_VERSION_NUM">
						<para>A string of digits is returned (right now fixed at 999999).</para>
					</enum>
					<enum name="BUILD_USER">
						<para>The string representing the user's name whose account
						was used to configure Asterisk, is returned.</para>
					</enum>
					<enum name="BUILD_HOSTNAME">
						<para>The string representing the name of the host on which Asterisk was configured, is returned.</para>
					</enum>
					<enum name="BUILD_MACHINE">
						<para>The string representing the type of machine on which Asterisk was configured, is returned.</para>
					</enum>
					<enum name="BUILD_OS">
						<para>The string representing the OS of the machine on which Asterisk was configured, is returned.</para>
					</enum>
					<enum name="BUILD_DATE">
						<para>The string representing the date on which Asterisk was configured, is returned.</para>
					</enum>
					<enum name="BUILD_KERNEL">
						<para>The string representing the kernel version of the machine on which Asterisk
						was configured, is returned.</para>
					</enum>
				</enumlist>
			</parameter>
		</syntax>
		<description>
			<para>If there are no arguments, return the version of Asterisk in this format: SVN-branch-1.4-r44830M</para>
			<para>Example:  Set(junky=${VERSION()};</para>
			<para>Sets junky to the string <literal>SVN-branch-1.6-r74830M</literal>, or possibly, <literal>SVN-trunk-r45126M</literal>.</para>
		</description>
	</function>
	<function name="VMCOUNT" language="en_US">
		<synopsis>
			Count the voicemails in a specified mailbox.
		</synopsis>
		<syntax>
			<parameter name="vmbox" required="true" argsep="@">
				<argument name="vmbox" required="true" />
				<argument name="context" required="false">
					<para>If not specified, defaults to <literal>default</literal>.</para>
				</argument>
			</parameter>
			<parameter name="folder" required="false">
				<para>If not specified, defaults to <literal>INBOX</literal></para>
			</parameter>
		</syntax>
		<description>
			<para>Count the number of voicemails in a specified mailbox, you could also specify 
			the <replaceable>context</replaceable> and the mailbox <replaceable>folder</replaceable>.</para>
			<para>Example: <literal>exten => s,1,Set(foo=${VMCOUNT(125)})</literal></para>
		</description>
	</function>
	<function name="VOLUME" language="en_US">
		<synopsis>
			Set the TX or RX volume of a channel.
		</synopsis>
		<syntax>
			<parameter name="direction" required="true">
				<para>Must be <literal>TX</literal> or <literal>RX</literal>.</para>
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="p">
						<para>Enable DTMF volume control</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>The VOLUME function can be used to increase or decrease the <literal>tx</literal> or
			<literal>rx</literal> gain of any channel.</para>
			<para>For example:</para>
			<para>Set(VOLUME(TX)=3)</para>
			<para>Set(VOLUME(RX)=2)</para>
			<para>Set(VOLUME(TX,p)=3)</para>
			<para>Set(VOLUME(RX,p)=3></para>
		</description>
	</function>
	<application name="CallCompletionRequest" language="en_US">
		<synopsis>
			Request call completion service for previous call
		</synopsis>
		<syntax />
		<description>
			<para>Request call completion service for a previously failed
			call attempt.</para>
			<para>This application sets the following channel variables:</para>
			<variablelist>
				<variable name="CC_REQUEST_RESULT">
					<para>This is the returned status of the request.</para>
					<value name="SUCCESS" />
					<value name="FAIL" />
				</variable>
				<variable name="CC_REQUEST_REASON">
					<para>This is the reason the request failed.</para>
					<value name="NO_CORE_INSTANCE" />
					<value name="NOT_GENERIC" />
					<value name="TOO_MANY_REQUESTS" />
					<value name="UNSPECIFIED" />
				</variable>
			</variablelist>
		</description>
	</application>
	<application name="CallCompletionCancel" language="en_US">
		<synopsis>
			Cancel call completion service
		</synopsis>
		<syntax />
		<description>
			<para>Cancel a Call Completion Request.</para>
			<para>This application sets the following channel variables:</para>
			<variablelist>
				<variable name="CC_CANCEL_RESULT">
					<para>This is the returned status of the cancel.</para>
					<value name="SUCCESS" />
					<value name="FAIL" />
				</variable>
				<variable name="CC_CANCEL_REASON">
					<para>This is the reason the cancel failed.</para>
					<value name="NO_CORE_INSTANCE" />
					<value name="NOT_GENERIC" />
					<value name="UNSPECIFIED" />
				</variable>
			</variablelist>
		</description>
	</application>
	<manager name="DataGet" language="en_US">
		<synopsis>
			Retrieve the data api tree.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Path" required="true" />
			<parameter name="Search" />
			<parameter name="Filter" />
		</syntax>
		<description>
			<para>Retrieve the data api tree.</para>
		</description>
	</manager>
	<manager name="DBGet" language="en_US">
		<synopsis>
			Get DB Entry.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Family" required="true" />
			<parameter name="Key" required="true" />
		</syntax>
		<description>
		</description>
	</manager>
	<manager name="DBPut" language="en_US">
		<synopsis>
			Put DB entry.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Family" required="true" />
			<parameter name="Key" required="true" />
			<parameter name="Val" />
		</syntax>
		<description>
		</description>
	</manager>
	<manager name="DBDel" language="en_US">
		<synopsis>
			Delete DB entry.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Family" required="true" />
			<parameter name="Key" required="true" />
		</syntax>
		<description>
		</description>
	</manager>
	<manager name="DBDelTree" language="en_US">
		<synopsis>
			Delete DB Tree.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Family" required="true" />
			<parameter name="Key" />
		</syntax>
		<description>
		</description>
	</manager>
	<application name="Bridge" language="en_US">
		<synopsis>
			Bridge two channels.
		</synopsis>
		<syntax>
			<parameter name="channel" required="true">
				<para>The current channel is bridged to the specified <replaceable>channel</replaceable>.</para>
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="p">
						<para>Play a courtesy tone to <replaceable>channel</replaceable>.</para>
					</option>
					<option name="h">
						<para>Allow the called party to hang up by sending the
						<replaceable>*</replaceable> DTMF digit.</para>
					</option>
					<option name="H">
						<para>Allow the calling party to hang up by pressing the
						<replaceable>*</replaceable> DTMF digit.</para>
					</option>
					<option name="k">
						<para>Allow the called party to enable parking of the call by sending
						the DTMF sequence defined for call parking in <filename>features.conf</filename>.</para>
					</option>
					<option name="K">
						<para>Allow the calling party to enable parking of the call by sending
						 the DTMF sequence defined for call parking in <filename>features.conf</filename>.</para>
					</option>
					<option name="L(x[:y][:z])">
						<para>Limit the call to <replaceable>x</replaceable> ms. Play a warning
						when <replaceable>y</replaceable> ms are left. Repeat the warning every
						<replaceable>z</replaceable> ms. The following special variables can be
						used with this option:</para>
						<variablelist>
							<variable name="LIMIT_PLAYAUDIO_CALLER">
								<para>Play sounds to the caller. yes|no (default yes)</para>
							</variable>
							<variable name="LIMIT_PLAYAUDIO_CALLEE">   
								<para>Play sounds to the callee. yes|no</para>
							</variable>
							<variable name="LIMIT_TIMEOUT_FILE">
								<para>File to play when time is up.</para>
							</variable>
							<variable name="LIMIT_CONNECT_FILE">
								<para>File to play when call begins.</para>
							</variable>
							<variable name="LIMIT_WARNING_FILE">
								<para>File to play as warning if <replaceable>y</replaceable> is
								defined. The default is to say the time remaining.</para>
							</variable>
						</variablelist>
					</option>
					<option name="S(x)">
						<para>Hang up the call after <replaceable>x</replaceable> seconds *after* the called party has answered the call.</para>
					</option>
					<option name="t">
						<para>Allow the called party to transfer the calling party by sending the
						DTMF sequence defined in <filename>features.conf</filename>.</para>
					</option>
					<option name="T">
						<para>Allow the calling party to transfer the called party by sending the
						DTMF sequence defined in <filename>features.conf</filename>.</para>
					</option>
					<option name="w">
						<para>Allow the called party to enable recording of the call by sending
						the DTMF sequence defined for one-touch recording in <filename>features.conf</filename>.</para>
					</option>
					<option name="W">
						<para>Allow the calling party to enable recording of the call by sending
						the DTMF sequence defined for one-touch recording in <filename>features.conf</filename>.</para>
					</option>
					<option name="x">
						<para>Cause the called party to be hung up after the bridge, instead of being
						restarted in the dialplan.</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>Allows the ability to bridge two channels via the dialplan.</para>
			<para>This application sets the following channel variable upon completion:</para>
			<variablelist>
				<variable name="BRIDGERESULT">
					<para>The result of the bridge attempt as a text string.</para>
					<value name="SUCCESS" />
					<value name="FAILURE" />
					<value name="LOOP" />
					<value name="NONEXISTENT" />
					<value name="INCOMPATIBLE" />
				</variable>
			</variablelist>
		</description>
	</application>
	<application name="ParkedCall" language="en_US">
		<synopsis>
			Retrieve a parked call.
		</synopsis>
		<syntax>
			<parameter name="exten">
				<para>Parking space extension to retrieve a parked call.
				If not provided then the first available parked call in the
				parking lot will be retrieved.</para>
			</parameter>
			<parameter name="parking_lot_name">
				<para>Specify from which parking lot to retrieve a parked call.</para>
				<para>The parking lot used is selected in the following order:</para>
				<para>1) parking_lot_name option</para>
				<para>2) <variable>PARKINGLOT</variable> variable</para>
				<para>3) <literal>CHANNEL(parkinglot)</literal> function
				(Possibly preset by the channel driver.)</para>
				<para>4) Default parking lot.</para>
			</parameter>
		</syntax>
		<description>
			<para>Used to retrieve a parked call from a parking lot.</para>
			<note>
				<para>Parking lots automatically create and manage dialplan extensions in
				the parking lot context.  You do not need to explicitly use this
				application in your dialplan.  Instead, all you should do is include the
				parking lot context in your dialplan.</para>
			</note>
		</description>
		<see-also>
			<ref type="application">Park</ref>
			<ref type="application">ParkAndAnnounce</ref>
		</see-also>
	</application>
	<application name="Park" language="en_US">
		<synopsis>
			Park yourself.
		</synopsis>
		<syntax>
			<parameter name="timeout">
				<para>A custom parking timeout for this parked call. Value in milliseconds.</para>
			</parameter>
			<parameter name="return_context">
				<para>The context to return the call to after it times out.</para>
			</parameter>
			<parameter name="return_exten">
				<para>The extension to return the call to after it times out.</para>
			</parameter>
			<parameter name="return_priority">
				<para>The priority to return the call to after it times out.</para>
			</parameter>
			<parameter name="options">
				<para>A list of options for this parked call.</para>
				<optionlist>
					<option name="r">
						<para>Send ringing instead of MOH to the parked call.</para>
					</option>
					<option name="R">
						<para>Randomize the selection of a parking space.</para>
					</option>
					<option name="s">
						<para>Silence announcement of the parking space number.</para>
					</option>
				</optionlist>
			</parameter>
			<parameter name="parking_lot_name">
				<para>Specify in which parking lot to park a call.</para>
				<para>The parking lot used is selected in the following order:</para>
				<para>1) parking_lot_name option</para>
				<para>2) <variable>PARKINGLOT</variable> variable</para>
				<para>3) <literal>CHANNEL(parkinglot)</literal> function
				(Possibly preset by the channel driver.)</para>
				<para>4) Default parking lot.</para>
			</parameter>
		</syntax>
		<description>
			<para>Used to park yourself (typically in combination with a supervised
			transfer to know the parking space).</para>
			<para>If you set the <variable>PARKINGEXTEN</variable> variable to a
			parking space extension in the parking lot, Park() will attempt to park the call
			on that extension.  If the extension is already is in use then execution
			will continue at the next priority.</para>
			<para>If the <literal>parkeddynamic</literal> option is enabled in <filename>features.conf</filename>
			the following variables can be used to dynamically create new parking lots.</para>
			<para>If you set the <variable>PARKINGDYNAMIC</variable> variable and this parking lot
			exists then it will be used as a template for the newly created dynamic lot.  Otherwise,
			the default parking lot will be used.</para>
			<para>If you set the <variable>PARKINGDYNCONTEXT</variable> variable then the newly created dynamic
			parking lot will use this context.</para>
			<para>If you set the <variable>PARKINGDYNEXTEN</variable> variable then the newly created dynamic
			parking lot will use this extension to access the parking lot.</para>
			<para>If you set the <variable>PARKINGDYNPOS</variable> variable then the newly created dynamic parking lot
			will use those parking postitions.</para>
			<note>
				<para>This application must be used as the first extension priority
				to be recognized as a parking access extension.  DTMF transfers
				and some channel drivers need this distinction to operate properly.
				The parking access extension in this case is treated like a dialplan
				hint.</para>
			</note>
			<note>
				<para>Parking lots automatically create and manage dialplan extensions in
				the parking lot context.  You do not need to explicitly use this
				application in your dialplan.  Instead, all you should do is include the
				parking lot context in your dialplan.</para>
			</note>
		</description>
		<see-also>
			<ref type="application">ParkAndAnnounce</ref>
			<ref type="application">ParkedCall</ref>
		</see-also>
	</application>
	<manager name="ParkedCalls" language="en_US">
		<synopsis>
			List parked calls.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
		</syntax>
		<description>
			<para>List parked calls.</para>
		</description>
	</manager>
	<manager name="Park" language="en_US">
		<synopsis>
			Park a channel.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Channel" required="true">
				<para>Channel name to park.</para>
			</parameter>
			<parameter name="Channel2" required="true">
				<para>Channel to return to if timeout.</para>
			</parameter>
			<parameter name="Timeout">
				<para>Number of milliseconds to wait before callback.</para>
			</parameter>
			<parameter name="Parkinglot">
				<para>Specify in which parking lot to park the channel.</para>
			</parameter>
		</syntax>
		<description>
			<para>Park a channel.</para>
		</description>
	</manager>
	<manager name="Bridge" language="en_US">
		<synopsis>
			Bridge two channels already in the PBX.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Channel1" required="true">
				<para>Channel to Bridge to Channel2.</para>
			</parameter>
			<parameter name="Channel2" required="true">
				<para>Channel to Bridge to Channel1.</para>
			</parameter>
			<parameter name="Tone">
				<para>Play courtesy tone to Channel 2.</para>
				<enumlist>
					<enum name="yes" />
					<enum name="no" />
				</enumlist>
			</parameter>
		</syntax>
		<description>
			<para>Bridge together two channels already in the PBX.</para>
		</description>
	</manager>
	<manager name="Ping" language="en_US">
		<synopsis>
			Keepalive command.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
		</syntax>
		<description>
			<para>A 'Ping' action will ellicit a 'Pong' response. Used to keep the
			manager connection open.</para>
		</description>
	</manager>
	<manager name="Events" language="en_US">
		<synopsis>
			Control Event Flow.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="EventMask" required="true">
				<enumlist>
					<enum name="on">
						<para>If all events should be sent.</para>
					</enum>
					<enum name="off">
						<para>If no events should be sent.</para>
					</enum>
					<enum name="system,call,log,...">
						<para>To select which flags events should have to be sent.</para>
					</enum>
				</enumlist>
			</parameter>
		</syntax>
		<description>
			<para>Enable/Disable sending of events to this manager client.</para>
		</description>
	</manager>
	<manager name="Logoff" language="en_US">
		<synopsis>
			Logoff Manager.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
		</syntax>
		<description>
			<para>Logoff the current manager session.</para>
		</description>
	</manager>
	<manager name="Login" language="en_US">
		<synopsis>
			Login Manager.
		</synopsis>
		<syntax>
			<parameter name="ActionID">
				<para>ActionID for this transaction. Will be returned.</para>
			</parameter>
			<parameter name="Username" required="true">
				<para>Username to login with as specified in manager.conf.</para>
			</parameter>
			<parameter name="Secret">
				<para>Secret to login with as specified in manager.conf.</para>
			</parameter>
		</syntax>
		<description>
			<para>Login Manager.</para>
		</description>
	</manager>
	<manager name="Challenge" language="en_US">
		<synopsis>
			Generate Challenge for MD5 Auth.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="AuthType" required="true">
				<para>Digest algorithm to use in the challenge. Valid values are:</para>
				<enumlist>
					<enum name="MD5" />
				</enumlist>
			</parameter>
		</syntax>
		<description>
			<para>Generate a challenge for MD5 authentication.</para>
		</description>
	</manager>
	<manager name="Hangup" language="en_US">
		<synopsis>
			Hangup channel.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Channel" required="true">
				<para>The channel name to be hangup.</para>
			</parameter>
			<parameter name="Cause">
				<para>Numeric hangup cause.</para>
			</parameter>
		</syntax>
		<description>
			<para>Hangup a channel.</para>
		</description>
	</manager>
	<manager name="Status" language="en_US">
		<synopsis>
			List channel status.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Channel" required="true">
				<para>The name of the channel to query for status.</para>
			</parameter>
			<parameter name="Variables">
				<para>Comma <literal>,</literal> separated list of variable to include.</para>
			</parameter>
		</syntax>
		<description>
			<para>Will return the status information of each channel along with the
			value for the specified channel variables.</para>
		</description>
	</manager>
	<manager name="Setvar" language="en_US">
		<synopsis>
			Set a channel variable.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Channel">
				<para>Channel to set variable for.</para>
			</parameter>
			<parameter name="Variable" required="true">
				<para>Variable name.</para>
			</parameter>
			<parameter name="Value" required="true">
				<para>Variable value.</para>
			</parameter>
		</syntax>
		<description>
			<para>Set a global or local channel variable.</para>
			<note>
				<para>If a channel name is not provided then the variable is global.</para>
			</note>
		</description>
	</manager>
	<manager name="Getvar" language="en_US">
		<synopsis>
			Gets a channel variable.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Channel">
				<para>Channel to read variable from.</para>
			</parameter>
			<parameter name="Variable" required="true">
				<para>Variable name.</para>
			</parameter>
		</syntax>
		<description>
			<para>Get the value of a global or local channel variable.</para>
			<note>
				<para>If a channel name is not provided then the variable is global.</para>
			</note>
		</description>
	</manager>
	<manager name="GetConfig" language="en_US">
		<synopsis>
			Retrieve configuration.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Filename" required="true">
				<para>Configuration filename (e.g. <filename>foo.conf</filename>).</para>
			</parameter>
			<parameter name="Category">
				<para>Category in configuration file.</para>
			</parameter>
		</syntax>
		<description>
			<para>This action will dump the contents of a configuration
			file by category and contents or optionally by specified category only.</para>
		</description>
	</manager>
	<manager name="GetConfigJSON" language="en_US">
		<synopsis>
			Retrieve configuration (JSON format).
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Filename" required="true">
				<para>Configuration filename (e.g. <filename>foo.conf</filename>).</para>
			</parameter>
		</syntax>
		<description>
			<para>This action will dump the contents of a configuration file by category
			and contents in JSON format. This only makes sense to be used using rawman over
			the HTTP interface.</para>
		</description>
	</manager>
	<manager name="UpdateConfig" language="en_US">
		<synopsis>
			Update basic configuration.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="SrcFilename" required="true">
				<para>Configuration filename to read (e.g. <filename>foo.conf</filename>).</para>
			</parameter>
			<parameter name="DstFilename" required="true">
				<para>Configuration filename to write (e.g. <filename>foo.conf</filename>)</para>
			</parameter>
			<parameter name="Reload">
				<para>Whether or not a reload should take place (or name of specific module).</para>
			</parameter>
			<parameter name="Action-XXXXXX">
				<para>Action to take.</para>
				<para>X's represent 6 digit number beginning with 000000.</para>
				<enumlist>
					<enum name="NewCat" />
					<enum name="RenameCat" />
					<enum name="DelCat" />
					<enum name="EmptyCat" />
					<enum name="Update" />
					<enum name="Delete" />
					<enum name="Append" />
					<enum name="Insert" />
				</enumlist>
			</parameter>
			<parameter name="Cat-XXXXXX">
				<para>Category to operate on.</para>
				<xi:include xpointer="xpointer(/docs/manager[@name='UpdateConfig']/syntax/parameter[@name='Action-XXXXXX']/para[2])" />
			</parameter>
			<parameter name="Var-XXXXXX">
				<para>Variable to work on.</para>
				<xi:include xpointer="xpointer(/docs/manager[@name='UpdateConfig']/syntax/parameter[@name='Action-XXXXXX']/para[2])" />
			</parameter>
			<parameter name="Value-XXXXXX">
				<para>Value to work on.</para>
				<xi:include xpointer="xpointer(/docs/manager[@name='UpdateConfig']/syntax/parameter[@name='Action-XXXXXX']/para[2])" />
			</parameter>
			<parameter name="Match-XXXXXX">
				<para>Extra match required to match line.</para>
				<xi:include xpointer="xpointer(/docs/manager[@name='UpdateConfig']/syntax/parameter[@name='Action-XXXXXX']/para[2])" />
			</parameter>
			<parameter name="Line-XXXXXX">
				<para>Line in category to operate on (used with delete and insert actions).</para>
				<xi:include xpointer="xpointer(/docs/manager[@name='UpdateConfig']/syntax/parameter[@name='Action-XXXXXX']/para[2])" />
			</parameter>
		</syntax>
		<description>
			<para>This action will modify, create, or delete configuration elements
			in Asterisk configuration files.</para>
		</description>
	</manager>
	<manager name="CreateConfig" language="en_US">
		<synopsis>
			Creates an empty file in the configuration directory.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Filename" required="true">
				<para>The configuration filename to create (e.g. <filename>foo.conf</filename>).</para>
			</parameter>
		</syntax>
		<description>
			<para>This action will create an empty file in the configuration
			directory. This action is intended to be used before an UpdateConfig
			action.</para>
		</description>
	</manager>
	<manager name="ListCategories" language="en_US">
		<synopsis>
			List categories in configuration file.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Filename" required="true">
				<para>Configuration filename (e.g. <filename>foo.conf</filename>).</para>
			</parameter>
		</syntax>
		<description>
			<para>This action will dump the categories in a given file.</para>
		</description>
	</manager>
	<manager name="Redirect" language="en_US">
		<synopsis>
			Redirect (transfer) a call.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Channel" required="true">
				<para>Channel to redirect.</para>
			</parameter>
			<parameter name="ExtraChannel">
				<para>Second call leg to transfer (optional).</para>
			</parameter>
			<parameter name="Exten" required="true">
				<para>Extension to transfer to.</para>
			</parameter>
			<parameter name="ExtraExten">
				<para>Extension to transfer extrachannel to (optional).</para>
			</parameter>
			<parameter name="Context" required="true">
				<para>Context to transfer to.</para>
			</parameter>
			<parameter name="ExtraContext">
				<para>Context to transfer extrachannel to (optional).</para>
			</parameter>
			<parameter name="Priority" required="true">
				<para>Priority to transfer to.</para>
			</parameter>
			<parameter name="ExtraPriority">
				<para>Priority to transfer extrachannel to (optional).</para>
			</parameter>
		</syntax>
		<description>
			<para>Redirect (transfer) a call.</para>
		</description>
	</manager>
	<manager name="Atxfer" language="en_US">
		<synopsis>
			Attended transfer.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Channel" required="true">
				<para>Transferer's channel.</para>
			</parameter>
			<parameter name="Exten" required="true">
				<para>Extension to transfer to.</para>
			</parameter>
			<parameter name="Context" required="true">
				<para>Context to transfer to.</para>
			</parameter>
			<parameter name="Priority" required="true">
				<para>Priority to transfer to.</para>
			</parameter>
		</syntax>
		<description>
			<para>Attended transfer.</para>
		</description>
	</manager>
	<manager name="Originate" language="en_US">
		<synopsis>
			Originate a call.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Channel" required="true">
				<para>Channel name to call.</para>
			</parameter>
			<parameter name="Exten">
				<para>Extension to use (requires <literal>Context</literal> and
				<literal>Priority</literal>)</para>
			</parameter>
			<parameter name="Context">
				<para>Context to use (requires <literal>Exten</literal> and
				<literal>Priority</literal>)</para>
			</parameter>
			<parameter name="Priority">
				<para>Priority to use (requires <literal>Exten</literal> and
				<literal>Context</literal>)</para>
			</parameter>
			<parameter name="Application">
				<para>Application to execute.</para>
			</parameter>
			<parameter name="Data">
				<para>Data to use (requires <literal>Application</literal>).</para>
			</parameter>
			<parameter name="Timeout" default="30000">
				<para>How long to wait for call to be answered (in ms.).</para>
			</parameter>
			<parameter name="CallerID">
				<para>Caller ID to be set on the outgoing channel.</para>
			</parameter>
			<parameter name="Variable">
				<para>Channel variable to set, multiple Variable: headers are allowed.</para>
			</parameter>
			<parameter name="Account">
				<para>Account code.</para>
			</parameter>
			<parameter name="Async">
				<para>Set to <literal>true</literal> for fast origination.</para>
			</parameter>
			<parameter name="Codecs">
				<para>Comma-separated list of codecs to use for this call.</para>
			</parameter>
		</syntax>
		<description>
			<para>Generates an outgoing call to a
			<replaceable>Extension</replaceable>/<replaceable>Context</replaceable>/<replaceable>Priority</replaceable>
			or <replaceable>Application</replaceable>/<replaceable>Data</replaceable></para>
		</description>
	</manager>
	<manager name="Command" language="en_US">
		<synopsis>
			Execute Asterisk CLI Command.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Command" required="true">
				<para>Asterisk CLI command to run.</para>
			</parameter>
		</syntax>
		<description>
			<para>Run a CLI command.</para>
		</description>
	</manager>
	<manager name="ExtensionState" language="en_US">
		<synopsis>
			Check Extension Status.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Exten" required="true">
				<para>Extension to check state on.</para>
			</parameter>
			<parameter name="Context" required="true">
				<para>Context for extension.</para>
			</parameter>
		</syntax>
		<description>
			<para>Report the extension state for given extension. If the extension has a hint,
			will use devicestate to check the status of the device connected to the extension.</para>
			<para>Will return an <literal>Extension Status</literal> message. The response will include
			the hint for the extension and the status.</para>
		</description>
	</manager>
	<manager name="AbsoluteTimeout" language="en_US">
		<synopsis>
			Set absolute timeout.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Channel" required="true">
				<para>Channel name to hangup.</para>
			</parameter>
			<parameter name="Timeout" required="true">
				<para>Maximum duration of the call (sec).</para>
			</parameter>
		</syntax>
		<description>
			<para>Hangup a channel after a certain time. Acknowledges set time with
			<literal>Timeout Set</literal> message.</para>
		</description>
	</manager>
	<manager name="MailboxStatus" language="en_US">
		<synopsis>
			Check mailbox.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Mailbox" required="true">
				<para>Full mailbox ID <replaceable>mailbox</replaceable>@<replaceable>vm-context</replaceable>.</para>
			</parameter>
		</syntax>
		<description>
			<para>Checks a voicemail account for status.</para>
			<para>Returns number of messages.</para>
			<para>Message: Mailbox Status.</para>
			<para>Mailbox: <replaceable>mailboxid</replaceable>.</para>
			<para>Waiting: <replaceable>count</replaceable>.</para>
		</description>
	</manager>
	<manager name="MailboxCount" language="en_US">
		<synopsis>
			Check Mailbox Message Count.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Mailbox" required="true">
				<para>Full mailbox ID <replaceable>mailbox</replaceable>@<replaceable>vm-context</replaceable>.</para>
			</parameter>
		</syntax>
		<description>
			<para>Checks a voicemail account for new messages.</para>
			<para>Returns number of urgent, new and old messages.</para>
			<para>Message: Mailbox Message Count</para>
			<para>Mailbox: <replaceable>mailboxid</replaceable></para>
			<para>UrgentMessages: <replaceable>count</replaceable></para>
			<para>NewMessages: <replaceable>count</replaceable></para>
			<para>OldMessages: <replaceable>count</replaceable></para>
		</description>
	</manager>
	<manager name="ListCommands" language="en_US">
		<synopsis>
			List available manager commands.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
		</syntax>
		<description>
			<para>Returns the action name and synopsis for every action that
			is available to the user.</para>
		</description>
	</manager>
	<manager name="SendText" language="en_US">
		<synopsis>
			Send text message to channel.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Channel" required="true">
				<para>Channel to send message to.</para>
			</parameter>
			<parameter name="Message" required="true">
				<para>Message to send.</para>
			</parameter>
		</syntax>
		<description>
			<para>Sends A Text Message to a channel while in a call.</para>
		</description>
	</manager>
	<manager name="UserEvent" language="en_US">
		<synopsis>
			Send an arbitrary event.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="UserEvent" required="true">
				<para>Event string to send.</para>
			</parameter>
			<parameter name="Header1">
				<para>Content1.</para>
			</parameter>
			<parameter name="HeaderN">
				<para>ContentN.</para>
			</parameter>
		</syntax>
		<description>
			<para>Send an event to manager sessions.</para>
		</description>
	</manager>
	<manager name="WaitEvent" language="en_US">
		<synopsis>
			Wait for an event to occur.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Timeout" required="true">
				<para>Maximum time (in seconds) to wait for events, <literal>-1</literal> means forever.</para>
			</parameter>
		</syntax>
		<description>
			<para>This action will ellicit a <literal>Success</literal> response. Whenever
			a manager event is queued. Once WaitEvent has been called on an HTTP manager
			session, events will be generated and queued.</para>
		</description>
	</manager>
	<manager name="CoreSettings" language="en_US">
		<synopsis>
			Show PBX core settings (version etc).
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
		</syntax>
		<description>
			<para>Query for Core PBX settings.</para>
		</description>
	</manager>
	<manager name="CoreStatus" language="en_US">
		<synopsis>
			Show PBX core status variables.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
		</syntax>
		<description>
			<para>Query for Core PBX status.</para>
		</description>
	</manager>
	<manager name="Reload" language="en_US">
		<synopsis>
			Send a reload event.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Module">
				<para>Name of the module to reload.</para>
			</parameter>
		</syntax>
		<description>
			<para>Send a reload event.</para>
		</description>
	</manager>
	<manager name="CoreShowChannels" language="en_US">
		<synopsis>
			List currently active channels.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
		</syntax>
		<description>
			<para>List currently defined channels and some information about them.</para>
		</description>
	</manager>
	<manager name="ModuleLoad" language="en_US">
		<synopsis>
			Module management.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Module">
				<para>Asterisk module name (including .so extension) or subsystem identifier:</para>
				<enumlist>
					<enum name="cdr" />
					<enum name="enum" />
					<enum name="dnsmgr" />
					<enum name="extconfig" />
					<enum name="manager" />
					<enum name="rtp" />
					<enum name="http" />
				</enumlist>
			</parameter>
			<parameter name="LoadType" required="true">
				<para>The operation to be done on module.</para>
				<enumlist>
					<enum name="load" />
					<enum name="unload" />
					<enum name="reload" />
				</enumlist>
				<para>If no module is specified for a <literal>reload</literal> loadtype,
				all modules are reloaded.</para>
			</parameter>
		</syntax>
		<description>
			<para>Loads, unloads or reloads an Asterisk module in a running system.</para>
		</description>
	</manager>
	<manager name="ModuleCheck" language="en_US">
		<synopsis>
			Check if module is loaded.
		</synopsis>
		<syntax>
			<parameter name="Module" required="true">
				<para>Asterisk module name (not including extension).</para>
			</parameter>
		</syntax>
		<description>
			<para>Checks if Asterisk module is loaded. Will return Success/Failure.
			For success returns, the module revision number is included.</para>
		</description>
	</manager>
	<manager name="AOCMessage" language="en_US">
		<synopsis>
			Generate an Advice of Charge message on a channel.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Channel" required="true">
				<para>Channel name to generate the AOC message on.</para>
			</parameter>
			<parameter name="ChannelPrefix">
				<para>Partial channel prefix.  By using this option one can match the beginning part
				of a channel name without having to put the entire name in.  For example
				if a channel name is SIP/snom-00000001 and this value is set to SIP/snom, then
				that channel matches and the message will be sent.  Note however that only
				the first matched channel has the message sent on it. </para>
			</parameter>
			<parameter name="MsgType" required="true">
				<para>Defines what type of AOC message to create, AOC-D or AOC-E</para>
				<enumlist>
					<enum name="D" />
					<enum name="E" />
				</enumlist>
			</parameter>
			<parameter name="ChargeType" required="true">
				<para>Defines what kind of charge this message represents.</para>
				<enumlist>
					<enum name="NA" />
					<enum name="FREE" />
					<enum name="Currency" />
					<enum name="Unit" />
				</enumlist>
			</parameter>
			<parameter name="UnitAmount(0)">
				<para>This represents the amount of units charged. The ETSI AOC standard specifies that
				this value along with the optional UnitType value are entries in a list.  To accommodate this
				these values take an index value starting at 0 which can be used to generate this list of
				unit entries.  For Example, If two unit entires were required this could be achieved by setting the
				paramter UnitAmount(0)=1234 and UnitAmount(1)=5678.  Note that UnitAmount at index 0 is
				required when ChargeType=Unit, all other entries in the list are optional.
				</para>
			</parameter>
			<parameter name="UnitType(0)">
				<para>Defines the type of unit.  ETSI AOC standard specifies this as an integer
				value between 1 and 16, but this value is left open to accept any positive
				integer.  Like the UnitAmount parameter, this value represents a list entry
				and has an index parameter that starts at 0.
				</para>
			</parameter>
			<parameter name="CurrencyName">
				<para>Specifies the currency's name.  Note that this value is truncated after 10 characters.</para>
			</parameter>
			<parameter name="CurrencyAmount">
				<para>Specifies the charge unit amount as a positive integer.  This value is required
				when ChargeType==Currency.</para>
			</parameter>
			<parameter name="CurrencyMultiplier">
				<para>Specifies the currency multiplier.  This value is required when ChargeType==Currency.</para>
				<enumlist>
					<enum name="OneThousandth" />
					<enum name="OneHundredth" />
					<enum name="OneTenth" />
					<enum name="One" />
					<enum name="Ten" />
					<enum name="Hundred" />
					<enum name="Thousand" />
				</enumlist>
			</parameter>
			<parameter name="TotalType" default="Total">
				<para>Defines what kind of AOC-D total is represented.</para>
				<enumlist>
					<enum name="Total" />
					<enum name="SubTotal" />
				</enumlist>
			</parameter>
			<parameter name="AOCBillingId">
				<para>Represents a billing ID associated with an AOC-D or AOC-E message. Note
				that only the first 3 items of the enum are valid AOC-D billing IDs</para>
				<enumlist>
					<enum name="Normal" />
					<enum name="ReverseCharge" />
					<enum name="CreditCard" />
					<enum name="CallFwdUnconditional" />
					<enum name="CallFwdBusy" />
					<enum name="CallFwdNoReply" />
					<enum name="CallDeflection" />
					<enum name="CallTransfer" />
				</enumlist>
			</parameter>
			<parameter name="ChargingAssociationId">
				<para>Charging association identifier.  This is optional for AOC-E and can be
				set to any value between -32768 and 32767</para>
			</parameter>
			<parameter name="ChargingAssociationNumber">
				<para>Represents the charging association party number.  This value is optional
				for AOC-E.</para>
			</parameter>
			<parameter name="ChargingAssociationPlan">
				<para>Integer representing the charging plan associated with the ChargingAssociationNumber.
				The value is bits 7 through 1 of the Q.931 octet containing the type-of-number and
				numbering-plan-identification fields.</para>
			</parameter>
		</syntax>
		<description>
			<para>Generates an AOC-D or AOC-E message on a channel.</para>
		</description>
	</manager>
	<application name="Answer" language="en_US">
		<synopsis>
			Answer a channel if ringing.
		</synopsis>
		<syntax>
			<parameter name="delay">
				<para>Asterisk will wait this number of milliseconds before returning to
				the dialplan after answering the call.</para>
			</parameter>
			<parameter name="nocdr">
				<para>Asterisk will send an answer signal to the calling phone, but will not
				set the disposition or answer time in the CDR for this call.</para>
			</parameter>
		</syntax>
		<description>
			<para>If the call has not been answered, this application will
			answer it. Otherwise, it has no effect on the call.</para>
		</description>
		<see-also>
			<ref type="application">Hangup</ref>
		</see-also>
	</application>
	<application name="BackGround" language="en_US">
		<synopsis>
			Play an audio file while waiting for digits of an extension to go to.
		</synopsis>
		<syntax>
			<parameter name="filenames" required="true" argsep="&amp;">
				<argument name="filename1" required="true" />
				<argument name="filename2" multiple="true" />
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="s">
						<para>Causes the playback of the message to be skipped
						if the channel is not in the <literal>up</literal> state (i.e. it
						hasn't been answered yet). If this happens, the
						application will return immediately.</para>
					</option>
					<option name="n">
						<para>Don't answer the channel before playing the files.</para>
					</option>
					<option name="m">
						<para>Only break if a digit hit matches a one digit
						extension in the destination context.</para>
					</option>
				</optionlist>
			</parameter>
			<parameter name="langoverride">
				<para>Explicitly specifies which language to attempt to use for the requested sound files.</para>
			</parameter>
			<parameter name="context">
				<para>This is the dialplan context that this application will use when exiting
				to a dialed extension.</para>
			</parameter>
		</syntax>
		<description>
			<para>This application will play the given list of files <emphasis>(do not put extension)</emphasis>
			while waiting for an extension to be dialed by the calling channel. To continue waiting
			for digits after this application has finished playing files, the <literal>WaitExten</literal>
			application should be used.</para>
			<para>If one of the requested sound files does not exist, call processing will be terminated.</para>
			<para>This application sets the following channel variable upon completion:</para>
			<variablelist>
				<variable name="BACKGROUNDSTATUS">
					<para>The status of the background attempt as a text string.</para>
					<value name="SUCCESS" />
					<value name="FAILED" />
				</variable>
			</variablelist>
		</description>
		<see-also>
			<ref type="application">ControlPlayback</ref>
			<ref type="application">WaitExten</ref>
			<ref type="application">BackgroundDetect</ref>
			<ref type="function">TIMEOUT</ref>
		</see-also>
	</application>
	<application name="Busy" language="en_US">
		<synopsis>
			Indicate the Busy condition.
		</synopsis>
		<syntax>
			<parameter name="timeout">
				<para>If specified, the calling channel will be hung up after the specified number of seconds.
				Otherwise, this application will wait until the calling channel hangs up.</para>
			</parameter>
		</syntax>
		<description>
			<para>This application will indicate the busy condition to the calling channel.</para>
		</description>
		<see-also>
			<ref type="application">Congestion</ref>
			<ref type="application">Progress</ref>
			<ref type="application">Playtones</ref>
			<ref type="application">Hangup</ref>
		</see-also>
	</application>
	<application name="Congestion" language="en_US">
		<synopsis>
			Indicate the Congestion condition.
		</synopsis>
		<syntax>
			<parameter name="timeout">
				<para>If specified, the calling channel will be hung up after the specified number of seconds.
				Otherwise, this application will wait until the calling channel hangs up.</para>
			</parameter>
		</syntax>
		<description>
			<para>This application will indicate the congestion condition to the calling channel.</para>
		</description>
		<see-also>
			<ref type="application">Busy</ref>
			<ref type="application">Progress</ref>
			<ref type="application">Playtones</ref>
			<ref type="application">Hangup</ref>
		</see-also>
	</application>
	<application name="ExecIfTime" language="en_US">
		<synopsis>
			Conditional application execution based on the current time.
		</synopsis>
		<syntax argsep="?">
			<parameter name="day_condition" required="true">
				<argument name="times" required="true" />
				<argument name="weekdays" required="true" />
				<argument name="mdays" required="true" />
				<argument name="months" required="true" />
				<argument name="timezone" required="false" />
			</parameter>
			<parameter name="appname" required="true" hasparams="optional">
				<argument name="appargs" required="true" />
			</parameter>
		</syntax>
		<description>
			<para>This application will execute the specified dialplan application, with optional
			arguments, if the current time matches the given time specification.</para>
		</description>
		<see-also>
			<ref type="application">Exec</ref>
			<ref type="application">TryExec</ref>
		</see-also>
	</application>
	<application name="Goto" language="en_US">
		<synopsis>
			Jump to a particular priority, extension, or context.
		</synopsis>
		<syntax>
			<parameter name="context" />
			<parameter name="extensions" />
			<parameter name="priority" required="true" />
		</syntax>
		<description>
			<para>This application will set the current context, extension, and priority in the channel structure.
			After it completes, the pbx engine will continue dialplan execution at the specified location.
			If no specific <replaceable>extension</replaceable>, or <replaceable>extension</replaceable> and
			<replaceable>context</replaceable>, are specified, then this application will
			just set the specified <replaceable>priority</replaceable> of the current extension.</para>
			<para>At least a <replaceable>priority</replaceable> is required as an argument, or the goto will
			return a <literal>-1</literal>,	and the channel and call will be terminated.</para>
			<para>If the location that is put into the channel information is bogus, and asterisk cannot
			find that location in the dialplan, then the execution engine will try to find and execute the code in
			the <literal>i</literal> (invalid) extension in the current context. If that does not exist, it will try to execute the
			<literal>h</literal> extension. If neither the <literal>h</literal> nor <literal>i</literal> extensions
			have been defined, the channel is hung up, and the execution of instructions on the channel is terminated.
			What this means is that, for example, you specify a context that does not exist, then
			it will not be possible to find the <literal>h</literal> or <literal>i</literal> extensions,
			and the call will terminate!</para>
		</description>
		<see-also>
			<ref type="application">GotoIf</ref>
			<ref type="application">GotoIfTime</ref>
			<ref type="application">Gosub</ref>
			<ref type="application">Macro</ref>
		</see-also>
	</application>
	<application name="GotoIf" language="en_US">
		<synopsis>
			Conditional goto.
		</synopsis>
		<syntax argsep="?">
			<parameter name="condition" required="true" />
			<parameter name="destination" required="true" argsep=":">
				<argument name="labeliftrue">
					<para>Continue at <replaceable>labeliftrue</replaceable> if the condition is true.</para>
				</argument>
				<argument name="labeliffalse">
					<para>Continue at <replaceable>labeliffalse</replaceable> if the condition is false.</para>
				</argument>
			</parameter>
		</syntax>
		<description>
			<para>This application will set the current context, extension, and priority in the channel structure
			based on the evaluation of the given condition. After this application completes, the
			pbx engine will continue dialplan execution at the specified location in the dialplan.
			The labels are specified with the same syntax as used within the Goto application.
			If the label chosen by the condition is omitted, no jump is performed, and the execution passes to the
			next instruction. If the target location is bogus, and does not exist, the execution engine will try
			to find and execute the code in the <literal>i</literal> (invalid) extension in the current context.
			If that does not exist, it will try to execute the <literal>h</literal> extension.
			If neither the <literal>h</literal> nor <literal>i</literal> extensions have been defined,
			the channel is hung up, and the execution of instructions on the channel is terminated.
			Remember that this command can set the current context, and if the context specified
			does not exist, then it will not be able to find any 'h' or 'i' extensions there, and
			the channel and call will both be terminated!.</para>
		</description>
		<see-also>
			<ref type="application">Goto</ref>
			<ref type="application">GotoIfTime</ref>
			<ref type="application">GosubIf</ref>
			<ref type="application">MacroIf</ref>
		</see-also>
	</application>
	<application name="GotoIfTime" language="en_US">
		<synopsis>
			Conditional Goto based on the current time.
		</synopsis>
		<syntax argsep="?">
			<parameter name="condition" required="true">
				<argument name="times" required="true" />
				<argument name="weekdays" required="true" />
				<argument name="mdays" required="true" />
				<argument name="months" required="true" />
				<argument name="timezone" required="false" />
			</parameter>
			<parameter name="destination" required="true" argsep=":">
				<argument name="labeliftrue" />
				<argument name="labeliffalse" />
			</parameter>
		</syntax>
		<description>
			<para>This application will set the context, extension, and priority in the channel structure
			based on the evaluation of the given time specification. After this application completes,
			the pbx engine will continue dialplan execution at the specified location in the dialplan.
			If the current time is within the given time specification, the channel will continue at
			<replaceable>labeliftrue</replaceable>. Otherwise the channel will continue at <replaceable>labeliffalse</replaceable>.
			If the label chosen by the condition is omitted, no jump is performed, and execution passes to the next
			instruction. If the target jump location is bogus, the same actions would be taken as for <literal>Goto</literal>.
			Further information on the time specification can be found in examples
			illustrating how to do time-based context includes in the dialplan.</para>
		</description>
		<see-also>
			<ref type="application">GotoIf</ref>
			<ref type="function">IFTIME</ref>
			<ref type="function">TESTTIME</ref>
		</see-also>
	</application>
	<application name="ImportVar" language="en_US">
		<synopsis>
			Import a variable from a channel into a new variable.
		</synopsis>
		<syntax argsep="=">
			<parameter name="newvar" required="true" />
			<parameter name="vardata" required="true">
				<argument name="channelname" required="true" />
				<argument name="variable" required="true" />
			</parameter>
		</syntax>
		<description>
			<para>This application imports a <replaceable>variable</replaceable> from the specified
			<replaceable>channel</replaceable> (as opposed to the current one) and stores it as a variable
			(<replaceable>newvar</replaceable>) in the current channel (the channel that is calling this
			application). Variables created by this application have the same inheritance properties as those
			created with the <literal>Set</literal> application.</para>
		</description>
		<see-also>
			<ref type="application">Set</ref>
		</see-also>
	</application>
	<application name="Hangup" language="en_US">
		<synopsis>
			Hang up the calling channel.
		</synopsis>
		<syntax>
			<parameter name="causecode">
				<para>If a <replaceable>causecode</replaceable> is given the channel's
				hangup cause will be set to the given value.</para>
			</parameter>
		</syntax>
		<description>
			<para>This application will hang up the calling channel.</para>
		</description>
		<see-also>
			<ref type="application">Answer</ref>
			<ref type="application">Busy</ref>
			<ref type="application">Congestion</ref>
		</see-also>
	</application>
	<application name="Incomplete" language="en_US">
		<synopsis>
			Returns AST_PBX_INCOMPLETE value.
		</synopsis>
		<syntax>
			<parameter name="n">
				<para>If specified, then Incomplete will not attempt to answer the channel first.</para>
				<note><para>Most channel types need to be in Answer state in order to receive DTMF.</para></note>
			</parameter>
		</syntax>
		<description>
			<para>Signals the PBX routines that the previous matched extension is incomplete
			and that further input should be allowed before matching can be considered
			to be complete.  Can be used within a pattern match when certain criteria warrants
			a longer match.</para>
		</description>
	</application>
	<application name="NoOp" language="en_US">
		<synopsis>
			Do Nothing (No Operation).
		</synopsis>
		<syntax>
			<parameter name="text">
				<para>Any text provided can be viewed at the Asterisk CLI.</para>
			</parameter>
		</syntax>
		<description>
			<para>This application does nothing. However, it is useful for debugging purposes.</para>
			<para>This method can be used to see the evaluations of variables or functions without having any effect.</para>
		</description>
		<see-also>
			<ref type="application">Verbose</ref>
			<ref type="application">Log</ref>
		</see-also>
	</application>
	<application name="Proceeding" language="en_US">
		<synopsis>
			Indicate proceeding.
		</synopsis>
		<syntax />
		<description>
			<para>This application will request that a proceeding message be provided to the calling channel.</para>
		</description>
	</application>
	<application name="Progress" language="en_US">
		<synopsis>
			Indicate progress.
		</synopsis>
		<syntax />
		<description>
			<para>This application will request that in-band progress information be provided to the calling channel.</para>
		</description>
		<see-also>
			<ref type="application">Busy</ref>
			<ref type="application">Congestion</ref>
			<ref type="application">Ringing</ref>
			<ref type="application">Playtones</ref>
		</see-also>
	</application>
	<application name="RaiseException" language="en_US">
		<synopsis>
			Handle an exceptional condition.
		</synopsis>
		<syntax>
			<parameter name="reason" required="true" />
		</syntax>
		<description>
			<para>This application will jump to the <literal>e</literal> extension in the current context, setting the
			dialplan function EXCEPTION(). If the <literal>e</literal> extension does not exist, the call will hangup.</para>
		</description>
		<see-also>
			<ref type="function">Exception</ref>
		</see-also>
	</application>
	<application name="ResetCDR" language="en_US">
		<synopsis>
			Resets the Call Data Record.
		</synopsis>
		<syntax>
			<parameter name="options">
				<optionlist>
					<option name="w">
						<para>Store the current CDR record before resetting it.</para>
					</option>
					<option name="a">
						<para>Store any stacked records.</para>
					</option>
					<option name="v">
						<para>Save CDR variables.</para>
					</option>
					<option name="e">
						<para>Enable CDR only (negate effects of NoCDR).</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>This application causes the Call Data Record to be reset.</para>
		</description>
		<see-also>
			<ref type="application">ForkCDR</ref>
			<ref type="application">NoCDR</ref>
		</see-also>
	</application>
	<application name="Ringing" language="en_US">
		<synopsis>
			Indicate ringing tone.
		</synopsis>
		<syntax />
		<description>
			<para>This application will request that the channel indicate a ringing tone to the user.</para>
		</description>
		<see-also>
			<ref type="application">Busy</ref>
			<ref type="application">Congestion</ref>
			<ref type="application">Progress</ref>
			<ref type="application">Playtones</ref>
		</see-also>
	</application>
	<application name="SayAlpha" language="en_US">
		<synopsis>
			Say Alpha.
		</synopsis>
		<syntax>
			<parameter name="string" required="true" />
		</syntax>
		<description>
			<para>This application will play the sounds that correspond to the letters of the
			given <replaceable>string</replaceable>.</para>
		</description>
		<see-also>
			<ref type="application">SayDigits</ref>
			<ref type="application">SayNumber</ref>
			<ref type="application">SayPhonetic</ref>
			<ref type="function">CHANNEL</ref>
		</see-also>
	</application>
	<application name="SayDigits" language="en_US">
		<synopsis>
			Say Digits.
		</synopsis>
		<syntax>
			<parameter name="digits" required="true" />
		</syntax>
		<description>
			<para>This application will play the sounds that correspond to the digits of
			the given number. This will use the language that is currently set for the channel.</para>
		</description>
		<see-also>
			<ref type="application">SayAlpha</ref>
			<ref type="application">SayNumber</ref>
			<ref type="application">SayPhonetic</ref>
			<ref type="function">CHANNEL</ref>
		</see-also>
	</application>
	<application name="SayNumber" language="en_US">
		<synopsis>
			Say Number.
		</synopsis>
		<syntax>
			<parameter name="digits" required="true" />
			<parameter name="gender" />
		</syntax>
		<description>
			<para>This application will play the sounds that correspond to the given <replaceable>digits</replaceable>.
			Optionally, a <replaceable>gender</replaceable> may be specified. This will use the language that is currently
			set for the channel. See the LANGUAGE() function for more information on setting the language for the channel.</para>
		</description>
		<see-also>
			<ref type="application">SayAlpha</ref>
			<ref type="application">SayDigits</ref>
			<ref type="application">SayPhonetic</ref>
			<ref type="function">CHANNEL</ref>
		</see-also>
	</application>
	<application name="SayPhonetic" language="en_US">
		<synopsis>
			Say Phonetic.
		</synopsis>
		<syntax>
			<parameter name="string" required="true" />
		</syntax>
		<description>
			<para>This application will play the sounds from the phonetic alphabet that correspond to the
			letters in the given <replaceable>string</replaceable>.</para>
		</description>
		<see-also>
			<ref type="application">SayAlpha</ref>
			<ref type="application">SayDigits</ref>
			<ref type="application">SayNumber</ref>
		</see-also>
	</application>
	<application name="Set" language="en_US">
		<synopsis>
			Set channel variable or function value.
		</synopsis>
		<syntax argsep="=">
			<parameter name="name" required="true" />
			<parameter name="value" required="true" />
		</syntax>
		<description>
			<para>This function can be used to set the value of channel variables or dialplan functions.
			When setting variables, if the variable name is prefixed with <literal>_</literal>,
			the variable will be inherited into channels created from the current channel.
			If the variable name is prefixed with <literal>__</literal>, the variable will be
			inherited into channels created from the current channel and all children channels.</para>
			<note><para>If (and only if), in <filename>/etc/asterisk/asterisk.conf</filename>, you have
			a <literal>[compat]</literal> category, and you have <literal>app_set = 1.4</literal> under that, then
			the behavior of this app changes, and strips surrounding quotes from the right hand side as
			it did previously in 1.4.
			The advantages of not stripping out quoting, and not caring about the separator characters (comma and vertical bar)
			were sufficient to make these changes in 1.6. Confusion about how many backslashes would be needed to properly
			protect separators and quotes in various database access strings has been greatly
			reduced by these changes.</para></note>
		</description>
		<see-also>
			<ref type="application">MSet</ref>
			<ref type="function">GLOBAL</ref>
			<ref type="function">SET</ref>
			<ref type="function">ENV</ref>
		</see-also>
	</application>
	<application name="MSet" language="en_US">
		<synopsis>
			Set channel variable(s) or function value(s).
		</synopsis>
		<syntax>
			<parameter name="set1" required="true" argsep="=">
				<argument name="name1" required="true" />
				<argument name="value1" required="true" />
			</parameter>
			<parameter name="set2" multiple="true" argsep="=">
				<argument name="name2" required="true" />
				<argument name="value2" required="true" />
			</parameter>
		</syntax>
		<description>
			<para>This function can be used to set the value of channel variables or dialplan functions.
			When setting variables, if the variable name is prefixed with <literal>_</literal>,
			the variable will be inherited into channels created from the current channel
			If the variable name is prefixed with <literal>__</literal>, the variable will be
			inherited into channels created from the current channel and all children channels.
			MSet behaves in a similar fashion to the way Set worked in 1.2/1.4 and is thus
			prone to doing things that you may not expect. For example, it strips surrounding
			double-quotes from the right-hand side (value). If you need to put a separator
			character (comma or vert-bar), you will need to escape them by inserting a backslash
			before them. Avoid its use if possible.</para>
		</description>
		<see-also>
			<ref type="application">Set</ref>
		</see-also>
	</application>
	<application name="SetAMAFlags" language="en_US">
		<synopsis>
			Set the AMA Flags.
		</synopsis>
		<syntax>
			<parameter name="flag" />
		</syntax>
		<description>
			<para>This application will set the channel's AMA Flags for billing purposes.</para>
		</description>
		<see-also>
			<ref type="function">CDR</ref>
		</see-also>
	</application>
	<application name="Wait" language="en_US">
		<synopsis>
			Waits for some time.
		</synopsis>
		<syntax>
			<parameter name="seconds" required="true">
				<para>Can be passed with fractions of a second. For example, <literal>1.5</literal> will ask the
				application to wait for 1.5 seconds.</para>
			</parameter>
		</syntax>
		<description>
			<para>This application waits for a specified number of <replaceable>seconds</replaceable>.</para>
		</description>
	</application>
	<application name="WaitExten" language="en_US">
		<synopsis>
			Waits for an extension to be entered.
		</synopsis>
		<syntax>
			<parameter name="seconds">
				<para>Can be passed with fractions of a second. For example, <literal>1.5</literal> will ask the
				application to wait for 1.5 seconds.</para>
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="m">
						<para>Provide music on hold to the caller while waiting for an extension.</para>
						<argument name="x">
							<para>Specify the class for music on hold. <emphasis>CHANNEL(musicclass) will
							be used instead if set</emphasis></para>
						</argument>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>This application waits for the user to enter a new extension for a specified number
			of <replaceable>seconds</replaceable>.</para>
			<xi:include xpointer="xpointer(/docs/application[@name='Macro']/description/warning[2])" />
		</description>
		<see-also>
			<ref type="application">Background</ref>
			<ref type="function">TIMEOUT</ref>
		</see-also>
	</application>
	<function name="EXCEPTION" language="en_US">
		<synopsis>
			Retrieve the details of the current dialplan exception.
		</synopsis>
		<syntax>
			<parameter name="field" required="true">
				<para>The following fields are available for retrieval:</para>
				<enumlist>
					<enum name="reason">
						<para>INVALID, ERROR, RESPONSETIMEOUT, ABSOLUTETIMEOUT, or custom
						value set by the RaiseException() application</para>
					</enum>
					<enum name="context">
						<para>The context executing when the exception occurred.</para>
					</enum>
					<enum name="exten">
						<para>The extension executing when the exception occurred.</para>
					</enum>
					<enum name="priority">
						<para>The numeric priority executing when the exception occurred.</para>
					</enum>
				</enumlist>
			</parameter>
		</syntax>
		<description>
			<para>Retrieve the details (specified <replaceable>field</replaceable>) of the current dialplan exception.</para>
		</description>
		<see-also>
			<ref type="application">RaiseException</ref>
		</see-also>
	</function>
	<function name="TESTTIME" language="en_US">
		<synopsis>
			Sets a time to be used with the channel to test logical conditions.
		</synopsis>
		<syntax>
			<parameter name="date" required="true" argsep=" ">
				<para>Date in ISO 8601 format</para>
			</parameter>
			<parameter name="time" required="true" argsep=" ">
				<para>Time in HH:MM:SS format (24-hour time)</para>
			</parameter>
			<parameter name="zone" required="false">
				<para>Timezone name</para>
			</parameter>
		</syntax>
		<description>
			<para>To test dialplan timing conditions at times other than the current time, use
			this function to set an alternate date and time.  For example, you may wish to evaluate
			whether a location will correctly identify to callers that the area is closed on Christmas
			Day, when Christmas would otherwise fall on a day when the office is normally open.</para>
		</description>
		<see-also>
			<ref type="application">GotoIfTime</ref>
		</see-also>
	</function>
	<manager name="ShowDialPlan" language="en_US">
		<synopsis>
			Show dialplan contexts and extensions
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Extension">
				<para>Show a specific extension.</para>
			</parameter>
			<parameter name="Context">
				<para>Show a specific context.</para>
			</parameter>
		</syntax>
		<description>
			<para>Show dialplan contexts and extensions. Be aware that showing the full dialplan
			may take a lot of capacity.</para>
		</description>
	</manager>
	<agi name="answer" language="en_US">
		<synopsis>
			Answer channel
		</synopsis>
		<syntax />
		<description>
			<para>Answers channel if not already in answer state. Returns <literal>-1</literal> on
			channel failure, or <literal>0</literal> if successful.</para>
		</description>
		<see-also>
			<ref type="agi">hangup</ref>
		</see-also>
	</agi>
	<agi name="asyncagi break" language="en_US">
		<synopsis>
			Interrupts Async AGI
		</synopsis>
		<syntax />
		<description>
			<para>Interrupts expected flow of Async AGI commands and returns control to previous source
			(typically, the PBX dialplan).</para>
		</description>
		<see-also>
			<ref type="agi">hangup</ref>
		</see-also>
	</agi>
	<agi name="channel status" language="en_US">
		<synopsis>
			Returns status of the connected channel.
		</synopsis>
		<syntax>
			<parameter name="channelname" />
		</syntax>
		<description>
			<para>Returns the status of the specified <replaceable>channelname</replaceable>.
			If no channel name is given then returns the status of the current channel.</para>
			<para>Return values:</para>
			<enumlist>
				<enum name="0">
					<para>Channel is down and available.</para>
				</enum>
				<enum name="1">
					<para>Channel is down, but reserved.</para>
				</enum>
				<enum name="2">
					<para>Channel is off hook.</para>
				</enum>
				<enum name="3">
					<para>Digits (or equivalent) have been dialed.</para>
				</enum>
				<enum name="4">
					<para>Line is ringing.</para>
				</enum>
				<enum name="5">
					<para>Remote end is ringing.</para>
				</enum>
				<enum name="6">
					<para>Line is up.</para>
				</enum>
				<enum name="7">
					<para>Line is busy.</para>
				</enum>
			</enumlist>
		</description>
	</agi>
	<agi name="control stream file" language="en_US">
		<synopsis>
			Sends audio file on channel and allows the listener to control the stream.
		</synopsis>
		<syntax>
			<parameter name="filename" required="true">
				<para>The file extension must not be included in the filename.</para>
			</parameter>
			<parameter name="escape_digits" required="true" />
			<parameter name="skipms" />
			<parameter name="ffchar">
				<para>Defaults to <literal>*</literal></para>
			</parameter>
			<parameter name="rewchr">
				<para>Defaults to <literal>#</literal></para>
			</parameter>
			<parameter name="pausechr" />
		</syntax>
		<description>
			<para>Send the given file, allowing playback to be controlled by the given
			digits, if any. Use double quotes for the digits if you wish none to be
			permitted. Returns <literal>0</literal> if playback completes without a digit
			being pressed, or the ASCII numerical value of the digit if one was pressed,
			or <literal>-1</literal> on error or if the channel was disconnected.</para>
		</description>
	</agi>
	<agi name="database del" language="en_US">
		<synopsis>
			Removes database key/value
		</synopsis>
		<syntax>
			<parameter name="family" required="true" />
			<parameter name="key" required="true" />
		</syntax>
		<description>
			<para>Deletes an entry in the Asterisk database for a given
			<replaceable>family</replaceable> and <replaceable>key</replaceable>.</para>
			<para>Returns <literal>1</literal> if successful, <literal>0</literal>
			otherwise.</para>
		</description>
	</agi>
	<agi name="database deltree" language="en_US">
		<synopsis>
			Removes database keytree/value
		</synopsis>
		<syntax>
			<parameter name="family" required="true" />
			<parameter name="keytree" />
		</syntax>
		<description>
			<para>Deletes a <replaceable>family</replaceable> or specific <replaceable>keytree</replaceable>
			within a <replaceable>family</replaceable> in the Asterisk database.</para>
			<para>Returns <literal>1</literal> if successful, <literal>0</literal> otherwise.</para>
		</description>
	</agi>
	<agi name="database get" language="en_US">
		<synopsis>
			Gets database value
		</synopsis>
		<syntax>
			<parameter name="family" required="true" />
			<parameter name="key" required="true" />
		</syntax>
		<description>
			<para>Retrieves an entry in the Asterisk database for a given <replaceable>family</replaceable>
			and <replaceable>key</replaceable>.</para>
			<para>Returns <literal>0</literal> if <replaceable>key</replaceable> is not set.
			Returns <literal>1</literal> if <replaceable>key</replaceable> is set and returns the variable
			in parenthesis.</para>
			<para>Example return code: 200 result=1 (testvariable)</para>
		</description>
	</agi>
	<agi name="database put" language="en_US">
		<synopsis>
			Adds/updates database value
		</synopsis>
		<syntax>
			<parameter name="family" required="true" />
			<parameter name="key" required="true" />
			<parameter name="value" required="true" />
		</syntax>
		<description>
			<para>Adds or updates an entry in the Asterisk database for a given
			<replaceable>family</replaceable>, <replaceable>key</replaceable>, and
			<replaceable>value</replaceable>.</para>
			<para>Returns <literal>1</literal> if successful, <literal>0</literal> otherwise.</para>
		</description>
	</agi>
	<agi name="exec" language="en_US">
		<synopsis>
			Executes a given Application
		</synopsis>
		<syntax>
			<parameter name="application" required="true" />
			<parameter name="options" required="true" />
		</syntax>
		<description>
			<para>Executes <replaceable>application</replaceable> with given
			<replaceable>options</replaceable>.</para>
			<para>Returns whatever the <replaceable>application</replaceable> returns, or
			<literal>-2</literal> on failure to find <replaceable>application</replaceable>.</para>
		</description>
	</agi>
	<agi name="get data" language="en_US">
		<synopsis>
			Prompts for DTMF on a channel
		</synopsis>
		<syntax>
			<parameter name="file" required="true" />
			<parameter name="timeout" />
			<parameter name="maxdigits" />
		</syntax>
		<description>
			<para>Stream the given <replaceable>file</replaceable>, and receive DTMF data.</para>
			<para>Returns the digits received from the channel at the other end.</para>
		</description>
	</agi>
	<agi name="get full variable" language="en_US">
		<synopsis>
			Evaluates a channel expression
		</synopsis>
		<syntax>
			<parameter name="variablename" required="true" />
			<parameter name="channel name" />
		</syntax>
		<description>
			<para>Returns <literal>0</literal> if <replaceable>variablename</replaceable> is not set
			or channel does not exist. Returns <literal>1</literal> if <replaceable>variablename</replaceable>
			is set and returns the variable in parenthesis. Understands complex variable names and builtin
			variables, unlike GET VARIABLE.</para>
			<para>Example return code: 200 result=1 (testvariable)</para>
		</description>
	</agi>
	<agi name="get option" language="en_US">
		<synopsis>
			Stream file, prompt for DTMF, with timeout.
		</synopsis>
		<syntax>
			<parameter name="filename" required="true" />
			<parameter name="escape_digits" required="true" />
			<parameter name="timeout" />
		</syntax>
		<description>
			<para>Behaves similar to STREAM FILE but used with a timeout option.</para>
		</description>
		<see-also>
			<ref type="agi">stream file</ref>
		</see-also>
	</agi>
	<agi name="get variable" language="en_US">
		<synopsis>
			Gets a channel variable.
		</synopsis>
		<syntax>
			<parameter name="variablename" required="true" />
		</syntax>
		<description>
			<para>Returns <literal>0</literal> if <replaceable>variablename</replaceable> is not set.
			Returns <literal>1</literal> if <replaceable>variablename</replaceable> is set and returns
			the variable in parentheses.</para>
			<para>Example return code: 200 result=1 (testvariable)</para>
		</description>
	</agi>
	<agi name="hangup" language="en_US">
		<synopsis>
			Hangup a channel.
		</synopsis>
		<syntax>
			<parameter name="channelname" />
		</syntax>
		<description>
			<para>Hangs up the specified channel. If no channel name is given, hangs
			up the current channel</para>
		</description>
	</agi>
	<agi name="noop" language="en_US">
		<synopsis>
			Does nothing.
		</synopsis>
		<syntax />
		<description>
			<para>Does nothing.</para>
		</description>
	</agi>
	<agi name="receive char" language="en_US">
		<synopsis>
			Receives one character from channels supporting it.
		</synopsis>
		<syntax>
			<parameter name="timeout" required="true">
				<para>The maximum time to wait for input in milliseconds, or <literal>0</literal>
				for infinite. Most channels</para>
			</parameter>
		</syntax>
		<description>
			<para>Receives a character of text on a channel. Most channels do not support
			the reception of text. Returns the decimal value of the character
			if one is received, or <literal>0</literal> if the channel does not support
			text reception. Returns <literal>-1</literal> only on error/hangup.</para>
		</description>
	</agi>
	<agi name="receive text" language="en_US">
		<synopsis>
			Receives text from channels supporting it.
		</synopsis>
		<syntax>
			<parameter name="timeout" required="true">
				<para>The timeout to be the maximum time to wait for input in
				milliseconds, or <literal>0</literal> for infinite.</para>
			</parameter>
		</syntax>
		<description>
			<para>Receives a string of text on a channel. Most channels 
			do not support the reception of text. Returns <literal>-1</literal> for failure
			or <literal>1</literal> for success, and the string in parenthesis.</para> 
		</description>
	</agi>
	<agi name="record file" language="en_US">
		<synopsis>
			Records to a given file.
		</synopsis>
		<syntax>
			<parameter name="filename" required="true" />
			<parameter name="format" required="true" />
			<parameter name="escape_digits" required="true" />
			<parameter name="timeout" required="true" />
			<parameter name="offset samples" />
			<parameter name="BEEP" />
			<parameter name="s=silence" />
		</syntax>
		<description>
			<para>Record to a file until a given dtmf digit in the sequence is received.
			Returns <literal>-1</literal> on hangup or error.  The format will specify what kind of file
			will be recorded. The <replaceable>timeout</replaceable> is the maximum record time in
			milliseconds, or <literal>-1</literal> for no <replaceable>timeout</replaceable>.
			<replaceable>offset samples</replaceable> is optional, and, if provided, will seek
			to the offset without exceeding the end of the file. <replaceable>silence</replaceable> is
			the number of seconds of silence allowed before the function returns despite the
			lack of dtmf digits or reaching <replaceable>timeout</replaceable>. <replaceable>silence</replaceable>
			value must be preceded by <literal>s=</literal> and is also optional.</para>
		</description>
	</agi>
	<agi name="say alpha" language="en_US">
		<synopsis>
			Says a given character string.
		</synopsis>
		<syntax>
			<parameter name="number" required="true" />
			<parameter name="escape_digits" required="true" />
		</syntax>
		<description>
			<para>Say a given character string, returning early if any of the given DTMF digits
			are received on the channel. Returns <literal>0</literal> if playback completes
			without a digit being pressed, or the ASCII numerical value of the digit if one
			was pressed or <literal>-1</literal> on error/hangup.</para>
		</description>
	</agi>
	<agi name="say digits" language="en_US">
		<synopsis>
			Says a given digit string.
		</synopsis>
		<syntax>
			<parameter name="number" required="true" />
			<parameter name="escape_digits" required="true" />
		</syntax>
		<description>
			<para>Say a given digit string, returning early if any of the given DTMF digits
			are received on the channel. Returns <literal>0</literal> if playback completes
			without a digit being pressed, or the ASCII numerical value of the digit if one
			was pressed or <literal>-1</literal> on error/hangup.</para>
		</description>
	</agi>
	<agi name="say number" language="en_US">
		<synopsis>
			Says a given number.
		</synopsis>
		<syntax>
			<parameter name="number" required="true" />
			<parameter name="escape_digits" required="true" />
			<parameter name="gender" />
		</syntax>
		<description>
			<para>Say a given number, returning early if any of the given DTMF digits
			are received on the channel.  Returns <literal>0</literal> if playback
			completes without a digit being pressed, or the ASCII numerical value of
			the digit if one was pressed or <literal>-1</literal> on error/hangup.</para>
		</description>
	</agi>
	<agi name="say phonetic" language="en_US">
		<synopsis>
			Says a given character string with phonetics.
		</synopsis>
		<syntax>
			<parameter name="string" required="true" />
			<parameter name="escape_digits" required="true" />
		</syntax>
		<description>
			<para>Say a given character string with phonetics, returning early if any of the
			given DTMF digits are received on the channel. Returns <literal>0</literal> if
			playback completes without a digit pressed, the ASCII numerical value of the digit
			if one was pressed, or <literal>-1</literal> on error/hangup.</para>
		</description>
	</agi>
	<agi name="say date" language="en_US">
		<synopsis>
			Says a given date.
		</synopsis>
		<syntax>
			<parameter name="date" required="true">
				<para>Is number of seconds elapsed since 00:00:00 on January 1, 1970.
				Coordinated Universal Time (UTC).</para>
			</parameter>
			<parameter name="escape_digits" required="true" />
		</syntax>
		<description>
			<para>Say a given date, returning early if any of the given DTMF digits are
			received on the channel. Returns <literal>0</literal> if playback
			completes without a digit being pressed, or the ASCII numerical value of the
			digit if one was pressed or <literal>-1</literal> on error/hangup.</para>
		</description>
	</agi>
	<agi name="say time" language="en_US">
		<synopsis>
			Says a given time.
		</synopsis>
		<syntax>
			<parameter name="time" required="true">
				<para>Is number of seconds elapsed since 00:00:00 on January 1, 1970.
				Coordinated Universal Time (UTC).</para>
			</parameter>
			<parameter name="escape_digits" required="true" />
		</syntax>
		<description>
			<para>Say a given time, returning early if any of the given DTMF digits are
			received on the channel. Returns <literal>0</literal> if playback completes
			without a digit being pressed, or the ASCII numerical value of the digit if
			one was pressed or <literal>-1</literal> on error/hangup.</para>
		</description>
	</agi>
	<agi name="say datetime" language="en_US">
		<synopsis>
			Says a given time as specified by the format given.
		</synopsis>
		<syntax>
			<parameter name="time" required="true">
				<para>Is number of seconds elapsed since 00:00:00
				on January 1, 1970, Coordinated Universal Time (UTC)</para>
			</parameter>
			<parameter name="escape_digits" required="true" />
			<parameter name="format">
				<para>Is the format the time should be said in. See
				<filename>voicemail.conf</filename> (defaults to <literal>ABdY
				'digits/at' IMp</literal>).</para>
			</parameter>
			<parameter name="timezone">
				<para>Acceptable values can be found in <filename>/usr/share/zoneinfo</filename>
				Defaults to machine default.</para>
			</parameter>
		</syntax>
		<description>
			<para>Say a given time, returning early if any of the given DTMF digits are
			received on the channel. Returns <literal>0</literal> if playback
			completes without a digit being pressed, or the ASCII numerical value of the
			digit if one was pressed or <literal>-1</literal> on error/hangup.</para>
		</description>
	</agi>
	<agi name="send image" language="en_US">
		<synopsis>
			Sends images to channels supporting it.
		</synopsis>
		<syntax>
			<parameter name="image" required="true" />
		</syntax>
		<description>
			<para>Sends the given image on a channel. Most channels do not support the
			transmission of images. Returns <literal>0</literal> if image is sent, or if
			the channel does not support image transmission.  Returns <literal>-1</literal>
			only on error/hangup. Image names should not include extensions.</para>
		</description>
	</agi>
	<agi name="send text" language="en_US">
		<synopsis>
			Sends text to channels supporting it.
		</synopsis>
		<syntax>
			<parameter name="text to send" required="true">
				<para>Text consisting of greater than one word should be placed
				in quotes since the command only accepts a single argument.</para>
			</parameter>
		</syntax>
		<description>
			<para>Sends the given text on a channel. Most channels do not support the
			transmission of text. Returns <literal>0</literal> if text is sent, or if the
			channel does not support text transmission. Returns <literal>-1</literal> only
			on error/hangup.</para>
		</description>
	</agi>
	<agi name="set autohangup" language="en_US">
		<synopsis>
			Autohangup channel in some time.
		</synopsis>
		<syntax>
			<parameter name="time" required="true" />
		</syntax>
		<description>
			<para>Cause the channel to automatically hangup at <replaceable>time</replaceable>
			seconds in the future. Of course it can be hungup before then as well. Setting to
			<literal>0</literal> will cause the autohangup feature to be disabled on this channel.</para>
		</description>
	</agi>
	<agi name="set callerid" language="en_US">
		<synopsis>
			Sets callerid for the current channel.
		</synopsis>
		<syntax>
			<parameter name="number" required="true" />
		</syntax>
		<description>
			<para>Changes the callerid of the current channel.</para>
		</description>
	</agi>
	<agi name="set context" language="en_US">
		<synopsis>
			Sets channel context.
		</synopsis>
		<syntax>
			<parameter name="desired context" required="true" />
		</syntax>
		<description>
			<para>Sets the context for continuation upon exiting the application.</para>
		</description>
	</agi>
	<agi name="set extension" language="en_US">
		<synopsis>
			Changes channel extension.
		</synopsis>
		<syntax>
			<parameter name="new extension" required="true" />
		</syntax>
		<description>
			<para>Changes the extension for continuation upon exiting the application.</para>
		</description>
	</agi>
	<agi name="set music" language="en_US">
		<synopsis>
			Enable/Disable Music on hold generator
		</synopsis>
		<syntax>
			<parameter required="true">
				<enumlist>
					<enum>
						<parameter name="on" literal="true" required="true" />
					</enum>
					<enum>
						<parameter name="off" literal="true" required="true" />
					</enum>
				</enumlist>
			</parameter>
			<parameter name="class" required="true" />
		</syntax>
		<description>
			<para>Enables/Disables the music on hold generator. If <replaceable>class</replaceable>
			is not specified, then the <literal>default</literal> music on hold class will be
			used.</para>
			<para>Always returns <literal>0</literal>.</para>
		</description>
	</agi>
	<agi name="set priority" language="en_US">
		<synopsis>
			Set channel dialplan priority.
		</synopsis>
		<syntax>
			<parameter name="priority" required="true" />
		</syntax>
		<description>
			<para>Changes the priority for continuation upon exiting the application.
			The priority must be a valid priority or label.</para>
		</description>
	</agi>
	<agi name="set variable" language="en_US">
		<synopsis>
			Sets a channel variable.
		</synopsis>
		<syntax>
			<parameter name="variablename" required="true" />
			<parameter name="value" required="true" />
		</syntax>
		<description>
			<para>Sets a variable to the current channel.</para>
		</description>
	</agi>
	<agi name="stream file" language="en_US">
		<synopsis>
			Sends audio file on channel.
		</synopsis>
		<syntax>
			<parameter name="filename" required="true">
				<para>File name to play. The file extension must not be
				included in the <replaceable>filename</replaceable>.</para>
			</parameter>
			<parameter name="escape_digits" required="true">
				<para>Use double quotes for the digits if you wish none to be
				permitted.</para>
			</parameter>
			<parameter name="sample offset">
				<para>If sample offset is provided then the audio will seek to sample
				offset before play starts.</para>
			</parameter>
		</syntax>
		<description>
			<para>Send the given file, allowing playback to be interrupted by the given
			digits, if any. Returns <literal>0</literal> if playback completes without a digit
			being pressed, or the ASCII numerical value of the digit if one was pressed,
			or <literal>-1</literal> on error or if the channel was disconnected.</para>
		</description>
		<see-also>
			<ref type="agi">control stream file</ref>
		</see-also>
	</agi>
	<agi name="tdd mode" language="en_US">
		<synopsis>
			Toggles TDD mode (for the deaf).
		</synopsis>
		<syntax>
			<parameter name="boolean" required="true">
				<enumlist>
					<enum name="on" />
					<enum name="off" />
				</enumlist>
			</parameter>
		</syntax>
		<description>
			<para>Enable/Disable TDD transmission/reception on a channel. Returns <literal>1</literal> if
			successful, or <literal>0</literal> if channel is not TDD-capable.</para>
		</description>
	</agi>
	<agi name="verbose" language="en_US">
		<synopsis>
			Logs a message to the asterisk verbose log.
		</synopsis>
		<syntax>
			<parameter name="message" required="true" />
			<parameter name="level" required="true" />
		</syntax>
		<description>
			<para>Sends <replaceable>message</replaceable> to the console via verbose
			message system. <replaceable>level</replaceable> is the verbose level (1-4).
			Always returns <literal>1</literal></para>
		</description>
	</agi>
	<agi name="wait for digit" language="en_US">
		<synopsis>
			Waits for a digit to be pressed.
		</synopsis>
		<syntax>
			<parameter name="timeout" required="true" />
		</syntax>
		<description>
			<para>Waits up to <replaceable>timeout</replaceable> milliseconds for channel to
			receive a DTMF digit. Returns <literal>-1</literal> on channel failure, <literal>0</literal>
			if no digit is received in the timeout, or the numerical value of the ascii of the digit if
			one is received. Use <literal>-1</literal> for the <replaceable>timeout</replaceable> value if
			you desire the call to block indefinitely.</para>
		</description>
	</agi>
	<agi name="speech create" language="en_US">
		<synopsis>
			Creates a speech object.
		</synopsis>
		<syntax>
			<parameter name="engine" required="true" />
		</syntax>
		<description>
			<para>Create a speech object to be used by the other Speech AGI commands.</para>
		</description>
	</agi>
	<agi name="speech set" language="en_US">
		<synopsis>
			Sets a speech engine setting.
		</synopsis>
		<syntax>
			<parameter name="name" required="true" />
			<parameter name="value" required="true" />
		</syntax>
		<description>
			<para>Set an engine-specific setting.</para>
		</description>
	</agi>
	<agi name="speech destroy" language="en_US">
		<synopsis>
			Destroys a speech object.
		</synopsis>
		<syntax>
		</syntax>
		<description>
			<para>Destroy the speech object created by <literal>SPEECH CREATE</literal>.</para>
		</description>
		<see-also>
			<ref type="agi">speech create</ref>
		</see-also>
	</agi>
	<agi name="speech load grammar" language="en_US">
		<synopsis>
			Loads a grammar.
		</synopsis>
		<syntax>
			<parameter name="grammar name" required="true" />
			<parameter name="path to grammar" required="true" />
		</syntax>
		<description>
			<para>Loads the specified grammar as the specified name.</para>
		</description>
	</agi>
	<agi name="speech unload grammar" language="en_US">
		<synopsis>
			Unloads a grammar.
		</synopsis>
		<syntax>
			<parameter name="grammar name" required="true" />
		</syntax>
		<description>
			<para>Unloads the specified grammar.</para>
		</description>
	</agi>
	<agi name="speech activate grammar" language="en_US">
		<synopsis>
			Activates a grammar.
		</synopsis>
		<syntax>
			<parameter name="grammar name" required="true" />
		</syntax>
		<description>
			<para>Activates the specified grammar on the speech object.</para>
		</description>
	</agi>
	<agi name="speech deactivate grammar" language="en_US">
		<synopsis>
			Deactivates a grammar.
		</synopsis>
		<syntax>
			<parameter name="grammar name" required="true" />
		</syntax>
		<description>
			<para>Deactivates the specified grammar on the speech object.</para>
		</description>
	</agi>
	<agi name="speech recognize" language="en_US">
		<synopsis>
			Recognizes speech.
		</synopsis>
		<syntax>
			<parameter name="prompt" required="true" />
			<parameter name="timeout" required="true" />
			<parameter name="offset" />
		</syntax>
		<description>
			<para>Plays back given <replaceable>prompt</replaceable> while listening for
			speech and dtmf.</para>
		</description>
	</agi>
	<application name="AGI" language="en_US">
		<synopsis>
			Executes an AGI compliant application.
		</synopsis>
		<syntax>
			<parameter name="command" required="true" />
			<parameter name="args">
				<argument name="arg1" required="true" />
				<argument name="arg2" multiple="yes" />
			</parameter>
		</syntax>
		<description>
			<para>Executes an Asterisk Gateway Interface compliant
			program on a channel. AGI allows Asterisk to launch external programs written
			in any language to control a telephony channel, play audio, read DTMF digits,
			etc. by communicating with the AGI protocol on <emphasis>stdin</emphasis> and
			<emphasis>stdout</emphasis>. As of <literal>1.6.0</literal>, this channel will
			not stop dialplan execution on hangup inside of this application. Dialplan
			execution will continue normally, even upon hangup until the AGI application
			signals a desire to stop (either by exiting or, in the case of a net script, by
			closing the connection). A locally executed AGI script will receive SIGHUP on
			hangup from the channel except when using DeadAGI. A fast AGI server will
			correspondingly receive a HANGUP inline with the command dialog. Both of theses
			signals may be disabled by setting the <variable>AGISIGHUP</variable> channel
			variable to <literal>no</literal> before executing the AGI application.</para>
			<para>Use the CLI command <literal>agi show commands</literal> to list available agi
			commands.</para>
			<para>This application sets the following channel variable upon completion:</para>
			<variablelist>
				<variable name="AGISTATUS">
					<para>The status of the attempt to the run the AGI script
					text string, one of:</para>
					<value name="SUCCESS" />
					<value name="FAILURE" />
					<value name="NOTFOUND" />
					<value name="HANGUP" />
				</variable>
			</variablelist>
		</description>
		<see-also>
			<ref type="application">EAGI</ref>
			<ref type="application">DeadAGI</ref>
		</see-also>
	</application>
	<application name="EAGI" language="en_US">
		<synopsis>
			Executes an EAGI compliant application.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/application[@name='AGI']/syntax/parameter[@name='command'])" />
			<xi:include xpointer="xpointer(/docs/application[@name='AGI']/syntax/parameter[@name='args'])" />
		</syntax>
		<description>
			<para>Using 'EAGI' provides enhanced AGI, with incoming audio available out of band
			on file descriptor 3.</para>
			<xi:include xpointer="xpointer(/docs/application[@name='AGI']/description/para)" />
			<xi:include xpointer="xpointer(/docs/application[@name='AGI']/description/variablelist)" />
		</description>
		<see-also>
			<ref type="application">AGI</ref>
			<ref type="application">DeadAGI</ref>
		</see-also>
	</application>
	<application name="DeadAGI" language="en_US">
		<synopsis>
			Executes AGI on a hungup channel.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/application[@name='AGI']/syntax/parameter[@name='command'])" />
			<xi:include xpointer="xpointer(/docs/application[@name='AGI']/syntax/parameter[@name='args'])" />
		</syntax>
		<description>
			<xi:include xpointer="xpointer(/docs/application[@name='AGI']/description/para)" />
			<xi:include xpointer="xpointer(/docs/application[@name='AGI']/description/variablelist)" />
		</description>
		<see-also>
			<ref type="application">AGI</ref>
			<ref type="application">EAGI</ref>
		</see-also>
	</application>
	<manager name="AGI" language="en_US">
		<synopsis>
			Add an AGI command to execute by Async AGI.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Channel" required="true">
				<para>Channel that is currently in Async AGI.</para>
			</parameter>
			<parameter name="Command" required="true">
				<para>Application to execute.</para>
			</parameter>
			<parameter name="CommandID">
				<para>This will be sent back in CommandID header of AsyncAGI exec
				event notification.</para>
			</parameter>
		</syntax>
		<description>
			<para>Add an AGI command to the execute queue of the channel in Async AGI.</para>
		</description>
	</manager>
	<function name="CALENDAR_BUSY" language="en_US">
		<synopsis>
			Determine if the calendar is marked busy at this time.
		</synopsis>
		<syntax>
			<parameter name="calendar" required="true" />
		</syntax>
    	<description>
			<para>Check the specified calendar's current busy status.</para>
		</description>
		<see-also>
			<ref type="function">CALENDAR_EVENT</ref>
			<ref type="function">CALENDAR_QUERY</ref>
			<ref type="function">CALENDAR_QUERY_RESULT</ref>
			<ref type="function">CALENDAR_WRITE</ref>
		</see-also>
	</function>
	<function name="CALENDAR_EVENT" language="en_US">
		<synopsis>
			Get calendar event notification data from a notification call.
		</synopsis>
		<syntax>
			<parameter name="field" required="true">
				<enumlist>
					<enum name="summary"><para>The VEVENT SUMMARY property or Exchange event 'subject'</para></enum>
					<enum name="description"><para>The text description of the event</para></enum>
					<enum name="organizer"><para>The organizer of the event</para></enum>
					<enum name="location"><para>The location of the eventt</para></enum>
					<enum name="categories"><para>The categories of the event</para></enum>
					<enum name="priority"><para>The priority of the event</para></enum>
					<enum name="calendar"><para>The name of the calendar associated with the event</para></enum>
					<enum name="uid"><para>The unique identifier for this event</para></enum>
					<enum name="start"><para>The start time of the event</para></enum>
					<enum name="end"><para>The end time of the event</para></enum>
					<enum name="busystate"><para>The busy state of the event 0=FREE, 1=TENTATIVE, 2=BUSY</para></enum>
				</enumlist>
			</parameter>
		</syntax>
		<description>
			<para>Whenever a calendar event notification call is made, the event data
			may be accessed with this function.</para>
		</description>
		<see-also>
			<ref type="function">CALENDAR_BUSY</ref>
			<ref type="function">CALENDAR_QUERY</ref>
			<ref type="function">CALENDAR_QUERY_RESULT</ref>
			<ref type="function">CALENDAR_WRITE</ref>
		</see-also>
	</function>
	<function name="CALENDAR_QUERY" language="en_US">
		<synopsis>Query a calendar server and store the data on a channel
		</synopsis>
		<syntax>
			<parameter name="calendar" required="true">
				<para>The calendar that should be queried</para>
			</parameter>
			<parameter name="start" required="false">
				<para>The start time of the query (in seconds since epoch)</para>
			</parameter>
			<parameter name="end" required="false">
				<para>The end time of the query (in seconds since epoch)</para>
			</parameter>
		</syntax>
		<description>
			<para>Get a list of events in the currently accessible timeframe of the <replaceable>calendar</replaceable>
			The function returns the id for accessing the result with CALENDAR_QUERY_RESULT()</para>
		</description>
		<see-also>
			<ref type="function">CALENDAR_BUSY</ref>
			<ref type="function">CALENDAR_EVENT</ref>
			<ref type="function">CALENDAR_QUERY_RESULT</ref>
			<ref type="function">CALENDAR_WRITE</ref>
		</see-also>
	</function>
	<function name="CALENDAR_QUERY_RESULT" language="en_US">
		<synopsis>
			Retrieve data from a previously run CALENDAR_QUERY() call
		</synopsis>
		<syntax>
			<parameter name="id" required="true">
				<para>The query ID returned by <literal>CALENDAR_QUERY</literal></para>
			</parameter>
			<parameter name="field" required="true">
				<enumlist>
					<enum name="getnum"><para>number of events occurring during time range</para></enum>
					<enum name="summary"><para>A summary of the event</para></enum>
					<enum name="description"><para>The full event description</para></enum>
					<enum name="organizer"><para>The event organizer</para></enum>
					<enum name="location"><para>The event location</para></enum>
					<enum name="categories"><para>The categories of the event</para></enum>
					<enum name="priority"><para>The priority of the event</para></enum>
					<enum name="calendar"><para>The name of the calendar associted with the event</para></enum>
					<enum name="uid"><para>The unique identifier for the event</para></enum>
					<enum name="start"><para>The start time of the event (in seconds since epoch)</para></enum>
					<enum name="end"><para>The end time of the event (in seconds since epoch)</para></enum>
					<enum name="busystate"><para>The busy status of the event 0=FREE, 1=TENTATIVE, 2=BUSY</para></enum>
				</enumlist>
			</parameter>
			<parameter name="entry" required="false" default="1">
				<para>Return data from a specific event returned by the query</para>
			</parameter>
		</syntax>
		<description>
			<para>After running CALENDAR_QUERY and getting a result <replaceable>id</replaceable>, calling
			<literal>CALENDAR_QUERY</literal> with that <replaceable>id</replaceable> and a <replaceable>field</replaceable>
			will return the data for that field. If multiple events matched the query, and <replaceable>entry</replaceable>
			is provided, information from that event will be returned.</para>
		</description>
		<see-also>
			<ref type="function">CALENDAR_BUSY</ref>
			<ref type="function">CALENDAR_EVENT</ref>
			<ref type="function">CALENDAR_QUERY</ref>
			<ref type="function">CALENDAR_WRITE</ref>
		</see-also>
	</function>
	<function name="CALENDAR_WRITE" language="en_US">
		<synopsis>Write an event to a calendar</synopsis>
		<syntax>
			<parameter name="calendar" required="true">
				<para>The calendar to write to</para>
			</parameter>
			<parameter name="field" multiple="true" required="true">
				<enumlist>
					<enum name="summary"><para>A summary of the event</para></enum>
					<enum name="description"><para>The full event description</para></enum>
					<enum name="organizer"><para>The event organizer</para></enum>
					<enum name="location"><para>The event location</para></enum>
					<enum name="categories"><para>The categories of the event</para></enum>
					<enum name="priority"><para>The priority of the event</para></enum>
					<enum name="uid"><para>The unique identifier for the event</para></enum>
					<enum name="start"><para>The start time of the event (in seconds since epoch)</para></enum>
					<enum name="end"><para>The end time of the event (in seconds since epoch)</para></enum>
					<enum name="busystate"><para>The busy status of the event 0=FREE, 1=TENTATIVE, 2=BUSY</para></enum>
				</enumlist>
			</parameter>
		</syntax>
		<description>
			<para>Example: CALENDAR_WRITE(calendar,field1,field2,field3)=val1,val2,val3</para>
			<para>The field and value arguments can easily be set/passed using the HASHKEYS() and HASH() functions</para>
		</description>
		<see-also>
			<ref type="function">CALENDAR_BUSY</ref>
			<ref type="function">CALENDAR_EVENT</ref>
			<ref type="function">CALENDAR_QUERY</ref>
			<ref type="function">CALENDAR_QUERY_RESULT</ref>
		</see-also>
	</function>

	<application name="ReceiveFAX" language="en_US" module="res_fax">
		<synopsis>
			Receive a FAX and save as a TIFF/F file.
		</synopsis>
		<syntax>
			<parameter name="filename" required="true" />
			<parameter name="options">
				<optionlist>
					<option name="d">
						<para>Enable FAX debugging.</para>
					</option>
					<option name="f">
						<para>Allow audio fallback FAX transfer on T.38 capable channels.</para>
					</option>
					<option name="s">
						<para>Send progress Manager events (overrides statusevents setting in res_fax.conf).</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
 			<para>This application is provided by res_fax, which is a FAX technology agnostic module
 			that utilizes FAX technology resource modules to complete a FAX transmission.</para>
 			<para>Session arguments can be set by the FAXOPT function and to check results of the ReceiveFax() application.</para>
		</description>
		<see-also>
			<ref type="function">FAXOPT</ref>
		</see-also>
	</application>
	<application name="SendFAX" language="en_US" module="res_fax">
		<synopsis>
			Sends a specified TIFF/F file as a FAX.
		</synopsis>
		<syntax>
			<parameter name="filename" required="true" argsep="&amp;">
				<argument name="filename2" multiple="true">
					<para>TIFF file to send as a FAX.</para>
				</argument>
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="d">
						<para>Enable FAX debugging.</para>
					</option>
					<option name="f">
						<para>Allow audio fallback FAX transfer on T.38 capable channels.</para>
					</option>
					<option name="s">
						<para>Send progress Manager events (overrides statusevents setting in res_fax.conf).</para>
					</option>
					<option name="z">
						<para>Initiate a T.38 reinvite on the channel if the remote end does not.</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
 			<para>This application is provided by res_fax, which is a FAX technology agnostic module
 			that utilizes FAX technology resource modules to complete a FAX transmission.</para>
 			<para>Session arguments can be set by the FAXOPT function and to check results of the SendFax() application.</para>
		</description>
		<see-also>
			<ref type="function">FAXOPT</ref>
		</see-also>
	</application>
	<function name="FAXOPT" language="en_US" module="res_fax">
		<synopsis>
			Gets/sets various pieces of information about a fax session.
		</synopsis>
		<syntax>
			<parameter name="item" required="true">
				<enumlist>
					<enum name="ecm">
						<para>R/W Error Correction Mode (ECM) enable with 'yes', disable with 'no'.</para>
					</enum>
					<enum name="error">
						<para>R/O FAX transmission error code upon failure.</para>
					</enum>
					<enum name="filename">
						<para>R/O Filename of the first file of the FAX transmission.</para>
					</enum>
					<enum name="filenames">
						<para>R/O Filenames of all of the files in the FAX transmission (comma separated).</para>
					</enum>
					<enum name="headerinfo">
						<para>R/W FAX header information.</para>
					</enum>
					<enum name="localstationid">
						<para>R/W Local Station Identification.</para>
					</enum>
					<enum name="minrate">
						<para>R/W Minimum transfer rate set before transmission.</para>
					</enum>
					<enum name="maxrate">
						<para>R/W Maximum transfer rate set before transmission.</para>
					</enum>
					<enum name="modem">
						<para>R/W Modem type (v17/v27/v29).</para>
					</enum>
					<enum name="pages">
						<para>R/O Number of pages transferred.</para>
					</enum>
					<enum name="rate">
						<para>R/O Negotiated transmission rate.</para>
					</enum>
					<enum name="remotestationid">
						<para>R/O Remote Station Identification after transmission.</para>
					</enum>
					<enum name="resolution">
						<para>R/O Negotiated image resolution after transmission.</para>
					</enum>
					<enum name="sessionid">
						<para>R/O Session ID of the FAX transmission.</para>
					</enum>
					<enum name="status">
						<para>R/O Result Status of the FAX transmission.</para>
					</enum>
					<enum name="statusstr">
						<para>R/O Verbose Result Status of the FAX transmission.</para>
					</enum>
				</enumlist>
			</parameter>
		</syntax>
		<description>
			<para>FAXOPT can be used to override the settings for a FAX session listed in <filename>res_fax.conf</filename>,
		   	it can also be used to retreive information about a FAX session that has finished eg. pages/status.</para>
		</description>
		<see-also>
			<ref type="application">ReceiveFax</ref>
			<ref type="application">SendFax</ref>
		</see-also>
	</function>
	<application name="JabberSend" language="en_US">
		<synopsis>
			Sends an XMPP message to a buddy.
		</synopsis>
		<syntax>
			<parameter name="account" required="true">
				<para>The local named account to listen on (specified in
				jabber.conf)</para>
			</parameter>
			<parameter name="jid" required="true">
				<para>Jabber ID of the buddy to send the message to. It can be a
				bare JID (username@domain) or a full JID (username@domain/resource).</para>
			</parameter>
			<parameter name="message" required="true">
				<para>The message to send.</para>
			</parameter>
		</syntax>
		<description>
			<para>Sends the content of <replaceable>message</replaceable> as text message
			from the given <replaceable>account</replaceable> to the buddy identified by
			<replaceable>jid</replaceable></para>
			<para>Example: JabberSend(asterisk,bob@domain.com,Hello world) sends "Hello world"
			to <replaceable>bob@domain.com</replaceable> as an XMPP message from the account
			<replaceable>asterisk</replaceable>, configured in jabber.conf.</para>
		</description>
		<see-also>
			<ref type="function">JABBER_STATUS</ref>
			<ref type="function">JABBER_RECEIVE</ref>
		</see-also>
	</application>
	<function name="JABBER_RECEIVE" language="en_US">
		<synopsis>
			Reads XMPP messages.
		</synopsis>
		<syntax>
			<parameter name="account" required="true">
				<para>The local named account to listen on (specified in
				jabber.conf)</para>
			</parameter>
			<parameter name="jid" required="true">
				<para>Jabber ID of the buddy to receive message from. It can be a
				bare JID (username@domain) or a full JID (username@domain/resource).</para>
			</parameter>
			<parameter name="timeout">
				<para>In seconds, defaults to <literal>20</literal>.</para>
			</parameter>
		</syntax>
		<description>
			<para>Receives a text message on the given <replaceable>account</replaceable>
			from the buddy identified by <replaceable>jid</replaceable> and returns the contents.</para>
			<para>Example: ${JABBER_RECEIVE(asterisk,bob@domain.com)} returns an XMPP message
			sent from <replaceable>bob@domain.com</replaceable> (or nothing in case of a time out), to
			the <replaceable>asterisk</replaceable> XMPP account configured in jabber.conf.</para>
		</description>
		<see-also>
			<ref type="function">JABBER_STATUS</ref>
			<ref type="application">JabberSend</ref>
		</see-also>
	</function>
	<function name="JABBER_STATUS" language="en_US">
		<synopsis>
			Retrieves a buddy's status.
		</synopsis>
		<syntax>
			<parameter name="account" required="true">
				<para>The local named account to listen on (specified in
				jabber.conf)</para>
			</parameter>
			<parameter name="jid" required="true">
				<para>Jabber ID of the buddy to receive message from. It can be a
				bare JID (username@domain) or a full JID (username@domain/resource).</para>
			</parameter>
		</syntax>
		<description>
			<para>Retrieves the numeric status associated with the buddy identified
			by <replaceable>jid</replaceable>.
			If the buddy does not exist in the buddylist, returns 7.</para>
			<para>Status will be 1-7.</para>
			<para>1=Online, 2=Chatty, 3=Away, 4=XAway, 5=DND, 6=Offline</para>
			<para>If not in roster variable will be set to 7.</para>
			<para>Example: ${JABBER_STATUS(asterisk,bob@domain.com)} returns 1 if
			<replaceable>bob@domain.com</replaceable> is online. <replaceable>asterisk</replaceable> is
			the associated XMPP account configured in jabber.conf.</para>
		</description>
		<see-also>
			<ref type="function">JABBER_RECEIVE</ref>
			<ref type="application">JabberSend</ref>
		</see-also>
	</function>
	<application name="JabberSendGroup" language="en_US">
		<synopsis>
			Send a Jabber Message to a specified chat room
		</synopsis>
		<syntax>
			<parameter name="Jabber" required="true">
				<para>Client or transport Asterisk uses to connect to Jabber.</para>
			</parameter>
			<parameter name="RoomJID" required="true">
				<para>XMPP/Jabber JID (Name) of chat room.</para>
			</parameter>
			<parameter name="Message" required="true">
				<para>Message to be sent to the chat room.</para>
			</parameter>
			<parameter name="Nickname" required="false">
				<para>The nickname Asterisk uses in the chat room.</para>
			</parameter>
		</syntax>
		<description>
			<para>Allows user to send a message to a chat room via XMPP.</para>
			<note><para>To be able to send messages to a chat room, a user must have previously joined it. Use the <replaceable>JabberJoin</replaceable> function to do so.</para></note>
		</description>
	</application>
	<application name="JabberJoin" language="en_US">
		<synopsis>
			Join a chat room
		</synopsis>
		<syntax>
			<parameter name="Jabber" required="true">
				<para>Client or transport Asterisk uses to connect to Jabber.</para>
			</parameter>
			<parameter name="RoomJID" required="true">
				<para>XMPP/Jabber JID (Name) of chat room.</para>
			</parameter>
			<parameter name="Nickname" required="false">
				<para>The nickname Asterisk will use in the chat room.</para>
				<note><para>If a different nickname is supplied to an already joined room, the old nick will be changed to the new one.</para></note>
			</parameter>
		</syntax>
		<description>
			<para>Allows Asterisk to join a chat room.</para>
		</description>
	</application>
	<application name="JabberLeave" language="en_US">
		<synopsis>
			Leave a chat room
		</synopsis>
		<syntax>
			<parameter name="Jabber" required="true">
				<para>Client or transport Asterisk uses to connect to Jabber.</para>
			</parameter>
			<parameter name="RoomJID" required="true">
				<para>XMPP/Jabber JID (Name) of chat room.</para>
			</parameter>
			<parameter name="Nickname" required="false">
				<para>The nickname Asterisk uses in the chat room.</para>
			</parameter>
		</syntax>
		<description>
			<para>Allows Asterisk to leave a chat room.</para>
		</description>
	</application>
	<application name="JabberStatus" language="en_US">
		<synopsis>
			Retrieve the status of a jabber list member
		</synopsis>
		<syntax>
			<parameter name="Jabber" required="true">
				<para>Client or transport Asterisk users to connect to Jabber.</para>
			</parameter>
			<parameter name="JID" required="true">
				<para>XMPP/Jabber JID (Name) of recipient.</para>
			</parameter>
			<parameter name="Variable" required="true">
				<para>Variable to store the status of requested user.</para>
			</parameter>
		</syntax>
		<description>
			<para>This application is deprecated. Please use the JABBER_STATUS() function instead.</para>
			<para>Retrieves the numeric status associated with the specified buddy <replaceable>JID</replaceable>.
			The return value in the <replaceable>Variable</replaceable>will be one of the following.</para>
			<enumlist>
				<enum name="1">
					<para>Online.</para>
				</enum>
				<enum name="2">
					<para>Chatty.</para>
				</enum>
				<enum name="3">
					<para>Away.</para>
				</enum>
				<enum name="4">
					<para>Extended Away.</para>
				</enum>
				<enum name="5">
					<para>Do Not Disturb.</para>
				</enum>
				<enum name="6">
					<para>Offline.</para>
				</enum>
				<enum name="7">
					<para>Not In Roster.</para>
				</enum>
			</enumlist>
		</description>
        </application>
	<manager name="JabberSend" language="en_US">
		<synopsis>
			Sends a message to a Jabber Client.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Jabber" required="true">
				<para>Client or transport Asterisk uses to connect to JABBER.</para>
			</parameter>
			<parameter name="JID" required="true">
				<para>XMPP/Jabber JID (Name) of recipient.</para>
			</parameter>
			<parameter name="Message" required="true">
				<para>Message to be sent to the buddy.</para>
			</parameter>
		</syntax>
		<description>
			<para>Sends a message to a Jabber Client.</para>
		</description>
	</manager>
	<application name="Monitor" language="en_US">
		<synopsis>
			Monitor a channel.
		</synopsis>
		<syntax>
			<parameter name="file_format" argsep=":">
				<argument name="file_format" required="true">
					<para>optional, if not set, defaults to <literal>wav</literal></para>
				</argument>
				<argument name="urlbase" />
			</parameter>
			<parameter name="fname_base">
				<para>if set, changes the filename used to the one specified.</para>
			</parameter>
			<parameter name="options">
				<optionlist>
					<option name="m">
						<para>when the recording ends mix the two leg files into one and
						delete the two leg files. If the variable <variable>MONITOR_EXEC</variable>
						is set, the application referenced in it will be executed instead of
						soxmix/sox and the raw leg files will NOT be deleted automatically.
						soxmix/sox or <variable>MONITOR_EXEC</variable> is handed 3 arguments,
						the two leg files and a target mixed file name which is the same as
						the leg file names only without the in/out designator.</para>
						<para>If <variable>MONITOR_EXEC_ARGS</variable> is set, the contents
						will be passed on as additional arguments to <variable>MONITOR_EXEC</variable>.
						Both <variable>MONITOR_EXEC</variable> and the Mix flag can be set from the
						administrator interface.</para>
					</option>
					<option name="b">
						<para>Don't begin recording unless a call is bridged to another channel.</para>
					</option>
					<option name="i">
						<para>Skip recording of input stream (disables <literal>m</literal> option).</para>
					</option>
					<option name="o">
						<para>Skip recording of output stream (disables <literal>m</literal> option).</para>
					</option>
				</optionlist>
			</parameter>
		</syntax>
		<description>
			<para>Used to start monitoring a channel. The channel's input and output
			voice packets are logged to files until the channel hangs up or
			monitoring is stopped by the StopMonitor application.</para>
			<para>By default, files are stored to <filename>/var/spool/asterisk/monitor/</filename>.
			Returns <literal>-1</literal> if monitor files can't be opened or if the channel is
			already monitored, otherwise <literal>0</literal>.</para>
		</description>
		<see-also>
			<ref type="application">StopMonitor</ref>
		</see-also>
	</application>
	<application name="StopMonitor" language="en_US">
		<synopsis>
			Stop monitoring a channel.
		</synopsis>
		<syntax />
		<description>
			<para>Stops monitoring a channel. Has no effect if the channel is not monitored.</para>
		</description>
	</application>
	<application name="ChangeMonitor" language="en_US">
		<synopsis>
			Change monitoring filename of a channel.
		</synopsis>
		<syntax>
			<parameter name="filename_base" required="true">
				<para>The new filename base to use for monitoring this channel.</para>
			</parameter>
		</syntax>
		<description>
			<para>Changes monitoring filename of a channel. Has no effect if the
			channel is not monitored.</para>
		</description>
	</application>
	<application name="PauseMonitor" language="en_US">
		<synopsis>
			Pause monitoring of a channel.
		</synopsis>
		<syntax />
		<description>
			<para>Pauses monitoring of a channel until it is re-enabled by a call to UnpauseMonitor.</para>
		</description>
		<see-also>
			<ref type="application">UnpauseMonitor</ref>
		</see-also>
	</application>
	<application name="UnpauseMonitor" language="en_US">
		<synopsis>
			Unpause monitoring of a channel.
		</synopsis>
		<syntax />
		<description>
			<para>Unpauses monitoring of a channel on which monitoring had
			previously been paused with PauseMonitor.</para>
		</description>
		<see-also>
			<ref type="application">PauseMonitor</ref>
		</see-also>
	</application>
	<manager name="Monitor" language="en_US">
		<synopsis>
			Monitor a channel.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Channel" required="true">
				<para>Used to specify the channel to record.</para>
			</parameter>
			<parameter name="File">
				<para>Is the name of the file created in the monitor spool directory.
				Defaults to the same name as the channel (with slashes replaced with dashes).</para>
			</parameter>
			<parameter name="Format">
				<para>Is the audio recording format. Defaults to <literal>wav</literal>.</para>
			</parameter>
			<parameter name="Mix">
				<para>Boolean parameter as to whether to mix the input and output channels
				together after the recording is finished.</para>
			</parameter>
		</syntax>
		<description>
			<para>This action may be used to record the audio on a
			specified channel.</para>
		</description>
	</manager>
	<manager name="StopMonitor" language="en_US">
		<synopsis>
			Stop monitoring a channel.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Channel" required="true">
				<para>The name of the channel monitored.</para>
			</parameter>
		</syntax>
		<description>
			<para>This action may be used to end a previously started 'Monitor' action.</para>
		</description>
	</manager>
	<manager name="ChangeMonitor" language="en_US">
		<synopsis>
			Change monitoring filename of a channel.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Channel" required="true">
				<para>Used to specify the channel to record.</para>
			</parameter>
			<parameter name="File" required="true">
				<para>Is the new name of the file created in the
				monitor spool directory.</para>
			</parameter>
		</syntax>
		<description>
			<para>This action may be used to change the file
			started by a previous 'Monitor' action.</para>
		</description>
	</manager>
	<manager name="PauseMonitor" language="en_US">
		<synopsis>
			Pause monitoring of a channel.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Channel" required="true">
				<para>Used to specify the channel to record.</para>
			</parameter>
		</syntax>
		<description>
			<para>This action may be used to temporarily stop the
			recording of a channel.</para>
		</description>
	</manager>
	<manager name="UnpauseMonitor" language="en_US">
		<synopsis>
			Unpause monitoring of a channel.
		</synopsis>
		<syntax>
			<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
			<parameter name="Channel" required="true">
				<para>Used to specify the channel to record.</para>
			</parameter>
		</syntax>
		<description>
			<para>This action may be used to re-enable recording
			of a channel after calling PauseMonitor.</para>
		</description>
	</manager>

	<application name="MusicOnHold" language="en_US">
		<synopsis>
			Play Music On Hold indefinitely.
		</synopsis>
		<syntax>
			<parameter name="class" required="true" />
			<parameter name="duration" />
		</syntax>
		<description>
			<para>Plays hold music specified by class. If omitted, the default music
			source for the channel will be used. Change the default class with
			Set(CHANNEL(musicclass)=...). If duration is given, hold music will be played
			specified number of seconds. If duration is ommited, music plays indefinitely.
			Returns <literal>0</literal> when done, <literal>-1</literal> on hangup.</para>
			<para>This application does not automatically answer and should be preceeded by
			an application such as Answer() or Progress().</para>
		</description>
	</application>
	<application name="WaitMusicOnHold" language="en_US">
		<synopsis>
			Wait, playing Music On Hold.
		</synopsis>
		<syntax>
			<parameter name="delay" required="true" />
		</syntax>
		<description>
			<para> !!! DEPRECATED. Use MusicOnHold instead !!!</para>
			<para>Plays hold music specified number of seconds. Returns <literal>0</literal> when done,
			or <literal>-1</literal> on hangup. If no hold music is available, the delay will still occur
			with no sound.</para>
			<para> !!! DEPRECATED. Use MusicOnHold instead !!!</para>
		</description>
	</application>
	<application name="SetMusicOnHold" language="en_US">
		<synopsis>
			Set default Music On Hold class.
		</synopsis>
		<syntax>
			<parameter name="class" required="yes" />
		</syntax>
		<description>
			<para>!!! DEPRECATED. USe Set(CHANNEL(musicclass)=...) instead !!!</para>
			<para>Sets the default class for music on hold for a given channel.
			When music on hold is activated, this class will be used to select which
			music is played.</para>
			<para>!!! DEPRECATED. USe Set(CHANNEL(musicclass)=...) instead !!!</para>
		</description>
	</application>
	<application name="StartMusicOnHold" language="en_US">
		<synopsis>
			Play Music On Hold.
		</synopsis>
		<syntax>
			<parameter name="class" required="true" />
		</syntax>
		<description>
			<para>Starts playing music on hold, uses default music class for channel.
			Starts playing music specified by class. If omitted, the default music
			source for the channel will be used. Always returns <literal>0</literal>.</para>
		</description>
	</application>
	<application name="StopMusicOnHold" language="en_US">
		<synopsis>
			Stop playing Music On Hold.
		</synopsis>
		<syntax />
		<description>
			<para>Stops playing music on hold.</para>
		</description>
	</application>
	<function name="MUTEAUDIO" language="en_US">
		<synopsis>
			Muting audio streams in the channel
		</synopsis>
		<syntax>
			<parameter name="direction" required="true">
				<para>Must be one of </para>
				<enumlist>
					<enum name="in">
						<para>Inbound stream (to the PBX)</para>
					</enum>
					<enum name="out">
						<para>Outbound stream (from the PBX)</para>
					</enum>
					<enum name="all">
						<para>Both streams</para>
					</enum>
				</enumlist>
			</parameter>
		</syntax>
		<description>
			<para>The MUTEAUDIO function can be used to mute inbound (to the PBX) or outbound audio in a call.
			Example:
			</para>
			<para>
			MUTEAUDIO(in)=on
			MUTEAUDIO(in)=off
			</para>
		</description>
	</function>
	<function name="ODBC" language="en_US">
		<synopsis>
			Controls ODBC transaction properties.
		</synopsis>
		<syntax>
			<parameter name="property" required="true">
				<enumlist>
					<enum name="transaction">
						<para>Gets or sets the active transaction ID.  If set, and the transaction ID does not
						exist and a <replaceable>database name</replaceable> is specified as an argument, it will be created.</para>
					</enum>
					<enum name="forcecommit">
						<para>Controls whether a transaction will be automatically committed when the channel
						hangs up.  Defaults to false.  If a <replaceable>transaction ID</replaceable> is specified in the optional argument,
						the property will be applied to that ID, otherwise to the current active ID.</para>
					</enum>
					<enum name="isolation">
						<para>Controls the data isolation on uncommitted transactions.  May be one of the
						following: <literal>read_committed</literal>, <literal>read_uncommitted</literal>,
						<literal>repeatable_read</literal>, or <literal>serializable</literal>.  Defaults to the
						database setting in <filename>res_odbc.conf</filename> or <literal>read_committed</literal>
						if not specified.  If a <replaceable>transaction ID</replaceable> is specified as an optional argument, it will be
						applied to that ID, otherwise the current active ID.</para>
					</enum>
				</enumlist>
			</parameter>
			<parameter name="argument" required="false" />
		</syntax>
		<description>
			<para>The ODBC() function allows setting several properties to influence how a connected
			database processes transactions.</para>
		</description>
	</function>
	<application name="ODBC_Commit" language="en_US">
		<synopsis>
			Commits a currently open database transaction.
		</synopsis>
		<syntax>
			<parameter name="transaction ID" required="no" />
		</syntax>
		<description>
			<para>Commits the database transaction specified by <replaceable>transaction ID</replaceable>
			or the current active transaction, if not specified.</para>
		</description>
	</application>
	<application name="ODBC_Rollback" language="en_US">
		<synopsis>
			Rollback a currently open database transaction.
		</synopsis>
		<syntax>
			<parameter name="transaction ID" required="no" />
		</syntax>
		<description>
			<para>Rolls back the database transaction specified by <replaceable>transaction ID</replaceable>
			or the current active transaction, if not specified.</para>
		</description>
	</application>
	<function name="PP_EACH_EXTENSION" language="en_US">
		<synopsis>
			Execute specified template for each extension.
		</synopsis>
		<syntax>
			<parameter name="mac" required="true" />
			<parameter name="template" required="true" />
		</syntax>
		<description>
			<para>Output the specified template for each extension associated with the specified MAC address.</para>
		</description>
	</function>
	<function name="PP_EACH_USER" language="en_US">
		<synopsis>
			Generate a string for each phoneprov user.
		</synopsis>
		<syntax>
			<parameter name="string" required="true" />
			<parameter name="exclude_mac" required="true" />
		</syntax>
		<description>
			<para>Pass in a string, with phoneprov variables you want substituted in the format of
			%{VARNAME}, and you will get the string rendered for each user in phoneprov
			excluding ones with MAC address <replaceable>exclude_mac</replaceable>. Probably not
			useful outside of res_phoneprov.</para>
			<para>Example: ${PP_EACH_USER(&lt;item&gt;&lt;fn&gt;%{DISPLAY_NAME}&lt;/fn&gt;&lt;/item&gt;|${MAC})</para>
		</description>
	</function>

	<function name="SMDI_MSG_RETRIEVE" language="en_US">
		<synopsis>
			Retrieve an SMDI message.
		</synopsis>
		<syntax>
			<parameter name="smdi port" required="true" />
			<parameter name="search key" required="true" />
			<parameter name="timeout" />
			<parameter name="options">
				<enumlist>
					<enum name="t">
						<para>Instead of searching on the forwarding station, search on the message desk terminal.</para>
					</enum>
					<enum name="n">
						<para>Instead of searching on the forwarding station, search on the message desk number.</para>
					</enum>
				</enumlist>
			</parameter>
		</syntax>
		<description>
			<para>This function is used to retrieve an incoming SMDI message. It returns
			an ID which can be used with the SMDI_MSG() function to access details of
			the message.  Note that this is a destructive function in the sense that
			once an SMDI message is retrieved using this function, it is no longer in
			the global SMDI message queue, and can not be accessed by any other Asterisk
			channels.  The timeout for this function is optional, and the default is
			3 seconds.  When providing a timeout, it should be in milliseconds.
			</para>
			<para>The default search is done on the forwarding station ID. However, if
			you set one of the search key options in the options field, you can change
			this behavior.
			</para>
		</description>
		<see-also>
			<ref type="function">SMDI_MSG</ref>
		</see-also>
	</function>
	<function name="SMDI_MSG" language="en_US">
		<synopsis>
			Retrieve details about an SMDI message.
		</synopsis>
		<syntax>
			<parameter name="message_id" required="true" />
			<parameter name="component" required="true">
				<para>Valid message components are:</para>
				<enumlist>
					<enum name="number">
						<para>The message desk number</para>
					</enum>
					<enum name="terminal">
						<para>The message desk terminal</para>
					</enum>
					<enum name="station">
						<para>The forwarding station</para>
					</enum>
					<enum name="callerid">
						<para>The callerID of the calling party that was forwarded</para>
					</enum>
					<enum name="type">
						<para>The call type.  The value here is the exact character
						that came in on the SMDI link.  Typically, example values
						are:</para>
						<para>Options:</para>
						<enumlist>
							<enum name="D">
								<para>Direct Calls</para>
							</enum>
							<enum name="A">
								<para>Forward All Calls</para>
							</enum>
							<enum name="B">
								<para>Forward Busy Calls</para>
							</enum>
							<enum name="N">
								<para>Forward No Answer Calls</para>
							</enum>
						</enumlist>
					</enum>
				</enumlist>
			</parameter>
		</syntax>
		<description>
			<para>This function is used to access details of an SMDI message that was
			pulled from the incoming SMDI message queue using the SMDI_MSG_RETRIEVE()
			function.</para>
		</description>
		<see-also>
			<ref type="function">SMDI_MSG_RETRIEVE</ref>
		</see-also>
	</function>
	<application name="SayCountPL" language="en_US">
		<synopsis>
			Say Polish counting words.
		</synopsis>
		<syntax>
			<parameter name="word1" required="true" />
			<parameter name="word2" required="true" />
			<parameter name="word5" required="true" />
			<parameter name="number" required="true" />
		</syntax>
		<description>
			<para>Polish grammar has some funny rules for counting words. for example 1 zloty,
			2 zlote, 5 zlotych. This application will take the words for 1, 2-4 and 5 and
			decide based on grammar rules which one to use with the number you pass to it.</para>
			<para>Example: SayCountPL(zloty,zlote,zlotych,122) will give: zlote</para>
		</description>
	</application>

</docs>
