[Asterisk-doc] docs extensions.xml,1.17,1.18

blitzrage asterisk-doc@lists.digium.com
Tue, 22 Jun 2004 19:55:10 +0000


Comments:
Update of /cvsroot/asterisk/docs
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19980/docs

Modified Files:
	extensions.xml 
Log Message:
blitzrage
- continue adding information to Chapter 4 - How to build a dialplan
Index: extensions.xml
===================================================================
RCS file: /cvsroot/asterisk/docs/extensions.xml,v
retrieving revision 1.17
retrieving revision 1.18
diff -C2 -d -r1.17 -r1.18
*** extensions.xml	11 Jun 2004 13:12:53 -0000	1.17
--- extensions.xml	22 Jun 2004 19:55:04 -0000	1.18
***************
*** 4,13 ****
  	The dialplan is the central piece of any Asterisk system.  Simply put, the 
  	dialplan specifies what Asterisk should do when it answers a call or when an 
! 	extension is dialed.  The dialplan consists of a list of instuctions or steps 
  	that Asterisk should follow.  It is <emphasis>absolutely vital</emphasis> that
  	you understand dialplans if you want to setup an Asterisk system.  
  	</para>
  	<para>
! 	[Explain that the dial plan is a road map]
  	</para>
  	
--- 4,19 ----
  	The dialplan is the central piece of any Asterisk system.  Simply put, the 
  	dialplan specifies what Asterisk should do when it answers a call or when an 
! 	extension is dialed.  The dialplan consists of a list of instructions or steps 
  	that Asterisk should follow.  It is <emphasis>absolutely vital</emphasis> that
  	you understand dialplans if you want to setup an Asterisk system.  
  	</para>
+ 
  	<para>
! 	The dialplan is a roadmap for how Asterisk will work.  The dialplan is the logic
! 	Asterisk requires to know what to do with calls and what operations to perform
! 	during various circumstances.  An entire book could be devoted simply to the logic
! 	and creation of dialplans.  Our intention is to give you a gentle introduction
! 	to the creation of dialplans within the Asterisk PBX environment, but is not 
! 	exhaustive.
  	</para>
  	
***************
*** 196,200 ****
  		<sect2>
  			<title>The <function>Answer()</function>, <function>Playback()</function>, 
! 			and <function>Hangup</function> functions</title>
  			
  <!--			<para>
--- 202,206 ----
  		<sect2>
  			<title>The <function>Answer()</function>, <function>Playback()</function>, 
! 			and <function>Hangup()</function> functions</title>
  			
  <!--			<para>
***************
*** 240,246 ****
  -->
  			<para>
! 			The <function>Hangup()</function> does exactly as it's name implies; it 
  			hangs up an active channel.  You would use this	at the end of a context once
! 			you want to drop a caller who no longer needs to be conected to the system.
  			</para>
  		</sect2>
--- 246,252 ----
  -->
  			<para>
! 			The <function>Hangup()</function> function does exactly as it's name implies; it 
  			hangs up an active channel.  You would use this	at the end of a context once
! 			you want to drop a caller who no longer needs to be connected to the system.
  			</para>
  		</sect2>
***************
*** 261,265 ****
  			/etc/asterisk </filename> directory which need to be configured to correctly
  			send the incoming call into the context.  We are using this example to explain
! 			how things work in <filename>extensions.conf</filename>
  			</para>
  			
--- 267,271 ----
  			/etc/asterisk </filename> directory which need to be configured to correctly
  			send the incoming call into the context.  We are using this example to explain
! 			how things work in <filename>extensions.conf</filename>.
  			</para>
  			
***************
*** 311,319 ****
  		<sect2>
  			<title>A more useful example</title>
! 			<para>
  			[Here we'll build upon our first example, by explaining the 
  			<function>Background()</function> and <function>Goto()</function> functions.]
  			</para>
! 
  			<para>
  			Here we will build upon our first example and learn the <function>
--- 317,325 ----
  		<sect2>
  			<title>A more useful example</title>
! <!--			<para>
  			[Here we'll build upon our first example, by explaining the 
  			<function>Background()</function> and <function>Goto()</function> functions.]
  			</para>
! -->
  			<para>
  			Here we will build upon our first example and learn the <function>
***************
*** 355,376 ****
  			to setup an Asterisk system for a small two-screen movie theatre.  When you call
  			into the system you will hear an announcment which explains to press the number
! 			of the theatre to listen to the times that movie is playing at.  When the user
! 			presses 1, they will hear the times of movie playing in theatre 1.  Pressing 2
! 			get the times for the other movie.
  			</para>
  
  			<para>
! 			Lets step through our example very carefully.  Again we start each line with the
! 			exten =&gt;.  When the call comes in, it is going to execute the 's' extensions
  			automatically in numerical priority order.  These three lines essencially perform
  			the very same functions from our first example.  The difference is the use of
  			the <function>Background()</function> function.  With <function>Background()</function>
  			we are able to accept a digit, or keypress, from the user while the sound file
! 			is being played.  While the current-movies file is being played to the user, lets
! 			say the user presses 1.  Asterisk will then look for an extension in our current
! 			context for the matching number.  When Asterisk finds the '1' extension, it will
! 			perform all priorities for that extension in order.  We won't go into detail at
! 			this moment of how to actually record the details about the movies, but that will
! 			come shortly.
  			</para>
  
--- 361,382 ----
  			to setup an Asterisk system for a small two-screen movie theatre.  When you call
  			into the system you will hear an announcment which explains to press the number
! 			of the theatre to listen to the times that the movie is playing at.  When the user
! 			presses 1, they will hear the times of the movie playing in theatre 1.  Pressing 2
! 			will retrieve the times for the other movie.
  			</para>
  
  			<para>
! 			Lets step through our example very carefully.  Again we start each line with
! 			exten =&gt;.  When the call comes in, it is going to execute the 's' extension
  			automatically in numerical priority order.  These three lines essencially perform
  			the very same functions from our first example.  The difference is the use of
  			the <function>Background()</function> function.  With <function>Background()</function>
  			we are able to accept a digit, or keypress, from the user while the sound file
! 			is being played.  While the <filename>current-movies</filename> file is being 
! 			played to the user, lets say the user presses 1.  Asterisk will then look for 
! 			an extension in our current context for the matching number.  When Asterisk 
! 			finds the '1' extension, it will perform all priorities for that extension in 
! 			order.  We won't go into detail at this moment of how to actually record the 
! 			details about the movies, but that will come shortly.
  			</para>
  
***************
*** 456,460 ****
  	<sect1>
  		<title>Adding Additional Functionality</title>
! 		<para/>
  		<sect2>
  			<title>Adding another FXS port</title>
--- 462,473 ----
  	<sect1>
  		<title>Adding Additional Functionality</title>
! 		<para>
! 		Asterisk has the ability to ring multiple phones for the same call.  Using the
! 		<function>Dial()</function> function we simply add an ampersand (&amp;) between
! 		the two or more channels we wish to ring.  In our following example we are going
! 		to show how the <function>Dial()</function> function can ring multiple interfaces
! 		at the same time.  This would allow you to answer the incoming channel at either
! 		one of the ringing interfaces.
! 		</para>
  		<sect2>
  			<title>Adding another FXS port</title>
***************
*** 467,480 ****
  			exten=&gt;s,3,Dial(Zap/2&amp;Zap/3)<lineannotation> ; Dial both channels Zap/2 and Zap/3</lineannotation>
  			</programlisting>
! 			</informalexample>	
  		</sect2>
  		
  		<sect2>
  			<title>Creating Voice Menus</title>
! 			<para>
  			[Explain what IVR is, and why we want it in our dial plan]
  			[The <filename>menu</filename> file is a voice recording saying "Press 1 for
  			the Operator or 2 to speak with John"]
  			</para>
  		</sect2>
  		
--- 480,516 ----
  			exten=&gt;s,3,Dial(Zap/2&amp;Zap/3)<lineannotation> ; Dial both channels Zap/2 and Zap/3</lineannotation>
  			</programlisting>
! 			</informalexample>
! 
! 			<para>
! 			We are using the 's' extension in our example which as we know allows these
! 			commands to be executed automatically.  Our first priority will answer the line,
! 			the second priority will playback the welcome message.  The <function>Dial()
! 			</function> application uses an ampersand (&amp;) to build a list of channels
! 			(Zap/2 and Zap/3 respectively) which ring concurrently when an incoming call
! 			executes the <function>Dial()</function> function.
! 			</para>
  		</sect2>
  		
  		<sect2>
  			<title>Creating Voice Menus</title>
! <!--			<para>
  			[Explain what IVR is, and why we want it in our dial plan]
  			[The <filename>menu</filename> file is a voice recording saying "Press 1 for
  			the Operator or 2 to speak with John"]
  			</para>
+ -->
+ 			<para>
+ 			With Asterisk we have the ability to very simply develop custom IVR systems.
+ 			IVR is an acronym for "Interactive Voice Response" which can be defined as
+ 			an automated call handling system where a user interacts with a computer
+ 			controlled voice system using either human recorded or TTS (text-to-speech)
+ 			prompts which are interacted with through a touch tone phone.
+ 			</para>
+ 
+ 			<para>
+ 			You would recognize this as any system where an auto-attendent attempted to
+ 			route your call to an appropriate department by asking you to "Press 1 for Sales,
+ 			Press 2 for Parts or Press 0 to speak to an Operator".
+ 			</para>
  		</sect2>
  		
***************
*** 482,496 ****
  			<title>Accepting User Input with the <function>Background()</function> 
  			Function</title>
! 			<para>
  			[Explain the Background() application, and how it's different than Playback()]
  			</para>
  		</sect2>
  		
  		<sect2>
  			<title>Adding a Voice Menu</title>
! 			<para>
  			[Now that we understand IVR and the Background() app,
  			let's use them in our example.]
  			</para>
  			
  			<informalexample>
--- 518,552 ----
  			<title>Accepting User Input with the <function>Background()</function> 
  			Function</title>
! <!--			<para>
  			[Explain the Background() application, and how it's different than Playback()]
  			</para>
+ -->
+ 			<para>
+ 			The <function>Background()</function> application allows us to play a pre-recorded
+ 			file to a user while allowing us to accept input from the user before the file
+ 			has finished playing.  This is different from the <function>Playback()</function>
+ 			application which will not accept input from the user until the entire file
+ 			has finished playing.  What <function>Background()</function> allows us to do is
+ 			build a list of options into a single file, which we will call "menu", to give
+ 			a user calling our system multiple options.  When a user hears the option they
+ 			wish to use, they can press the appropriate button on their touch tone phone
+ 			and they will be directed to that extension immediately.
+ 			</para>
  		</sect2>
  		
  		<sect2>
  			<title>Adding a Voice Menu</title>
! <!--			<para>
  			[Now that we understand IVR and the Background() app,
  			let's use them in our example.]
  			</para>
+ -->
+ 
+ 			<para>
+ 			Now that we understand what an IVR is and how the <function>Background()
+ 			</function> application differs from that of <function>Playback()
+ 			</function>, we can use them in our following example to demonstrate
+ 			their use within Asterisk.
+ 			</para>
  			
  			<informalexample>