WikiPatents - Community Patent Review
Create Free Account  |  License or Sell Your Patent  |  WikiPatents Marketplace  |  WikiPatents Blog
Username:  Password:  
    
Advanced Search
Voice response system with programming language extension    

Get related patents on CD
United States Patent5588044   
Link to this pagehttp://www.wikipatents.com/5588044.html
Inventor(s)Lofgren; Dan M. (Milpitas, CA); Dietrich; William A. (Sunnyvale, CA)
AbstractA telephony voice response system includes a database language sequencer, a database control module having a plurality of procedures callable by the database language for performing database operations, and a telephony control module having a plurality of procedures callable by the database language sequencer for performing telephony operations. The telephony operations can include speaking a predefined prompt onto a telephony channel, receiving and storing DTMF-encoded input from the telephony channel, and recording audio input from the telephony channel. The database language sequencer calls the database control module procedures and the telephony control module procedures in a sequence defined by a program prepared according to a database language. The telephony voice response system can control multiple telephony channels by running a separate task for each such channel under a multitasking operating system. A common channel server task is provided which manages the resources of the telephony card for all of the individual channel tasks.
   














 Title Information Submit all comments and votes
 
Patent Text Patent PDF Print Page Summary File History
Plain text PDF images Print Summary File History Custom Search
Drawing from US Patent 5588044
Voice response system with programming language extension - US Patent 5588044 Drawing
Voice response system with programming language extension
Inventor     Lofgren; Dan M. (Milpitas, CA); Dietrich; William A. (Sunnyvale, CA)
Owner/Assignee     Voysys Corporation (Fremont, CA)
Patent assignment
All assignments
Company News
Publication Date     December 24, 1996
Application Number     08/343,721
PAIR File History     Application Data   Transaction History
Image File Wrapper   Patent Term   Fees
Litigation
Filing Date     November 22, 1994
US Classification     379/67.1 379/88.22
Int'l Classification     G06F 015/419 H04M 001/64
Examiner     Zele; Krista M.
Assistant Examiner     Dharia; Parag
Attorney/Law Firm     Fliesler, Dubb, Meyer & Lovejoy
Address
Parent Case    
Priority Data    
USPTO Field of Search     379/67 379/88 379/89 379/201 379/207 395/600
Patent Tags     voice response programming language extension
   
Enter a comma (,) or semicolon (;) between multiple tag words/phrases.
Describe this patent:
 Amusing   
 Clever   
 Complex   
 Efficient   
 Historic   
 Important   
 Innovative   
 Interesting   
 Practical   
 Simple   
[no votes]
Patent WIKI

Share information and news about this patent, including information and news about the technology, inventors, company, ligation and licensing.

 References Submit all comments and votes
 
*references marked with an asterisk below are user-added references
 U.S. References
 
Add a new US reference:  
ReferenceRelevancyCommentsReferenceRelevancyComments
5354069
Guttman
463/25
Oct,1994

[0 after 0 votes]
5255305
Sattar
379/32.01
Oct,1993

[0 after 0 votes]
5201046
Goldberg
707/100
Apr,1993

[0 after 0 votes]
5125024
Gokcen
379/88.01
Jun,1992

[0 after 0 votes]
5113430
Richardson, Jr.
379/88.17
May,1992

[0 after 0 votes]
4695977
Hansen
379/93.14
Sep,1987

[0 after 0 votes]
 Foreign References
 Other References
 Market Review Submit all comments and votes
   
Market Size
Estimate the gross annual revenues of the relevant market sector:
> $10B
$5B - $10B
$2B - $5B
$500M - $2B
$100M - $500M
$10M - $100M
$1M - $10M
$500K - $1M
$100K - $500K
< $100K
[No votes]
$0
 
$0   $2.5B   $5B   $7.5B   $10B

[0 market size comments]
Market Share
Estimate the percentage of the relevant market sector this invention will capture:
75% - 100%
50% - 74.99%
25% - 49.99%
10 - 24.99%
5 - 9.99%
2 - 4.99%
1 - 1.99%
< 1%
[No votes]
0.0%
 
0%   25%   50%   75%   100%

[0 market share comments]
Reasonable Royalty
What percentage of gross sales should the inventor or assignee be paid?
75% - 100%
50% - 74.99%
25% - 49.99%
10 - 24.99%
5 - 9.99%
2 - 4.99%
1 - 1.99%
< 1%
[No votes]
0.0%
 
0%   25%   50%   75%   100%

[0 reasonable royalty comments]
Public's "Guesstimation" of Royalty Value
Market SizeN/A[No votes]
xMarket ShareN/A[No votes]
xReasonable RoyaltyN/A[No votes]

N/A

[0 Guesstimation of Royalty Value Comments]
License Availablity
If you are NOT the owner or assignee, answer here:
Yes, license is available for purchase

No, license is not currently available



[No votes]
[0 license availability comments]
License Availablity
If you ARE the owner or assignee, answer here:
Yes, license is available for purchase

No, license is not currently available



[No votes]
[0 owner/assignee comments]
Competitive Advantage
Does this invention have a significant competitive advantage over similar technologies?
Yes

No



[No votes]
Most helpful competitive advantage comment
[No comments]

[0 competitive advantage comments]
Commercial Alternatives
Are there viable commercial alternatives for this invention?
Yes

No



[No votes]
Most helpful commercial alternative comment
[No comments]

[0 commercial alternatives comments]
 Technical Review Submit all comments and votes
 Claims Submit all comments and votes
 


We claim:

1. Telephony server apparatus, for use with a plurality of telephony channels, comprising:

a processor structure;

channel control hardware coupled to said telephony channels and to said processor structure; and

a memory structure having stored therein a plurality of channel programs each associated with a respective one of said telephony channels, multi-tasking operating system software instructions executable by said processor structure, database engine software instructions executable by said processor structure under a different task of said operating system for each of said telephony channels, and a database,

said database engine software instructions including instructions which, when executing under a given task of said operating system, interpret the channel program associated with the telephony channel of said given task and perform both database and telephony operations in response to such channel program associated with the telephony channel of said given task, said database operations including at least one operation from the group consisting of reading data from and writing data to said database, and said telephony operations including at least one operation from the group consisting of speaking a predefined prompt onto the telephony channel associated with the given task, receiving and storing DTMF-encoded input from the telephony channel associated with the given task, and recording audio input from the telephony channel associated with the given task.

2. Apparatus according to claim 1, wherein said processor structure includes no more than one processor.

3. Apparatus according to claim 1, wherein said memory structure includes both semiconductor memory and rotating memory.

4. Apparatus according to claim 1, wherein each of said tasks includes an executable portion and a read-write data portion, the read-write data portion being separate for each of said tasks, and the executable portion being common to all of said tasks.

5. Apparatus acording to claim 4, wherein the read-write data portion of the task associated with each particular one of said telephony channel includes the channel program associated with said particular telephony channel, and wherein all of said channel programs are the same.

6. Apparatus according to claim 1, wherein said database operations include all operations from said group consisting of reading data from and writing data to said database, and wherein said telephony operations include all operations from said group consisting of speaking a predefined prompt onto the telephony channel associated with the given task, receiving and storing DTMF-encoded numerical input from the telephony channel associated with the given task, and digitally recording audio input from the telephony channel associated with the given task.

7. Apparatus according to claim 1, wherein said telephony operations further include the operation of waiting for a ring signal from the telephony channel associated with the given task.

8. Apparatus according to claim 1, wherein said telephony operations further include the operation of answering a call from the telephony channel associated with the given task.

9. Apparatus according to claim 1, wherein said telephony operations further include the operation of hanging up a call on the telephony channel associated with the given task.

10. Apparatus according to claim 1, wherein said telephony operations further include the operation of dialing a call on the telephony channel associated with the given task.

11. Telephony server apparatus, for use with a first telephony channel, comprising:

a processor structure;

channel control hardware coupled to said first telephony channel; and

a memory structure having stored therein a database and software instructions executable by said processor structure, said software instructions including:

a database language sequencer;

a database control module having a plurality of procedures callable by said database language Sequencer for performing at least one of the database operations from the group consisting of reading selected data from and writing specified data to said database; and

a telephony control module having a plurality of procedures callable by said database language sequencer for performing at least one of the telephony operations from the group consisting of speaking a predefined prompt onto the first telephony channel, receiving and storing DTMF-encoded input from the first telephony channel, and recording audio input from the first telephony channel,

said database language sequencer calling said database control module procedures and said telephony control module procedures in a sequence defined by a program which satisfies predefined syntax rules of a predefined database language.

12. Apparatus according to claim 11, wherein said database language sequencer comprises:

said program; and

an interpreter which interprets said program to develop said sequence in which said database language sequencer calls said database control module procedures and said telephony control module procedures.

13. Apparatus according to claim 11, wherein said database language sequencer comprises a product produced by the method comprising the steps of:

providing said program; and

converting said program to software instructions executable by said processor structure.

14. Apparatus according to claim 11, wherein said processor structure includes no more than one processor.

15. Apparatus according to claim 11, wherein said memory structure includes both semiconductor memory and rotating memory.

16. Apparatus according to claim 11, wherein said database operations include all operations from said group consisting of reading data from and writing data to said database, and wherein said telephony operations include all operations from said group consisting of speaking a predefined prompt onto said first telephony channel, receiving and storing DTMF-encoded numerical input from said first telephony channel, and digitally recording audio input from said first telephony channel.

17. Apparatus according to claim 11, wherein said telephony operations further include the operation of waiting for a ring signal from said first telephony channel.

18. Apparatus according to claim 11, wherein said telephony operations further include the operation of answering a call from said first telephony channel.

19. Apparatus according to claim 11, wherein said telephony operations further include the operation of hanging up a call on said first telephony channel.

20. Apparatus according to claim 11, wherein said telephony operations further include the operation of dialing a call on said first telephony channel.

21. Apparatus according to claim 11, for use further with a second telephony channel, wherein said database language sequencer, said database control module and said telephony control module comprise first instantiations of said database language sequencer, said database control module and said telephony control module, respectively, and wherein said memory structure further has stored therein:

a second instantiation of each of said database language sequencer, said database control module and said telephony control module,

the procedures of said second instantiation of said telephony control module speaking a predefined prompt onto said second channel, receiving and storing DTMF-encoded numerical input from said second channel, and digitally recording audio input from said second channel.

22. Apparatus according to claim 21,

wherein said first and second instantiations of said database language sequencer share a common set of software instructions and have different instance data,

wherein said first and second instantiations of said database control module share a common set of software instructions and have different instance data,

and wherein said first and second instantiations of said telephony control module share a common set of software instructions and have different instance data, the instance data for said first instantiation of said telephony control module identifying said first telephony channel and the instance data for said second instantiation of said telephony control module identifying said second telephony channel.

23. Apparatus according to claim 22,

wherein the common set of software instructions shared by said first and second instantiations of said database language sequencer includes an interpreter which interprets a database language program to develop said sequence in which said database language sequencer calls said database control module procedures and said telephony control module procedures,

wherein the instance data of said first instantiation of said database language sequencer identifies a first program as the database language program to interpret,

and wherein the instance data of said second instantiation of said database language sequencer identifies a second program as the database language program to interpret.

24. Apparatus according to claim 22, wherein said software instructions stored in said memory structure further include:

a channel server common to both said first and second instantiations of said telephony control module, said channel server performing said telephony operations on said first telephony channel in response to communications from said first instantiation of said telephony control module, and performing said telephony operations on said second telephony channel in response to communications from said second instantiation of said telephony control module.
 Description Submit all comments and votes
 


BACKGROUND

1. Field of the Invention

The invention relates to telephony voice response systems, and more particularly, to the extension of database languages to handle telephony voice response functions.

2. Description of Related Art

An interactive voice response (IVR) system is a system which allows callers to use a telephone to interact with a remote computer and retrieve data from, or enter data into, one or more databases. Usually callers enter information and commands by pressing buttons on a tone-generating telephone. The telephone generates a DTMF-encoded (dual-tone multi-frequency) signal in response to such buttons, and transmits the tones to the voice response system. The voice response system decodes the tones to determine which buttons were pressed, and proceeds accordingly. In other systems, callers enter information and commands by speaking into the telephone. In such a situation, the voice response system recognizes the words spoken and proceeds accordingly. IVR systems can be as simple as ordinary voice mail systems, or can be highly complex, with multiple menus and caller-data-entry facilities. They can support either a single telephony channel or multiple simultaneously active telephony channels.

IVR systems are typically developed by programming a general purpose computer system that has telephony hardware installed. For example, IVR systems often include a DOS-based personal computer with a telephony expansion card installed, such as a TyIN 4000 Pro Personal Communication Assistant, available from National Semiconductor Corporation, Santa Clara, Calif., or a Model D/41 available from Dialogic Corporation, Parsippany, N.J.

IVR systems usually need to have a high degree of flexibility for customization by value-added resellers (VARs) and by the MIS departments of end-user customers. VARs will often customize an IVR system for the needs of a particular customer, and many customers need to be able to modify their IVR systems themselves to meet changing requirements for their callers.

In the past, many IVR systems were difficult to customize because they were programmed in an ordinary, general purpose program language, such as C or C++. In order to speed application development and customization, some IVR system suppliers have developed proprietary libraries of C-language procedures which could manage both the control of the telephony hardware and also the data that the caller is accessing. Other suppliers have developed proprietary scripting languages, and provide an interpreter program written in C (or another general purpose programming language). The interpreter follows a script prepared by the developer. Still other suppliers have developed form, table or graphical (GUI) programming environments for IVR system development or customization. VARs and enduser customers have found all of these mechanisms difficult to learn and use, however, and this has restricted the growth of the IVR market.

One of the problems with the above mechanisms for IVR system development is that while they may be well-suited to managing the telephony aspects of the system, they are not as well suited to managing the database aspects of the system. Database management is best performed by facilities which are designed for that purpose, namely database management systems. A database management system (DBMS) is a software package designed to operate on a collection of one or more computer-stored files, or what is referred to as a database. Its primary operation is to select database records that have user-specified common characteristics, and retrieve those records for further processing and display. The database management system also adds new records to the database, and modifies existing records as desired. A typical database management system can include a non-procedural user interface through which a user at a terminal can cause the DBMS to perform desired operations on the database. A typical DBMS also includes a high-level programming language (referred to herein as a database language or a DBMS language) that can be used procedurally to operate on the data in the database. Often both the non-procedural interface and the procedural interface call a common set of procedures, referred to herein as the database engine, to perform the desired operations on the database. The simple, high-level commands supported by DBMSs to manage a database, such as "seek", "replace", "sort", and so on, are quite powerful. However, DBMSs do not support telephony functions.

It is desirable to use DBMSs in IVR applications also because they inherently manage their databases in the "native format" of the DBMS. Unlike general purpose programming languages which provide enormous flexibility to programmers in the formation of data structures, database management systems organize their databases in a predefined format which users rarely, if ever, need to understand. The high-level commands of a DBMS obviate any necessity for the programmer to be concerned with the underlying format in which the data is actually stored.

Once the data is already maintained in the DBMS native format, a host of additional applications become possible. DBMS language programs can be written easily to operate on the data independently of the telephony connections. For example, a bank might create and manage all of its account information using a DBMS, and have an IVR system for customers to call to retrieve such information. Such an IVR system would need to be able to obtain the desired information from the database in the DBMS native format. As another example, an IVR system might be designed to obtain information from callers and place the information in a database; reports can then be easily generated from the data using the various user interfaces of the DBMS. Thus an IVR system which maintains its data in the native format of a DBMS can be much more tightly integrated with the remainder of the customer's business.

In one conventional attempt to integrate native format database management in IVR systems, the IVR system and a database management system were set up to operate independently on two separate computer systems. The IVR system communicated with the DBMS system via terminal emulation, in which the IVR system acted as a user terminal communicating and receiving individual characters from a non-procedural terminal interface of the DBMS. The software for the IVR system was written in a general purpose programming language, and the character stream to and from the DBMS system took place through an ordinary I/O port of the IVR system computer. As might be expected, the terminal emulation technique can be extremely slow, inflexible, and arcane.

Another way that IVR system developers have sought to operate on a database in a native DBMS format, as part of an IVR system, was to provide a procedure library, written in a general purpose programming language such as C, which could be compiled with or linked to the main program module of the IVR application, also written in C. However, this technique required a detailed understanding of the DBMS native format and, in large part, duplicated all of the effort that DBMS manufacturers had already expended in the development of their own database engines and tools. It is also rare for IVR system developers to have the expertise necessary to optimize database management software to run as efficiently as that available from the DBMS manufacturer.

Accordingly, as can be seen, prior attempts to integrate IVR systems with native format DBMS databases have left much to be desired. The present invention achieves such integration much more effectively.

SUMMARY OF THE INVENTION

Many existing DBMS languages can be extended using library extension modules. Thus a developer of a database language program can create a proprietary library for operating on the database or for performing other functions, and can then access the procedures of the library in the same manner as the ordinary procedures of the database engine are accessed. For example, the FoxPro.RTM. database management system, available from Microsoft.RTM., includes a "library construction kit" which allows developers to create external libraries of C-language routines that can be integrated into any FoxPro application through a predefined external FoxPro application programing interface (API). Once the library is installed, a FoxPro language program invokes an extension procedure merely by calling it in the same manner that it calls FoxPro built-in procedures. The FoxPro library construction kit is described in Microsoft, "FoxPro.RTM. Library Construction Kit, Developer's Guide" (1993), incorporated herein by reference.

Another example of a DBMS which allows language extensions is Informix 4GL. Extensions for this database language are described in Informix, "Informix-4GL Rapid Development System, Unix Products Installation Guide and Release Notes", Rev. A, pp. 1-59-1-76 (1988), incorporated herein by reference.

These DBMS systems can be thought of as being organized into three components: (1) a database language sequencer module, which follows a database language script (either as an interpreter or as compiled code); (2) a database engine module which contains the DBMS's built-in procedures for operating on the database; and (3) the extension library module, which contains the developer's extension library procedures. The database language sequencer traverses the script, and calls the procedures in either the database engine module or the extension module as required by the script. The interface to these procedures is the same for both the database engine module and the extension module, as set forth in the above-incorporated references.

Although extension library capabilities have been available in DBMS languages for a long time, they have not heretofore been used for telephony operations. One possible reason for this is that those working in the telephony field developing IVR applications, are used to working in either general purpose programming languages such as C, or in specialized languages developed specifically for telephony operations only.

Accordingly, the invention involves the addition of a telephony library extension to a DBMS that has a programming language, with the resulting combination executing on computer hardware to form a telephony server. In one embodiment, telephony server apparatus includes a database and software instructions executable by a processor structure, the software instructions including a database language sequencer, a database control module having a plurality of procedures callable by the database language for performing at least one database operation, and a telephony control module having a plurality of procedures callable by the database language sequencer for performing at least one telephony operation. The database operations include at least the operations of reading and writing data to a database, and the telephony operations include at least the operations of speaking a predefined prompt onto a telephony channel, receiving and storing DTMF-encoded input from the telephony channel, and recording audio input from the telephony channel. The database language sequencer calls the database control module procedures and the telephony control module procedures in a sequence defined by a program prepared according to the rules of a database language. The database language sequencer can include either an interpreter or compiled code.

The telephony server apparatus can control multiple telephony channels by running a separate task for each such channel under a multitasking operating system. The above software can be instantiated separately for each task, or parts can be separated out and provided in a common task communicating with the individual channel tasks via inter-process communication (IPC), shared memory, or by another mechanism. In one embodiment, a common channel server task is provided which manages the resources of the telephony card for all of the individual channel tasks.

BRIEF DESCRIPTION OF THE DRAWINGS

The invention will be described with respect to particular embodiments thereof, and reference will be made to the drawings, in which:

FIG. 1 is a symbolic block diagram of an IBM PC/AT-compatible personal computer incorporating features of the invention;

FIG. 2 is a block diagram of the software architecture used in the system of FIG. 1;

FIG. 3 is a detail of a sequencer of FIG. 2;

FIG. 4 is a flowchart illustrating the creation of a sequencer in FIG. 2; and

FIG. 5 is another block diagram of the software architecture used in the system of FIG. 1.

DETAILED DESCRIPTION

I. HARDWARE ARCHITECTURE

FIG. 1 is a symbolic block diagram of an IBM PC/AT-compatible personal computer incorporating features of the invention. It comprises a CPU 102, which may be an Intel 80486 compatible CPU or an Intel Pentium processor, for example. The CPU 102 has address, data and control lines which are connected to a CPU bus 104. The CPU bus 104 is also connected to a cache memory 106 and to DRAM memory 108, both of which are controlled by system control logic 110. The system control logic 110 is connected to the CPU bus 104 and also to control, address and data lines of an ISA bus 112. Connected to the ISA bus 112 is a ROM 114 containing the system BIOS, a disk controller 116 for floppy and hard-disk drives 118, and one or more telephony cards 120 connected to a plurality of telephony channels 122. The telephony card 120 is a model D/41, available from Dialogic Corporation, Parsippany, N.J. In another embodiment, the telephony card is a TyIN 4000 Pro, available from National Semiconductor, Santa Clara, Calif. The Dialogic board is described in Dialogic, "Voice Hardware Reference" (Dialogic Ref. No. OS-0147-002) (1994), incorporated by reference herein. The TyIN 4000 Pro is described in National Semiconductor, "TyIn 4000 Pro, Getting Started" (1994), incorporated herein by reference. The system of FIG. 1 illustrates only one platform which can run software according to the invention. Numerous other platforms can also suffice, such as Macintosh-based platforms available from Apple Computer, Inc., platforms with different local bus configurations, networked platforms, multi-processor platforms, and so on.

The telephony channels 122 represent separate analog phone lines for each channel. However, a wide variety of other implementations are possible. For example, the telephony channels 122 could represent separate logical channels all carried on one or more telephone-company-provided T1 connections or higher. As another example, the telephony channels 122 may be carried on one or more ISDN BRI or PRI links into the public switched telephone network. In either case, the telephony cards 120, together with any software drivers, are responsible for presenting the appearance of separate, individual channels (also referred to herein as telephony lines) to higher level software.

Because of the numerous types of hardware platforms which can run software according to the invention, the term "processor structure" as used herein will refer to the CPU or CPUs of single or multiple processor arrangements, whether located in a single box or distributed across a network. Similarly, due to the possibility of paging and overlay mechanisms of different operating systems and application programs as well as memory, disk and network caching, the term "memory structure" includes both volatile and non-volatile memory, mass storage and cache memories, whether these types of memory are all located in a single box or distributed across a network.

II. SOFTWARE ARCHITECTURE

FIG. 2 is a block diagram of the software architecture used in the present embodiment. The software runs under a multitasking operating system such as Microsoft Windows, Windows NT or UNIX. As used herein, the term "multitasking operating system" includes permissive multitasking operating systems as well as preemptive multitasking operating systems. Preferably, the operating system 202 in FIG. 2 is Microsoft Windows. All of the software and data illustrated in FIG. 2 is present in the memory structure of FIG. 1, although because of paging, memory caching and disk caching and other memory management mechanisms, different parts may at different times be located physically in one or more of the different components of the memory structure.

In the architecture of FIG. 2, each of the telephony channels is associated with a separate concurrent task (also called a concurrent process) running under the operating system 202. The term "concurrent task" does not require that their instructions be executing simultaneously, although this may be possible on a multi-processor system. In FIG. 2, N tasks are shown, 204-1, . . . 204-N (collectively, 204). In one embodiment, these tasks are all created upon initialization of the IVR system, whereas in another embodiment, the tasks are created only as their associated telephony channels become active.

In a multitasking operating system, a task (or process) can be thought of as being divided into two components: software instructions which are executable by the processor structure, and data. Data is further divisible into read-only data and read-write data. When two tasks are running the same software, the read-write data for each task is maintained in a separate region of the memory structure, whereas, depending on the operating system, there may either be a separate copy of the software instructions and read-only data for each task or the different tasks can share the same copy of the software instructions and read-only data. In the present embodiment, a single copy of the software instructions and read-only data is shared. See Pietrek, "Windows Internals," Addison-Wesley, pp. 216-218 (1993). The entire Pietrek text is incorporated by reference herein. Whether or not two tasks running the same program share their software instructions and read-only data, the program is considered herein to be separately "instantiated" for each of the tasks.

Each of the tasks in FIG. 2 can be thought of as including three modules 206-i, 208-i and 210-i. The module 206-i is a database language sequencer. The sequencer is the portion which the IVR system developer creates or modifies in order to define the caller's experience with the IVR system. Voice prompts are set up in the sequencer module, as are menu hierarchies, actions in response to caller input, and so on. In order to facilitate the extensive data manipulation and data access which sophisticated IVR systems usually require, the IVR system developer creates the sequencer 206-i using a feature-rich database language rather than with a minimal IVR language or general purpose programming language. Any database language can be used in different embodiments of the invention. The embodiment described herein uses FoxPro, but the languages of many other database systems can be used instead, such as dbase, Paradox, Oracle/SQL, Clipper, and so on.

The DBMS-language sequencer 206-i can include either a fully compiled version of the developer's DBMS language code, or can include the combination of the DBMS-language code in text form plus an interpreter. Other variations are also possible, such as the combination of a tokenized version of the developer's DBMS code plus a traverser for sequencing through the tokens. FIG. 3 illustrates the interpreter variation. As can be seen, the sequencer 206-i includes the FoxPro code 302 in text form as written by a developer, and a FoxPro language interpreter 304 which parses the FoxPro code 302 in order to determine which actions to take. In this variation, the interpreter 304 includes software instructions executable by the processor structure, which may be shared between tasks, while the FoxPro code 302 is considered read/write data and is not shared between the tasks. However, in another embodiment, the FoxPro code 302 may be shared between tasks. Note that it will typically be desired that most, if not all, of the telephony channels should present the same user experience to callers. In this case, if the FoxPro code 302 is not actually shared, it can at least be identical among all the channels that require the same handling.

FIG. 4 is a flowchart illustrating the creation of the sequencer 206-1 in the variation in which the sequencer constitutes compiled code. In a step 402, the developer prepares the FoxPro code in text form. This may be the same code as 302 in FIG. 3. In step 404, the FoxPro code is compiled using the FoxPro DBMS compiler in the FoxPro Distribution Kit, available from Microsoft Corporation, Redmond, Wash. This compiler is described in Microsoft, "FoxPro User's Guide" pp. U6-12-U6-15 (1993). (The entire User's Guide is incorporated herein by reference.) In step 406 the compiled sequencer 206-1 has been created.

Since each task 204-i in FIG. 2 corresponds to a separate telephony channel 122, the IVR system developer can prepare the FoxPro code used to create the sequencer 206-i, as if only one telephony channel was to be handled. The developer need not be concerned with any other telephony channel, or even with the possibility that more than one telephony channel may exist, since all consequences of these possibilities are handled by the multitasking operating system 202 and/or the channel server process 214 described below.

Returning to FIG. 2, the module 208-i represents a database engine for the particular DBMS in which the IVR system's developer's code was prepared. In the presently described embodiment, database engine 208-i is the FoxPro database engine, available from Microsoft Corporation and incorporated herein by reference.

All of the database engines 208-i contain a set of database management procedures which are callable by the sequencer 206-i in order to manage the data in a common database 212. The database 212 is stored in the memory structure of the computer system of FIG. 1, and for the most part on the disks 118 of such memory structure.

The module 210-i contains a library of telephony-related procedures callable by the sequencer 206-i. The module 210-i can be provided to the IVR system developer in compiled form, so the developer need not be concerned at all with its contents (except to know the identity of, and syntax for, the procedures which may be called from the FoxPro language code). In the situation where the DBMS language used is FoxPro, and the operating system 202 is Microsoft Windows, then the procedures of the module 210-i are preferably written in C and compiled and linked together to create an .FLL (FoxPro Linked Library). The procedures of FLL 210-i are described in more detail below.

The telephony modules 210, each instantiation of which is associated with a different telephony channel 122, communicate with a channel server process 214 which is charged with controlling the telephony cards 120 and allocating their resources in a manner which avoids conflicts among the different tasks 204. The channel server process 214 is described in more detail below as well.

FIG. 5 is another diagram of the software architecture used in the present embodiment. For simplicity, only one task 204 is illustrated, but greater detail is provided throughout the hierarchy. In addition, since the database engine modules 208 and the database 212 are conventional, they are omitted from FIG. 5.

As can be seen in FIG. 5, the software architecture of the present embodiment is organized into layers. It will be seen that by substituting one module at one layer, different database management systems can be accommodated. By substituting modules at two other layers, different operating systems can be accommodated. Finally, by substituting modules at two further layers, different telephony cards can be accommodated.

Referring to FIG. 5, the top two levels 302 and 304 together form the FoxPro language sequencer 206-1 (FIG. 2). The example of FIG. 3, specifically the combination of FoxPro code in text (layer 302) and a FoxPro language interpreter (layer 304) is illustrated. The FoxPro code in layer 302 is prepared by the IVR system developer, whereas the FoxPro language interpreter 304 is supplied by the DBMS manufacturer (Microsoft, in the case of FoxPro).

The telephony FLL module 210-1 (FIG. 2) comprises three layers: a DBMS interface layer 502, charged with the task of converting parameters between the form in which they are passed to and from the sequencer 206-1, and a generic form used by lower layers in the hierarchy. The layer 502 thus isolates lower layers from having to know which DBMS is running in the higher layers. The module 502 is specific to the particular DBMS used; other versions of this module can be substituted in order to support sequencers from other DBMSs.

Below the DBMS interface layer 502 in the telephony FLL 210-1 is a compute layer 504. Roughly, the compute layer 504 is charged with performing any computations that are both generic (not specific to a particular DBMS) and not appropriate for the channel server 214 to perform. For example, certain operations should not be performed by the channel server 214 because they may create a bottleneck; these operations are performed in the compute layer 504 instead. Examples of operations performed in the compute layer 504 include retrying an operation if no input is received before a time-out expires; converting a date value input parameter to a list of individual voice prompts to speak; and so on. Different versions of the compute layer 504 may be substituted to meet the needs of different market segments, for example to accommodate different human languages or the customs of different countries.

Below the compute layer 504 in telephony-FLL 210-1 is an IPC client layer 506. The IPC client layer 506 communicates with an IPC server layer 508 at the top of the channel server 214 using an inter-process communication (IPC) protocol or mechanism of the underlying operating system 202 (FIG. 2). In Windows implementations, the IPC mechanism can be Dynamic Data Exchange (DDE). Whereas there are N instantiations of the sequencer 206-i and the telephony FLL 210-i, including the IPC client layer 506, there is only one instantiation of the channel server 214, including an IPC server layer 508. The purpose of IPC client layer 506 is to perform the client side of the inter-process communication mechanism for the compute layer 504 in a manner which isolates the compute layer 504 from all details of the IPC communication mechanism. The layer 506 also isolates higher layers from having to know whether the IVR system is serving only a single channel, or multiple channels. The IPC server layer 508 performs the server side of the inter-process communication mechanism. Note that in systems that support only a single telephony channel, the IPC client layer 506 and the IPC server layer 508 can be combined into a single very simple layer.

Below the IPC server layer 508 in the channel server 214 is a test mode layer 509. When test mode is activated, this layer simulates the operation of the telephony hardware using user dialogs, so that an application can be tested without requiring actual use of telephony hardware. In normal operation, test mode is disabled and the test mode layer 509 simply becomes transparent.

Below the test mode layer 509 is a line driver interface layer 510. The layer 510 implements standard voice/telephony primitives for the particular telephony card(s) installed in the system. In some embodiments, the line driver interface 510 might also control a voice recognition card (not shown). The layer 510 implements such primitives as "answer incoming call", "hang up line", "get DTMF keys", and "play list of prompts". Since the line driver interface layer 510 isolates higher layers from having to know how to control the particular telephony card(s) installed in the system, different versions of the layer 510 may be substituted to handle different telephony cards.

Below the line driver interface layer 510 in the channel server 214 is the telephony card driver 512 supplied by the telephony card manufacturer. For the Dialogic D/41 card, the driver 512 is the D40Drv DOS TSR ("Terminate and Stay Resident") program, available from Dialogic. For the National Semiconductor TyIN 4000 Pro telephony card, the driver layer 512 is the TAPI service provider (TSP) program available from National Semiconductor. For the Rhetorex telephony card (Model RDSP 9432, available from Rhetorex, Inc., Campbell, Calif. ), the driver 512 is the RhetDrv DOS TSR program available from Rhetorex. All three of these driver programs are incorporated herein by reference in their entirety. Such drivers may also include a number of procedures to be compiled with the channel server 214, which properly call the TSR or TAPI routines.

III. EXAMPLE FOXPRO PROGRAM

Set forth in Appendix A is an example FoxPro program for layer 302 (FIG. 5). The programing language in which the FoxPro code in Appendix A is written, is described in Microsoft, "FoxPro Language Reference" (1993), incorporated herein by reference.

The example program in Appendix A represents the telephony component of an interactive voice response system which schedules part-time workers at a plant. It demonstrates a solution to the need for a large retail outlet to schedule temporary labor, and have temporary employees be able to call in and obtain their work schedule. The voice response system permits workers to enter their worker number, and be told which days