\n\n\n","ECMAScript expression - defined in ECMA-262 [ECMASCRIPT] 11.1; this is an expression which produces a value; an expression which is valid on the right\n hand side of an assignment operator;","Several examples of ECMAScript expressions are as follows (ECMAScript expression in red):","\n\n\n\n\n\n\n","ECMAScript variable name - defined in ECMA-262 [ECMASCRIPT] 7.6; this is any valid sequence of characters, known as an identifier, which can be used as a\n variable name, a property name, or a function name; this does not include any qualifiers, such as array or property\n accessors;","Several examples of ECMAScript variable names are as follows (ECMAScript variable name in red):","\n\n\n\n\n\n\n","Empty ECMAScript object"," - an object returned by the ","new Object()"," ECMAScript expression; an\n object with no properties.","CCXML variable name"," - a variable name, with optional dot separated qualification, declared in a CCXML\n "," element or defined within ECMAScript code using the "," keyword.","Scope element"," - a CCXML element which defines a variable scope; ",""," are CCXML scope elements. Variables which are defined within a scope element are not visible\n to variables defined in other scope elements.","Time interval"," - CCXML uses the Cascading Style Sheets, Level 2 [ ","CSS2"," ] time format. Time designations consist of a non-negative real number followed by a time unit\n identifier. The time unit identifiers are:\n\n ","ms : milliseconds","s : seconds","Examples include: \"3s\", \"850ms\", \"0.7s\", \".5s\" and \"+1.5s\".\n ","CCXML Application/Program - A collection of CCXML documents that together\n create a complete application/program.","CCXML Interpreter - The software that processes CCXML documents, executes\n commands and dispatches events. Also referred to as the \"CCXML Platform\".","CCXML Platform - An implementation of CCXML for a specific network and\n environment, generally including a CCXML Interpreter as a component.","CCXML Session - A single instance of a CCXML application. It can span multiple documents and phone\n calls. See Section 3.5 Session Life-Cycle for details.","CCXML Parent Session - The CCXML session that created the currently running session using the\n element.","Event - An action or occurrence to which an application can respond. Examples of events are incoming\n phone calls, dialog actions or user defined events. Events in CCXML are modeled as ECMAScript objects and can contain complex\n values. All events in CCXML have a standard set of properties as defined in section 9.4.2: Standard Event\n Attributes.","Associative array - An associative array (also known as a map, lookup table, or dictionary) is an\n abstract data type composed of a collection of keys and a collection of values, where each key is associated with one value.\n Associative arrays in ECMAScript are implemented using an Object with sub properties.","Class"," - CCXML Classes are ECMAScript Constructor objects (see section 4.2.1 of the ECMAScript\n specification for more information) to help in creating the appropriate type of object instances (such as connection,\n conference and dialog). The Constructor object may contain properties that are not inherited by children objects (such as\n Connection.states). The constructor object "," also contain a Prototype property to allow properties\n that are inherited. Platforms "," choose to add properties to classes. By convention, the properties\n ","MUST"," begin with an underscore, \"_\", to identify them as platform-dependent. All defined objects in\n this specification must be initiated via one of these classes. An example would be ","'MyConnection = new\n Connection()'."," \n\n \n The Connection class "," initiate connection objects, the Dialog class\n "," initiate dialog objects and the Conference class "," initiate\n conference objects.","3.5: Session Life-Cycle","3.5.1: Startup","A CCXML session can be started for the following reasons:","A new incoming phone call coming into the platform.","A CCXML application executing a ","An external session launch request coming into the platform.","To create a CCXML session, the URI for the initial CCXML document must be known, along with any fetching parameters\n affecting how that CCXML document is retrieved. For incoming calls, the selection of the initial URI and fetching parameters is\n platform-dependent, and "," be based on information from the incoming call. Sessions created via\n "," and the session creation event I/O processor determine the initial URI and fetching parameters\n as stated in this specification.","When a session is started due to an incoming call it has ownership of the new Connection that caused it to be created. The\n new CCXML session will be responsible for processing the Connection state events and performing the Connection actions. If the\n session was started because of a ",", it will start without ownership of any event endpoints. In\n the case of an external session launch the session will not own any event endpoints.","A CCXML application can determine the reason its session was started by evaluating the contents of the\n ","session.startupmode"," session variable that is defined in the ","Session\n Variables"," section.","3.5.2: Shutdown","A CCXML session can end in one of the following ways:","The CCXML application executes an ","","An unhandled ","\"error.*\""," event.","\"ccxml.kill\"","A ","\"ccxml.kill.unconditional\"","When a CCXML session ends, all active connections, conferences and dialogs that are owned by that session are automatically\n terminated by the platform.","3.5.3: Session Life-Cycle Diagrams","The following diagrams illustrate the session life-cycle of several different scenarios. These diagrams do not show all\n possible scenarios but rather show some of the most common ones that CCXML applications may encounter.","3.5.3.1: session can live before and after active connections (or no connections at\n all)","A CCXML session does not necessarily need to have any connections associated with it. After starting, a session may acquire\n connections as a result of ",""," requests.","3.5.3.2: connection life shorter than session","In this example, the session is started due to an incoming call. A connection is typically shorter than a session. A session\n does not end when a connection terminates.","3.5.3.3: session ends, kills all active connections","When a session ends, any resources, including connections owned by that session are terminated.","3.5.3.4: session can have multiple sequential connections","A session can have multiple sequential connections","3.5.3.5: session can have multiple sequential connections and multiple concurrent\n connections","In addition to having multiple sequential connections, a session can have multiple concurrent connections.","3.5.3.5: move a connection to a newly created session","A connection can be moved from one CCXML session to another session. In the figure below, CCXML session (1) creates a new\n CCXML session (2) via ",". Then, the connection is moved from the original CCXML session to the\n new session.","3.5.3.7: move a connection to a \"master\" session","A connection can be moved from one CCXML session to another session, such as a \"master\" session.","3.5.3.8: optional \"master\" session for inbound call handling","Implementations ",", as a platform-specific optimization, choose to deliver more than one inbound\n call to a single \"master\" session. This can be viewed as equivalent to sessions handling incoming calls performing a\n ",", as described in 3.5.3.7, of the new Connection (including the ","connection.alerting","\n event) to the single \"master\" CCXML session.","The default inbound call handling behavior for CCXML implementations is to create a new CCXML session and deliver the\n "," event to it. If a platform supports delivery of multiple inbound calls to a single session,\n the way this is configured is implementation specific.","3.5.3.9: ","ccxml.kill.unconditional"," event raised","If at anytime a "," event is raised by the underlying implementation, the CCXML session is\n immediately terminated and all active connections, conferences and dialogs that are owned by that session are automatically\n terminated by the platform.","3.5.3.10: Normal session shutdown requested by the platform","If at anytime the platform wishes to terminate a CCXML session it "," raise a\n ","ccxml.kill"," event to inform the CCXML application. The normal response to this event is for the CCXML application\n to perform any clean up and termination of current active connections, conferences or dialogs and then execute an\n "," element.","If the CCXML application does not respond to the ","ccml.kill"," event in a timely manner the platform "," then raise a "," event to immediately terminate the CCXML session and all\n active connections, conferences, and dialogs that are owned by the session.","4: Simple Examples","4.1: Hello World","This simple CCXML document shows an example of a \"hello world\" application that is started due to an incoming call where the\n application simply assigns a value to a variable, prints a message to the platform log and exits:","\n \n\n \n \n \n \n \n \n \n \n\n","4.2: Accept or Reject a Call","This CCXML document shows an example of how to process a incoming call event and answer or reject the call based on the\n phone number of the calling party:","\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n","4.3: Simple Dialog","This is an example of running a simple VoiceXML dialog from CCXML. The application answers an incoming phone call and then\n connects it to a VoiceXML dialog that returns a value that is then logged to the platform:","dialog.ccxml:","\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n","dialog.vxml:","\n \n\n
\n \n \n Please say some numbers ...\n \n \n \n \n \n
\n
\n","5: CCXML Elements Listing","Accept an incoming phone call","Assign a variable a value","","Cancel a CCXML event timer","CCXML container element","Make an outbound call","Create a new CCXML session","Create a multi-party audio conference","Destroy a multi-party audio conference","","Prepare a dialog for execution","","Start a dialog session's execution","","Stop a dialog session's execution","","Terminate a phone connection","","Used in statements","","","Block of event-processing statements","Ends execution of the CCXML session","","Preload a CCXML file","","Move execution to a new location","Conditional logic","Connect two audio sources","","Log to the platform debug log","","Merge two connections at the network level","","Override HTTP headers and provide document metadata","","Provide document metadata","Move an event source to another ccxml session","","Redirect an incoming call to a new endpoint","","Reject an incoming phone call","\n","An implementation "," support "," within the ","\n element and in executable content. "," contain executable content. The\n implementation "," evaluate "," in a "," immediately\n after the document is loaded, along with any "," elements, in document\n order. When used as a child of the "," element, "," cannot be used to execute\n dynamically fetched content obtained using ",". The implementation ","\n evaluate "," in executable content as it is processed.","The ECMAScript contained within the "," can declare variables with the ECMAScript ","\n statement. Variables declared in this manner are declared in the scope of the closest containing scope CCXML element. They are\n known from the point of declaration to the end of the containing scope. The implementation "," allow\n reference to these variables from CCXML and from ECMAScript, using either the fully-qualified variable name, or the declared\n name.","If the implementation is unable to run the script referenced it ","INFORMATIVE NOTE: The "," element's resource loading model is a bit different than the rest of\n CCXML for a number of reasons. Because CCXML and ECMAScript applications can be CPU intensive to compile we define\n ","'s src attribute (defining the URI of the document to load) to be a static string instead of a\n dynamically valued ECMAScript result. This allows implementations to load ECMAScript content at CCXML document load time and\n perform compiling and/or caching of the resulting ECMAScript code. We do however recognize that there are cases where a CCXML\n application needs to load a dynamic ECMAScript resource, for this reason applications can use the the\n "," element to asynchronously load a resource and then execute it by referencing it's\n "," in the the ","8.2.2.2: ","This attribute must not be specified in conjunction with the fetchid\n attribute.","Valid URI","A URI which references a resource which is the script content, and which must be resolved\n when the CCXML document is compiled.
\n Note that the value of the src attribute must not be an ECMAScript expression in order to allow it to be resolved at\n compile-time. If the ECMAScript script referenced can not be loaded at the CCXML document loading and parsing phase it\n should be considered a Fetching & compilation error as defined in section 9.5.1.","This attribute must not be specified in conjunction with the src\n attribute, otherwise ignored.","valid fetch ID","An ECMAScript expression which returns the fetch identifier of a completed fetch request,\n acquired either in a fetch with the fetchid attribute, or from the fetchid attribute of a fetch.done event. If the\n fetch identifier is invalid, has not completed, or the fetched content is not valid ECMAScript, an error.semantic\n event must be thrown.","This attribute is only valid in conjunction with the src attribute, otherwise ignored.","Character string","Character string in CSS2 [CSS2] format","The character string must be interpreted as a time interval. This interval must begin\n when the script is requested; If the script has not been fetched at the end of this interval, an error.fetch\n or error.createccxml \n event must be thrown.","The character string must be interpreted as a time interval. This indicates that the\n document is willing to use content whose age must be no greater than the specified time in seconds (cf. 'max-age' in HTTP\n 1.1 [RFC2616]). The document is not willing to use stale content, unless maxstale is also\n provided.","The character string must be interpreted as a time interval. This indicates that the\n document is willing to use content that has exceeded its expiration time (cf. 'max-stale' in HTTP 1.1 [RFC2616]). If maxstale is assigned a value, then the document is willing to accept content that has\n exceeded its expiration time by no more than the specified number of seconds.","charset","UTF-8","valid character encoding type","A character string that indicates the character encoding type of the script. UTF-8\n and UTF-16 encodings of ISO/IEC 10646 must be supported (as in [XML] ) and other\n encodings, as defined in the [IANA] , may be supported.","8.3: Session Variables","Every CCXML session has a set of standard ECMAScript variables that are available to the program during execution called\n session variables. The session variables are defined by the CCXML implementation when the CCXML session is created and are\n read-only to the running script and cannot be modified by the CCXML program. New session variables cannot be declared by CCXML\n programs.","Session variable values visible to a CCXML application reflect the state of the executing CCXML session, current as of the\n occurrence of the event being processed. For example, when an application processes a Connection event such as\n ",", the value of the state property of the corresponding Connection object will be updated by the\n CCXML implementation so that if the CCXML program's event handler evaluates the state variable, it will evaluate to\n ","ALERTING",", since "," always results in a transition to the ","\n state. This is true even if the underlying connection is actually ","DISCONNECTED",", in which case a\n ","connection.disconnected"," event would be queued. It is the responsibility of the CCXML implementation to control and\n update the session changes as they occur in the CCXML session. It is assumed that session changes are visible to the CCXML\n program as they occur. However, it is permissible for a CCXML implementation to ","optimize"," session changes by\n \"lazy-binding\" values as they are accessed or evaluated by a CCXML program, so as to minimize processing time. For example, an\n implementation might only update the current Connection states when a CCXML program evaluates the variable during execution\n time versus continually updating the Connection states inside ECMAScript scope as state changes. Regardless of when session\n variables are updated to reflect changes, the CCXML implementation is "," to provide the correct\n values when accessed by a CCXML program.","Variables defined in the session scope are subject to the parent scope chain delegation model but do not have a parent scope\n defined.","The following are the list of standard session variables:","\n String that indicates the startup mode that the script was started as:\n\n ","Value","newcall","Session was started due to a new incoming call.","external","Session was started due to a external session launch request.","createccxml","Session was started due to a ","A globally unique string that indicates the session identifier of the executing CCXML session.","session.uri","URI that was used when creating the current CCXML session. If the interpreter fetched multiple documents as a result of\n one or more HTTP redirects (e.g. 302), the value of this session variable is set to the URI of the final target.\n "," includes the query string used when fetching the document, if one is present.","session.parentid","String that indicates the session identifier of the parent of the CCXML session that created this session. In the case\n the current session has no parent, the value of the variable will be ECMAScript undefined. Once a new CCXML session is\n created, the new session and its parent are completely independent.","session.connections","\n Associative Array which contains a list of the Connection objects that the session is currently using. The array is\n associative and each key in the array is the connection identifier for the Connection. For example,\n ","session.connections[\"1234\"]"," would return the Connection object for connection ID 1234. The following example\n demonstrates the use of the "," variable:\n ","\n\n \n <-- if the disconnect is on the first connection, do something -->\n \n \n \n\n","session.conferences","An Associative array which contains a list of the Conference objects for which the session is attached using\n "," For example, ","session.conferences[\"1234\"]"," would return the Conference\n object for conference id 1234.","Associative Array which contains a list of the Dialog objects that the session is currently using. The array is\n associative and each key in the array is the dialog identifier for the Dialog. For example,\n ","session.dialogs[\"1234\"]"," would return the Dialog object for dialog id 1234.","session.ioprocessors","Associative Array which contains a list of external event I/O access URIs which are available to the current session. The\n array is associative and each key in the array is the type of the event I/O processor. For example,\n ","session.ioprocessors[\"basichttp\"]"," would return the access URI (e.g.\n ","http://www.example.com/ccxml/basichttp",") for the \"basichttp\" type event I/O processor.","session.values","Associative array which contains a list of session parameters passed on session creation. For sessions created using\n "," contains variables passed using the '","'\n attribute of ",". Other session creation mechanisms, such as the HTTP-based session creation I/O\n processor defined in Appendix L, define other mechanisms for populating this variable.","8.4: Application Variables","CCXML provides application variables which, like session variables, persists across the CCXML application. Application variables differ from session variables in that they can be modified by CCXML\n programs.","The application object is initialized by the CCXML implementation. Application variables that are properties of the\n application object are not explicitly declared. \n By default, application variables have the value ECMAScript undefined. Variables in the application scope are subject to the\n parent scope chain delegation model and have session as their parent scope. For example:","\n \n \n \n \n","Application variables are visible within documents which form the ","CCXML\n application",". For example, a document in a CCXML application could assign an application variable a value using\n ","",", and a later document in the CCXML application could\n reference ","application.userid"," to retrieve the value 'user001'.","Application developers should be careful in their use of application variables since they are visible to all CCXML\n documents within a CCXML application.","9: Event Handling","This section contains information on ","9.1: Overview","Event Handling is one of the most powerful features of CCXML. CCXML events can be delivered at any time and from a variety\n of sources. This flexible event-handling mechanism is essential for many telephony applications.","Every CCXML session can send and receive events. These might be in response to a previous action by the CCXML session (e.g.,\n an outbound-call request, which generates an event to indicate when the call goes off-hook), or on the initiative of some\n external source (e.g., an incoming call to be answered). Events can be generated by the telephony system (as in the two\n previous examples), other CCXML sessions (which emit events via ","), Dialogs, or external sources. CCXML\n sessions can also send events to themselves.","There is a core set of telephony-related events (derived from the JCC event model for connection objects; see the JAIN Call\n Control API (JCC) ","[JSR021]"," for more information) that a browser "," support. Implementers "," define and support any platform-specific events they\n like. In addition, users/programmers may use "," to send arbitrary events to internal or external\n destinations, or may send arbitrary events to CCXML documents from internal or external sources and may specify transition\n handlers to handle these events.","The transmission and reception of events both external and internal is controlled by a logical component in the platform\n called the \"Event I/O Processor\". A platform "," support more than one type of Event I/O Processor and\n each of them may support a different format of external events (For example: SOAP, JMS, SIP, Simple HTTP or any other event\n transmission approaches). For incoming events the Event I/O Processor is responsible for accepting the incoming event and\n transforming it into an ECMAScript event object that can be accessed by CCXML. For outgoing events the Event I/O Processor is\n responsible for deciding the serialization and transport formats. The operation and behavior of Event I/O Processors is\n platform dependent; however, this specification defines a Basic HTTP Event I/O Processor (Appendix K) that defines event\n transmission over HTTP. External Event I/O processors and new events created using "," will typically\n generate application-specific events with different names than those of the standard events in this specification; however, it\n is legal for external sources and for events created using "," to generate standard events. For instance,\n it is useful to be able to generate a "," event to attempt graceful termination of a session from an\n external context, or from another CCXML session. Platforms "," reject any standard events that do\n not contain all of the mandatory properties defined in this specification, and "," notify the\n sender of the rejection (for instance with an ","error.send"," event).","Each running CCXML interpreter has a queue, into which it places incoming events. Events are generally queued on a first-in,\n first-out (FIFO) basis; however, certain classes of events are queued differently, as described in the paragraphs below. A\n CCXML programmer can only gain access to these queued events by using the "," element with\n associated "," elements.","An event can be delivered to a CCXML session using a "," element in which case an optional delay may\n be specified. If a delay is specified, the event is not delivered to the target CCXML session until the delay time has elapsed.\n When the delay has elapsed, the event is queued as if it had just occurred, using standard queueing rules.","There are three types of events that, when delivered to a CCXML session, are handled differently. All\n ","ccxml.kill.*"," events are placed at the head of the event queue rather than the tail so\n that they are processed in preference to all other events. All ","error.*"," events are placed at the head of the queue\n but behind any ",", or "," events that are already on the\n queue. "," events are always placed at the head of the queue."," is interpreted by an implicit Event Handler Interpretation Algorithm (EHIA). The\n EHIA's main loop removes the first event from the CCXML session's event queue, and then selects from the set of\n ","s contained in the ",". A "," always\n indicates a set of patterns to match event names, "," indicate a required current value of the\n ECMAScript state variable specified in the "," indicate a\n further ECMAScript conditional expression to be evaluated. The "," that accepts the type for the\n just-removed event, is in the specified state, has a satisfied conditional expression, and appears first in the\n "," in document order, is the selected ","Once selected, an object representing the event being processed is created at transition scope, and the elements inside the\n "," are executed in document order. If an ECMAScript evaluation error occurs during the execution\n of an element within a "," be raised for\n that element, and successive elements within that "," be\n executed; Note that while an element that references an invalid connection, dialog, or conference identifier also causes the\n platform to raise ",", these scenarios "," terminate execution of the\n "," in which that element is contained.","At most one "," will be chosen. If no "," meets all the criteria,\n none are selected and the event is simply dropped; the EHIA loop then starts over again, removing the event at the head of the\n queue. The only exception to this rule is when ","\n events are received; in this case, the CCXML interpreter will end the session if there are no ","s\n that match the "," events explicitly.","Any events that arrive while an event is already being processed are just placed on the queue for later. If the event queue\n is empty, and the EHIA wants to process an event, execution pauses until an event arrives.","During the processing of an event by the EHIA, the state of any ECMAScript objects exposed by a platform, such as the\n Connection object, "," reflect the state of the CCXML session immediately following the occurrence of\n the event. For instance, if a '","' event is being processed against a connection with ID 1234,\n then ","session.connections['1234'].state"," would have a value of ","Connection.ALERTING",". This is true even\n if the actual connection has already been terminated, with a '","' event queued (but not yet\n processed) against the session. It is ","required"," that the ECMAScript context for the session is updated\n prior to the selection of a matching ",", since the "," might contain\n an ECMAScript conditional expression, the value of which depends on the state changes caused by the event.","Elements inside an "," run \"quickly\", without blocking\n execution. This will allow events to be rapidly processed. CCXML applications should be aware of this and should keep\n calculations such as large ECMAScript functions within a transition to a minimum.","The only way for CCXML execution to leave an "," is via an explicit\n "," inside a "," or an unhandled error or\n "," event ."," also declare a state variable attribute. An\n ","'s state variable must be declared in the ccxml scope using a "," can be considered, and programmed as, a\n finite-state-automaton, with the state variable indicating the automaton's current state or node, and the\n ","s, driven by incoming events, moving the machine to a new state and creating side effects along\n the way. If a state variable is not defined in the ","'s ","statevariable"," attribute a\n default variable named \"","state$","\" defined at the ccxml scope will be used instead. The initial value will be\n ECMAScript '","'.","9.2: Elements","9.2.1: ","9.2.1.1: Overview"," acts as a container for ","s. A valid CCXML document\n "," only have a single ","9.2.1.2: ","ECMAScript Variable name","This is a CCXML variable name, which is the name of the eventprocessor's state\n variable. This variable must be defined using the var or the script element in the ccxml scope."," contain only ","9.2.2: ","9.2.2.1: Overview","The content of a "," specifies the actions to be taken when it is selected. The\n "," are examined by the EHIA in document order.","In order to be selected, a "," satisfy three criteria:","If a state attribute is specified on the "," the current value of the associated state\n variable (as specified in the parent ",") "," be equal to one of\n the values specified in the state attribute of the ",". If no ","state"," attribute is\n specified on the ",", this criteria is met regardless of the value of the\n ","the expression specified by the "," 's "," attribute "," evaluate to ",", if that attribute is present","the current event's "," property "," match the pattern specified by the\n ","event"," attribute, if that attribute is present"," with none of the attributes, ",",\n will always be selected when encountered by the EHIA.","The contents of the received event object "," be available via the transition scoped read-only\n ","event$"," ECMAScript variable. This variable is accessible from the ","\n attribute to allow CCXML Applications to conditionally select ","'s based on the contents of the\n event.","9.2.2.2: ","This indicates the current possible value of the variable associated with the\n statevariable attribute of the parent ",". More than one value may be specified, separated\n by whitespace.","This is a pattern used to match event names as specified in Section 9.2.2.3.","ECMAScript Boolean Expression","An ECMAScript Boolean expression. If this attribute is present, it must evaluate to true\n for the transition to be selected.","9.2.2.3: "," Event Matching","The event attribute of a "," specifies a pattern used to match event names. Each character in\n the pattern specified by "," must match the corresponding character in the event name, except for the asterisk\n ('*') character, which acts as a wildcard that matches any substring of zero or more characters in the event name. Patterns are\n dot-separated strings of arbitrary length. Event names are case-insensitive.","Pattern match examples","Pattern","Matches","*","any event name","error.fetch, error.dialog.notstarted","error.*.*","err*","any event name starting with \"err\"","9.2.3: ","9.2.3.1: Overview"," is used to send messages containing events or other information directly to another CCXML\n Interpreter or other external systems using an Event I/O Processor.","The event target of "," is specified using the ","target","targettype","\n attributes. These attributes control how the platform should dispatch the event to its final destination."," attribute specifies the unique identifier of the event target that the Event I/O Processor should\n send the event to. This can be the value of a CCXML Session ID or a Dialog ID if you wish to send an event to one of these\n respective targets. In the case where you are using some other Event I/O Processor this attribute should be able to describe\n how to connect to the event destination (for example a SIP URI for SIP-INFO messages or a HTTP URI for Web Services). If the\n value of the "," attribute is not supported, invalid or unreachable by the Event I/O Processor the Platform\n "," throw a ","error.send.targetunavailable"," attribute controls what Event I/O Processor the event should be sent to. The default value of\n this attribute is '","'. If the event "," specified is not supported the platform ","error.send.targettypeinvalid","A platform "," support the following values for the "," attribute:","CCXML Session Event Processor.","Dialog Event Processor.","basichttp","Basic HTTP Event I/O engine (See Appendix K).","Platforms "," support other types of Event I/O Processors, for example: Web-services, SIP or basic\n HTTP GET. However, platforms "," name the Event I/O Processor beginning with \"","x-","\" to\n signify that they are platform dependent."," also specifies the content of the message to be sent. "," specify message content in one of two ways (the following mechanisms are mutually exclusive):"," attribute with an "," attribute specifies an ECMAScript expression that returns the name of the event."," attribute specifies a space separated list of CCXML ECMAScript variables to be included\n with the message.","\n\n\n\n","Inline XML content that specifies the contents of the message being sent.\n ","\n\n \n 22343\n \n18005551212\n \n\n","When inline XML is specified, the content of the "," is parsed but "," be\n ignored by the sending CCXML Interpreter until the "," is executed. XML namespace binding within the\n "," be preserved in the message sent to the\n "," target. This may result in XML namespace declarations being added to the message contents in order to\n resolve XML namespace prefixes whose associated namespace declarations were not contained in the message contents in the\n original CCXML document. It is the responsibility of the Event I/O Processor responsible for forwarding events to the\n "," target to parse the incoming message and remove the namespace bindings, if required by the\n "," target.","The sending CCXML Interpreter "," alter the content of the "," other\n than by adding namespace declarations for unresolved namespace bindings. The data contained within a "," be sent to the destination specified in the "," attribute of\n "," using the Event I/O Processor specified by the ","The mechanism by which the content of the message is made available to the target depends on both the\n "," and the way in which the content is specified:","When "," is used with the "," attributes, and the\n "," is \"","\", the mapping from "," variables to event object properties\n is well defined. Each variable listed in the "," attribute is added as a property of the event object.\n Qualified variables retain their qualification and are mapped into nested properties of the event object. If a variable is an\n ECMAScript Object, then all properties of the variable are mapped into nested properties of the event object."," is used with inline XML content, and the ","\",\n the mapping of that XML content to event object properties is implementation-specific, and outside the scope of this\n specification.","\", each variable in the "," is sent to the web server as\n defined in Appendix K"," is used with either "," attributes or inline XML\n content, and the ","\" or a platform extension, the mechanism by which\n "," variables or XML content are made available to the event target is implementation-specific, and outside\n the scope of this specification.","Although the full set of requirements for the Event I/O Processor is not within the scope of this specification, an event\n processor sending an event to a CCXML Interpreter is required to generate an event which can be processed in a CCXML Session.\n See Section 9.1 for details regarding the processing of incoming events by an CCXML Interpreter.","When a message is successfully sent to the target, a ","send.successful"," be\n thrown. Note that this does not mean that the target processed the message successfully. It is up to the target to generate\n events specific to the message. These events are application specific.","If the send request fails, an event signifying the error MUST be returned to the CCXML Session. The\n failure events are documented at the end of this section.","Events generated by "," will have their ","eventid","eventsource","eventsourcetype"," attributes derived from the execution of the "," element.\n "," will match the value returned via ","sendid"," will be the ccxml session\n id. "," will be set to the string '","9.2.3.2: ","A valid target URI","An ECMAScript expression returning the target location of the event. The target\n attribute specifies the unique identifier of the event target that the Event I/O Processor must send the event to.","ccxml
\n dialog
\n basichttp","An ECMAScript expression which returns a character string that specifies the type of the\n Event I/O Processor that the event must be dispatched to.","An ECMAScript left hand side expression evaluating to a previously defined variable. The\n value of the attribute must receive an internally generated unique string identifier to be associated with the event being\n sent.","delay","'0s'","The character string returned must be interpreted as a time interval. The send\n element must return immediately, but the event must not be dispatched until the delay interval elapses. Timers are useful\n for a wide variety of programming tasks, and can be implemented using this attribute.
\n Note: The delayed event queue for sending events must be maintained locally. Any events waiting to be sent must be\n purged when the session that issued this request terminates.","This attribute must not be specified in conjunction with inline content","An ECMAScript expression which returns a character string that indicates the event name\n being generated. The event name may include alphanumeric characters,\n \n \"_\" (underscore)\n \n and the \".\" (dot) character. The first character\n MUST NOT be a dot or a digit.
\n event names are case-insensitive.","A list of zero or more whitespace separated CCXML variable names to be included with the\n event. Values for these variables are evaluated when the "," element is processed See section 9.2.3.1\n for details on how these variables are made available to the target.","The ECMAScript object returned contains information which may be used by the\n implementing platform to configure the Event I/O Processor. The meaning of these hints is specific to the implementing\n platform and the Event I/O Processor. Note: The meaning of these hints is specific to the implementing platform and\n protocol. Platforms that do not support hints MAY ignore this attribute. See Section 9.5.6 for additional requirements when hints are supported by the implementing platform.","9.2.3.3: "," Examples","In this example we send the current CCXML session a ","hello.jack"," event that contains a single field. We catch the\n event, log the field and exit:","\n \n\n \n \n \n \n \n \n \n \n \n \n\n \n","In this example we send a event to our parent and then exit:","\n \n\n \n \n \n \n \n \n \n\n \n","In this example we catch a "," request and just return a error event back to the dialog:","\n \n\n \n \n \n \n \n \n \n\n \n","In this example we send the current CCXML session an event that contains an ECMAScript Object and a qualified variable. We\n catch the event, log some properties resulting in the string \"","1, 2, 3, 4","\", and exit:","\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n","9.2.4: ","9.2.4.1: Overview"," is used to move an event source (such as a Connection object) to an executing CCXML session. When\n an event source is moved to a session, events originating from that source "," be delivered to that\n session's currently executing CCXML document. The "," OR the ","source"," be specified. If neither attribute is specified or both attributes are specified, an\n ","Support for the "," element is optional in CCXML platforms. Even if "," is\n supported platforms "," only support it between a restricted set of CCXML sessions. If\n "," is unsupported the CCXML platform "," raise an ","error.move","\n event."," attempt "," fail under any of the following conditions:","The referenced event source does not exist, or does not belong to the session executing the\n ",";","The referenced event source is immovable - the CCXML session itself and various external event I/O processors are\n examples of this;","The referenced event source is currently bridged to another object through an implicit or explicit join;","The session to which the event source is being moved does not exist, or cannot accept the event source that is being\n moved;"," attribute is used to identify the event source, but refers to multiple event sources (such as\n ","connection.merge.failed",");"," fail for causes other than the above, which may or may not\n be platform specific","In the event of a "," failure, an "," be\n generated to indicate that the "," attempt was unsuccessful. Otherwise, a ","move.successful","\n event "," be generated against the session that performed the "," to indicate\n that the request has completed successfully.","Since each CCXML session has an event queue, it is possible that a session executing a "," will\n already have events in its queue from the event source that is being moved. As an example, this situation could easily occur\n with "," if the incoming connection is abandoned before a\n CCXML platform initiates processing. Any such events "," be removed from the queue of the session\n performing the ",", and placed into the queue of the session that the event source is being moved to.\n Each event moved in this manner "," be inserted into the queue of the target session as if it was a\n new event occurring in the context of that session. The order in which events are queued is the order in which they appear in\n the event queue of the session performing the ",". If the "," attribute is specified, then\n the referenced event "," be placed into the queue of the target session before other queued events\n from the event source are inserted. Note that queueing rules governing the order in which the inserted events will be processed\n continue to apply.","Like all CCXML elements, "," executes asynchronously. As such, there is a period of time during which\n events generated by the event source being moved cannot be processed either by the session performing the\n ",", or by the target session. If the "," fails, then these events remain in the\n queue of the session that attempted the "," be processed normally.\n However, while the "," is being performed, events from event sources other than the one being moved\n "," continue to be processed according to the EHIA. As such, a failed ","\n request may result in events being processed in a different order than if no "," operation was performed.\n Note that the relative ordering of events from the event source being moved is not changed even as a result of such a\n failure.","9.2.4.2: ","This attribute must not be specified in conjunction with the event\n attribute.","(valid connection or dialog ID)","An ECMAScript expression which returns a connection ID or dialog ID. The event source\n associated with this identifier must be moved to the target session.","This attribute must not be specified in conjunction with the source\n attribute.","An ECMAScript expression which returns an event object.","The event source from which the event object originated, if any, must be moved to the\n target session. The event must also be sent to the target session to provide a notification.","A valid CCXML session id","An ECMAScript expression that identifies the session to which the event source must be\n moved.","9.2.5: ","9.2.5.1: Overview","When a CCXML program uses "," to send an event and includes a "," attribute, the\n "," command will cancel the pending event, if possible.","The cancel operation cancels a pending event by removing it from the delayed event queue of the CCXML session that initiated\n the ",", preventing it from ever being delivered. If the delay has expired and the event has already been\n removed from the delayed event queue, the "," request "," fail and an\n "," be delivered to the event queue of the CCXML session that\n executed the "," with the "," property populated with the "," of the event that the "," was requested for.","\n Otherwise, a ","cancel.successful"," be\n delivered to indicate that the "," was successful, and that the cancelled event was not delivered.\n Sessions are only permitted to cancel their own delayed events; they may not cancel the delayed events of other sessions.","9.2.5.2: ","A valid event identifier","An ECMAScript expression which returns the value of the event identifier that was\n received when the send command was issued.","9.3: Events","9.3.1: ","This error event MUST be thrown when the execution of an element causes an invalid operation to be\n performed on a session and/or connection. The fields available in this event are:","The ID of the affected session.","The ID, if specified in the element being executed, of the affected connection, dialog,\n session, event, or conference.","A description of the reason the operation was denied. Content of this field is\n platform-specific.","tagname","This property must be set to the ECMAScript string value of the name of the element that\n produced the error (ie accept, reject, etc).","9.3.2: ","This error event MUST be thrown when there is a semantic error in a CCXML element ( e.g. passing an\n incorrect value for an attribute, etc.).","This property must be set to the ECMAScript string value of the printable error message\n associated with this error. Content of this field is platform-specific.","attributelist.*","If available in the interpreter, this property must be an object whose properties are the names\n of the attributes of the element in error. The value of each attribute property must be the corresponding string value of\n the attribute.","scope","Identifies the scope and impact of the semantic error; this attribute MUST be set to one of the following string values:
\n transition - ECMAScript evaluation error, terminating the execution of the transition in which the error occurred.
\n element - Error at element scope, resulting in the affected element not being executed correctly but not terminating the\n execution of other elements within the transition.","9.3.3: ","This error event "," be thrown when CCXML could not send the event to the target listed in\n "," due to it currently being unavailable. The fields available in this event are:","The ID of the affected event.","9.3.4: "," be thrown when the "," attribute specified in a\n "," is not valid.","The fields available in this event are:","9.3.5: ","error.send.failed"," be thrown when a "," could not be completed for a\n reason not covered by another ","error.send.*","(for example, due to an invalid event name specified on )","9.3.6: ","This event MUST be thrown when an event is successfully delivered to the specified receiver.\n Receipt of the event does not imply the event has been processed by the receiver but simply that it has been sent without\n error. The fields available in this event are:","The ID of the send request as returned in the sendid attribute of the send\n element.","9.3.7: ","This event MUST be thrown when an event source is successfully moved to a CCXML session. The fields\n available in this event are:","sourceid","The ID of the event source that has been moved as specified either directly via the\n source attribute or indirectly via the event attribute of the move element.","9.3.8: ","This event MUST be thrown when the sending of an event has been successfully cancelled. The fields\n available in this event are:","The ID of the send event that has been cancelled as specified in the sendid attribute of\n the cancel element.","9.3.9: ","This event MUST be thrown when a move request performed by a session fails to complete\n successfully. The fields available in this event are:","The ID of the event source referenced either directly via the source attribute or\n indirectly via the event attribute of the move element.","The ID of the target session to which it was attempted to move the event source.","A description of the reason for which the move request failed. Content of this field is\n platform-specific.","9.4: Standard Events","9.4.1: Overview","CCXML can generate arbitrarily-named events. While any event name is possible, there is a small set of well-known events\n that are generated as a matter of course, and which any telephone application should handle. There are three kinds of these\n events: connection events, language events and error events.","The first, and larger set, is present so a CCXML session can keep abreast of events happening with the telephone network.\n CCXML is designed to be neutral with respect to the telephony layer, so the event set must be very generic and capable of\n describing the behavior of a wide variety of systems (e.g., [Q931], [SS7], VoIP, etc).","9.4.2: Standard Event Attributes","9.4.2.1: Overview","All events received in a CCXML session must have a number of standard fields. It is the responsibility of the Event I/O\n Processor that delivered the event to make sure that they are present.","9.4.2.2: Standard Event Attribute Table","This property MUST be set to the ECMAScript string value of the event\n name.","The unique identifier for the event. This MUST match the sendid\n attribute of send, if the event was generated by a CCXML document.","The unique identifier of the event source. If the event source can receive events, you can use\n this identifier in the target of send.","The name of the Event I/O Processor that sent this event. If the event source can receive\n events, you can use this in the targettype attribute of send.","9.4.3: Connection Events","9.4.3.1: Overview","CCXML applications are notified of Connection activities by events, which often reflect Connection state changes.\n Applications may also take actions which change the state of a Connection and which cause other events to be generated.","Connection events and their properties are specified in sections 10.6: Events, and\n 10.2.3: Connection Events","9.4.4: Language Events","Language Events are a general class of responses that occur as a result of the execution of elements within a CCXML\n document. These events may be further categorized as follows:","Document Control: These events are detailed in section 6.3","Dialog Control: These events are detailed in section 7.3","Event Handling Control: These events are detailed in section 9.3","Call Control: These events are detailed in section 10","9.4.5: Error Events","9.4.5.1: Overview","CCXML uses its event handling mechanism to notify a CCXML document of errors that occur during execution. An error\n notification takes the form of an error event that is added to the event queue of the CCXML document where the error occurred.\n All error events are named with the prefix ","\"error.\""," so that a properly defined "," can\n filter out error events.","Here is an example of a "," that can be used to filter out and report error events:","\n\n \n \n\n","All error events have a set of properties in common, shown in the following table:","This property is set to the ECMAScript string value of the printable error message associated\n with this error","9.5: Error Handling","Due to the nature of CCXML's event handling mechanism, some error scenarios are treated differently. These scenarios are\n described below.","9.5.1: Fetching & compilation errors","Errors that occur in trying to load and compile a CCXML document, such as the inability to fetch the CCXML page or\n statically referenced ECMAScript content, XML parsing or validation errors (Including checks for mutually exclusive attributes\n or any other constraints as defined in the this specification, it's attribute tables, schema or DTD), compilation errors or\n other errors that occur as a result of trying to fetch and run a CCXML page prior to document initialization. The handling of\n fetching errors is dependent on the context of the fetch; if the fetch was triggered by a running CCXML document using\n ",", then an "," (respectively) "," be thrown to the initiating session. If an error occurs\n fetching the initial CCXML document for a session created to handle an incoming call, the CCXML session created for the\n incoming call "," be terminated; the incoming call "," be rejected. If\n the session is created through other means (such as the Session Creation Event I/O Processor), the session "," be terminated; the creator of the session "," be notified.","9.5.2: Document Initialization Errors","Errors that occur during documentation initialization (elements that occur in the CCXML document before\n ",") occur outside of CCXML's event handling mechanism. These errors "," cause the CCXML thread of execution to terminate and notify the platform of the document error.","9.5.3: Error In "," attributes"," contains ","s"," that comprise CCXML's event handling\n mechanism. Since errors in "," attribute evaluation could keep the EHIA from correctly\n processing an event, these errors "," cause the CCXML thread of execution to terminate and notify the\n platform of the document error.","9.5.4: Error in "," attributes specify when the elements contained by the "," should\n be executed. Since errors in "," attribute evaluation could keep the\n "," from correctly handling the error event, these errors "," cause the\n CCXML thread of execution to terminate and notify the platform of the document error.","9.5.5: Errors While Handling Error Events","If an error occurs during the handling of an error event another error event will be raised and posted to the front of the\n event queue. In many cases this may be perfectly acceptable and the CCXML application may be able to successfully recover from\n the error. In some situations however this can lead to an infinite loop in the CCXML session. Implementations MAY choose to include some form of loop detection and to terminate the CCXML session when a loop is\n detected.","9.5.6: Errors in hints attributes","Several elements within this specification define a "," attribute. Platforms that do not support\n "," on an element "," ignore this attribute. If a platform supports the\n "," attribute on an element, the attribute is specified, and ECMAScript evaluation of the value of the hint\n fails or the ECMAScript expression does not resolve to an ECMAScript object, "," be raised for that element and successive elements within the "," containing\n that element "," be executed. Additional processing of hints by the implementing platform is\n platform-specific.","10: Telephony Operations and Resources","10.1: Overview","The primary goal of CCXML is to provide call control throughout the duration of a call. Call control includes handling\n incoming calls, placing outgoing calls, bridging (or conferencing) multiple call legs, and ultimately disconnecting calls.","In CCXML call control occurs through three major concepts: Connections, Conferences and Bridges.","A Connection is an object modeling a resource by which two independent unidirectional media streams, and optionally any\n associated network signaling traffic, can be controlled by a CCXML session. This corresponds roughly to a \"call leg\" as the\n term is used informally. The picture below illustrates the media streams associated with the Connection c1.","A Bridge occurs when the input and/or output media streams of Connections or Conferences are linked or \"joined\" together.\n The picture below depicts the result of a full duplex "," between the connections ","c1","c2","A Conference is an object that controls the mixing of media streams for two or more Connections through Bridges.In the\n picture below, the connections c1 and c2 are joined in a full duplex mode to the conference C1.","These concepts are discussed in greater detail in the sections below.","10.1.1 Concepts Background (INFORMATIVE)","The goals of the CCXML call model are to focus on relatively simple types of call control and to be sufficiently abstract so\n that the call model can be implemented using all major telephony definitions such as JAIN Call Control(JCC) [JSR021], [CSTA], and [S.100]. The JCC call model meets these requirements by providing an event model for connections which abstracts\n away many of the differences between telephone networks (e.g., [Q931], [SS7], VoIP, etc). Additionally, this call model is small and easily-understood so that concrete example\n programs can be written.","JCC was designed to be a cross-platform high-level event set to describe as generic a phone model as possible. The JCC call\n model consists of Addresses, Calls, Connections, and Providers. In the context of CCXML, it was felt that the Address, Call,\n and Provider objects would add more complexity than value, so these were omitted as explicitly visible objects. Instead the\n behavior of Connections became the focus.","The CCXML call model therefore is based on the behavior of Connections. A call is received or initiated under control of a\n CCXML session through the properties of a Connection.","Note that the JCC model is designed for endpoint devices only.","10.2 Connections","The CCXML call model is based on the behavior of Connections.","Each Connection has one input by which it receives a media stream from another Connection or Conference.","Each Connection has one output media stream that can be directed to the inputs of multiple Connections and/or\n Conferences.","If a network call is active on a Connection (in the ","CONNECTED","PROGRESSING"," state), the media stream received from the network is the Connection output, and the Connection input\n media stream is transmitted to the network.","Dialogs are also modeled internally as a Connection for the purposes of media interaction. The Dialog object behaves as if\n it was a Connection object and can be joined to other resources in the same way as any other Connection. A Dialog will not\n however be listed in the session.connections session variable.","\n\n","For a Connection created by "," , the Connection input and output media streams are available\n to the Dialog resource.","10.2.1: Connection State","The state of a Connection Object reflects events that are generated, either a result of actions that occur within the\n telephony network, or as a result of actions performed by the CCXML application. The following state diagram shows the major\n aspects of Connection behavior, but omits some detail in favor of clarity (e.g. the ","ERROR"," state).","The list of valid states that a connection can be in is:","FAILED","CREATED","Connection Objects are created when a incoming call arrives to the platform via a "," event or\n via the execution of ","Connection Objects are automatically destroyed by the platform after they have reached the "," states. Platforms are responsible for deciding when to remove unused Connection\n Objects, however platforms MUST maintain a Connection Object at least through the "," for the\n corresponding ","connection.failed","connection.redirected","connection.merged","error.connection"," states have reflexive transitions. This is intended to model\n protocols which have additional states at these points, and which may exchange messages such as ","PROCEEDING","FACILITY","NOTIFY",". Platforms "," choose to\n implement additional states which may be reflected in the ","substate"," property of the Connection object.","10.2.2: Connection Object","An instance of the Connection Object is associated with each telephony event source. Each instance is uniquely identified by\n its connection identifier. All Connection instances have a set of properties in common, shown in the following table.\n Properties that are not indicated as required only appear on an instance of the Connection object if they have a value. Other\n properties will always be present.","The Connection Object is an extension of the Media Endpoint Object as defined in\n section 10.4.3.","Connection Properties","This property is the ECMAScript string value of the Connection Identifier, which uniquely\n identifies each instance of the Connection object.","This property identifies the current state of the Connection instance; the value of this\n property is one of the constants defined in section 10.2.5.","This property is a protocol-dependent property which allows further refinement of the state of\n a Connection, if desired.","local","This property is a URI which addresses the interpreter platform; for an incoming call, this is\n the called URI; for a redirected incoming call, this is also the most recent redirection, and the prior values are\n contained in the \"redirect\" property; for an outgoing call, this is the calling URI.","remote","This property is a URI which addresses the remote device; for an incoming call, this is the\n calling URI; for a redirected incoming call, this is the requester of the most recent redirection, and prior values are\n contained in the \"redirect\" property; for an outgoing call, this is the called URI.","protocol","\n This property is a reference to an object defining protocol information for the protocol used on this connection; the\n referenced object defines information which applies to all connections using this protocol, and it has at least two\n properties:\n\n ","name - the name of the connection protocol; the name MAY also be a property on\n the connection instance referencing protocol specific information; if no further protocol specific information is\n available, then Connection.protocol[Connection.protocol.name] is undefined; (see Appendix E for a\n suggested set of protocol names)","version - the version of the connection protocol","\n For example, the assignment of protocol-dependent user-to-user information to a variable tmp from a\n Connection instance referenced by the variable cx would be:
\n \n ","redirect","\n This property is an array representing the connection redirection paths; the first element,\n ","Connection.redirect[0]",", is the original number, with each subsequent element representing the target as of\n subsequent redirections. Each element of the array "," define any of the following four\n properties:\n\n ","uri - this element's path","pi - presentation information","si - screening information","reason - this is the reason for the redirect for example, \"unknown\", \"user busy\", \"no reply\", \"deflection\n during alerting\", \"deflection immediate response\", \"mobile subscriber not reachable\"","This property is the application-to-application information passed during connection\n setup.","originator","This property is set to either \"local\" or \"remote\" and indicates the originator of the\n connection; for an incoming call, this property is set to \"remote\"; for an outgoing call, it is set to \"local\";
\n For example, the assignment of the originating URI to a variable uri from a Connection instance referenced by\n the variable cx would be:
\n
","This property states the type of this object which must be 'connection'.","Platforms MAY choose to add properties to Connection instances. By convention, the properties\n MUST begin with an underscore, \"_\", to identify them as platform-dependent.","10.2.3: Connection Events","In addition to the standard event attributes detailed in Section 9.4.2, all Connection\n events have a set of properties in common, shown in the following table. Fields that are not indicated as required only appear\n on the event object if they have a value. Other fields will always be present.","The ID of the Connection associated with this event.","The platform protocol ID of the Connection protocol.","info","An object which provides additional platform or protocol dependent information","connection","An ECMAScript object reference to the Connection object identified by the connectionid property\n of this event.","Platforms MAY choose to add properties to events. By convention, the properties MUST begin with an underscore, \"_\", to identify them as platform-dependent.","10.2.4: Connection Operations","CCXML defines a number of elements, specified in detail in section 10.5, that are used to interact with Connection Objects.\n Execution of these elements "," immediately change the state of the Connection Object; Connection\n Objects change their state once the event corresponding to the event transition is handed. Elements, such as\n ",", do not actually change the state of the connection but instead\n issue requests to the platform to process the corresponding command that will in turn raise the events that chance the\n connection state. The sole exception to this is ",", which creates a Connection Object immediately,\n with its '","' property set to ",", allowing the Connection Object to be accessed following the\n ",", within the same transition. However, existence of the Connection Object does not guarantee\n anything about the success of the ","When elements are used to request an action against a Connection Object, a corresponding event is always generated to\n indicate the result of executing that request. For instance, when the "," element is used to answer an\n incoming call, a '","connection.connected","' event indicates that the call was accepted successfully, whereas a\n '","' indicates that the call could not be accepted. The events that can be generated by elements\n that act on connections, and the circumstances under which those events occur, are summarized in the table below. Note that the\n "," elements are not included, since these apply to both Connections and\n Conferences, and are discussed in detail in Section 10.4 on Bridges.","There are two common events that can be generated by any of the connection-affecting elements:","If the element cannot be evaluated, for example if the referenced "," contained an invalid\n ECMAScript expression, then an '","' event is thrown - as is the case for all CCXML elements. The\n "," change the state of the associated Connection\n Object(s).","If the element cannot be executed because the current state of the referenced Connection Object (or Objects, in the case\n of ",") is not valid for the requested action, then an '","error.connection.wrongstate","'\n event is thrown. Note that an "," event is thrown based on the state of the Connection\n Object, which in turn reflects the events that have been processed by the CCXML application; it is not based on the actual\n real-time state of the underlying connection, which could change at any time.","It is important to note that because CCXML is fully asynchronous, and because events can occur on the underlying\n communications network at any time, that connection-related events can occur that are not related to application actions. The\n most common of these is ",", which can be triggered by a user-initiated hangup, and which can\n occur in any state during which the call is active.","Finally, once an event is emitted by a Connection Object that transitions to a final state (such as\n ","), further events "," be generated by that Connection Object. Thus, even\n if an application has performed an "," and expects to receive one of ",",\n '","connection.accept.failed","', or ","'connection.failed'",", it could receive a\n ","'connection.disconnected'"," instead. Since this event is associated with a transition to the\n "," state, no further events will be generated; thus the application will not receive any event as a\n result of having performed an ","The following table shows the events that reflect the outcome of the connection-oriented elements defined by CCXML, for this\n reason the table omits the event generated by the underling network (i.e. ","connection.signal","):","Element","Event","Reason","(any)","A semantic error in the application, such as the use of an invalid\n ECMAScript expression, preventing the element from being executed. The intended target Connection Object state is\n unchanged by this event.","An element was used on a Connection Object in a state that is not valid\n for that element. For instance, performing an "," on a Connection Object in the CONNECTED state\n would result in this event. The state of the Connection Object is unchanged by this event.","The connection has disconnected; no further events, including events for\n any pending requests, will be generated. The Connection Object is now in the DISCONNECTED state. Properties of this event\n allow the cause of the disconnection to be determined.","A platform operational error has occurred on the connection; no further\n events, including events for any pending requests, will be generated. The Connection Object is now in the ERROR\n state.","A connection in the ALERTING state was successfully accepted by the\n platform. This event is associated with a transition to the CONNECTED state."," request failed to complete – the\n event’s reason property may indicate why the request failed. The state of the Connection Object is unchanged by\n this event. Example situations that could result in this event include performing "," twice (by\n the time the second "," is processed, the underlying connection would already have been\n accepted), or performing "," after performing a ."," request failed to complete – the\n event’s reason property may indicate why the request failed. This differs from connection.accept.failed in that the\n state of the Connection Object changes to FAILED. This event would typically occur if an error occurred during the\n process of trying to accept the call.","The request completed successfully; the call was\n redirected to the specified destination. This event is associated with a transition to the DISCONNECTED\n state.","connection.redirect.failed","The request failed to complete – the\n event’s reason property may indicate why the request failed. This can happen for any number of common reasons\n – redirect target status (busy, no answer, etc), invalid destination number, insufficient resources, and others.\n This event does not change the state of the call; a CCXML application might well try to redirect to an alternate number,\n or perform some other action.","The request failed to complete, but terminated the\n connection in the process of attempting the redirection. The Connection Object transitions to the FAILED\n state.","A connection in the ALERTING state was either declined successfully (as\n a result of the request), OR was withdrawn before the rejection was performed. The properties of the\n connection.disconnected event must be consulted to determine the actual cause. In either case, the Connection Object\n transitions to the DISCONNECTED state.","connection.reject.failed","The request failed to complete – the event’s\n reason property may indicate why the request failed. The state of the Connection Object is unchanged by this request.\n Similarly to connection.accept.failed, this event can be caused by performing an "," followed by\n a .","The request failed to complete – the event’s\n reason property may indicate why the request failed. Unlike connection.reject.failed, the state of the Connection Object\n changes to FAILED.","connection.progressing","An outbound connection is progressing; properties of the event may\n provide additional information about the progress of the outbound connection. This event does not imply final success or\n failure of an outbound connection, and does not change connection state – the Connection Object remains in the\n PROGRESSING state."," request completed successfully,\n resulting in the establishment of a connection. The Connection Object transitions to the CONNECTED\n state."," request was unsuccessful in\n establishing an outgoing connection. This can happen for any number of common reasons – target status (busy, no\n answer, etc), invalid destination number, insufficient resources, and others. Properties of the connection.failed event\n provide more information as to why the connection attempt failed. The Connection Object transitions to the FAILED\n state."," request was abandoned at the request\n of the application (using ). The Connection Object transitions to the DISCONNECTED state. This event is\n technically the result of the request, but is listed here because it is a possible outcome of the\n "," caused by the application. Note also that a network-triggered connection.disconnected is\n not possible when establishing an outbound call, as this would trigger a connection.failed event.","A connection in the PROGRESSING or CONNECTED states was disconnected\n successfully at the request of the application, or as a result of network-initiated disconnection occurred. The\n properties of the event indicate the actual reason for the disconnection. This event is associated with a transition to\n the DISCONNECTED state.","The request failed to complete successfully,\n resulting in a transition to the FAILED state. This could reflect an error in the disconnection process (such as the lack\n of a disconnect acknowledgement from the network).","Two connections were merged successfully as requested by the\n application. One connection.merged event is received on each of the two connections that were merged. Both Connection\n Objects transition to the DISCONNECTED state when their respective connection.merged events are\n processed.","A request failed to complete successfully – the\n event’s reason property may indicate why the request failed. The states of the involved Connection Objects are left\n unchanged.","10.2.5: Connection Class","All connection objects MUST be initiated via the Connection class. The Connection class MUST be read-only and provide the properties defined below.","The following table lists the constants that correspond to the possible values of the "," property of the\n connection object.","Constant","0","Connection.PROGRESSING","1","Connection.CONNECTED","2","Connection.FAILED","3","Connection.DISCONNECTED","4","Connection.ERROR","5","Connection.CREATED","6","The following table lists the values of each index in the array of Connection states. This array MUST be read-only. Each connection state constant can be used to index into this array to return the\n human-readable string corresponding to that constant.","Connection.states[0]","Connection.states[1]","Connection.states[2]","Connection.states[3]","Connection.states[4]","Connection.states[5]","Connection.states[6]","The following example logs the current state of the connection object:","\n\n \n\n","10.3: Conferences","CCXML applications can use "," to create a new conference, or to attach to an existing\n conference. The CCXML application can connect or disconnect existing connections/conferences/dialogs to the new conference\n using "," (as described in ","Section\n 10.4","). When a session no longer requires the use of a conference, it uses "," to detach\n from the conference. Asynchronous events will be sent to the CCXML document upon completion of each of these operations.","Each Conference Object has one logical output and multiple inputs. The actual output streams of a Conference Object are\n derived by mixing all its input streams, less any contributed audio of an individual Connection, Conference Object who receives\n that output. The output of a Conference Object can be directed to the inputs of multiple Connections and/or Conference Object\n (as a result of bridging).","Some telephony call control definitions do not define a separate Conference Object, instead defining a conference simply as\n a call with more than two parties. In order to accommodate the widest range of underlying telephony API's, CCXML requires\n explicit use of a Conference Object whenever two or more audio streams are mixed.","Unlike connections and dialogs, which are local to a single session (but can be moved between sessions using\n ","), conferences are global across all sessions, and can be bridged with the\n connections/conferences/dialogs of any session. Conferences can be named in order to facilitate the use of that conference in\n other sessions. Assigning a name using the ","confname"," attribute allows other sessions to access the created\n conference by performing a "," with the same value for ",". Conferences\n continue to exist so long as at least one session exists that has attached to the conference using\n "," without a corresponding ",". When a session\n terminates, it implicitly detaches from any conferences to which it is still attached. Note that it is not necessary for a\n session to share a conference by assigning it a name in order for other sessions to make use of that conference. Other sessions\n may still establish bridges to a conference using ",", regardless of\n whether or not they have accessed the conference using ","; only the conference ID is\n required for this. Because conferences are global, it is not legal to perform a "," against a\n conference.","NOTE: A simple two-party call does not require the use of a conference object. This is discussed in Section 10.4.","10.3.1: Conference Object Properties","An instance of the Conference class is associated with each Conference Object created by\n ","Conference Properties","This property is the ECMAScript string value of the Conference Identifier, which uniquely\n identifies each instance of the Conference class.","bridges","This property is an ECMAScript associative array containing the identifiers of all\n connections/dialogs within the session that are currently bridged with the conference. Connections/dialogs owned by other\n sessions and joined to the same conference are not visible","conferencename","This property is the ECMAScript string value of the conference name that was passed in\n . If no name was provided the value is ECMAScript ","This property states the type of this object which must be 'conference'.","10.3.2: Conference class","All conference objects MUST be initiated via the Conference class. The Conference class currently\n has no defined properties.","10.4: Bridges","A \"bridge\" is a relationship between the input and/or output streams of Connection, Dialog, and Conference Objects. The\n bridge concept and the details of its behavior are fundamental to CCXML Dialogs and Connections are equivalent with respect to\n establishing and terminating bridges; the term \"Media Endpoint\" is used as a common term to refer both to Connections and\n Dialogs from the perspective of bridging operations.","There are two main ways in which CCXML applications can manipulate bridges:","Implicitly, using the "," (with '","joinid","') and\n ","'/'","')\n elements;","Explicitly, via the ","Even in the simplest case of a network party interacting with a dialog, two Media Endpoints are ",", and a bridge is established between them implicitly by the action of ",".\n More complex situations, such as two-party calls, two-party calls with \"hotword\" recognition, conference control, and\n \"coaching\" scenarios, all involve the use of multiple Media Endpoint and explicit control of one or more bridges between them\n by using ","The nature of bridges, and the behavior of ",", is concerned with the\n mapping between the media stream inputs and outputs of Media Endpoints and Conferences:","Each Media Endpoint has one input, and 0 or more outputs. If a network call is active on a Media Endpoint, the media\n stream received from the network is the Media Endpoint input, and the Media Endpoint output media stream is transmitted to\n the network. For a Media Endpoint created by ",", the Media Endpoint input media stream is\n available to a recognizer under control of the CCXML session, and the Media Endpoint output media stream can be sourced from\n a resource (such as a Text To Speech engine) under control of the CCXML session.","The output of a Media Endpoint or Conference can be directed to the inputs of one or more Media Endpoints and/or\n Conferences. This is sometimes called \"splitting\" media streams. Not all environments/implementations will necessarily\n support \"splitting\" a media stream in this manner. In such environments, a request to establish a bridge that requires the\n presence of splitting may fail.","A Media Endpoint input can come from the output of only one Media Endpoint or Conference.","A Conference input can have multiple inputs from the outputs of Media Endpoints or Conferences.","If a new bridge requires a Media Endpoint to \"listen\", and the Media Endpoint is already listening to a different source,\n this existing stream relationship is torn down automatically.","Bridges can be either one-way, in which the media stream flows only from party A to party B (such that B can hear A, but A\n cannot hear B), or two-way, in which the media stream flows in both directions between the parties involved.\n "," has a ","duplex"," attribute to distinguish between two-way bridges and one-way bridges. For\n example, ","ing Media Endpoint A to Media Endpoint B with ","duplex=full"," will direct the A\n output to the B input, and the B output to the A input, creating a simple two-party call. If instead the same\n "," is done with ","duplex=half",", it will direct the B output to the A input, and will not have\n any effect on the B input. Similarly, ","/"," have the\n '","' attribute and "," has the '","joindirection","' attribute for\n controlling what kind of bridge is established.","For \"hotword\" recognition on a two-party call, a two-way (full duplex) bridge must be established between two network\n Connections, and a one-way (half duplex) bridge must be established from one of the network Connections to a Dialog used to\n perform the recognition. There are several ways this arrangement can be achieved, depending on the initial states of the\n Connections and Dialogs. For example, if the network party on Connection A is initially interacting with Dialog D (i.e., a full\n duplex bridge exists between them), all that is needed then is to do a "," of Connection A to Connection\n B (the other network party) with ",". This example highlights an important and subtle aspect of the\n behavior of "," when one, or both, of the Connections being joined is already in one or more established\n bridges.","Note that "," be used to add a Media Endpoint to an existing\n two-party bridge in order to create a 3-way Conference Instead, this functionality can be achieved by first using\n "," to create a Conference object and then ","ing all three Media\n Endpoints to this Conference. If a two-way bridge exists between A and B, and A is then ","ed full duplex\n to C, the result will be a two-party bridge between A and C and a one-way bridge from A to B.","CCXML applications MUST only establish bridges on Media Endpoints that are owned by the session\n running that application. As such, a session cannot bridge a Media Endpoint that it owns to a Media Endpoint that is owned by\n another session, nor can it establish a bridge between two Media Endpoints owned by another session. Since Conferences are\n global, however, a session MAY bridge a Media Endpoint that it owns to any Conference","Asynchronous events are used to notify the CCXML application upon the completion of bridging operations performed by that\n application. Such events are also used to notify the application of changes to existing bridges that were not requested by the\n application - such as a "," terminating a conference that a local connection has a bridge\n to. However, the execution of bridging operations and completion notification varies depending on how the bridging operation\n was performed:","Implicit bridges created using "," (by specifing\n '","' or '","') are established when the dialog is started. No bridging events\n are generated; the '","' event indicates that the dialog was started and the bridge is in place. If\n the specified bridge cannot be established, then the dialog "," not be started, and an\n "," event is generated. Note that a session could still receive a\n ","conference.joined"," event when a dialog is implicitly joined to a conference; this event is generated by the\n conference.","') are physically realized as\n soon as a platform is capable of doing so; however, the inability to establish the bridge immediately upon execution of a\n "," does not constitute an error. Prior to the point in time at which the call enters the\n "," state, it may not be possible to establish the requested bridge, or it may only be possible to\n establish the bridge one direction. As a result, when using "," with '","', an\n event "," be generated when the requested bridge operation is completed. This event is independent\n of connection-related events such as '","', and may occur before or after such events depending\n on when the bridge is actually realized. If the bridge is established successfully, the '","'\n event is generated. If the requested bridge cannot be established even after the connection reaches the\n "," state, or if some other issue prevents the bridge from being established, an\n '","error.conference.join","' event will be generated. Referencing a dialog that has been prepared but not started in\n '","' always result in an error, and thus an '","' event. Note that the call\n itself "," proceed independently of whether or not the bridge can be established. For instance, it\n is possible to receive both an '","' event and a '","' event for\n a single call initiated using ","Explicit bridges creation requests using "," are performed immediately independently, of the state\n of the underlying resource. Requests to terminate existing bridges using "," are also performed\n immediately. CCXML applications can use "," at any time, except in the\n case of dialogs, where "," can only be used on dialogs that have been\n started. For instance, a CCXML application can join two connections where one (or even both) of the connections is in the\n "," state, providing early media on the "," connection. If the CCXML implementation does\n not support a requested "," due to the current state of an underlying entity, then this will result in\n an "," event with the '","' field set appropriately.","10.4.1: Outcomes","As an aid to understanding, the outcomes of all possible "," operations are shown diagrammatically\n below for three different initial conditions:","a single Connection A, that is not currently in a bridge, represented graphically as: (A)","two Connections A and B, with a half duplex bridge (A output to B input), represented graphically as: A -----> B","two Connections A and B, with a full duplex bridge (A output to B input & B output to A input), represented\n graphically as: A <====> B","For the initial condition in which a single Connection A is not currently in a bridge, there are four possible\n "," s:","initially","(A)(B)","join A to B half","A <----- B","join A to B full","A <====> B","join B to A half","A -----> B","join B to A full","\n For the initial condition in which a half duplex bridge exists from Connection A to Connection B (A output to B input), there\n are twelve possible ","join A to C half","A -----> B & A <----- C","join A to C full","A -----> B & A <====> C","join C to A half","A -----> B & A -----> C","join C to A full","join B to C half","(A) & B <----- C","join B to C full","(A) & B <====> C","join C to B half","A -----> B & B -----> C","join C to B full","\n For the initial condition in which a full duplex bridge exists between two Connections A and B (A output to B input & B\n output to A input), there are twelve possible ","A <====> B & A -----> C","A <----- B & B <----- C","A <----- B & B <====> C","A <====> B & B -----> C","In summary, "," behavior always respects three invariants:","The media stream relationship specified in the "," is established between the two\n Connections/Conferences referenced in the ",". In particular, any existing stream relationship between\n these two Connections/Conferences is torn down automatically if it conflicts with the specified relationship.","If the relationship specified in the "," requires a Connection to \"listen\" and the Connection is\n already listening to a different source, this existing stream relationship is torn down automatically.","Any existing stream relationship that does not present a conflict according to invariant #1 or invariant #2 is\n preserved.","10.4.2: Invariant Examples","To illustrate some typical invocations of "," invariants a few example scenarios are presented below.\n In the first scenario, connection "," is bridged to a conference ","C1",", via a "," where the\n "," mode is ","full","\nAfter \n","\nSession object properties\nsession.connections['c1'].input == 'C1'\nsession.connections['c1'].outputs.length == 1\nsession.connections['c1'].outputs[0] == 'C1'\nsession.conferences['C1'].bridges['c1'] == 'c1'\n","If "," then became a participant in a "," where ","d1"," represents a connection to a\n dialog and the "," is both, the original picture would change as follows:","\nAfter \n","\nsession.connections['c1'].input == 'd1'\nsession.connections['c1'].outputs.length == 2\nsession.connections['c1'].outputs[0] == 'C1'\nsession.connections['c1'].outputs[1] == 'd1'\nsession.conferences['C1'].bridges['c1'] == 'c1'\nsession.dialogs['d1'].input == 'c1'\nsession.dialogs['d1'].outputs[0] == 'c1'\nsession.dialogs['d1'].outputs.length == 1\n"," required "," to \"listen\" to ",", however, "," was already in an\n established bridge listening to ",". Consequently, the full duplex bridge between "," is changed to a\n half duplex, where "," is not allowed to \"listen\" to "," and a full duplex bridge is established between ","\n and ","In this second scenario, c1 and c2 have been joined into a conference, C1.","\nAfter \nand: \n","\nsession.connections['c1'].input == 'C1'\nsession.connections['c1'].outputs.length == 1\nsession.connections['c1'].outputs[0] == 'C1'\nsession.connections['c2'].input == 'C1'\nsession.connections['c2'].outputs.length == 1\nsession.connections['c2'].outputs[0] == 'C1'\nsession.conferences['C1'].bridges['c1'] == 'c1'\nsession.conferences['C1'].bridges['c2'] == 'c2'\n","If a "," is then executed that specifies "," as participants and the duplex mode\n is half, the bridge between "," will be re-established with "," able to \"listen\" to ",", but\n "," no longer able to \"listen\" to ","\nAfter \n","\nsession.connections['c1'].input == 'C1'\nsession.connections['c1'].outputs.length == 1\nsession.connections['c1'].outputs[0] == 'C1'\nsession.connections['c2'].input == undefined\nsession.connections['c2'].outputs.length == 1\nsession.connections['c2'].outputs[0] == 'C1'\nsession.conferences['C1'].bridges['c1'] == 'c1'\nsession.conferences['C1'].bridges['c2'] == 'c2'\n","In this third scenario, there are three connections c1, c2 and c3. Connections c1 and c2 are connected with a half duplex\n bridge, connection 3 is not bridged at this point.","\nAfter \nSession object properties\n","\nsession.connections['c1'].input == 'c2'\nsession.connections['c1'].outputs.length == 0\n\nsession.connections['c2'].input == undefined\nsession.connections['c2'].outputs.length == 1\nsession.connections['c2'].outputs[0] == 'c1'\n\nsession.connections['c3'].input == undefined\nsession.connections['c3'].outputs.length == 0\n","A full bridge is established between connections c2 and c3, connection c1 is still receiving from c2.","\nAfter \n","\nsession.connections['c1'].input == 'c2'\nsession.connections['c1'].outputs.length == 0\n\nsession.connections['c2'].input == 'c3'\nsession.connections['c2'].outputs.length == 2\nsession.connections['c2'].outputs[0] == 'c1'\nsession.connections['c2'].outputs[1] == 'c3'\n\nsession.connections['c3'].input == 'c2'\nsession.connections['c3'].outputs.length == 1\nsession.connections['c3'].outputs[0] == 'c2'\n","10.4.3: Media Endpoint Properties","Connection and Dialog objects all have a common set of base properties relating to media input/output. The standard set of\n media endpoint properties are defined below:","Media Endpoint Properties","The identifier (connectiondid/conferenceid/dialogid) of the single media endpoint (connection,\n dialog or conference) providing the input stream to this media endpoint or undefined if there is no input stream. This\n property MUST be updated each time a / or any other media\n operation changes the media source to this media endpoint.
\n If the media endpoint does not have a media source the value MUST be ECMAScript undefined.
\n For example the creation of a half duplex bridge
\n
\n Result
\n session.connections[con1].input = \"con2\"
\n session.connections[con2].input = undefined
","An array containing the identifiers of all media endpoints to which the output stream of this\n media endpoint is sent. If the media endpoint does not have any media destinations the length of the array MUST be 0.
\n For example the creation of a half duplex bridge
\n
\n Result
\n session.connections[con1].outputs.length = 0
\n session.connections[con2].outputs.length = 1
","10.5: Elements","10.5.1: ","10.5.1.1: Overview","The execution of an "," cause the underlying platform to signal the\n telephony system to connect the specified Connection to the CCXML platform. The CCXML document ","\n then initiate interactive dialog sessions with the incoming caller, or perform other telephony operations (e.g., place outgoing\n calls, join calls, etc).","10.5.1.2: ","event$.connectionid if defined, ECMAScript undefined otherwise","An ECMAScript expression which returns a string that must be the identifier of a\n Connection on which the incoming call is signaled. If the connectionid attribute is omitted, the interpreter must\n accept using the id indicated in the current event being processed.
\n If the attribute value is invalid or there is no valid default value, an error.semantic event must be thrown.","The ECMAScript object returned contains information which may be used by the\n implementing platform or passed to the network accepting the connection. This information may consist of\n protocol-specific parameters.
\n Note: The meaning of these hints is specific to the implementing platform and protocol. Platforms that do not support hints\n MAY ignore this attribute. See Section 9.5.6 for additional requirements\n when hints are supported by the implementing platform.","10.5.2: ","10.5.2.1: Overview","When a CCXML document executes a "," block, this\n "," cause the underlying platform to signal the telephony system to send the call to a specified\n destination. The use of "," is only valid when a call is in the "," states.","If the call is currently joined, it "," be unjoined before the redirect is performed and a\n "," be generated. Note the platform is not required to\n generate the "," in any particular order.","10.5.2.2: ","An ECMAScript expression which returns a string that is the identifier of a Connection on\n which a call is active or on which an incoming call is being signaled. This call must be redirected. If the\n connectionid attribute is omitted, the interpreter must redirect using the id indicated in the current event being\n processed.
\n If the attribute value is invalid or there is no valid default value, an error.semantic event must be thrown.","dest","A Valid URI","An ECMAScript expression which returns a string that is the address where the call should\n be redirected to. A platform MUST support a telephone URI, as described in [RFC3966] and MAY support other URI schemes such as \"sip:\" or \"h323:\".","An ECMAScript expression which returns a string that is the reason the call is being\n redirected.","The ECMAScript object returned contains information which may be used by the\n implementing platform or passed to the network redirecting the connection. This information may consist of\n protocol-specific parameters.
\n Note: The meaning of these hints is specific to the implementing platform and protocol. Platforms that do not support hints\n MAY ignore this attribute. See Section 9.5.6 for additional requirements\n when hints are supported by the implementing platform.","If the platform is unable to redirect the call this "," result in the generation of an\n ","10.5.3: ","10.5.3.1: Overview"," cause the underlying platform to signal the\n telephony system to reject the incoming Connection from the platform.","10.5.3.2: ","An ECMAScript expression which returns a string that is the identifier of a Connection on\n which an incoming call is being signaled. This call must be rejected. If the connectionid attribute is omitted, the\n interpreter must reject using the id indicated in the current event being processed.
\n If the attribute value is invalid or there is no valid default value, an error.semantic event must be thrown.","An ECMAScript expression which returns a string that is the reason the call is being\n rejected.","The ECMAScript object returned contains information which may be used by the\n implementing platform or passed to the network rejecting the connection. This information may consist of\n protocol-specific parameters.
\n Note: The meaning of these hints is specific to the implementing platform and protocol. Platforms that do not support hints\n MAY ignore this attribute. See Section 9.5.6 for additional requirements\n when hints are supported by the implementing platform.","10.5.4: ","10.5.4.1: Overview","A CCXML document is able to instruct the platform to attempt to place an outgoing call with ",".\n This element "," instruct the platform to allocate a Connection and attempt to place an outgoing call\n to a specified address. The CCXML interpreter "," receive an asynchronous event when the call attempt\n is completed. An "," "," block can handle this event and perform further call\n control, such as conferencing. If the call was successfully placed, the transition block can also initiate a dialog interaction\n with the called party.","The execution of "," result in the generation of one or more\n "," events (depending on platform support for call progress) followed by a\n "," event on success, or zero or more "," events followed by a\n "," event on failure.","10.5.4.2: ","An ECMAScript expression which returns a string that is the target of the outbound\n telephone call. A platform MUST support a telephone URI, as described in [RFC3966] and MAY support other URI schemes such as \"sip:\" or \"h323:\" or a SIP\n URI as described in [RFC3261].","An ECMAScript left hand side expression evaluating to a previously defined variable. The\n value of the attribute must receive the identifier of the Connection on which the outgoing call is attempted.","An ECMAScript expression which returns a string of application-to-application information\n to be passed to the destination endpoint when establishing the connection.
\n Note: Even if an implementation platform accepts the aai data, certain protocols and network elements\n may prevent the transmission to the target endpoint. If the platform does not support the transmission of aai\n data it must raise a connection.progressing event and indicate that the use of aai is not\n supported.","callerid","An ECMAScript expression which returns a string defining the caller identity to be used\n when making the outbound connection. The format of this information is protocol and platform specific but might consist of\n a telephone URI, as described in [RFC3966] or a SIP URI as described in [RFC3261].
\n Note: An implementation platform is not required to use the specified data and certain protocols and network\n elements may prevent its use. If the platform does not support the specification of callerid it must\n raise a connection.progressing event and indicate that the use of callerid is not supported.","The ECMAScript object returned contains information which may be used by the\n implementing platform when establishing the outbound connection. This information may consist of protocol-specific\n parameters, protocol selection guidelines, or routing hints.
\n Note: The meaning of these hints is specific to the implementing platform and protocol. Platforms that do not support hints\n MAY ignore this attribute. See Section 9.5.6 for additional requirements\n when hints are supported by the implementing platform.","The character string returned is interpreted as a time interval. This interval begins\n when createcall is executed. The createcall must fail if not completed by the end of this interval. A\n completion is defined as the call getting to a CONNECTED state as signaled by a connection.connected event. A failed\n createcall must return the connection.failed event.","(valid connection, conference, or dialog ID)","An ECMAScript expression that identifies a connection, conference, or dialog ID that the\n new call must be joined to. This is equivalent, from the perspective of the CCXML application, to performing a \n immediately following the . However, platforms may use knowledge about the connection/conference/dialog\n to which the new call will be connected to optimize the call creation process. If the attribute value is invalid an\n "," event must be thrown.","This attribute is only valid in conjunction with the ","\n attribute, otherwise ignored.","both
\n calltransmit
\n callreceive","\n An ECMAScript expression that defines the direction of the media flow between the newly created connection, and the\n existing connection/conference/dialog referenced by joinid:\n\n ","Specifes a full duplex connection where the media flows in both directions.","calltransmit","The new connection transmits media to the referenced connection/conference/dialog but does not receive any media\n streams.","callreceive","The new connection receives media from the referenced connection/conference/dialog but does not transmit any media\n streams.","10.5.4.3: "," examples","The following example illustrates the simplest use of ","\n\n","This example illustrates the use of several attributes of ",". A SIP URI is provided as the\n originators caller id, a selection of protocol specific parameters are provided (","callingDevice","callCharacteristics",") and a string of application specific data is provided to be presented to the remote endpoint.\n The connection ID for the new connection is returned in the variable \"","myConidVar","\n\n\n","10.5.5: ","10.5.5.1: Overview","A CCXML document can attempt to create or attach to a Conference Object using ",". This\n element instructs the implementation to allocate a Conference Object using the specified options. The successful execution of\n "," result in the generation of a\n ","conference.created"," event. If for any reason the implementation is unable to create the Conference Object using the\n specified options it "," fail with a ","error.conference.create","Since conferences are global in scope, it is possible that other sessions will establish or terminate bridges to a\n Conference created by an application. Sessions that have created or attached to a Conference using\n "," receive notifications of any bridges that are created or destroyed, through the\n '","' and '","' events. However, if a session establishes or terminates\n a bridge between a Connection that it owns and a Conference that it has created/attached to, it will only receive one such\n event - not one event each for the Connection and for the Conference.","It is legal for a session to perform a "," multiple times with the same value for the\n '","' parameter. The same conference ID will be returned in each case, allowing this to be used as a\n mechanism for looking up conference IDs.","10.5.5.2: ","An ECMAScript left hand side expression evaluating to a previously defined variable. The\n value of the attribute must receive the conference identifier. A conference identifier must be globally\n unique, so that conferences can be uniquely addressed and possibly connected to.","valid conference URI","An ECMAScript expression which returns a string that is the name of the conference. The\n conference name corresponds to the conference identifier that will be returned in the variable specified in the\n conferenceid attribute.
\n If the named conference does not exist, the platform must create a conference object as requested and return the\n value of the conference identifier to the variable specified in the conferenceid attribute. If a conference already\n exists the platform must return the conference identifier of the previously created conference.","reservedtalkers","An ECMAScript expression which returns the number of guaranteed speaker slots the\n conference mixer must reserve. If the conference already exists, then this attribute must be ignored.
\n If the conference mixer is unable to reserve this many speaker slots, the createconference must fail with a\n error.conference.create event.","reservedlisteners","An ECMAScript expression which returns the number of guaranteed listener slots the\n conference mixer must reserve. If the conference already exists, then this attribute must be ignored.
\n If the conference mixer is unable to reserve this many listener slots, the createconference must fail with a\n error.conference.create event.","The ECMAScript object returned contains information which may be used by the\n implementing platform when creating the conference.
\n Note: The meaning of these hints is specific to the implementing platform and protocol. Platforms that do not support hints\n MAY ignore this attribute. See Section 9.5.6 for additional requirements\n when hints are supported by the implementing platform.","10.5.6: ","10.5.6.1: Overview","A CCXML document is able to instruct the platform to attempt to detach from an existing Conference Object using\n ",". This destroys the conference if no other sessions are attached to it. The target\n Conference Object is identified using the "," attribute. The successful execution of\n ","conference.destroyed"," event. If for any reason the implementation is unable to deallocate the Conference Object it\n ","error.conference.destroy","Since other sessions may have created bridges to a conference using the conference's ID, but without performing a\n ",", destroying a conference "," affect the bridges established by\n other sessions. If any bridges are terminated in this fashion, a '","' event "," be posted to indicate to the session that its Connection is no longer bridged to the Conference.","10.5.6.2: ","An ECMAScript expression which returns a string that is the identifier of the conference\n that must be destroyed.
\n If the attribute value is invalid an error.semantic event must be thrown.","The ECMAScript object returned contains information which may be used by the\n implementing platform when destroying the conference.
\n Note: The meaning of these hints is specific to the implementing platform and protocol. Platforms that do not support hints\n MAY ignore this attribute. See Section 9.5.6 for additional requirements\n when hints are supported by the implementing platform.","10.5.7: ","10.5.7.1: Overview","A CCXML document can attempt to create a bridge between two connections, conferences, or dialogs using\n ",". This element instructs the implementation to bridge the connections, conferences, or dialogs\n specified using the ","id1","id2"," attributes in accordance with media options specified by the other\n attributes of ",". The successful execution of","\n result in the generation of a "," event. If for any reason the implementation is unable to create\n the bridge using the specified options it ","Any Connections or Dialogs referenced by the '","' attributes of\n "," be owned by the session performing the ",". If\n "," refer to Conferences, then it is not necessary that the session has performed a\n "," to create/attach to that conference; it is sufficient that it has a valid conference\n ID.","When joining a Connection or Dialog to a Conference, or when joining two Conferences, the '","'\n event "," be posted to all sessions that are attached to the affected Conference(s). This "," result in multiple '","' events if the session performing the\n "," is attached to the conference, nor if any session owns both conferences when two conferences are\n joined together. If the implementation is unable to join the objects an "," only be sent to the session that issued the "," disallow two dialogs from being joined together. If both "," specify dialogs and the platform does not support joining together two dialogs, then an\n "," event is thrown.","10.5.7.2: ","An ECMAScript expression which returns a string that is the identifier of a Connection,\n Dialog or Conference.
\n If the attribute value is invalid an error.semantic event must be thrown.","full
\n half","\n An ECMAScript expression that returns a character string equal to \"half\" or \"full\", which defines the direction of the\n media flow between id1 resource and id2 resource. Refer to the discussion of bridging in ","Section\n 10.4"," . The "," attribute determines whether the ","join"," must establish a half-duplex (unidirectional)\n or full-duplex (bi-directional) bridge. The following values can be used:\n\n ","Specifies a full duplex bridge where the media flows in both directions.","half","Species a half duplex bridge where the media flows towards id1 resource, but no media flows from id1 resource to\n id2 resource.","The ECMAScript object returned contains information which may be used by the\n implementing platform or passed to the network when the two specified Connections, Dialogs or Conferences (id1 and id2) are\n joined. This information may consist of protocol-specific parameters.
\n Note: The meaning of these hints is specific to the implementing platform and protocol. Platforms that do not support hints\n MAY ignore this attribute. See Section 9.5.6 for additional requirements\n when hints are supported by the implementing platform.","entertone","'true'","'true'
\n 'false'
\n URI","\n An ECMAScript expression that returns a character string that must be used to play a tone or a custom wav file to the\n conference participants when this Connection joins. The following values can be used:\n\n ","Setting this to 'true' must play the default system beep.","'false'","Setting this to 'false' must result in no alerting sound being played at all.","URI","The developer may also specify a URI value which points to a user-defined wav file to be played instead of the\n default system beep.","exittone","\n An ECMAScript expression that returns a character string that must be used to play a tone or a custom wav file to the\n conference participants when this Connection exits \n"," (Note: The exact order of operations in this scenario is to play exittone, then unjoin and finally send conference.unjoined).","\n The following values can be used:\n\n ","Setting this to 'true' will play the default system beep.","Setting this to 'false' will result in no alerting sound being played at all.","A Valid","autoinputgain","true
\n false","\n An ECMAScript Boolean expression that tells the conference mixer if it must use AGC to determine the input gain for this\n leg. If a platform does not support AGC, it must ignore this attribute. The following values can be used:\n\n ","AGC must be used to determine input gain for a leg.","AGC must not be used.","autooutputgain","\n An ECMAScript boolean expression that tells the conference mixer if it must use AGC to determine the output gain for this\n leg. If a platform does not support AGC, it must ignore this attribute. The following values can be used:\n\n ","AGC must be used to determine output gain for a leg.","dtmfclamp","\n An ECMAScript Boolean expression that tells the conference mixer if it must attempt to remove detected DTMF tones If a\n platform does not support removal of DTMF tones, it must ignore this attribute. The following values can be used:\n\n ","Conference mixer must attempt to remove detected DTMF tones.","Conference mixer must not attempt to remove any detected DTMF tones.","toneclamp","\n An ECMAScript Boolean expression that tells the conference mixer if it must attempt to remove loud single-frequency tones\n from the audio stream for this leg. If a platform does not support removal of tones, it must ignore this attribute. The\n following values can be used:\n\n ","Conference mixer must attempt to remove loud single-frequency tones.","Conference mixer must not attempt to remove any loud single-frequency tones.","10.5.8: ","10.5.8.1: Overview","A CCXML document is able to instruct the platform to attempt to tear down a bridge between two existing connections,\n conferences, or dialogs using ",". This element instructs the implementation to tear down the bridge\n between two connections/conferences/dialogs specified using the "," attributes. The\n successful execution of "," event. If for any reason the implementation is unable to terminate the bridge between the\n specified connections/conferences/dialogs, or if no such bridge exists, it "," fail with a\n ","error.conference.unjoin"," be owned by the session performing the\n ","When '","', '","', or both reference to a Conference, the '","' event\n "," be posted to all session that are attached to the affected Conference(s). This "," is attached to the conference, or if any session owns both conferences when two conferences are\n being unjoined. If the implementation is unable to unjoin the objects an ","10.5.8.2: ","An ECMAScript expression which returns a string that is the identifier of a Connection,\n Dialog or Conference. All media streams between the two specified Connections, Dialogs or Conferences (id1 and id2 ) must\n be torn down.
\n If the attribute value is invalid an error.semantic event must be thrown.","The ECMAScript object returned contains information which may be used by the\n implementing platform or passed to the network when the two specified Connections, Dialogs or Conferences (id1 and id2) are\n unjoined. This information may consist of protocol-specific parameters.
\n Note: The meaning of these hints is specific to the implementing platform and protocol. Platforms that do not support hints\n MAY ignore this attribute. See Section 9.5.6 for additional requirements\n when hints are supported by the implementing platform.","10.5.9: ","10.5.9.1: Overview","A CCXML document is able to instruct the platform to disconnect a Connection by using "," . The\n underlying platform "," send the appropriate protocol messages to perform the disconnect, and send an\n asynchronous event to the CCXML document when the disconnect operation completes. A CCXML document may use\n "," to abandon an outbound connection created using "," which has not\n yet entered the "," state. If "," is used to abandon an outbound call, it\n results in the generation of a '","' event.","If the connection had been bridged when the "," request was made, the platform "," tear down all bridges to the connection and send a "," to the CCXML document\n once the media paths have been freed.","Note the platform is not required to generate the "," /"," in any particular order, unless an outbound call was abandoned in which case a\n "," be generated.","10.5.9.2: ","An ECMAScript expression which returns a string that is the id of a call leg that\n must be disconnected. If the connectionid attribute is omitted, the interpreter must disconnect using the id\n indicated in the current event being processed.
\n If the attribute value is invalid or there is no valid default value, an error.semantic event must be thrown.","An ECMAScript expression which returns a string that is the reason the call is being\n disconnected.","The ECMAScript object returned contains information which may be used by the\n implementing platform or passed to the network disconnecting the connection. This information may consist of\n protocol-specific parameters.
\n Note: The meaning of these hints is specific to the implementing platform and protocol. Platforms that do not support hints\n MAY ignore this attribute. See Section 9.5.6 for additional requirements\n when hints are supported by the implementing platform.","10.5.10: ","10.5.10.1: Background","Many of the network environments in which a CCXML implementation may be expected to operate provide facilities by which two\n existing calls can be merged into a single call at the network level. The following diagram illustrates this for the case where\n user A has two independent calls with users B and C, and utilizes this functionality to merge the calls together:"," Figure 1: Initial Call State"," Figure 2: State Following Merge","The diagram illustrates the call control connections, or sessions, that exist between users A, B, C and the network that\n connects them; the media streams between users is not shown on the above diagram and may differ from the path for call control\n that is shown. The media path between users may or may not be affected as a result of the merge, depending on the properties of\n the underlying network; typically any media streams to user A would be terminated since call control sessions between user A\n and the network are terminated.","There are many different implementations of the merging capabilities described above, across both PSTN and Voice-over-IP\n networks. Known implementations include the following:","Release Link Trunk (RLT) (ISDN [Q.931/DSS1], SS7 ISUP [SS7])","Two B-Channel Transfer (TBCT) (ISDN [Q.931/DSS1], SS7 ISUP\n [SS7])","Explicit Call Transfer (ECT) (ISDN [Q.931/DSS1], SS7 ISUP\n [SS7]ISUP)","AT&T Transfer Connect (some variants) (ISDN [Q.931/DSS1])","Q.SIG Path Replacement (ISDN [Q.931/DSS1])","SIP REFER with Replaces (SIP [RFC3261])","H.450.2 Consultative Transfer (H.323 [H.323])","CSTA and other interfaces to PSTN switches","Hook-flash Transfers (Analog, T-1 RBS, E-1 CAS)","Different implementations may also have different restrictions on when and how merge functionality can be used. Some\n implementations might allow calls that are alerting to be merged, whereas others might only operate on calls that are already\n in the connected state. In addition, some implementations might only be able to merge calls in which one of the calls is an\n outbound call that specifically identifies the associated inbound call when that outbound call is placed (via hints on\n ",").","10.5.10.2: Overview"," element allows two calls being handled by a particular CCXML session to be merged together at\n the network level, if supported by the underlying network and CCXML platform.","If successful, the two referenced calls "," be merged at the network level, and the connections to\n the CCXML platform associated with those calls "," be terminated. A "," be generated on each of the two calls affected by a merge. If the merge fails, then a\n single "," be thrown which identifies both of the\n connections against which the merge was performed."," implicitly tear down any existing bridges to the connections and send a\n "," to the CCXML document once the media paths have been freed, except for the media path between\n the two connections being merged.","10.5.10.3: Attribute Details","connectionid1","An ECMAScript expression which returns a string that is the identifier of the first\n connection that is to be merged. The order (connectionid1 vs. connectionid2) of the Connections does not matter.
\n If the attribute value is invalid an error.semantic event must be thrown.","connectionid2","An ECMAScript expression which returns a string that is the identifier of the second\n connection that is to be merged.
\n If the attribute value is invalid an error.semantic event must be thrown.","The ECMAScript object returned contains information which may be used by the\n implementing platform or passed to the network when merging the two connections. This information MAY consist of\n protocol-specific parameters.
\n Note: The meaning of these hints is specific to the implementing platform and protocol. Platforms that do not support hints\n MAY ignore this attribute. See Section 9.5.6 for additional requirements\n when hints are supported by the implementing platform.","10.6: Events","10.6.1: Overview","This section defines the events related to telephony operations including events related to the call state, success and\n failure events for the various telephony operations.","Several of the events defined in this section are associated with the change in state of a Connection Object. For instance,\n the '","' event causes a transition to the "," state. Platforms "," perform updates to Connection Object state when events are dequeued by the EHIA before the\n "," selection process (and thus before execution of "," content). This\n is necessary such that conditional expressions on transitions, as well as executable content, can reference Connection Object\n state that is consistent with the event being processed","10.6.2: ","This event "," be emitted when the underlying telephony connection transitions to an\n "," state or sends notification of call progress while the Connection Object is in the ","\n state. This event is a transition to state ","This event includes the standard event and connection event properties along with the following additional event specific\n properties:","Information provided by the protocol prior to connection is accumulated and stored with the identified Connection object.\n This information "," be available when the "," event is delivered to the\n application. Any further information provided by the protocol prior to connection "," be provided in\n subsequent "," events, and made available in the updated Connection object.","10.6.3: "," be emitted when the underlying telephony connection sends a notification of call\n progress while the Connection Object is in the "," state. This event is a transition to state\n ","Subsequent "," events "," be generated to support protocols which\n exchange multiple messages during the "," state.","10.6.4: "," be emitted when an incoming connection is accepted successfully, or as when an\n outgoing connection is answered. This event is a transition to state ","10.6.5: "," be emitted when a connection is disconnected due to an action by the underlying\n network (e.g. the user hanging up), the CCXML platform, or the CCXML application. This event is a transition to state\n ","If this is an off-platform event, the platform "," implicitly tear down any existing bridges to\n the connection and send a ","A disconnection reason code. Content of this field is platform-specific.","trigger","Indicates which entity cause the disconnection to occur. Valid values are 'network' for\n network-initiated disconnections, 'platform' for disconnections triggered by platform-based rules (such as a maximum\n connection duration), or 'application' for disconnections performed as a result of application actions (such as execution\n of a ).","10.6.6: "," be emitted to indicate a successful redirection of a connection. This event is a\n transition to state ","A redirect result code. Content of this field is platform-specific.","10.6.7: "," be emitted to indicate that a connection has been successfully merged with another\n connection at the network level, and is therefore disconnected from the CCXML application. This event is a transition to state\n ","mergeid","The ID of the Connection with which the Connected referenced by this event was merged."," of the "," element are present in\n this event as "," property (see section 10.2.3) and "," property, respectively","10.6.8: "," be emitted when an incoming or outgoing call fails to complete its connection. This\n event is a transition to state ","A failure reason code. Content of this field is platform-specific.","10.6.9: "," be emitted if a platform operational error occurs on a connection which renders\n that connection unusable. This event is a transition to state ","A description of the reason the operation failed. Content of this field is\n platform-specific.","10.6.10: "," be emitted by the platform to notify the application of non state changing\n Connection related events. This event "," directly change the state of the connection. Examples\n where "," could be generated include:","DTMF received on the media stream after connection, perhaps identifying call setup information such as DNIS;","Messaging received by the protocol after connection, such as that delivered by SIP INFO or ISDN FACILITY messages;","Call analysis results indicating the results of answering machine, FAX, TDD or modem detection attempts.","The Connection Object "," be updated with new or changed information as the result of a\n ","10.6.11: "," be emitted when a conference has been successfully established using\n ",". The fields of this event are:","The ID of the Conference associated with this event.","An ECMAScript object reference to the Conference object identified by the conferenceid\n property of this event.","10.6.12: "," be emitted when a session detaches from a conference using\n ",". Note that this does not imply that the underlying conference has necessarily been\n destroyed, since there may be other sessions attached to that conference. The fields of this event are:","10.6.13: "," be emitted when two resources (which are connections or conferences) have been\n bridged using ",". The fields of this event are shown below.","If a session receives a '","' event because it is attached to a Conference, either\n '","' may refer to a Connection/Dialog owned by another session. Such identifiers are not\n locally meaningful to the session receiving the event (although they can still be used for logging or other purposes).","Join-related events (including ",") use the ","\n attributes to identify the connections, conferences, or dialogs against which the event occurs. The value of "," will depend on why the event was generated, and will be set according to the following rules:","For events resulting from a "," operation, "," will have the same values supplied via the "," attributes in the original\n element;"," with a "," attribute, "," will\n reflect Connection ID of the created call, and "," will have the same value as the ","\n attribute;","For events resulting from a Connection, Conference, or Dialog becoming unavailable, "," will reflect the ID\n of the object that became unavailable, and "," will reflect the ID of the object it was previously joined to.\n Such events may occur for many reasons - asynchronous disconnection, ",",\n "," (on a Connection), ",", and\n "," (on a Dialog). Failures may also cause the termination of\n bridges. However, due to the asynchronous nature of CCXML, applications should not generally rely on this ordering, since\n (for example) a Connection might disconnect at the same time that an application performs a\n ","The ID of the Connection, Conference or Dialog representing a resource associated with this\n event.","object1","A Connection, Conference or Dialog object associated with this event.","object2","10.6.14: "," be emitted when a bridge is torn down between two resources using\n "," also be emitted when a bridge needs to be torn down before\n an element can be executed or when an event indicates the loss of a one end of a bridge, such as when processing\n ",", , , or "," elements\n or when receiving asynchronous events such as ","connection.disconnected, error.connection or error.dialog","The ordering of the "," attributes is as specified in 10.6.13:\n ","10.6.15: ","The processing associated with the "," failed. The fields in this event are:","The ID of the affected conference.","10.6.16: ","10.6.17: "," failed.","The fields in this event are:","10.6.18: ","10.6.19: "," be emitted when a "," attempt fails. This event "," change the state of either of the Connection Objects involved in the merge operation.","A description of the reason the merge failed. Content of this field is\n platform-specific.","10.6.20: "," be emitted when an application attempts a telephony operation that is not legal for\n the current state of the Connection Object. Note that the Connection Object state is current as of the event currently being\n processed, but may not reflect events that are currently queued, or other events that occur before the request generated by an\n element is processed; therefore, not all failures caused by the state of the actual connection will result in\n ",". This event indicates that an application performed an action that it should know to\n be illegal, and generally reflects an incorrectly written application.","10.6.21: ","error.conference"," be emitted when an error occurs on a conference that a session has created or\n attached to, and signals the termination of the referenced conference. It is not necessary for applications to call\n "," after receiving an "," event (in much the same way that it is\n not necessary to call "," upon receiving an ","10.6.22: "," be emitted when an error occurs when there is an error redirecting a connection\n using the ","A description of the reason the redirect failed. Content of this field is\n platform-specific.","10.6.23: ","This event MUST be generated when a request to accept an incoming connection cannot be completed.\n This event MUST NOT change the state of the Connection Object.","A description of the reason the accept failed. Content of this field is\n platform-specific.","10.6.24: ","This event MUST be generated when a request to reject an incoming connection cannot be completed.\n This event MUST NOT change the state of the Connection Object.","A description of the reason the reject failed. Content of this field is\n platform-specific.","11: Complex Examples","11.1: Calling Card Application","Caller calls an 800 number and after some interaction with an IVR\n system places an outbound call to a friend.","calling_card.ccxml","\n \n\n\n\n \n \n \n\n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n \n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n\n \n \n \n\n \n \n \n \n \n\n \n \n \n\n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n\n \n","pin.vxml","\n\n\n\n
\n Welcome to Acme's Calling Card \n \n Please say your PIN number \n \n \n \n \n \n \n \n \n
\n
\n","error.vxml","\n\n\n\n
\n \n Sorry. The Party you are trying to call\n is unavailble. \n \n \n
\n
\n","callee.vxml","\n\n\n\n
\n You have a call. Connecting\n
\n
\n","VXML page returned by checktime.asp","\n\n\n\n
\n \n \n Time remaining is seconds \n \n Please speak the telephone number you want to call including the country code.\n for example you would say 14075551234\n \n \n \n \n \n \n
\n","11.2: Conferencing application","Different callers call into a conference through an agreed upon telephone number. When each one of them joins the conference\n he is told how many people are there in the conference and those already in the conference are informed about a new entrant to\n the conference. Similarly when someone hangs up, the fact that a conference participant has exited is announced. A conference\n object is created at the beginning of the conference and is destroyed when all the participants have hung up.","First page to all callers","\n \n\n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n","CCXML page returned by conference.asp to first callers browser","\n \n\n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n\n \n","CCXML page returned by conference.asp to all subsequent callers","\n \n\n\n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n","vconference.asp","\n\n\n
\n \n Welcome to the W3C conference. There are already \n \n participants in the conference. \n \n \n
\n
\n","newcaller.vxml","\n\n\n
\n \n A new participant has entered the conference. \n \n
\n
\n","leave.vxml","\n\n\n
\n \n Someone just left the conference. \n \n
\n
\n","CCXML page returned by teardown.asp to all but the last participant","\n \n\n \n \n \n \n\n \n \n \n \n \n \n\n \n","CCXML page returned by teardown.asp to last participant","\n \n\n\n \n \n \n \n \n \n \n \n \n \n \n\n \n","11.3: Personal Assistant","This program is a Personal Assistant that operates as an automated answering service.","A subscriber to this service would receive a phone number to the automated service. When a caller wants to talk to the\n subscriber, he calls the given number. This automated system asks who the caller is, and records the audio. Then the system\n calls the current number of the target person, and asks if the call should be connected.","If so, the calls are bridged. If not, then the original caller is warned and disconnected.","main.ccxml","\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n","welcome_message.vxml","\n\n\n
\n \n \n You have reached the personal assistant for Bill Lumbergh of InnoTech. \n If is about the new TPS format please call Dom Portwood to get the new cover sheet. \n\n If this is for any other reason go on and state your name \n and I will decide if I want to take your call.\n \n Oh ya, if this is Milt, we're gonna need to go ahead and \n move you downstairs into storage B. We have some new people \n coming in, and we need all the space we can get. So if you \n could go ahead and pack up your stuff and move it down there, \n that would be terrific, OK\n\n \n \n OK, thanks. \n \n \n \n
\n
\n","outbound_greetings.vxml","\n\n\n \n
\n \n \n \n Hi bill, you have a message from\n \n \n \n Just a moment, please hold.\n \n \n \n OK, goodbye. \n \n \n \n \n \n
\n
\n","vm.vxml","\n\n\n
\n \n Transferring you to voice mail hell. \n \n \n \n \n
\n
\n","connecting.vxml","\n\n\n
\n \n Just a moment, please hold... \n \n \n \n \n
\n
\n","holdmusic.vxml","\n\n\n
\n \n \n When a man loves a woman\n Can't keep his mind on nothin' else\n He'd trade the world\n For a good thing he's found\n If she is bad, he can't see it\n She can do no wrong\n Turn his back on his best friend\n If he puts her down.\n \n \n \n
\n
\n","Appendix A - Related Work","CPL","The Call Processing Language [CPL] is an XML based language that can be\n used to describe and control Internet telephony services. Its focus is user scripting of call handling behavior for incoming\n calls. It is designed to be suitable for running on a server where users may not be allowed to execute arbitrary programs, and\n so is not Turing-complete.","CallXML","CallXML [CALLXML] is a markup language created by Voxeo Corporation\n that includes both voice and call-control functionality. CallXML is an XML based markup language used to describe the user\n interface of a telephone, voice over IP, or multi-media call application to a CallXML browser.","CallXML was designed to make it easy for Web developers to create applications that can interact with and control any number\n or type of calls, including:","Telephone or Voice over IP call applications which can control the initiation and routing of a phone call itself,\n supporting such features as outbound dialing, conferencing, and multi-call interactions (e.g., conference bridges, Internet\n call waiting, follow-me/find-me, etc)","Telephone or Voice over IP call applications which can easily interact and respond to touch-tone based entry and\n selection (e.g., voicemail, interactive voice response)","Call Applications which include support for additional media, such as faxes and video (e.g., unified messaging, video\n conferencing, etc.)","ECMA-CSTA","The description of CSTA [CSTA] from http://www.ecma-international.org/ is\n as follows:","\"CSTA specifies an Applications Interface and Protocols for monitoring and controlling calls and devices in a\n communications network.","These calls and devices may support various media and can reside in various network environments such as IP, Switched\n Circuit Networks and mobile networks. CSTA however, abstracts various details of underlying signalling protocols (e.g.\n SIP/H.323) and networks for the applications.\"","The architecture of CCXML would allow a platform to be based on CSTA for the underlying telephony protocol while still\n providing the CCXML execution environment for ease of integration with voice browsers.","TXML","TXML (Telera's Extensible Markup Language) is an XML based language\n designed by Genesys (formerly Telera) for remotely controlling the behavior of Point of Presence (POP) servers.","TXML provides the syntax for the XML Pages, which are generated at the customer's application at the premises and used by a\n POP server to execute actions on behalf of the customer's application. The XML Pages are simple ASCII text files that are\n either stored in a Web server's directory at the premises or generated by scripts at the premises server. The XMLPages are\n requested from the premises server via HTTP requests made by a client\n on the POP gateway.","The language includes elements for","Media Control","Call Control and Telephony","Call Router Integration","SIP","SIP, the Session Initiation Protocol, [RFC3261] is a signaling protocol\n for Internet conferencing, telephony, presence, events notification and instant messaging. As a signaling protocol, SIP sits\n \"below\" the application description level of VoiceXML and CCXML. We expect many CCXML and VoiceXML browsers to support SIP\n signaling.","Appendix B - CCXML DTD","This section is Normative.","The CCXML DTD is located at http://www.w3.org/TR/2010/CR-ccxml-20100401/ccxml.dtd.","Appendix C - CCXML XML Schema","The CCXML schema is located at http://www.w3.org/TR/2010/CR-ccxml-20100401/ccxml.xsd.","Appendix D - VoiceXML 2.0 Integration Details","D.1 Overview","This section describes the details of how CCXML and VoiceXML 2.0 work together to provide dialog functionality in CCXML.","The CCXML application behaviors described below are guidelines and applications are not required to support the full set of\n VoiceXML interactions. Platforms however should support the events and methods specified below to allow CCXML applications to\n implement the behaviors documented in this Appendix.","Since HTTP is a stateless protocol, application servers typically use cookie-based and/or URI rewriting techniques to enable\n stateful interactions with the server. Authors should be aware that application servers employing cookie-based management\n techniques will view concurrently executing CCXML and VoiceXML applications as independent (the CCXML and VoiceXML cookie\n stores are independent). Authors wishing to correlate CCXML and VoiceXML data at the server can use URI rewriting or\n alternatively employ the CCXML sessionid variable together with the connectionid or conferenceid as a common, unique key across\n the CCXML and VoiceXML applications.","D.2 Events","CCXML and VoiceXML 2.0 need to be able to exchange events between the browsers. The method of the message passing is up to\n the platform but it is assumed that there is some basic capacity in place.","Each running CCXML session has an event queue used to process CCXML events, independently of VoiceXML event processing by\n the dialogs created by that CCXML session. The execution of certain CCXML elements, such as\n ",", may cause events to be sent to the VoiceXML browser;\n similar, certain VoiceXML elements such as ",""," will result in the generation of dialog events\n delivered to the CCXML session that owns the dialog in question. The sections below define the event relationship between the\n CCXML and VoiceXML environments.","VoiceXML 2.0 provides limited capabilities for handling asynchronous or unexpected events. Since CCXML is designed around a\n robust event processing mechanism, and since the CCXML session manages connections to the underlying network, processing of\n asynchronous events - which may be delivered through externally accessible event I/O processors - typically occurs primarily\n within the CCXML application, which can then control the VoiceXML session as appropriate. The VoiceXML dialog can therefore\n focus exclusively on interaction with the user.","D.3 VoiceXML Session Variables","When a VoiceXML dialog is bridged to a connection with an associated call leg, the standard VoiceXML session variables\n obtain their values from the call leg. Otherwise, these variables are undefined. After the dialog is bridged to a connection,\n VoiceXML session variables are not updated again. CCXML defines an additional read-only VoiceXML session variable, also\n populated when the dialog is bridged to a connection, called ","session.connection.ccxml"," with the following\n sub-properties:","session.connection.ccxml.sessionid","This variable evaluates to the CCXML Session ID to which the VoiceXML dialog is currently associated.","session.connection.ccxml.dialogid","This variable evaluates to the CCXML Dialog ID for the current dialog.","session.connection.ccxml.connectionid","This variable evaluates to the CCXML Connection ID to which the VoiceXML dialog is currently bridged. This variable is\n undefined if the dialog is not bridged to a connection.","session.connection.ccxml.conferenceid","This variable evaluates to the CCXML Conference ID to which the VoiceXML dialog is currently bridged. This variable is\n undefined if the dialog is not bridged to a conference.","session.connection.ccxml.values","This associative array contains the names and values of the "," attribute supplied in a CCXML\n "," invocation.","D.4 CCXML ","When a CCXML application processes a "," element it prepares a VoiceXML application with the\n URI that is passed in on the ","Normally it is expected that a VoiceXML dialog environment will use the "," request as an\n opportunity to fetch the initial document indicated by the "," attributes along with any\n referenced resources such as ","