WO2013177651A1 - Call directing methods, apparatuses, and systems - Google Patents

Call directing methods, apparatuses, and systems Download PDF

Info

Publication number
WO2013177651A1
WO2013177651A1 PCT/CA2012/000514 CA2012000514W WO2013177651A1 WO 2013177651 A1 WO2013177651 A1 WO 2013177651A1 CA 2012000514 W CA2012000514 W CA 2012000514W WO 2013177651 A1 WO2013177651 A1 WO 2013177651A1
Authority
WO
WIPO (PCT)
Prior art keywords
call
incoming
callee identifier
termination
computer
Prior art date
Application number
PCT/CA2012/000514
Other languages
French (fr)
Inventor
David Tarasenko
Steven LEPAGE
Original Assignee
David Tarasenko
Lepage Steven
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by David Tarasenko, Lepage Steven filed Critical David Tarasenko
Priority to PCT/CA2012/000514 priority Critical patent/WO2013177651A1/en
Publication of WO2013177651A1 publication Critical patent/WO2013177651A1/en

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/1066Session management
    • H04L65/1069Session establishment or de-establishment
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/1066Session management
    • H04L65/1096Supplementary features, e.g. call forwarding or call holding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/1066Session management
    • H04L65/1101Session protocols
    • H04L65/1104Session initiation protocol [SIP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04MTELEPHONIC COMMUNICATION
    • H04M3/00Automatic or semi-automatic exchanges
    • H04M3/42Systems providing special services or facilities to subscribers
    • H04M3/50Centralised arrangements for answering calls; Centralised arrangements for recording messages for absent or busy subscribers ; Centralised arrangements for recording messages
    • H04M3/51Centralised call answering arrangements requiring operator intervention, e.g. call or contact centers for telemarketing
    • H04M3/5158Centralised call answering arrangements requiring operator intervention, e.g. call or contact centers for telemarketing in combination with automated outdialling systems
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04MTELEPHONIC COMMUNICATION
    • H04M2207/00Type of exchange or network, i.e. telephonic medium, in which the telephonic communication takes place
    • H04M2207/20Type of exchange or network, i.e. telephonic medium, in which the telephonic communication takes place hybrid systems
    • H04M2207/203Type of exchange or network, i.e. telephonic medium, in which the telephonic communication takes place hybrid systems composed of PSTN and data network, e.g. the Internet
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04MTELEPHONIC COMMUNICATION
    • H04M2215/00Metering arrangements; Time controlling arrangements; Time indicating arrangements
    • H04M2215/42Least cost routing, i.e. provision for selecting the lowest cost tariff
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04MTELEPHONIC COMMUNICATION
    • H04M7/00Arrangements for interconnection between switching centres
    • H04M7/006Networks other than PSTN/ISDN providing telephone service, e.g. Voice over Internet Protocol (VoIP), including next generation networks with a packet-switched transport layer

Definitions

  • the present invention relates generally to methods, apparatuses, and systems for directing a call to a termination callee.
  • a method of directing a call to a termination callee having a termination callee identifier comprises: receiving, at an interface of at least one gate computer, at least one signal carrying an incoming call directed to an incoming callee identifier different from the termination callee identifier; identifying one of a plurality of call track server computers associated with the incoming callee identifier; causing at least one signal carrying the incoming call to be transmitted from the interface of the at least one gate computer to an interface of the one of the plurality of call track server computers associated with the incoming callee identifier; receiving, at the interface of the at least one gate computer and from the interface of the one of the plurality of call track server computers associated with the incoming callee identifier, at least one signal carrying an outgoing call directed to the termination callee identifier; and causing at least one signal carrying the outgoing call to be transmitted from the interface of the at least one gate computer to an interface of an outgoing call provider
  • At least one computer-readable medium comprising stored thereon codes for directing at least one computer to implement the method.
  • a call directing apparatus comprising: a means for receiving, from a means for carrying an incoming call, at least one signal carrying the incoming call directed to an incoming callee identifier; a means for identifying one of a plurality of means for call tracking associated with the incoming callee identifier; a means for transmitting at least one signal carrying the incoming call to the one of the plurality of means for call tracking associated with the incoming callee identifier; a means for receiving, from the one of the plurality of means for call tracking associated with the incoming callee identifier, at least one signal carrying an outgoing call directed to a termination callee identifier; and a means for transmitting at least one signal carrying the outgoing call to a means for carrying the outgoing call to a termination callee identified by the termination callee identifier.
  • a call directing system comprising: a plurality of means for call tracking; a means for receiving, from a means for carrying an incoming call, at least one signal carrying the incoming call directed to an incoming callee identifier; a means for identifying one of the plurality of means for call tracking associated with the incoming callee identifier; a means for transmitting at least one signal carrying the incoming call to the one of the plurality of means for call tracking associated with the incoming callee identifier; a means for receiving, from the one of the plurality of means for call tracking associated with the incoming callee identifier, at least one signal carrying an outgoing call directed to a termination callee identifier; and a means for transmitting at least one signal carrying the outgoing call to a means for carrying the outgoing call to a termination callee identified by the termination callee identifier.
  • Each one of the plurality of means for call tracking comprises: a means for associating the incoming callee identifier with the termination callee identifier such that the termination callee identifier is different from the incoming callee identifier; a means for receiving the at least one signal carrying the incoming call from the means for transmitting the at least one signal carrying the incoming call; and a means for transmitting, in response to receiving the at least one signal carrying the incoming call from the means for transmitting the at least one signal carrying the incoming call, the at least one signal carrying the outgoing call directed to the termination callee identifier associated with the incoming callee identifier such that the incoming call and the outgoing call are joined.
  • a call directing apparatus comprising: an interface in communication with at least one telecommunication service provider and with a plurality of call track server computers; and a processor circuit in communication with the interface.
  • the processor circuit is configured to: cause the interface to receive, from a first one of the at least one telecommunication service provider, at least one signal carrying an incoming call directed to an incoming callee identifier; identify one of the plurality of call track server computers associated with the incoming callee identifier; cause the interface to transmit at least one signal carrying the incoming call to the one of the plurality of call track server computers associated with the incoming callee identifier; cause the interface to receive, from the one of the plurality of call track server computers associated with the incoming callee identifier, at least one signal carrying an outgoing call directed to a termination callee identifier; and cause the interface to transmit, to a second one of the at least one telecommunication service provider, at least one signal carrying the outgoing call directed to the termination call
  • a call directing system comprising: a plurality of call track server computers each comprising a call track server computer interface; and at least one gate computer.
  • the at least one gate computer comprises: a gate computer interface in communication with at least one telecommunication service provider and with the call track server computer interface of each one of the plurality of call track server computers; and a processor circuit in communication with the gate computer interface.
  • the processor circuit of the at least one gate computer is configured to: cause the gate computer interface to receive, from a first one of the at least one telecommunication service provider, at least one signal carrying an incoming call directed to an incoming callee identifier; identify one of the plurality of call track server computers associated with the incoming callee identifier; cause the gate computer interface to transmit at least one signal carrying the incoming call to the call track server computer interface of the one of the plurality of call track server computers associated with the incoming callee identifier; cause the gate computer interface to receive, from the one of the plurality of call track server computers associated with the incoming callee identifier, at least one signal carrying an outgoing call directed to a termination callee identifier; and cause the gate computer interface to transmit, to a second one of the at least one telecommunication service provider, at least one signal carrying the outgoing call directed to the termination callee identifier.
  • Each one of the plurality of call track server computers further comprises a processor circuit in communication with the call track computer interface of the one of the plurality of call track server computers and configured to: associate the incoming callee identifier with the termination callee identifier such that the termination callee identifier is different from the incoming callee identifier; cause the call track server computer interface to receive the at least one signal carrying the incoming call from the gate computer interface; and cause the call track server computer interface to transmit, in response to receiving the at least one signal carrying the incoming call from the gate computer interface, the at least one signal carrying the outgoing call directed to the termination callee identifier associated with the incoming callee identifier such that the incoming call and the outgoing call are joined.
  • a method of communicating a callee identifier associated with an advertising service provider comprises: receiving a web page identifier encoded with an identifier of an advertising campaign; transmitting the identifier of the advertising campaign to at least one portal computer; in response to transmitting the identifier of the advertising campaign to at least one portal computer, receiving the callee identifier; and directing a computer to display the callee identifier among information received in association with the web page identifier.
  • At least one computer-readable medium comprising stored thereon codes for directing at least one computer to implement the method.
  • Figure 1 is a schematic representation of a call directing system according to one embodiment of the invention.
  • Figure 2 is a schematic representation of a portal computer of the call directing system of Figure 1;
  • Figure 3 is a schematic representation of add incoming telephone number codes of a program memory of the portal computer of Figure 2;
  • Figure 4 is a schematic representation of an instance of an incoming telephone number record entry stored in a storage memory of the portal computer of Figure 2;
  • Figure 5 is a schematic representation of an incoming telephone number routing message generated by the portal computer of Figure 2;
  • Figure 6 is a schematic representation of a gate computer of the call directing system of Figure 1 ;
  • Figure 7 is a schematic representation of an instance of a customer record entry stored in a storage memory of the gate computer of Figure 6; is a schematic representation of an add campaign user interface generated by codes in a program memory of the gate computer of Figure 6; is a schematic representation of add campaign codes of the program memory of the gate computer of Figure 6; is a schematic representation of an instance of a campaign record entry stored in the storage memory of the gate computer of Figure 6; is a schematic representation of a begin routing to termination telephone number message generated by the gate computer of Figure 6; is a schematic representation of a call track server computer of the call directing system of Figure 1; is a schematic representation of an instance of a termination telephone number routing table entry stored in a storage memory of the call track server computer of Figure 12; is a schematic representation of one example of operation of the call directing system of Figure 1; is a schematic representation of receive SIP INVITE request message codes of a program memory of the call track server computer of Figure 12; is a schematic representation of initiate outgoing call codes of the program memory of the gate computer of
  • Figure 20 is a schematic representation of an instance of a call records table entry stored in the storage memory of the call track server computer of Figure 12;
  • Figure 21 is a schematic representation of receive ASTERISKTM event codes of the program memory of the call track server computer of Figure 12;
  • Figure 22 is a schematic representation of receive SIP BYE request message codes of the program memory of the call track server computer of Figure 12;
  • Figure 23 is a schematic representation of a call records message generated by the call track server computer of Figure 12;
  • Figure 24 is a schematic representation of a call logs store in the storage memory of the portal computer of Figure 2
  • Figure 25 is a schematic representation of a call counts store in the storage memory of the portal computer of Figure 2;
  • Figure 26 is a schematic representation of channel closed codes of the program memory of the call track server computer of Figure 12.
  • Figure 27 is a schematic representation of program codes executed by a web user computer in communication with the call directing system of
  • Figure 1 in response to receiving, from an advertising server computer in communication with the web user computer, a web page identifier encoded with an identifier of an advertising campaign.
  • a call directing system according to one embodiment of the invention is shown generally at 100.
  • the call directing system 100 includes a portal computer 102, a gate computer 104, and call track server computers 106, 108, and 110, all of which are in communication with each other over an internet protocol (“IP") network 112.
  • IP internet protocol
  • an administrator user computer 14 and a customer user computer 116 are also in communication with the IP network 112 to facilitate various functions further described below.
  • the call directing system 100 also includes one or more telecommunication service providers represented by 118, which in the embodiment shown include one or more public switched telephone network (“PSTN”) providers represented by 120 and one or more Voice-over-IP (“VoIP”) providers represented by 122.
  • PSTN public switched telephone network
  • VoIP Voice-over-IP
  • the one or more PSTN providers 120 are in communication with the gate computer 104 over a voice circuit 124, which may be a T-carrier in North America, Japan, South Korea, and other locations, and which in Europe and in other locations may be an E-carrier, for example.
  • the voice circuit 124 in the embodiment shown can carry telephone calls between the one or more PSTN providers 120 and the gate computer 104.
  • some PSTN providers can also carry calls over IP networks, such as the IP network 112 in the embodiment shown, and therefore Figure 1 also shows the one or more PSTN providers 120 in communication with the IP network 112.
  • some of the one or more PSTN providers 120 may communicate with the gate computer 104 over the IP network 112 to carry telephone calls with the gate computer 104, some of the one or more PSTN providers 120 may communicate with the gate computer 104 over the voice circuit 124 to carry telephone calls with the gate computer 104, and some of the one or more PSTN providers 120 may communicate with the gate computer 104 over both the IP network 112 and the voice circuit 124 from time to time to carry telephone calls with the gate computer 104. Further, the one or more VoIP providers 122 are also in communication with the IP network 112 to carry telephone calls with the gate computer 104 over the IP network 112.
  • call herein may refer to a call carried in part over a PSTN network, a call carried in part over an IP network, a call carried in part over both a PSTN network and an IP network, or more generally to a channel of communication including voice data carried over one or more circuits or networks.
  • a call generally involves a caller, namely a person or device that initiates a call, and a callee, namely a person or device to which the call is directed.
  • the caller is generally associated with a caller identifier, which may be a caller telephone number or a direct inward dialing ("DID") number in some embodiments.
  • the callee is generally associated with a callee identifier, which may be a callee telephone number or a DID number in some embodiments.
  • the call directing system 100 may receive, from the one or more telecommunication service providers 118, a call directed to an incoming telephone number, or more generally to an incoming callee identifier.
  • incoming telephone number and "incoming callee identifier" refer, in the embodiment shown, to a telephone number associated with one of the one or more telecommunication service providers 118 where the telecommunication service provider associated with the telephone number is configured to direct calls to the telephone number to the gate computer 104.
  • the call directing system 100 receives such a call directed to such an incoming telephone number, the call directing system 100 directs the call to a termination callee having a termination callee identifier.
  • the termination callee identifier is generally different from the incoming callee identifier and may be associated with the incoming callee identifier as described below, such that a caller who initiates a call to the incoming callee identifier may have the call directed to the termination callee identifier without even being aware that the call has been so directed.
  • the termination callee identifier in the embodiment shown is a telephone number associated with a callee to which a call is to be directed.
  • An administrator user using the administrator user computer 114 in the embodiment shown may cause calls that are directed to one or more incoming telephone numbers to be directed from the one or more telecommunication service providers 118 to the gate computer 104.
  • the administrator user using the administrator user computer 114 may communicate with an administrator (not shown) of one of the one or more PSTN providers 120 associated with the telephone number to configure the PSTN provider to direct calls to that telephone number over the voice circuit 124, or over the IP network 112, and to the gate computer 104.
  • the administrator user using the administrator user computer 114 may communicate with an administrator (not shown) of one of the one or more VoIP providers 122 associated with the telephone number to configure the VoIP provider to direct a call to the telephone number over the IP network 112 and to the gate computer 104.
  • the portal computer 102 is illustrated schematically and includes a processor circuit, which in the embodiment shown is a microprocessor 126.
  • the portal computer 102 also includes a program memory 128, a storage memory 130, a clock 131 that maintains values representing a current date and time and provides such values to the microprocessor 126, and an input/output ("I/O") interface 132.
  • the program memory 128 and the storage memory 130 may each be implemented as one of, or as a combination of more than one, a random-access memory (“RAM”), a hard disc drive (“HDD”), and other computer- readable and/or computer-writable memory.
  • the program memory 128 generally stores program codes for directing the microprocessor 126 to execute various functions of the portal computer 102.
  • the program memory 128 includes various blocks of program codes, including operating system (“O/S”) codes 134, database management system (“DBMS”) codes 136 generally for managing various databases in the storage memory 130, and hypertext transfer protocol (“HTTP”) server codes 138 generally for making various hypertext mark-up language (“HTML”) or other documents available to users of the portal computer 102 over the IP network 112, such as respective users (not shown) of the administrator user computer 114 and the customer user computer 116 (shown in Figure 1) in the embodiment shown for example.
  • the various DBMS codes may include codes from PostgreSQLTM database systems, which in some embodiments may be virtualized in a virtualized environment such as a VMwareTM vSphereTM virtualized environment available from VMware, Inc. of Palo Alto, California, United States of America, for example.
  • the I/O interface 132 includes an IP interface 140, which may be a network adapter such as an Ethernet card for example, and which facilitates communication over the IP network 112 over various internet components.
  • IP interface 140 may be a network adapter such as an Ethernet card for example, and which facilitates communication over the IP network 112 over various internet components.
  • the program memory 128 includes add incoming telephone number codes 142, which in the embodiment shown are executed when an administrator user (not shown) of the administrator user computer 114 interacts with various web pages managed by the HTTP server codes 138 of the portal computer 102 to indicate to the portal computer 102 that one of the one or more telecommunication service providers 118 has been configured to direct calls to an incoming telephone number to the gate computer 104 as described above.
  • the add incoming telephone number codes 142 begin at block 144, which includes codes for directing the microprocessor 126 to receive an incoming telephone number from the administrator user of the administrator user computer 114 (shown in Figure 1) and store the received incoming telephone number in a temporary memory store (not shown).
  • the HTTP server codes 138 may include codes for presenting the administrator user of the administrator user computer 114 (shown in Figure 1) with a user interface including a list of available incoming telephone numbers, and by selecting one of the available incoming telephone numbers, the administrator user may cause the HTTP server codes 138 to generate a signal identifying the selected incoming telephone number such that the selected incoming telephone number is received at block 144.
  • the add incoming telephone number codes 142 continue at block 146, which includes codes for directing the microprocessor 126 to identify a call track server computer to be associated with the incoming telephone number received at block 144.
  • the call directing system 100 in the embodiment shown includes three call track server computers, namely the call track server computers 106, 108, and 110, although alternative embodiments may include only one call track server computer or a different number of call track server computers.
  • the codes at block 146 may cause incoming telephone numbers to be distributed evenly across the available call track server computers.
  • the codes at block 146 may identify one of the call track server computers 106, 108, and 110 having a lowest number of incoming telephone numbers associated with it, and identify that call track server computer at block 146 as the call track server computer to be identified with the incoming telephone number received at block 144.
  • the add incoming telephone number codes 142 continue at block 148, which includes codes for directing the microprocessor 126 to direct the DBMS codes 136 to store a new instance of an incoming telephone number record entry in an incoming telephone number records database 150 in the storage memory 130.
  • the incoming telephone number records database 150 includes various instances of the incoming telephone number record entry. In general, each instance of the incoming telephone number record entry is associated with a respective incoming telephone number, and includes various fields, each for storing particular values.
  • the incoming telephone number record entry is shown generally at 152 and includes an incoming telephone number record entry identifier field 154, which in the embodiment shown stores an integer assigned by the DBMS codes 136 (shown in Figure 2) to identify an instance of the incoming telephone number record entry 152 uniquely in the incoming telephone number records database 150 (shown in Figure 2).
  • the incoming telephone number record entry 152 also includes a telephone number field 156 for storing the incoming telephone number.
  • the telephone number field 156 may store a ten- digit telephone number of the North American Numbering Plan ("NANP") for example, or alternatively telephone numbers including country codes for example.
  • NANP North American Numbering Plan
  • the incoming telephone number record entry 152 also includes a country field 158 for storing an identifier of a country of the telephone number stored in the telephone number field 156, a state or province field 160 for storing an identifier of a state or province of the telephone number stored in the telephone number field 156, and a rate centre field 162 for storing a rate centre of the telephone number stored in the telephone number field 156.
  • a rate centre may be a major city or geographical area associated with particular long distance calling rates.
  • the incoming telephone number record entry 152 also includes a call track server computer identifier field 164 for storing an identifier of the call track server computer identified at block 146 (shown in Figure 3).
  • the add incoming telephone number codes 142 continue at block 166, which includes codes for directing the microprocessor 126 to direct the IP interface 140 of the I/O interface 132 to send an incoming telephone number routing message to the gate computer 104 (shown in Figure
  • the incoming telephone number routing message is shown generally at 168.
  • various messages including the incoming telephone number routing message 168 may include a header including a binary code representing a type of message, and a payload including binary- encoded data.
  • the binary code in the header may uniquely identify contents and a sequence of the payload data, and thus in such embodiments additional data describing the content and sequence of the payload data may be unnecessary. Therefore, messages such as the incoming telephone number routing message 168 may require significantly less data and transmission time than other messages, such as serialized objects according to the Simple Object Access Protocol ("SOAP") for example.
  • SOAP Simple Object Access Protocol
  • the incoming telephone number routing message 168 includes a message type identifier field 170, which in the embodiment shown is a binary code uniquely identifying the incoming telephone number routing message 168 from other messages in the embodiment shown and described herein.
  • the incoming telephone number routing message 168 also includes an incoming telephone number field 172 for storing the incoming telephone number received at block 144 (shown in Figure 3), and a call track server computer identifier field 174 for storing an identifier of the call track server computer identified at block 146 (shown in Figure 3).
  • the codes at block 166 include codes for directing the microprocessor 126 to direct the IP interface 140 of the I/O interface 132 (shown in Figure 2) to send an incoming telephone number routing message to the gate computer 104 (shown in Figure 1).
  • the gate computer 104 is illustrated schematically and includes a processor circuit, which in the embodiment shown is a microprocessor 176.
  • the gate computer 104 also includes a program memory 178, a storage memory 180, and an I/O interface 182 all in communication with the microprocessor 176.
  • the program memory 178 and the storage memory 180 in the embodiment shown are also implemented as one or more of a RAM, HDD, and other computer-readable and/or computer- writable storage memory.
  • the I/O interface 182 includes a PSTN interface 184, which in the embodiment shown may include one or both of T1 card and an E1 card, for example, to facilitate communication with the one or more PSTN providers 120 over the voice circuit 124.
  • the I/O interface 182 also includes an IP interface 186, which also may be a network adapter such as an Ethernet card for example, and which facilitates communication over the IP network 112 over various internet components.
  • the program memory 178 generally includes program codes for directing the microprocessor 176 to carry out the functions of the gate computer 104 and includes O/S codes 188 and DBMS codes 190 generally for managing various databases in the storage memory 180.
  • the program memory 178 also includes update incoming telephone number routing table codes 192, which in the embodiment shown direct the microprocessor 176 to update an incoming telephone number routing table 194 in the storage memory 180 in response to receiving the incoming telephone number routing message 168 (shown in Figure 5) at the IP interface 186 in response to the codes at block 166 (shown in Figure 3).
  • the update incoming telephone number routing table codes 192 cause the incoming telephone number routing table 194 to associate the incoming telephone number in the incoming telephone number field 172 in the incoming telephone number routing message 168 with the call track server computer identified by the call track server computer identifier field 174 in the incoming telephone number routing message 168 (shown in Figure 5).
  • the signal encoded with the incoming telephone number routing number routing message 168 may more generally be referred to as an incoming callee identifier routing signal encoded with codes associating one of the plurality of call track server computers (106, 108, and 110 in the embodiment shown in Figure 1) with the incoming telephone number in the incoming telephone number field 172 (shown in Figure 5), and the incoming telephone number routing number routing message 168 thus causes the gate computer 104 to associate the incoming telephone number in the incoming telephone number field 172 with the call track server computer identified by the call track server computer identifier field 174.
  • the program memory 178 includes program codes of an open-source telephony application known as ASTERISKTM sponsored by Digium, Inc. of Huntsville, Alabama, United States.
  • the ASTERISKTM software includes PSTN gateway program codes 196, which enable communication over a plurality of calls between the one or more PSTN providers 120, the gate computer 104, and the call track server computers 106, 108, and 110 (shown in Figure 1) over the PSTN interface 184 or over the IP interface 186 as described further below.
  • the ASTERISKTM program codes also include VoIP repeater program codes 198, which enable communication over various calls between the one or more VoIP providers 122 (shown in Figure 1), the gate computer 104, and the call track server computers 106, 108, 110 (shown in Figure 1) over the IP interface 186 as further described below.
  • the PSTN gateway program codes 196 and the VoIP repeater program codes 198 enable the gate computer 104 to receive PSTN and VoIP calls respectively, and route those calls to respective call track server computers identified in the incoming telephone number routing table 194 as further described below.
  • the update incoming telephone number routing table codes 192 function as an interface to receive signals such as the incoming telephone number routing message 168 (shown in Figure 5) to configure the PSTN gateway program codes 196 and VoIP repeater program codes 198 to direct calls received at the gate computer 104 to respective call track server computers (106, 108, and 110 shown in Figure 1 in the embodiment shown), and the gate computer 104 thus identifies one of the plurality of call track server computers associated with an incoming telephone number in response to the association of the one of the plurality of call track server computers with the incoming telephone number caused by the incoming telephone number routing number routing message 168 (shown in Figure 5).
  • a customer user of the customer user computer 116 in the embodiment shown may interact with the portal computer 102 over the IP network 112 to register as a customer of the portal computer 102.
  • the program memory 128 of the portal computer 102 further includes add customer codes 200, which in the embodiment shown are executed when a customer user of the customer user computer 116 interacts with various web pages managed by the HTTP server codes 138 of the portal computer 102 to register as a customer of the portal computer 102.
  • the add customer codes 200 include codes for directing the DBMS codes 136 to store a new instance of a customer record entry in a customer records database 202 in the storage memory 130.
  • the customer records database 202 includes various instances of the customer record entry. In general, each instance of the customer record entry is associated with a respective customer user of the portal computer 102, and includes various fields, each for storing particular values.
  • the customer record entry is shown generally at 204 and includes a customer record entry identifier field 206, which in the embodiment shown stores an integer assigned by the DBMS codes 136 (shown in Figure 2) to identify an instance of the customer record entry 204 in the customer records database 202 (shown in Figure 2).
  • the customer record entry 204 also includes a username field 208 for storing a username of the user associated with an instance of the customer record entry 204, a password field 210 for storing a password of the user, and a billing information field 212 for storing billing information of the user, such as an account balance, a list of account transactions, and a credit card number or other means for billing the user, for example.
  • a customer of the portal computer 102 may direct, to a termination telephone number, a call (which may be referred to as an "incoming call") that the caller directs to an incoming telephone number.
  • a termination telephone number which may be referred to as an "incoming call”
  • the association between an incoming telephone number and a termination telephone number may be referred to as a "campaign" because generally speaking, marketing campaigns can include efforts to elicit telephone calls from prospective customers to particular incoming telephone numbers, and thus each such incoming telephone number may be associated with a respective campaign.
  • the HTTP server codes 138 include codes for presenting a customer user (not shown) of the customer user computer 116 (shown in Figure 1) with an add campaign user interface to allow the customer user to input various data for adding a campaign.
  • the add campaign user interface is shown generally at 214, and includes an incoming telephone number section 216.
  • the incoming telephone number section 216 in the embodiment shown includes a country selection field 218, a state/province selection field 220, and a rate centre selection field 222, all of which may be HTML drop-down lists, for example.
  • the incoming telephone number section 216 When the user selects a desired country in the country selection field 218, a desired state/province in the state/province selection field 220, and a desired rate centre in the rate centre selection field 222, the incoming telephone number section 216 also displays a telephone number selection field 224, which allows the user to select from one or more telephone numbers in the telephone number field 156 of instances of the incoming telephone number record entry 152 having values in the country field 158, the state/province field 160, and the rate centre 162 (shown in Figure 4) matching the country, state/province, and rate centre that the customer user selected in the country selection field 218, the state/province selection field 220, and the rate centre selection field 222 respectively.
  • the add campaign user interface 214 also includes a termination telephone number input field 226, in which the customer using the customer user computer 116 may input a telephone number to which calls to an incoming telephone number selected in the telephone number selection field 224 will be directed.
  • the add campaign user interface 214 also includes a plurality of start date input fields shown generally at 228 and a plurality of end date input fields shown generally at 230, each of which includes respective fields for entering a year, a month, and a day.
  • the add campaign user interface 214 also includes a group description input field 232, in which the customer using the customer user computer 116 may enter a group description to be associated with the campaign. For example, a user may initiate a plurality of campaigns having a group description of "yellow pages" because it may be convenient to consider a plurality of campaigns in such a group. However, in the embodiment shown, such a group description is optional, and the user may leave the group description input field 232 blank.
  • the add campaign user interface 214 also includes a record calls input field shown generally at 234, which in the embodiment shown includes HTML radio buttons for selecting whether to record calls to the selected incoming telephone number.
  • the program memory 128 also includes add campaign codes 236 for responding to customer user input to the add campaign user interface 214 shown in Figure 8.
  • Block 238 includes codes for directing the microprocessor 126 to receive, and store in a temporary memory store (not shown), a customer record entry identifier from the customer record entry identifier field 206 of an instance of the customer record entry 204 (shown in Figure 7) associated with the customer that completed the add campaign user interface 214 (shown in Figure 8).
  • the codes at block 238 also direct the microprocessor 126 to receive, and store in a temporary memory store (not shown), the incoming telephone number record entry identifier from the incoming telephone number record entry identifier field 154 of the incoming telephone number record entry 152 (shown in Figure 4) associated with the incoming telephone number selected in the incoming telephone number selection field 224 (shown in Figure 8), the termination telephone number entered in the termination telephone number input field 226, the start date entered in the start date input region 228, the end date entered in the end date input region 230, the group description (if any) entered in the group description input field 232, and the value entered in the record calls input region 234 (shown in Figure 8).
  • the add campaign codes 236 continue at block 240, which includes codes for directing the DBMS codes 136 to store a new instance of a campaign record entry in a campaign records database 242 in the storage memory 130 (shown in Figure 2).
  • the campaign records database 242 includes various instances of the campaign record entry.
  • each instance of the campaign record entry is associated with a respective campaign, and includes various fields, each for storing particular values.
  • the campaign record entry is shown generally at 244 and includes a campaign record entry identifier field 246, which in the embodiment shown stores an integer assigned by the DBMS codes 136 (shown in Figure 2) to identify an instance of the campaign record entry 244 uniquely in the campaign records database 242 (shown in Figure 2).
  • the campaign record entry 244 also includes a customer record entry identifier field 248, an incoming telephone number record entry identifier field 250, a termination telephone number field 252, a start date field 254, an end date field 256, an incoming telephone number group description field 258, and a record calls field 260 for storing, respectively, the customer record entry identifier, the incoming telephone number record entry identifier, the termination number, the start date, the end date, the group description, and the record calls values received at block 238 as described above.
  • the add campaign codes 236 continue at block 262, which includes codes for directing the microprocessor 126 to determine, and store in a temporary memory store (not shown), which call track server computer is associated with the incoming telephone number identified by the incoming telephone number identifier received at block 238.
  • the codes at block 262 direct the microprocessor 126 to identify an instance of the incoming telephone number record entry 152 having an incoming telephone number record entry identifier in the incoming telephone number record entry identifier field 154 (shown in Figure 4) matching the incoming telephone number record identifier received at block 238, and the codes at block 262 then direct the microprocessor 126 to identify the call track server computer identified by the call track server computer identifier in the call track server computer identifier field 164 in that instance of incoming telephone number record entry 152 (shown in Figure 4).
  • the add campaign codes 236 then continue at block 264, which includes codes for directing the microprocessor 126 to determine whether the start date received at block 238 is a future date.
  • the add campaign codes 236 continue at block 266, which includes codes for directing the microprocessor 126 to update a termination telephone number routing table (296 in the case of the call track server computer 106 as shown in Figure 12 and described below) of the call track server computer identified at block 262 to begin routing calls directed to the incoming telephone number identified by the incoming telephone number identifier received at block 238 to the termination telephone number received at block 238.
  • the codes at block 266 direct the microprocessor 126 to direct the IP interface 140 of the I/O interface 132 to transmit a begin routing to termination telephone number message (shown generally at 268 in Figure 11) to the call track server computer identified at block 262.
  • the begin routing to termination telephone number message 268 in the embodiment shown is a binary message similar to the incoming telephone number routing message 168 (shown in Figure 5), and therefore the begin routing to termination telephone number message 268 includes a message type identifier field 270, which, like the message type identifier field 170 (shown in Figure 5), is a binary number uniquely identifying the begin routing to termination telephone number message 268 from other messages in the embodiment shown and described herein.
  • the begin routing to termination telephone number message 268 in the embodiment shown also includes various payload data including binary-encoded data, namely an incoming telephone number field 272 for storing the incoming telephone number identified by the incoming telephone number record entry identifier received at block 238 (shown in Figure 9), a termination telephone number field 274 for storing the termination telephone number received at block 238, and a record calls field 276 for storing the record calls value received at block 238.
  • binary-encoded data namely an incoming telephone number field 272 for storing the incoming telephone number identified by the incoming telephone number record entry identifier received at block 238 (shown in Figure 9), a termination telephone number field 274 for storing the termination telephone number received at block 238, and a record calls field 276 for storing the record calls value received at block 238.
  • the add campaign codes 236 continue at block 277, which includes codes for directing the microprocessor 126 to schedule an update to the termination telephone number routing table (296 in the case of the call track server computer 106 as shown in Figure 12 and described below) of the call track server computer identified at block 262 to begin, at the start date, routing calls directed to the incoming telephone number identified by the incoming telephone number identifier received at block 238 to the termination telephone number received at block 238.
  • the codes at block 277 direct the microprocessor 126 store such a scheduled update in a scheduled outgoing telephone number routing table updates store 278 in the storage memory 130.
  • the microprocessor 126 directs the IP interface 140 of the I/O interface 132 to transmit the begin routing to termination telephone number message 268 (shown in Figure 11) to the call track server computer identified at block 262 substantially as described above with reference to block 266.
  • the add campaign codes 236 continue at block 279, which includes codes for directing the microprocessor 126 to schedule an update to the termination telephone number routing table (296 in the case of the call track server computer 106 as shown in Figure 12 and described below) of the call track server computer identified at block 262 to end, at the end date received at block 238, routing calls directed to the incoming telephone number identified by the incoming telephone number identifier received at block 238 to the termination telephone number received at block 238.
  • the codes at block 279 direct the microprocessor 126 store such a scheduled update in the scheduled outgoing telephone number routing table updates store 278.
  • the add campaign codes 236 continue at block 579, which includes codes for directing the microprocessor 126 to generate a cryptographic hash value to identify the new campaign.
  • the codes at block 579 invoke cryptographic hash functions implemented by cryptographic hash function codes 580 in the program memory 128.
  • cryptographic hash functions receive input data, and produce fixed-length cryptographic hash values in response to the input data.
  • the codes at block 579 use, as the input data for the hash function codes 580, a concatenation of: an identifier of a reseller (not shown) associated with the customer identified by the customer record entry identifier received at block 238, wherein the reseller may be a person or business (not shown) that facilitated a business transaction for registration of that customer as a customer of the portal computer 102; the customer record entry identifier received at block 238; and the campaign record entry identifier stored in the campaign record entry identifier field 246 of the instance of the campaign record entry 244 (shown in Figure 10) stored at block 240.
  • Block 579 also includes codes for directing the microprocessor 126 to transmit the cryptographic hash value generated by the hash function codes 580 to the customer.
  • the customer may use the cryptographic hash value (as described below) to identify the campaign without revealing the various data that were used as input data for the hash function codes 580.
  • the cryptographic hash value may therefore be more generally referred to as an identifier of an advertising campaign.
  • the add campaign codes 236 then end.
  • the codes at block 266 or at block 277 cause the portal computer 102 to transmit the begin routing to termination telephone number message 268 to the call track server computer identified at block 262.
  • the call track server computer 106 is illustrated schematically, and the call track server computers 108 and 110 (shown in Figure 1) are substantially the same as the call track server computer 106.
  • the call track server computer 106 includes a processor circuit, which in the embodiment shown is a microprocessor 280.
  • the call track server computer 106 also includes a program memory 281 , a storage memory 282, a clock 284 that maintains values representing a current date and time and provides such values to the microprocessor 280, and an I/O interface 286, all of which are in communication with the microprocessor 280.
  • the I/O interface 286 includes an IP interface 288, which may be a network adapter such as an Ethernet card for example, and which facilitates communication over the IP network 112 over various internet components.
  • the program memory 281 generally stores program codes for directing the microprocessor 280 to execute various functions of the call track server computer 106 and includes O/S codes 290, DBMS codes 292 generally for managing various databases in the storage memory 282, and VoIP repeater program codes 293, which in the embodiment shown also include codes of an open-source telephony application known as ASTERISKTM.
  • the VoIP repeater program codes 293 in the embodiment shown generally direct the call track server computer 106 to exchange SIP messages with the gate computer 104 (shown in Figure 1) as further described below.
  • the program memory 281 also includes update termination telephone number routing table codes 294, which are executed in response to receiving the begin routing to termination telephone number message 268 (shown in Figure 11) at the IP interface 288 in response to the codes at blocks 266, 277, or 279 (shown in Figure 9).
  • the update termination telephone number routing table codes 294 cause the DBMS codes 292 to store a new instance of a termination telephone number routing table entry in a termination telephone number routing table 296 in the storage memory 282.
  • the termination telephone number routing table entry is shown generally at 298, and includes a termination telephone number routing table entry identifier field 300, which in the embodiment shown stores an integer assigned by the DBMS codes 292 (shown in Figure 12) to identify an instance of the termination telephone number routing table entry uniquely in the termination telephone number routing table 296 (shown in Figure 12).
  • the termination telephone number routing table entry 298 also includes an incoming telephone number field 302, a termination telephone number field 304, and a record calls field 306, which are for storing the incoming telephone number from the incoming telephone number field 272, the termination telephone number from the termination telephone number field 274, and the record calls value from the record calls field 276 of the begin routing to termination telephone number message 268 (shown in Figure 11) received at the IP interface 288 by the update telephone number routing table codes 294 (shown in Figure 12) in response to the codes at blocks 266, 277, or 279 (shown in Figure 9).
  • the update termination telephone number routing table codes 294 cause the termination telephone number routing table 296 to store a new instance of the termination telephone number routing table entry 298 associating the incoming telephone number from the incoming telephone number field 272 with the termination telephone number from the termination telephone number field 274, and therefore the begin routing to termination telephone number message 268 causes the call track server computer 106 to associate the incoming telephone number from the incoming telephone number field 272 with the termination telephone number from the termination telephone number field 274.
  • the signal encoded with the begin routing to termination telephone number message 268 may more generally be referred to as a call track configuration signal encoded with codes associating the incoming telephone number from the incoming telephone number field 272 with the termination telephone number from the termination telephone number field 274.
  • Figure 14 illustrates one example of operation of the call directing system 100 (shown in Figure 1).
  • a caller using a PSTN of the one or more PSTN providers 120 initiates an incoming call directed to an incoming telephone number, and the incoming call is carried on at least one PSTN signal 308 over the voice circuit 124 (shown in Figure 1) to the I/O interface 182 of the gate computer 104 (shown in Figure 6).
  • the caller initiates the incoming call directed to the incoming telephone number from one of the one or more VoIP providers 122 (shown in Figure 1), and in such an embodiment, the incoming call is carried on VoIP signals (such as a SIP INVITE request message and other SIP messages, for example) over the IP network 112 (shown in Figure 1) to the I/O interface 182 of the gate computer 104 (shown in Figure 6).
  • VoIP signals such as a SIP INVITE request message and other SIP messages, for example
  • VoIP signals such as a SIP INVITE request message and other SIP messages, for example
  • an inbound trunk is established between the PSTN of the one or more PSTN providers 120 or the one of the one or more VoIP providers 122 and the gate computer 104, and the PSTN of the one or more PSTN providers 120 or the one of the one or more VoIP providers 122 functions to carry the incoming call.
  • the PSTN interface 184 receives the at least one PSTN signal 308, and in response the PSTN gateway program codes 196 direct the microprocessor 176 to search the incoming telephone number routing table 194 for a call track server computer associated with the incoming telephone number to which the call carried on the at least one PSTN signal 308 was directed.
  • the gate computer 104 identifies one of the plurality of call track server computers (106, 108, and 110 in the embodiment shown in Figure 1) associated with the incoming telephone number of the incoming call.
  • the PSTN gateway program codes 196 then direct the microprocessor 176 to cause the IP interface 186 to transmit a SIP INVITE request message 310 to the call track server computer identified in the incoming telephone number routing table 194 in association with the incoming telephone number of the incoming call, which in the embodiment shown is the call track server computer 106 shown in Figures 1 and 12. More generally, the gate computer 104 causes at least one signal carrying the incoming call to be transmitted from the IP interface 186 to the IP interface 288 of the call track server computer 106 associated with the incoming telephone number of the incoming call, and the call track server computer 106 receives the at least one signal carrying the incoming call from the IP interface 186 at the IP interface 288.
  • the PSTN gateway program codes 196 in the embodiment shown are part of an ASTERISKTM application that is configured to receive such PSTN calls and direct such PSTN calls to a server identified by a configuration file, namely the incoming telephone number routing table 194 in the embodiment shown.
  • the call track server computer 106 then responds to the SIP INVITE request message 310.
  • the program memory 281 includes receive SIP INVITE request message codes 312, which are executed in response to the SIP INVITE request message 310 in the example of Figure 14.
  • the receive SIP INVITE request message codes 312 begin at 314 in response to receiving a SIP INVITE request message, such as the SIP INVITE request message 310 in the example of Figure 14.
  • the receive SIP INVITE request message codes 312 continue at block 316, which includes codes for directing the microprocessor 280 to determine whether the SIP INVITE request message received at 314 identifies a call to an incoming telephone number in the incoming telephone number field 302 of an instance of the termination telephone number routing table entry 298 (shown in Figure 13) in the termination telephone number routing table 296.
  • the call routed to the call track server computer 106 is to an incoming telephone number that the call track server computer 106 has not been configured to receive, and the receive SIP INVITE request message codes 312 therefore continue at block 318, which includes codes for directing the microprocessor 280 to transmit an error message to the portal computer 102 (shown in Figure 1), and the receive SIP INVITE request message codes 312 then end.
  • the SIP INVITE request message received at 314 identifies a call to an incoming telephone number that is stored in the incoming telephone number field 302 of an instance of the termination telephone number routing table entry 298 (shown in Figure 13) in the termination telephone number routing table 296, then in the example of Figure 14, the incoming call is carried over a plurality of SIP messages 320 between the IP interface 186 of the gate computer 104 (shown in Figure 6) and the IP interface 288 of the call track server computer 106 (shown in Figure 12), and an inbound trunk is established between the gate computer 104 and the call track server computer 106.
  • the receive SIP INVITE request message codes 312 continue at block 322, which includes codes for directing the microprocessor 280 to identify the termination telephone number from the termination telephone number field 304 of the termination telephone number routing table entry 298 (shown in Figure 13) of the instance of the termination telephone number routing table entry 298 having the incoming telephone number identified by the SIP INVITE request message received at 314 in the incoming telephone number field 302 (shown in Figure 13).
  • the receive SIP INVITE request message codes 312 continue at block 324, which includes codes for directing the microprocessor 280 to initiate an outgoing call to the termination telephone number identified at block 322.
  • the codes at block 324 direct the microprocessor 280 to transmit a SIP INVITE request message 326 to the gate computer 104, thereby establishing a call carried over a plurality of SIP messages 328 (also shown in Figure 14) on an outbound trunk between the call track server computer 106 and the gate computer 104 for carrying the outgoing call from the call track server computer 106 to the termination telephone number identified at block 324 (shown in Figure 15) in response to the SIP INVITE request message 326.
  • the IP interface 288 transmits at least one signal (encoded with the plurality SIP messages 328 in the example of Figure 14) to the IP interface 186, and the IP interface 186 receives the at least one signal from the IP interface 288, to carry the outgoing call to the termination telephone number identified at block 322. Further, the IP interface 288 transmits the at least one signal to the IP interface 186 in response to the begin routing to termination telephone number message 268 because the begin routing to termination telephone number message 268 associated the incoming telephone number with the termination telephone number. In the embodiment shown, the outgoing call is joined with the incoming call such that voice data from one of the incoming and outgoing calls is transmitted to the other of the incoming and outgoing calls.
  • a caller who initiates the incoming call may have the incoming call directed to the termination callee over the outgoing call without even being aware that the call has been so directed.
  • the gate computer 104 receives the SIP INVITE request message 326 (shown in Figure 14) in response to the codes at block 324 (shown in Figure 15)
  • the microprocessor 176 executes initiate outgoing call codes 330 in the program memory 178.
  • the initiate outgoing call codes 330 direct the microprocessor 176 to identify an outgoing call provider to carry the outgoing call from the gate computer 104 to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14) and associated with the incoming telephone number of the incoming call.
  • the initiate outgoing call codes 330 begin at block 482, which includes codes for directing the microprocessor 176 to identify outgoing call providers capable of carrying the outgoing call to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14) received from the call track server computer 106.
  • the codes at block 482 in the embodiment shown direct the microprocessor 176 to access a list of available outgoing call providers from a provider list 484 in the storage memory 180.
  • the provider list 484 in the embodiment shown includes a plurality of rows, such as the rows 486, 488, and 490 shown in Figure 17.
  • Each row in the provider list 484 is associated with one of a plurality of outgoing call providers (such as the one or more telecommunication service providers 118 shown in Figure 1). Therefore, in the embodiment shown, the provider list 484 includes information for N outgoing call providers, which are shown in various rows such as the rows 486, 488, and 490.
  • the provider list 484 also includes a column 491 storing allowable geographic areas for each of the outgoing call providers listed in the provider list 484.
  • the value in the column 491 for Provider 1 indicates that Provider 1 can complete calls directed to both Canada and the United States
  • the values in the column 491 for Provider 2 and for Provider N indicate that those outgoing call providers may receive calls terminating only in the United States.
  • Such allowable areas may be limitations of particular outgoing call providers, or they may be limitations in addition to limitations of the outgoing call providers.
  • Provider 2 in the embodiment shown may be capable of calls to parts of the world other than the United States, but because of cost or quality reasons for example, Provider 2 may be limited to the United States only in the provider list 484.
  • the provider list 484 also includes a column 492 storing latency values for each of the outgoing call providers listed in the provider list 484.
  • latency herein refers to a measure of time delay experienced in a system
  • the latency values stored in the column 492 may be an average round-trip latency of packets sent to each of the outgoing call providers listed in the provider list 484.
  • the value stored in the column 492 for Provider 1 indicates that Provider 1 has a latency of 20 milliseconds
  • the value stored in column 492 for Provider 2 indicates that Provider 2 has a latency of 10 milliseconds.
  • Such latency values may be updated from time to time by pings to the various outgoing call providers listed in the provider list 484 or from other latency measurements as calls are initiated to the various outgoing call providers listed in the provider list 484.
  • the codes at block 482 direct the microprocessor 176 (shown in Figure 6) to retrieve, from the provider list 484, a list of outgoing call providers from the provider list 484 having values in the column 491 covering an area of the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14), and the codes at block 482 then direct the microprocessor 176 to store the list of available outgoing call providers in a temporary provider list 493 in the storage memory 180 (shown in Figure 6).
  • the initiate outgoing call codes 330 continue at block 494, which includes codes for directing the microprocessor 176 to determine whether any outgoing call providers were identified at block 482 and stored in the temporary provider list 493. If no outgoing call providers were identified at block 482 and stored in the temporary provider list 493, then the initiate outgoing call codes 330 continue at block 496, which includes codes for directing the microprocessor 176 to generate an error message. The initiate outgoing call codes 330 then end.
  • the initiate outgoing call codes 330 continue at block 498, which includes codes for directing the microprocessor 176 to determine whether only one outgoing call provider was identified at block 482 and stored in the temporary provider list 493. If at block 498 only one outgoing call provider was identified at block 482 and stored in the temporary provider list 493, then only the one outgoing call provider identified at block 482 and stored in the temporary provider list 493 is available to complete the call to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14).
  • the initiate outgoing call codes 330 therefore continue at block 500, which includes codes for directing the microprocessor 176 to cause the I/O interface 182 to transmit at least one signal carrying the outgoing call to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14) from the I/O interface 182 to the outgoing call provider identified at block 482 and stored in the temporary provider list 493.
  • the codes at block 500 direct the microprocessor 176 to cause the PSTN interface 184 to initiate the outgoing call over the voice circuit 124 to the outgoing call provider identified at block 482 and stored in the temporary provider list 493.
  • the codes at block 500 direct the microprocessor 176 to cause the IP interface 186 to initiate the outgoing call over the IP network 112 to the outgoing call provider identified at block 482 and stored in the temporary provider list 493.
  • the initiate outgoing call codes 330 then end.
  • the initiate outgoing call codes 330 continue at block 502, which includes codes for directing the microprocessor 176 to determine whether all of the outgoing call providers identified at block 482 and stored in the temporary provider list 493 have latency values over a latency value threshold, which in the embodiment shown is 50 milliseconds but which may differ in other embodiments.
  • the codes at block 502 include codes for directing the microprocessor 176 to retrieve latency values from the column 492 for each of the outgoing call providers identified at block 482 and stored in the temporary provider list 493 and to determine whether all of the latency values retrieved from the column 492 for the outgoing call providers identified at block 482 and stored in the temporary provider list 493 are greater than 50 milliseconds.
  • the initiate outgoing call codes continue at block 504, which includes codes for directing the microprocessor 176 to remove, from the list of outgoing call providers stored in the temporary provider list 493, the outgoing call providers having latency values greater than 50 milliseconds.
  • the latency value threshold (which is 50 milliseconds in the embodiment shown, but which may be other time periods in alternative embodiments) may more generally be referred to as a call quality criterion, and the codes as block 504 exclude outgoing call providers that do not satisfy the call quality criterion.
  • a number of network "hops" of an outgoing call provider may be another call quality criterion by which outgoing call providers may be excluded or associated with a lower priority.
  • the codes at block 504 are executed only if it was determined at block 502 that at least some of the outgoing call providers identified at block 482 and initially stored in the temporary provider list 493 have latency values less than or equal to 50 milliseconds. Therefore, following execution of the codes at block 504, at least one outgoing call provider will remain stored in the temporary provider list 493.
  • the initiate outgoing call codes 330 continue at block 506, which includes codes for directing the microprocessor 176 to determine whether any of the outgoing call providers in the temporary provider list 493 is subject to an override according to an override table 508 in the storage memory 180.
  • the override table 508 in the embodiment shown includes a plurality of rows, including rows 510, 512, 514, 516, and 518. Each such row is associated with a respective pair of an area code or numbering plan area ("NPA") and exchange code ("NXX") of the North American Numbering Plan (“NANP").
  • NPA area code or numbering plan area
  • NXX exchange code
  • a pair of an NPA and an NXX generally uniquely identifies a geographical area in North America, and therefore may be associated with call quality of particular providers to that particular area.
  • the override table 508 in the embodiment shown includes a plurality of columns each associated with one of N outgoing call providers.
  • the NPA 201 (an area code of New Jersey) is indicated as an override for Provider 1 , but not for Provider 2 or for Provider N, whereas calls to the NPA 989 (an area code of Michigan) are indicated as overridden for Provider N but not for Provider 1 or for Provider 2.
  • the override table may be configured manually, for example in response to particular call quality issues that may arise from time to time, for example. More generally, the values in the override table 508 may be referred to as at least one call quality criterion, and as described below, the codes at block 520 exclude outgoing call providers that do not satisfy the at least one call quality criterion.
  • the codes at block 506 include codes for directing the microprocessor 176 to determine whether any of the outgoing call providers in the temporary provider list 493 is subject to an override according to the override table 508 and according to the NPA and NXX of the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14).
  • the initiate outgoing call codes 330 continue at block 520, which includes codes for directing the microprocessor 176 to prioritize the outgoing call providers listed in the temporary provider list 493.
  • the codes at block 520 cause the at least one of the outgoing call providers not indicated at block 506 to be overridden according to the override table 508 to be indicated as prioritized in the temporary provider list 493 over the at least one of the outgoing call providers indicated at block 506 to be overridden according to the override table 508.
  • the codes at block 520 cause all of the outgoing call providers in the temporary provider list 493 to be indicated as prioritized in the temporary provider list 493.
  • the initiate outgoing call codes 330 then continue at block 522, which includes codes for directing the microprocessor 176 to determine whether exactly one outgoing call provider in the temporary provider list 493 was prioritized at block 520. If so, then the initiate outgoing call codes 330 continue at block 524, which includes codes for directing the microprocessor 176 to cause the I/O interface 182 to transmit at least one signal carrying the outgoing call to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14) from the I/O interface 182 to the one outgoing call provider in the temporary provider list 493 that was indicated at block 520 as prioritized in the temporary provider list 493. The initiate outgoing call codes 330 then end.
  • the initiate outgoing call codes 330 continue at block 526, which includes codes for directing the microprocessor 176 to identify, from the outgoing call providers that were indicated at block 520 as prioritized in the temporary provider list 493, an outgoing call provider having a lowest cost for a call to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14).
  • the codes at block 526 direct the microprocessor 176 to query a cost table 528 in the storage memory 180.
  • the cost table 528 in the embodiment shown includes a plurality of rows, including rows 334, 336, 338, 340, and 342 shown in Figure 19, each associated with a respective pair of an area code (or NPA) and exchange code (or NXX) of the NANP.
  • a pair of an NPA and an NXX generally uniquely identifies a rate centre in the NANP, and therefore may be associated with a particular rate of a particular provider for calls to that rate centre.
  • the cost table 528 includes such information for N outgoing call providers, which are shown in various columns such as the columns 344, 346, and 348.
  • a cost value (such as 0.02 for a call to telephone numbers 201-201-XXXX using Provider 1 , for example) is stored in the cost table 528.
  • cost values in the embodiment shown are dollars per minute.
  • the cost table 528 in the embodiment shown includes only costs for NANP telephone number, alternative embodiments may include costs for international telephone numbers, such as by country code or other information, for example.
  • the codes at block 526 can direct the microprocessor 176 to identify, from the outgoing call providers that were indicated at block 520 as prioritized in the temporary provider list 493, an outgoing call provider having a lowest cost for a call to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14).
  • the initiate outgoing call codes 330 continue at block 530, which includes codes for directing the microprocessor 176 to cause the I/O interface 182 to transmit at least one signal carrying the outgoing call to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14) from the I/O interface 182 to the outgoing call provider having the lowest cost identified at block 526.
  • the initiate outgoing call codes 330 then end.
  • the initiate outgoing call codes 330 continue at block 532, which includes codes for directing the microprocessor 176 to determine whether only one outgoing call provider remains in the temporary provider list 493.
  • the initiate outgoing call codes 330 continue at block 534, which includes codes for directing the microprocessor 176 to cause the I/O interface 182 to transmit at least one signal carrying the outgoing call to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14) from the I/O interface 182 to the only outgoing call provider remaining in the temporary provider list 493.
  • the initiate outgoing call codes 330 then end.
  • the initiate outgoing call codes 330 continue at block 536, which includes codes for directing the microprocessor 176 to identify, from the outgoing call providers remaining in the temporary provider list 493, an outgoing call provider having a lowest cost for a call to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14).
  • the codes at block 536 are substantially the same as the codes at block 526 described above, except that the codes at block 536 direct the microprocessor 176 to compare values in the columns of the cost table 528 associated with the outgoing call providers remaining in the temporary provider list 493 to identify, from the outgoing call providers remaining in the temporary provider list 493, an outgoing call provider having a lowest cost for a call to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14).
  • the initiate outgoing call codes 330 continue at block 538, which includes codes for directing the microprocessor 176 to cause the I/O interface 182 to transmit at least one signal carrying the outgoing call to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14) from the I/O interface 182 to the outgoing call provider having the lowest cost identified at block 536.
  • the initiate outgoing call codes 330 then end.
  • the lowest-cost outgoing call provider may be an outgoing call provider capable of carrying the outgoing call to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14) as a local call for no cost.
  • the cost table 528 may identify such a lowest-cost outgoing call provider as carrying calls to certain rate centres for no cost.
  • a service available from http://www.localcallingguide.com/lca_rcdist.php may identify whether the termination telephone number is a local call for one of the outgoing call providers, in which case such an outgoing call provider may be considered the lowest-cost outgoing call provider.
  • the outgoing call from the gate computer 104 to the termination telephone number is carried by at least one signal 350, on an outbound trunk from the gate computer 104.
  • the outgoing call from the gate computer 104 to the termination telephone number is carried to one of the one or more PSTN providers 120 (also shown in Figures 1 and 6), and therefore in that example, the at least one signal 350 carrying the outgoing call from the gate computer 104 includes at least one PSTN signal between the PSTN interface 184 (shown in Figure 6) and the one of the one or more PSTN providers 120.
  • the call from the gate computer 104 to the termination telephone number could carried to one of the one or more VoIP providers 122 (shown in Figure 1), and in such an alternative, the at least one signal carrying the outgoing call from the gate computer 104 would include at least one SIP message between the IP interface 186 and the one of the one or more VoIP providers 122.
  • the receive SIP INVITE request message codes 312 continue at block 362, which includes codes for directing the microprocessor 280 to store a new instance of a call records table entry in a call records table 364 in the storage memory 282.
  • the call records table entry is shown generally at 366 and includes a call records table entry identifier 368, which in the embodiment shown stores an integer assigned by the DBMS codes 292 (shown in Figure 12) to identify an instance of the call records table entry 366 uniquely in the call records table 364 (shown in Figure 12).
  • the call records table entry 366 also includes a start time field 370 for storing a start time of the call retrieved from the clock 284 (shown in Figure 12), a caller telephone number field 372 for storing a telephone number of the caller identified in the SIP INVITE request message 310 in the example of Figure 14, an incoming telephone number field 374 for storing the incoming telephone number identified in the SIP INVITE request message 310 in the example of Figure 14, a termination telephone number field 376 for storing the termination telephone number identified at block 322 (shown in Figure 15), and a ring time field 378 for storing a time that the outgoing call rang.
  • a start time field 370 for storing a start time of the call retrieved from the clock 284 (shown in Figure 12)
  • a caller telephone number field 372 for storing a telephone number of the caller identified in the SIP INVITE request message 310 in the example of Figure 14
  • an incoming telephone number field 374 for storing the incoming telephone number identified
  • additional information may be included in the call records table entry, namely a duration in a duration field 382 and a call completion type in a call completion type field 384 as further described below.
  • the receive SIP INVITE request message codes 312 end.
  • the inbound call continues to be carried over the signals 308 and 320 and the outbound call continues to be carried over the signals 328 and 350 until one of the parties to the call terminates the call.
  • the program memory 281 of the call track server computer 106 includes the VoIP repeater program codes 293, which in the embodiment shown includes codes of an open-source telephony application known as ASTERISKTM.
  • the ASTERISKTM application generates various software events, including events that are listed a document available from http://www.voip-info.org/wiki/view/asterisk+manager+events.
  • ASTERISKTM event can be associated with certain data, such as "app data” and "UniquelD” information.
  • the program memory 281 also includes receive ASTERISKTM event codes 540, which are executed each time one of a large number of ASTERISKTM events is generated by the VoIP repeater program codes 293, but only take specific actions in response to ASTERISKTM events that are either "Newexten” or "Dial” events. In general, a "Newexten” event and a "Dial” will be generated at initiation of each of the incoming and outgoing calls as described above.
  • a "Newexten” event identifies a channel carrying the incoming or the outgoing call
  • a "Dial” event indicates initiation of the incoming or the outgoing call.
  • the receive ASTERISKTM event codes 540 generally allow the incoming and outgoing calls as described above to be recorded separately. Referring to Figures 12 and 21, the receive ASTERISKTM event codes 540 begin at block 542, which includes codes for directing the microprocessor 280 to determine whether the ASTERISKTM event is a "Newexten” event.
  • the receive ASTERISKTM event codes 540 continue at block 543, which includes codes for directing the microprocessor 280 to determine whether "app data" of the "Newexten” event includes "FROM_DID” information.
  • FROM_DID indicates a telephone number of a caller of the incoming call described above. If at block 543 the "app data" of the "Newexten” event does not include "FROM_DID” information, then the receive ASTERISKTM event codes 540 end.
  • the receive ASTERISKTM event codes 540 continue at block 544, which includes codes for directing the microprocessor 280 to retrieve, and store in a temporary memory store (not shown), the "FROM_DID” information from the "app data" of the "Newexten” event.
  • the receive ASTERISKTM event codes 540 continue at block 546, which includes codes for directing the microprocessor 280 to determine whether the call that triggered the "Newexten” event should be recorded.
  • the codes at block 546 direct the microprocessor 280 to search the call records table 364 for an instance of the call records table entry 366 associated with a current call (that is, having no values stored in the duration field 382 or in the call completion type field 384) and storing a caller telephone number in the caller telephone number field 372 matching the caller telephone number identified by the "FROM_DID" information from the "app data" of the "Newexten” event.
  • the codes at block 546 direct the microprocessor 280 to search the termination telephone number routing table 296 for an instance of the termination telephone number routing table entry 298 storing an incoming telephone number in the incoming telephone number field 302 matching the incoming telephone number field 374 of the instance of the call records table entry 366 previously identified by the codes at block 546 as described above.
  • the codes at block 546 determine that the call that triggered the "Newexten” event should be recorded if the record calls field 306 of the instance of the termination telephone number routing table entry 298 previously identified by the codes at block 546 as described above indicates that calls should be recorded. Otherwise, the codes at block 546 determine that the call that triggered the "Newexten” event should not be recorded. If the codes at block 546 determine that the call that triggered the "Newexten” event should not be recorded, then the receive ASTERISKTM event codes 540 end.
  • the receive ASTERISKTM event codes 540 continue at block 548, which includes codes for directing the microprocessor 280 to store a new entry in an associative array 550 (such as a hash table, for example) in the storage memory 282 associating the caller telephone number identified by the "FROM_DID" information from the "app data" of the "Newexten” event with an identifier of a channel carrying the call that triggered the "Newexten” event.
  • the identifier of a channel carrying the call that triggered the "Newexten” event is a "UniquelD" retrieved from the "Newexten” event.
  • the receive ASTERISKTM event codes 540 continue at block 552, which includes codes for directing the microprocessor 280 to determine whether the ASTERISKTM event is a "Dial” event. If so, then the receive ASTERISKTM event codes 540 continue at block 554, which includes codes for directing the microprocessor 280 to retrieve, and store in a temporary memory store (not shown), the "FROM_DID" information from the "app data" of the "Dial” event to identify a caller telephone number of the call that triggered the "Dial” event.
  • the receive ASTERISKTM event codes 540 continue at block 556, which includes codes for directing the microprocessor 280 to query the associative array 550 to determine whether the caller telephone number identified by the "FROM_DID" information from the "app data" of the "Dial” event is associated with an identifier of a channel in the associative array 550. If not, then the receive ASTERISKTM event codes 540 end.
  • the receive ASTERISKTM event codes 540 continue at block 558, which includes codes for directing the microprocessor 280 to begin recording of the channel identified by the identifier of a channel associated with the caller telephone number identified by the "FROM DID” information from the "app data" of the "Dial” event in the associative array 550.
  • the codes at block 556 direct the microprocessor 280 to initiate recording of the channel by a recorder 358 in the program memory 281 , which in the embodiment shown includes a waveform ("WAV") audio file encoder configured to store call recordings in a call recordings store 360 in the storage memory 282. Further, in the embodiment shown, the codes at block 556 direct recorder 358 to store a recording of the channel in the program memory 281 under a file name including an eight-digit epoch time value retrieved from the "Newexten” event and the ten-digit caller telephone number identified by the "FROM_DID" information from the "app data" of the "Newexten” event to facilitate identification of the recording later as described below.
  • a recorder 358 in the program memory 281 which in the embodiment shown includes a waveform (“WAV") audio file encoder configured to store call recordings in a call recordings store 360 in the storage memory 282.
  • the codes at block 556 direct recorder 358 to store a recording of the channel in the program memory 281 under a
  • the receive ASTERISKTM event codes 540 continue at block 560, which includes codes for directing the microprocessor 280 to remove the entry in the associative array 550 associating the caller telephone number identified by the "FROM_DID" information with the identifier of the channel.
  • the receive ASTERISKTM event codes 540 then end.
  • the incoming and outgoing calls may be terminated in various ways, but in the example of Figure 14, the incoming and outgoing calls are terminated by a SIP BYE request message 386 received at the call track server computer 106, for example because the caller over the one or more PSTN providers 120 hangs up. However, in other embodiments, the incoming and outgoing calls may be terminated in other ways including a different SIP BYE request message or more generally a call completion signal.
  • the call track server computer 106 receives the SIP BYE request message 386, thereby terminating the incoming call. In order to terminate the outgoing call, the call track server computer 106 in the example of Figure 14 transmits a SIP BYE message 387 to the gate computer 104. Further, referring back to Figure 12, the program memory 281 also includes receive SIP BYE request message codes 388, which in the embodiment shown are executed in response to receiving the SIP BYE request message 386 at the call track server computer 106.
  • the receive SIP BYE request message codes 388 begin at 390 in response to receiving a SIP BYE request message, which in example of Figure 14 is the SIP BYE request message 386, at the call track server computer 106.
  • the receive SIP BYE request message codes 388 continue at block 392, which includes codes for directing the microprocessor 280 to determine whether the call identified by the receive SIP BYE request message received at 390 identifies a current call in the call records table 364.
  • the receive SIP BYE request message codes 388 continue at block 394, which includes codes for directing the microprocessor 280 to transmit an error message to the portal computer 102 (shown in Figure 1), and the receive SIP BYE request message codes 388 then end.
  • the receive SIP BYE request message codes 388 continue at block 396, which includes codes for directing the microprocessor 280 to store the duration and call completion type of the incoming and outgoing calls in the duration field 382 and the call completion type field 384 respectively of the instance of the call records table entry 366 (shown in Figure 20) in the call records table 364 identified by the receive SIP BYE request message received at 390.
  • the duration is calculated by subtracting a current time from the clock 284 from the start time stored in the start time field 370 of the instance of the call records table entry 366 identified by the SIP BYE request message received at 390, and the call completion type indicates whether the call was terminated because of a busy signal, no answer, or a hang-up event by one of the parties to the call.
  • the receive SIP BYE request message codes 388 continue at block 404, which includes codes for directing the microprocessor 280 to generate a call records message.
  • the call records message is shown generally at 406 and is a binary message similar to the incoming telephone number routing message 168 (shown in Figure 5) and the begin routing to termination telephone number message 268 (shown in Figure 11). Therefore, the call records message 406 includes a message type identifier field 408, which, like the message type identifier fields 170 and 270 (shown in Figures 5 and 11 respectively), is a binary number uniquely identifying the call records message 406 from other messages in the embodiment shown and described herein.
  • the call records message 406 also includes a start time field 410, a caller telephone number field 412, an incoming telephone number field 414, a termination telephone number field 416, a ring time field 418, a duration field 420, and a call completion type field 422, which store values retrieved from the start time field 370, the caller telephone number field 372, the incoming telephone number field 374, the termination telephone number field 376, the ring time field 378, the duration field 382, and the call completion type field 384 respectively of the instance of the call records table entry 366 (shown in Figure 20) of the call.
  • the receive SIP BYE request message codes 388 continue at block 426, which includes codes for directing the microprocessor 280 to cause the call track server computer 106 to transmit the call records message 406 (shown in Figure 23) to the portal computer 102 (as shown at 428 in Figure 14).
  • the receive SIP BYE request message codes 388 then end, and the portal computer 102 then receives the call records message 406.
  • the program memory 128 includes receive call records message codes 430, which in the embodiment shown are executed by the microprocessor 126 when the portal computer 102 receives (as shown at 428 in the example of Figure 14) the call records message 406 (shown in Figure 23) in response to the codes at block 426 (shown in Figure 22).
  • the receive call records message codes 430 in the embodiment shown direct the microprocessor 126 to update a call log in a call logs store 432 in the storage memory 130 in response to the received call records message 406.
  • the call logs store 432 includes a plurality of binary flat files, one for each campaign identified in the campaign records database 242 (shown in Figure 2).
  • the call logs store 432 includes a first flat file 434 for a first campaign ("Campaign 1 "), a second binary flat file 436 for a second campaign ("Campaign 2"), and a third binary flat file 438 for a third campaign ("Campaign 3").
  • Each of the binary flat files 434, 436, and 438 shown in Figure 24 has a plurality of entries, and each such entry is stored in the binary flat file by the receive call records message codes 430 (shown in Figure 2).
  • One of the entries 440 of the first binary flat file 434 is expanded in Figure 24, and includes a plurality of fields, namely a start time field 442, a caller telephone number field 444, an incoming telephone number field 446, a termination telephone number field 448, a ring time field 450, a duration field 452, a call completion type field 454, and a recording identifier field 456, which may be initialized to a null value until varied as described below.
  • the receive call records message codes 430 receive the call records message 406 (shown in Figure 23)
  • the values of the start time field 410, the caller telephone number field 412, the incoming telephone number field 414, the termination telephone number field 416, the ring time field 418, the duration field 420, and the call completion type field 422 of the call records message 406 are stored in the start time field 442, the caller telephone number field 444, the incoming telephone number field 446, the termination telephone number field 448, the ring time field 450, the duration field 452, and the call completion type field 454 respectively of an entry in the binary flat file of the relevant campaign.
  • the receive call records message codes 430 store entries in the binary flat files in the call logs store 432 in increasing time order according to the start time field 442.
  • the call records messages will arrive sequentially according to start time, in which case the entries may simply be appended to the relevant binary flat files.
  • the receive call records message codes 430 cause an entry to be inserted into the relevant binary flat file to ensure that the entries are in increasing order according to the start time field 442. Maintaining the binary flat files in such sequential order permits more efficient searching and access to the binary flat files, as further described below.
  • the receive call records message codes 430 also direct the microprocessor 126 to increment various counts in a call counts store 460.
  • the call counts store 460 in the embodiment shown includes a plurality of binary flat files, one binary flat file for each of the campaigns in the campaign records database 242 (shown in Figure 2).
  • the call counts store 460 includes a binary flat file 462 for Campaign 1 , a binary flat file 464 for Campaign 2, and a binary flat file 466 for Campaign 3.
  • Each of the binary flat files in the call counts store 460 includes 24 fields, each storing an integer counting calls in a respective hour of the day.
  • the binary flat file 462 includes a store 468 for storing a count of calls started at a time between 0:00 and 0:59:59, a store 470 for storing a count of calls started at a time between 1 :00 and 1 :59:59, and various other stores for hours of the day ending with a store 474 for storing a count of calls started at a time between 23:00 and 23:59:59.
  • the binary flat file 462 also includes a store 476 for storing a count of calls that were answered, a store 478 for storing a count of calls terminated with a busy signal, and a store 480 for storing a count of calls terminated because of no answer.
  • the codes at block 558 direct the microprocessor 280 to begin recording a channel.
  • the microprocessor 280 executes channel closed codes 568 in the program memory 281.
  • the channel closed codes 568 begin at block 570, which includes codes for directing the microprocessor 280 to terminate the recording of the channel.
  • the channel closed codes 568 continue at block 572, which includes codes for directing the microprocessor 280 to determine whether recording of an associated channel has also been terminated.
  • the receive ASTERISKTM event codes 540 generally allow the incoming and outgoing calls as described above to be recorded separately.
  • the codes at block 572 determine that recording of the associated channel has also been terminated if recording of the channel carrying the outgoing call joined with the incoming call has also been terminated.
  • the codes at block 572 determine that recording of the associated channel has also been terminated if recording of the channel carrying the incoming call joined with the incoming call has also been terminated.
  • the codes at block 556 direct recorder 358 to store a recording of the channel in the program memory 281 under a file name including the epoch time value retrieved from the "Newexten” event and the caller telephone number identified by the "FROM_DID" information from the "app data" of the "Newexten” event to facilitate identification of the recording later as described below, and therefore the associated channels carrying an incoming call and an outgoing call joined with the incoming call may be identified because such recordings will be stored under file names including the same epoch time value and caller telephone number.
  • the channel closed codes 568 end. However, if at block 572 the recording of the associated channel has also been terminated, then the channel closed codes 568 continue at block 574, which includes codes for directing the microprocessor 280 to combine the two recordings of the two associated channels into a single recording, which in the embodiment shown is an MP3 file combined from the two WAV files recorded following the codes at block 558 (shown in Figure 21).
  • a WAV file may be encoded more efficiently than an MP3 file, and therefore a WAV file may be more suitable for encoding during the call itself.
  • an MP3 file may require less storage space than a WAV file, and therefore may be appropriate for longer-term storage.
  • the embodiment shown records WAV files during the calls, but later converts those files to MP3 files for more efficient storage.
  • the single combined recording is also stored under a file name including the same epoch time value and caller telephone number to facilitate later association of the combined recording with the recorded call.
  • the channel closed codes 568 continue at block 576, which includes codes for directing the microprocessor 280 to transmit the combined recording to a call recordings store 458 in the storage memory 130, as shown at 578 in the example of Figure 14.
  • the call recordings store 458 may be accessible to the call track server computer 106 as a shared network folder, for example.
  • the file name of the combined recording may include the recording identifier field 456 of the entry in the binary file to facilitate later identification of the combined recording.
  • block 579 includes codes for directing the microprocessor 126 (shown in Figure 2) to transmit a cryptographic hash value to a customer who created a campaign so that the customer can use the cryptographic hash value to identify the campaign an advertising campaign.
  • an advertising server computer 582 is in communication with the IP network 112 and implements services of one or more advertising service providers, such as AdWordsTM by Google Inc. or BingTM by Microsoft Corporation for example.
  • a customer of the portal computer 102 may employ advertising services of such an advertising service provider, and in doing so may configure the advertising server computer 582 to present HTML hyperlinks to various users of the world-wide web (“WWW”) that direct such WWW users to one or more web pages on a web server computer 584 also in communication with the IP network 112.
  • WWW world-wide web
  • a web server computer 584 also in communication with the IP network 112.
  • an HTML hyperlink includes a uniform resource locator ("URL") that identifies a particular web page on a particular web server computer, and therefore more generally may be referred to as a "web page identifier".
  • URL uniform resource locator
  • the customer of the portal computer 102 may also cause such an HTML hyperlink to include the cryptographic hash value transmitted in response to the codes at block 580 (shown in Figure 9), in which case the HTML hyperlink (or more generally the web page identifier) is encoded with the cryptographic hash value (or more generally the identifier of an advertising campaign).
  • a web browser application (not shown) on the web user computer 583 to a URL identifying the web server computer 584
  • the web browser application will transmit an HTTP query including the URL to the web server computer 584
  • the web server computer 584 will respond by transmitting a web page including various information (such as HTML codes for example) to the web user computer 583.
  • a web page may also include program codes (such as JavaScriptTM script codes, for example) that direct a processor circuit (not shown) of the web user computer
  • the retrieve incoming telephone number codes 586 begin at block 588 after receiving the URL that was sent to the web server computer
  • Block 588 includes codes for directing the processor circuit of the web user computer 583 (shown in Figure 1) to determine whether the URL includes a cryptographic hash value. If so, then the retrieve incoming telephone number codes 586 continue at block 590, which includes codes for directing the processor circuit of the web user computer 583 (shown in Figure 1) to transmit the cryptographic hash value that was encoded in the URL to the portal computer 102 (shown in Figures 1 and 2).
  • the microprocessor 126 executes return incoming telephone number codes 592 in the program memory 128, which direct the microprocessor 126 to:
  • the retrieve incoming telephone number codes 586 continue at block 596, which includes codes for directing the processor circuit of the web user computer 583 (shown in Figure 1) to receive an incoming telephone number from the portal computer 102, which involves receiving the telephone number in response to execution of the return incoming telephone number codes 592 (shown in Figure 2) as described above.
  • the retrieve incoming telephone number codes 586 continue at block 598, which includes codes for directing the processor circuit of the web user computer 583 (shown in Figure 1) to display the incoming telephone number received at block 596.
  • the incoming telephone number may be displayed among other information in the web page identified by the URL, and thus as a result of the retrieve incoming telephone number codes 586, the user of the web user computer 583 is presented with a web page that includes some information that is standard in the web page, and that also includes an incoming telephone number that is determined by the campaign that the customer of the portal computer 102 identified with the cryptographic hash value that the customer of the portal computer 102 configured in the advertising server computer 582.
  • the call may be tracked to a particular campaign as described above, and the customer of the portal computer 102 can identify which calls originated from the one or more advertising service providers implementing services on the advertising server computer 582, which may facilitate evaluation of effectiveness of such advertising service providers.
  • the aforementioned tasks of the portal computer 102 and gate computer 104 demand relatively few computer resources, and therefore in the embodiment shown the portal computer 102 is a single computer and the gate computer 104 is also a single computer.
  • alternative embodiments may include more than one portal computer 102 and more than one gate computer 104 to distribute the tasks of the portal computer 102 and of the gate computer 104 over multiple computers.
  • the aforementioned tasks of the call track server computer 106 demand relatively great computer resources, and therefore such tasks in the embodiment shown are distributed over the plurality of call track server computers (106, 108, and 110 in the embodiment shown in Figure 1).
  • Various embodiments may include more or fewer call track server computers in order to provide the computer resources necessary for efficient call tracking as described above.
  • the call logs stored in the call logs store 432, the call recordings stored in the call recordings store 458, and the call counts stored in the call counts store 460 may be accessed by a customer user using the customer user computer 116 (shown in Figure 1) to obtain various data regarding the campaigns of that customer. For example, if the customer wishes to see the most recent ten calls for a particular campaign, then the portal computer 102 can access the logs of the last ten calls for that campaign by accessing the last ten entries of the binary flat file in the call logs store 432 for that campaign.
  • Accessing the last ten entries in a binary flat file may be much more straightforward than accessing a database, because the entries in the binary flat files in the call logs store 432 have predetermined lengths, and pointing a flat file pointer to the beginning of the last ten entries is generally a relatively straight forward operation. Further, the customer may access various counters in a binary flat file in the call counts store 460, and because such counts are stored in the binary flat files as shown in Figure 25, accessing such binary flat files may be much more efficient then accessing such information in a conventional database, for example.
  • embodiments such as those described above may facilitate collection, summarization, and analysis of records of telephone calls from prospective customers to particular telephone numbers associated with respective marketing campaigns, and such records of such telephone calls may facilitate decisions regarding future marketing campaigns.
  • the embodiments described herein are not limited to such applications, and more generally may be used to direct calls, and in some embodiments may be used to record various information about the calls or record the calls themselves.

Abstract

One method of directing a call to a termination callee having a termination callee identifier involves: receiving at least one signal carrying an incoming call directed to an incoming callee identifier different from the termination callee identifier; identifying one of a plurality of call track server computers associated with the incoming callee identifier; causing at least one signal carrying the incoming call to be transmitted to an interface of the one of the plurality of call track server computers associated with the incoming callee identifier; receiving, from the interface of the one of the plurality of call track server computers associated with the incoming callee identifier, at least one signal carrying an outgoing call directed to the termination callee identifier; and causing at least one signal carrying the outgoing call to be transmitted to an interface of an outgoing call provider. Apparatuses and systems are also disclosed.

Description

CALL DIRECTING METHODS, APPARATUSES, AND SYSTEMS
BACKGROUND
1. Field
The present invention relates generally to methods, apparatuses, and systems for directing a call to a termination callee.
2. Related Art
Marketers often embark on marketing campaigns, which can include efforts to elicit telephone calls from prospective customers to particular telephone numbers. In general, records of such telephone calls may reveal certain information, such as the effectiveness of particular marketing campaigns or other information about particular marketing campaigns, and such records may thus facilitate decisions regarding future marketing campaigns. However, known technologies for receiving telephone calls from prospective customers may not adequately facilitate collection, summarization, and analysis of records of such telephone calls.
SUMMARY OF THE INVENTION
According to one embodiment of the invention, there is provided a method of directing a call to a termination callee having a termination callee identifier. The method comprises: receiving, at an interface of at least one gate computer, at least one signal carrying an incoming call directed to an incoming callee identifier different from the termination callee identifier; identifying one of a plurality of call track server computers associated with the incoming callee identifier; causing at least one signal carrying the incoming call to be transmitted from the interface of the at least one gate computer to an interface of the one of the plurality of call track server computers associated with the incoming callee identifier; receiving, at the interface of the at least one gate computer and from the interface of the one of the plurality of call track server computers associated with the incoming callee identifier, at least one signal carrying an outgoing call directed to the termination callee identifier; and causing at least one signal carrying the outgoing call to be transmitted from the interface of the at least one gate computer to an interface of an outgoing call provider.
According to another embodiment of the invention, there is provided at least one computer-readable medium comprising stored thereon codes for directing at least one computer to implement the method.
According to another embodiment of the invention, there is provided a call directing apparatus comprising: a means for receiving, from a means for carrying an incoming call, at least one signal carrying the incoming call directed to an incoming callee identifier; a means for identifying one of a plurality of means for call tracking associated with the incoming callee identifier; a means for transmitting at least one signal carrying the incoming call to the one of the plurality of means for call tracking associated with the incoming callee identifier; a means for receiving, from the one of the plurality of means for call tracking associated with the incoming callee identifier, at least one signal carrying an outgoing call directed to a termination callee identifier; and a means for transmitting at least one signal carrying the outgoing call to a means for carrying the outgoing call to a termination callee identified by the termination callee identifier.
According to another embodiment of the invention, there is provided a call directing system comprising: a plurality of means for call tracking; a means for receiving, from a means for carrying an incoming call, at least one signal carrying the incoming call directed to an incoming callee identifier; a means for identifying one of the plurality of means for call tracking associated with the incoming callee identifier; a means for transmitting at least one signal carrying the incoming call to the one of the plurality of means for call tracking associated with the incoming callee identifier; a means for receiving, from the one of the plurality of means for call tracking associated with the incoming callee identifier, at least one signal carrying an outgoing call directed to a termination callee identifier; and a means for transmitting at least one signal carrying the outgoing call to a means for carrying the outgoing call to a termination callee identified by the termination callee identifier. Each one of the plurality of means for call tracking comprises: a means for associating the incoming callee identifier with the termination callee identifier such that the termination callee identifier is different from the incoming callee identifier; a means for receiving the at least one signal carrying the incoming call from the means for transmitting the at least one signal carrying the incoming call; and a means for transmitting, in response to receiving the at least one signal carrying the incoming call from the means for transmitting the at least one signal carrying the incoming call, the at least one signal carrying the outgoing call directed to the termination callee identifier associated with the incoming callee identifier such that the incoming call and the outgoing call are joined. According to another embodiment of the invention, there is provided a call directing apparatus comprising: an interface in communication with at least one telecommunication service provider and with a plurality of call track server computers; and a processor circuit in communication with the interface. The processor circuit is configured to: cause the interface to receive, from a first one of the at least one telecommunication service provider, at least one signal carrying an incoming call directed to an incoming callee identifier; identify one of the plurality of call track server computers associated with the incoming callee identifier; cause the interface to transmit at least one signal carrying the incoming call to the one of the plurality of call track server computers associated with the incoming callee identifier; cause the interface to receive, from the one of the plurality of call track server computers associated with the incoming callee identifier, at least one signal carrying an outgoing call directed to a termination callee identifier; and cause the interface to transmit, to a second one of the at least one telecommunication service provider, at least one signal carrying the outgoing call directed to the termination callee identifier.
According to another embodiment of the invention, there is provided a call directing system comprising: a plurality of call track server computers each comprising a call track server computer interface; and at least one gate computer. The at least one gate computer comprises: a gate computer interface in communication with at least one telecommunication service provider and with the call track server computer interface of each one of the plurality of call track server computers; and a processor circuit in communication with the gate computer interface. The processor circuit of the at least one gate computer is configured to: cause the gate computer interface to receive, from a first one of the at least one telecommunication service provider, at least one signal carrying an incoming call directed to an incoming callee identifier; identify one of the plurality of call track server computers associated with the incoming callee identifier; cause the gate computer interface to transmit at least one signal carrying the incoming call to the call track server computer interface of the one of the plurality of call track server computers associated with the incoming callee identifier; cause the gate computer interface to receive, from the one of the plurality of call track server computers associated with the incoming callee identifier, at least one signal carrying an outgoing call directed to a termination callee identifier; and cause the gate computer interface to transmit, to a second one of the at least one telecommunication service provider, at least one signal carrying the outgoing call directed to the termination callee identifier. Each one of the plurality of call track server computers further comprises a processor circuit in communication with the call track computer interface of the one of the plurality of call track server computers and configured to: associate the incoming callee identifier with the termination callee identifier such that the termination callee identifier is different from the incoming callee identifier; cause the call track server computer interface to receive the at least one signal carrying the incoming call from the gate computer interface; and cause the call track server computer interface to transmit, in response to receiving the at least one signal carrying the incoming call from the gate computer interface, the at least one signal carrying the outgoing call directed to the termination callee identifier associated with the incoming callee identifier such that the incoming call and the outgoing call are joined.
According to another embodiment of the invention, there is provided a method of communicating a callee identifier associated with an advertising service provider. The method comprises: receiving a web page identifier encoded with an identifier of an advertising campaign; transmitting the identifier of the advertising campaign to at least one portal computer; in response to transmitting the identifier of the advertising campaign to at least one portal computer, receiving the callee identifier; and directing a computer to display the callee identifier among information received in association with the web page identifier.
According to another embodiment of the invention, there is provided at least one computer-readable medium comprising stored thereon codes for directing at least one computer to implement the method.
Other aspects and features of the present invention will become apparent to those ordinarily skilled in the art upon review of the following description of specific embodiments of the invention in conjunction with the accompanying figures.
BRIEF DESCRIPTION OF THE DRAWINGS In drawings of illustrative embodiments of the invention:
Figure 1 is a schematic representation of a call directing system according to one embodiment of the invention;
Figure 2 is a schematic representation of a portal computer of the call directing system of Figure 1; Figure 3 is a schematic representation of add incoming telephone number codes of a program memory of the portal computer of Figure 2;
Figure 4 is a schematic representation of an instance of an incoming telephone number record entry stored in a storage memory of the portal computer of Figure 2; Figure 5 is a schematic representation of an incoming telephone number routing message generated by the portal computer of Figure 2;
Figure 6 is a schematic representation of a gate computer of the call directing system of Figure 1 ;
Figure 7 is a schematic representation of an instance of a customer record entry stored in a storage memory of the gate computer of Figure 6; is a schematic representation of an add campaign user interface generated by codes in a program memory of the gate computer of Figure 6; is a schematic representation of add campaign codes of the program memory of the gate computer of Figure 6; is a schematic representation of an instance of a campaign record entry stored in the storage memory of the gate computer of Figure 6; is a schematic representation of a begin routing to termination telephone number message generated by the gate computer of Figure 6; is a schematic representation of a call track server computer of the call directing system of Figure 1; is a schematic representation of an instance of a termination telephone number routing table entry stored in a storage memory of the call track server computer of Figure 12; is a schematic representation of one example of operation of the call directing system of Figure 1; is a schematic representation of receive SIP INVITE request message codes of a program memory of the call track server computer of Figure 12; is a schematic representation of initiate outgoing call codes of the program memory of the gate computer of Figure 6; is a schematic representation of a provider list of the storage memory of the gate computer of Figure 6; is a schematic representation of an override table of the storage memory of the gate computer of Figure 6; Figure 19 is a schematic representation of a cost table of the storage memory of the gate computer of Figure 6;
Figure 20 is a schematic representation of an instance of a call records table entry stored in the storage memory of the call track server computer of Figure 12;
Figure 21 is a schematic representation of receive ASTERISK™ event codes of the program memory of the call track server computer of Figure 12;
Figure 22 is a schematic representation of receive SIP BYE request message codes of the program memory of the call track server computer of Figure 12;
Figure 23 is a schematic representation of a call records message generated by the call track server computer of Figure 12;
Figure 24 is a schematic representation of a call logs store in the storage memory of the portal computer of Figure 2; Figure 25 is a schematic representation of a call counts store in the storage memory of the portal computer of Figure 2;
Figure 26 is a schematic representation of channel closed codes of the program memory of the call track server computer of Figure 12; and
Figure 27 is a schematic representation of program codes executed by a web user computer in communication with the call directing system of
Figure 1 in response to receiving, from an advertising server computer in communication with the web user computer, a web page identifier encoded with an identifier of an advertising campaign.
DETAILED DESCRIPTION Referring to Figure 1 , a call directing system according to one embodiment of the invention is shown generally at 100. The call directing system 100 includes a portal computer 102, a gate computer 104, and call track server computers 106, 108, and 110, all of which are in communication with each other over an internet protocol ("IP") network 112. In the embodiment shown, an administrator user computer 14 and a customer user computer 116 are also in communication with the IP network 112 to facilitate various functions further described below.
The call directing system 100 also includes one or more telecommunication service providers represented by 118, which in the embodiment shown include one or more public switched telephone network ("PSTN") providers represented by 120 and one or more Voice-over-IP ("VoIP") providers represented by 122.
The one or more PSTN providers 120 are in communication with the gate computer 104 over a voice circuit 124, which may be a T-carrier in North America, Japan, South Korea, and other locations, and which in Europe and in other locations may be an E-carrier, for example. In general, the voice circuit 124 in the embodiment shown can carry telephone calls between the one or more PSTN providers 120 and the gate computer 104. However, some PSTN providers can also carry calls over IP networks, such as the IP network 112 in the embodiment shown, and therefore Figure 1 also shows the one or more PSTN providers 120 in communication with the IP network 112. Therefore, in general, in the embodiment shown, some of the one or more PSTN providers 120 may communicate with the gate computer 104 over the IP network 112 to carry telephone calls with the gate computer 104, some of the one or more PSTN providers 120 may communicate with the gate computer 104 over the voice circuit 124 to carry telephone calls with the gate computer 104, and some of the one or more PSTN providers 120 may communicate with the gate computer 104 over both the IP network 112 and the voice circuit 124 from time to time to carry telephone calls with the gate computer 104. Further, the one or more VoIP providers 122 are also in communication with the IP network 112 to carry telephone calls with the gate computer 104 over the IP network 112.
In general, "call" herein may refer to a call carried in part over a PSTN network, a call carried in part over an IP network, a call carried in part over both a PSTN network and an IP network, or more generally to a channel of communication including voice data carried over one or more circuits or networks. A call generally involves a caller, namely a person or device that initiates a call, and a callee, namely a person or device to which the call is directed. The caller is generally associated with a caller identifier, which may be a caller telephone number or a direct inward dialing ("DID") number in some embodiments. Likewise, the callee is generally associated with a callee identifier, which may be a callee telephone number or a DID number in some embodiments.
In brief summary, the call directing system 100 may receive, from the one or more telecommunication service providers 118, a call directed to an incoming telephone number, or more generally to an incoming callee identifier. Herein, "incoming telephone number" and "incoming callee identifier" refer, in the embodiment shown, to a telephone number associated with one of the one or more telecommunication service providers 118 where the telecommunication service provider associated with the telephone number is configured to direct calls to the telephone number to the gate computer 104. When the call directing system 100 receives such a call directed to such an incoming telephone number, the call directing system 100 directs the call to a termination callee having a termination callee identifier. The termination callee identifier is generally different from the incoming callee identifier and may be associated with the incoming callee identifier as described below, such that a caller who initiates a call to the incoming callee identifier may have the call directed to the termination callee identifier without even being aware that the call has been so directed. Further, as indicated above, the termination callee identifier in the embodiment shown is a telephone number associated with a callee to which a call is to be directed. An administrator user (not shown) using the administrator user computer 114 in the embodiment shown may cause calls that are directed to one or more incoming telephone numbers to be directed from the one or more telecommunication service providers 118 to the gate computer 104. For example, to cause calls to a particular incoming telephone number to be directed from the one or more PSTN providers 120 to the gate computer 104, the administrator user using the administrator user computer 114 may communicate with an administrator (not shown) of one of the one or more PSTN providers 120 associated with the telephone number to configure the PSTN provider to direct calls to that telephone number over the voice circuit 124, or over the IP network 112, and to the gate computer 104. Further, in the embodiment shown, to cause calls to a telephone number to be directed from the one or more VoIP providers 122 to the gate computer 104, the administrator user using the administrator user computer 114 may communicate with an administrator (not shown) of one of the one or more VoIP providers 122 associated with the telephone number to configure the VoIP provider to direct a call to the telephone number over the IP network 112 and to the gate computer 104.
Referring to Figure 2, the portal computer 102 is illustrated schematically and includes a processor circuit, which in the embodiment shown is a microprocessor 126. The portal computer 102 also includes a program memory 128, a storage memory 130, a clock 131 that maintains values representing a current date and time and provides such values to the microprocessor 126, and an input/output ("I/O") interface 132. The program memory 128 and the storage memory 130 may each be implemented as one of, or as a combination of more than one, a random-access memory ("RAM"), a hard disc drive ("HDD"), and other computer- readable and/or computer-writable memory. The program memory 128 generally stores program codes for directing the microprocessor 126 to execute various functions of the portal computer 102. The program memory 128 includes various blocks of program codes, including operating system ("O/S") codes 134, database management system ("DBMS") codes 136 generally for managing various databases in the storage memory 130, and hypertext transfer protocol ("HTTP") server codes 138 generally for making various hypertext mark-up language ("HTML") or other documents available to users of the portal computer 102 over the IP network 112, such as respective users (not shown) of the administrator user computer 114 and the customer user computer 116 (shown in Figure 1) in the embodiment shown for example. In the embodiments described herein, the various DBMS codes may include codes from PostgreSQL™ database systems, which in some embodiments may be virtualized in a virtualized environment such as a VMware™ vSphere™ virtualized environment available from VMware, Inc. of Palo Alto, California, United States of America, for example.
The I/O interface 132 includes an IP interface 140, which may be a network adapter such as an Ethernet card for example, and which facilitates communication over the IP network 112 over various internet components.
Referring to Figures 1 and 2, the program memory 128 includes add incoming telephone number codes 142, which in the embodiment shown are executed when an administrator user (not shown) of the administrator user computer 114 interacts with various web pages managed by the HTTP server codes 138 of the portal computer 102 to indicate to the portal computer 102 that one of the one or more telecommunication service providers 118 has been configured to direct calls to an incoming telephone number to the gate computer 104 as described above. Referring to Figures 2 and 3, the add incoming telephone number codes 142 begin at block 144, which includes codes for directing the microprocessor 126 to receive an incoming telephone number from the administrator user of the administrator user computer 114 (shown in Figure 1) and store the received incoming telephone number in a temporary memory store (not shown). For example, in the embodiment shown, the HTTP server codes 138 may include codes for presenting the administrator user of the administrator user computer 114 (shown in Figure 1) with a user interface including a list of available incoming telephone numbers, and by selecting one of the available incoming telephone numbers, the administrator user may cause the HTTP server codes 138 to generate a signal identifying the selected incoming telephone number such that the selected incoming telephone number is received at block 144.
The add incoming telephone number codes 142 continue at block 146, which includes codes for directing the microprocessor 126 to identify a call track server computer to be associated with the incoming telephone number received at block 144. As shown in Figure 1 , the call directing system 100 in the embodiment shown includes three call track server computers, namely the call track server computers 106, 108, and 110, although alternative embodiments may include only one call track server computer or a different number of call track server computers. In some embodiments, the codes at block 146 may cause incoming telephone numbers to be distributed evenly across the available call track server computers. Therefore, in such embodiments, the codes at block 146 may identify one of the call track server computers 106, 108, and 110 having a lowest number of incoming telephone numbers associated with it, and identify that call track server computer at block 146 as the call track server computer to be identified with the incoming telephone number received at block 144. Still referring to Figures 2 and 3, the add incoming telephone number codes 142 continue at block 148, which includes codes for directing the microprocessor 126 to direct the DBMS codes 136 to store a new instance of an incoming telephone number record entry in an incoming telephone number records database 150 in the storage memory 130. Generally, the incoming telephone number records database 150 includes various instances of the incoming telephone number record entry. In general, each instance of the incoming telephone number record entry is associated with a respective incoming telephone number, and includes various fields, each for storing particular values.
Referring to Figure 4, the incoming telephone number record entry is shown generally at 152 and includes an incoming telephone number record entry identifier field 154, which in the embodiment shown stores an integer assigned by the DBMS codes 136 (shown in Figure 2) to identify an instance of the incoming telephone number record entry 152 uniquely in the incoming telephone number records database 150 (shown in Figure 2). The incoming telephone number record entry 152 also includes a telephone number field 156 for storing the incoming telephone number. The telephone number field 156 may store a ten- digit telephone number of the North American Numbering Plan ("NANP") for example, or alternatively telephone numbers including country codes for example. The incoming telephone number record entry 152 also includes a country field 158 for storing an identifier of a country of the telephone number stored in the telephone number field 156, a state or province field 160 for storing an identifier of a state or province of the telephone number stored in the telephone number field 156, and a rate centre field 162 for storing a rate centre of the telephone number stored in the telephone number field 156. A rate centre may be a major city or geographical area associated with particular long distance calling rates. The incoming telephone number record entry 152 also includes a call track server computer identifier field 164 for storing an identifier of the call track server computer identified at block 146 (shown in Figure 3).
Referring back to Figures 2 and 3, the add incoming telephone number codes 142 continue at block 166, which includes codes for directing the microprocessor 126 to direct the IP interface 140 of the I/O interface 132 to send an incoming telephone number routing message to the gate computer 104 (shown in Figure
1)-
Referring to Figure 5, the incoming telephone number routing message is shown generally at 168. In the embodiment shown, various messages including the incoming telephone number routing message 168 may include a header including a binary code representing a type of message, and a payload including binary- encoded data. In such messages, the binary code in the header may uniquely identify contents and a sequence of the payload data, and thus in such embodiments additional data describing the content and sequence of the payload data may be unnecessary. Therefore, messages such as the incoming telephone number routing message 168 may require significantly less data and transmission time than other messages, such as serialized objects according to the Simple Object Access Protocol ("SOAP") for example.
Still referring to Figure 5, the incoming telephone number routing message 168 includes a message type identifier field 170, which in the embodiment shown is a binary code uniquely identifying the incoming telephone number routing message 168 from other messages in the embodiment shown and described herein. The incoming telephone number routing message 168 also includes an incoming telephone number field 172 for storing the incoming telephone number received at block 144 (shown in Figure 3), and a call track server computer identifier field 174 for storing an identifier of the call track server computer identified at block 146 (shown in Figure 3). As indicated above, the codes at block 166 (shown in Figure 3) include codes for directing the microprocessor 126 to direct the IP interface 140 of the I/O interface 132 (shown in Figure 2) to send an incoming telephone number routing message to the gate computer 104 (shown in Figure 1). Referring to Figure 6, the gate computer 104 is illustrated schematically and includes a processor circuit, which in the embodiment shown is a microprocessor 176. The gate computer 104 also includes a program memory 178, a storage memory 180, and an I/O interface 182 all in communication with the microprocessor 176. The program memory 178 and the storage memory 180 in the embodiment shown are also implemented as one or more of a RAM, HDD, and other computer-readable and/or computer- writable storage memory.
The I/O interface 182 includes a PSTN interface 184, which in the embodiment shown may include one or both of T1 card and an E1 card, for example, to facilitate communication with the one or more PSTN providers 120 over the voice circuit 124. The I/O interface 182 also includes an IP interface 186, which also may be a network adapter such as an Ethernet card for example, and which facilitates communication over the IP network 112 over various internet components.
The program memory 178 generally includes program codes for directing the microprocessor 176 to carry out the functions of the gate computer 104 and includes O/S codes 188 and DBMS codes 190 generally for managing various databases in the storage memory 180.
The program memory 178 also includes update incoming telephone number routing table codes 192, which in the embodiment shown direct the microprocessor 176 to update an incoming telephone number routing table 194 in the storage memory 180 in response to receiving the incoming telephone number routing message 168 (shown in Figure 5) at the IP interface 186 in response to the codes at block 166 (shown in Figure 3). The update incoming telephone number routing table codes 192 cause the incoming telephone number routing table 194 to associate the incoming telephone number in the incoming telephone number field 172 in the incoming telephone number routing message 168 with the call track server computer identified by the call track server computer identifier field 174 in the incoming telephone number routing message 168 (shown in Figure 5). The signal encoded with the incoming telephone number routing number routing message 168 may more generally be referred to as an incoming callee identifier routing signal encoded with codes associating one of the plurality of call track server computers (106, 108, and 110 in the embodiment shown in Figure 1) with the incoming telephone number in the incoming telephone number field 172 (shown in Figure 5), and the incoming telephone number routing number routing message 168 thus causes the gate computer 104 to associate the incoming telephone number in the incoming telephone number field 172 with the call track server computer identified by the call track server computer identifier field 174.
In the embodiment shown, the program memory 178 includes program codes of an open-source telephony application known as ASTERISK™ sponsored by Digium, Inc. of Huntsville, Alabama, United States. The ASTERISK™ software includes PSTN gateway program codes 196, which enable communication over a plurality of calls between the one or more PSTN providers 120, the gate computer 104, and the call track server computers 106, 108, and 110 (shown in Figure 1) over the PSTN interface 184 or over the IP interface 186 as described further below. The ASTERISK™ program codes also include VoIP repeater program codes 198, which enable communication over various calls between the one or more VoIP providers 122 (shown in Figure 1), the gate computer 104, and the call track server computers 106, 108, 110 (shown in Figure 1) over the IP interface 186 as further described below. The PSTN gateway program codes 196 and the VoIP repeater program codes 198 enable the gate computer 104 to receive PSTN and VoIP calls respectively, and route those calls to respective call track server computers identified in the incoming telephone number routing table 194 as further described below. Therefore, the update incoming telephone number routing table codes 192 function as an interface to receive signals such as the incoming telephone number routing message 168 (shown in Figure 5) to configure the PSTN gateway program codes 196 and VoIP repeater program codes 198 to direct calls received at the gate computer 104 to respective call track server computers (106, 108, and 110 shown in Figure 1 in the embodiment shown), and the gate computer 104 thus identifies one of the plurality of call track server computers associated with an incoming telephone number in response to the association of the one of the plurality of call track server computers with the incoming telephone number caused by the incoming telephone number routing number routing message 168 (shown in Figure 5).
Referring back to Figure 1 , a customer user of the customer user computer 116 in the embodiment shown may interact with the portal computer 102 over the IP network 112 to register as a customer of the portal computer 102. Referring to Figures 1 and 2, the program memory 128 of the portal computer 102 further includes add customer codes 200, which in the embodiment shown are executed when a customer user of the customer user computer 116 interacts with various web pages managed by the HTTP server codes 138 of the portal computer 102 to register as a customer of the portal computer 102. The add customer codes 200 include codes for directing the DBMS codes 136 to store a new instance of a customer record entry in a customer records database 202 in the storage memory 130. Generally, the customer records database 202 includes various instances of the customer record entry. In general, each instance of the customer record entry is associated with a respective customer user of the portal computer 102, and includes various fields, each for storing particular values.
Referring to Figure 7, the customer record entry is shown generally at 204 and includes a customer record entry identifier field 206, which in the embodiment shown stores an integer assigned by the DBMS codes 136 (shown in Figure 2) to identify an instance of the customer record entry 204 in the customer records database 202 (shown in Figure 2). The customer record entry 204 also includes a username field 208 for storing a username of the user associated with an instance of the customer record entry 204, a password field 210 for storing a password of the user, and a billing information field 212 for storing billing information of the user, such as an account balance, a list of account transactions, and a credit card number or other means for billing the user, for example. ln general, a customer of the portal computer 102 (shown in Figures 1 and 2) may direct, to a termination telephone number, a call (which may be referred to as an "incoming call") that the caller directs to an incoming telephone number. In the embodiment shown, the association between an incoming telephone number and a termination telephone number may be referred to as a "campaign" because generally speaking, marketing campaigns can include efforts to elicit telephone calls from prospective customers to particular incoming telephone numbers, and thus each such incoming telephone number may be associated with a respective campaign. In the embodiment shown, the HTTP server codes 138 (shown in Figure 2) include codes for presenting a customer user (not shown) of the customer user computer 116 (shown in Figure 1) with an add campaign user interface to allow the customer user to input various data for adding a campaign.
Referring to Figure 8, the add campaign user interface is shown generally at 214, and includes an incoming telephone number section 216. The incoming telephone number section 216 in the embodiment shown includes a country selection field 218, a state/province selection field 220, and a rate centre selection field 222, all of which may be HTML drop-down lists, for example. When the user selects a desired country in the country selection field 218, a desired state/province in the state/province selection field 220, and a desired rate centre in the rate centre selection field 222, the incoming telephone number section 216 also displays a telephone number selection field 224, which allows the user to select from one or more telephone numbers in the telephone number field 156 of instances of the incoming telephone number record entry 152 having values in the country field 158, the state/province field 160, and the rate centre 162 (shown in Figure 4) matching the country, state/province, and rate centre that the customer user selected in the country selection field 218, the state/province selection field 220, and the rate centre selection field 222 respectively. As incoming telephone numbers become associated with campaigns as described further below, such telephone numbers are not displayed in the telephone number selection field 224 in order to prevent an incoming telephone number from being simultaneously associated with more than one campaign. The add campaign user interface 214 also includes a termination telephone number input field 226, in which the customer using the customer user computer 116 may input a telephone number to which calls to an incoming telephone number selected in the telephone number selection field 224 will be directed. The add campaign user interface 214 also includes a plurality of start date input fields shown generally at 228 and a plurality of end date input fields shown generally at 230, each of which includes respective fields for entering a year, a month, and a day.
The add campaign user interface 214 also includes a group description input field 232, in which the customer using the customer user computer 116 may enter a group description to be associated with the campaign. For example, a user may initiate a plurality of campaigns having a group description of "yellow pages" because it may be convenient to consider a plurality of campaigns in such a group. However, in the embodiment shown, such a group description is optional, and the user may leave the group description input field 232 blank.
The add campaign user interface 214 also includes a record calls input field shown generally at 234, which in the embodiment shown includes HTML radio buttons for selecting whether to record calls to the selected incoming telephone number. Referring back to Figure 2, the program memory 128 also includes add campaign codes 236 for responding to customer user input to the add campaign user interface 214 shown in Figure 8.
Referring to Figures 2 and 9, the add campaign codes 236 begin at block 238 in response to completion of the add campaign user interface 214 (shown in Figure 8) by a customer user of the customer user computer 116 (shown in Figure 1). Block 238 includes codes for directing the microprocessor 126 to receive, and store in a temporary memory store (not shown), a customer record entry identifier from the customer record entry identifier field 206 of an instance of the customer record entry 204 (shown in Figure 7) associated with the customer that completed the add campaign user interface 214 (shown in Figure 8). The codes at block 238 also direct the microprocessor 126 to receive, and store in a temporary memory store (not shown), the incoming telephone number record entry identifier from the incoming telephone number record entry identifier field 154 of the incoming telephone number record entry 152 (shown in Figure 4) associated with the incoming telephone number selected in the incoming telephone number selection field 224 (shown in Figure 8), the termination telephone number entered in the termination telephone number input field 226, the start date entered in the start date input region 228, the end date entered in the end date input region 230, the group description (if any) entered in the group description input field 232, and the value entered in the record calls input region 234 (shown in Figure 8).
The add campaign codes 236 continue at block 240, which includes codes for directing the DBMS codes 136 to store a new instance of a campaign record entry in a campaign records database 242 in the storage memory 130 (shown in Figure 2). Generally, the campaign records database 242 includes various instances of the campaign record entry. In general, each instance of the campaign record entry is associated with a respective campaign, and includes various fields, each for storing particular values.
Referring to Figure 10, the campaign record entry is shown generally at 244 and includes a campaign record entry identifier field 246, which in the embodiment shown stores an integer assigned by the DBMS codes 136 (shown in Figure 2) to identify an instance of the campaign record entry 244 uniquely in the campaign records database 242 (shown in Figure 2). The campaign record entry 244 also includes a customer record entry identifier field 248, an incoming telephone number record entry identifier field 250, a termination telephone number field 252, a start date field 254, an end date field 256, an incoming telephone number group description field 258, and a record calls field 260 for storing, respectively, the customer record entry identifier, the incoming telephone number record entry identifier, the termination number, the start date, the end date, the group description, and the record calls values received at block 238 as described above. Referring back to Figures 2 and 9, the add campaign codes 236 continue at block 262, which includes codes for directing the microprocessor 126 to determine, and store in a temporary memory store (not shown), which call track server computer is associated with the incoming telephone number identified by the incoming telephone number identifier received at block 238. In the embodiment shown, the codes at block 262 direct the microprocessor 126 to identify an instance of the incoming telephone number record entry 152 having an incoming telephone number record entry identifier in the incoming telephone number record entry identifier field 154 (shown in Figure 4) matching the incoming telephone number record identifier received at block 238, and the codes at block 262 then direct the microprocessor 126 to identify the call track server computer identified by the call track server computer identifier in the call track server computer identifier field 164 in that instance of incoming telephone number record entry 152 (shown in Figure 4). The add campaign codes 236 then continue at block 264, which includes codes for directing the microprocessor 126 to determine whether the start date received at block 238 is a future date. If not, then the add campaign codes 236 continue at block 266, which includes codes for directing the microprocessor 126 to update a termination telephone number routing table (296 in the case of the call track server computer 106 as shown in Figure 12 and described below) of the call track server computer identified at block 262 to begin routing calls directed to the incoming telephone number identified by the incoming telephone number identifier received at block 238 to the termination telephone number received at block 238. In the embodiment shown, the codes at block 266 direct the microprocessor 126 to direct the IP interface 140 of the I/O interface 132 to transmit a begin routing to termination telephone number message (shown generally at 268 in Figure 11) to the call track server computer identified at block 262.
Referring to Figure 11 , the begin routing to termination telephone number message 268 in the embodiment shown is a binary message similar to the incoming telephone number routing message 168 (shown in Figure 5), and therefore the begin routing to termination telephone number message 268 includes a message type identifier field 270, which, like the message type identifier field 170 (shown in Figure 5), is a binary number uniquely identifying the begin routing to termination telephone number message 268 from other messages in the embodiment shown and described herein. The begin routing to termination telephone number message 268 in the embodiment shown also includes various payload data including binary-encoded data, namely an incoming telephone number field 272 for storing the incoming telephone number identified by the incoming telephone number record entry identifier received at block 238 (shown in Figure 9), a termination telephone number field 274 for storing the termination telephone number received at block 238, and a record calls field 276 for storing the record calls value received at block 238.
Referring back to Figures 2 and 9, if at block 264 the start date received at block 238 is a future date, then the add campaign codes 236 continue at block 277, which includes codes for directing the microprocessor 126 to schedule an update to the termination telephone number routing table (296 in the case of the call track server computer 106 as shown in Figure 12 and described below) of the call track server computer identified at block 262 to begin, at the start date, routing calls directed to the incoming telephone number identified by the incoming telephone number identifier received at block 238 to the termination telephone number received at block 238. The codes at block 277 direct the microprocessor 126 store such a scheduled update in a scheduled outgoing telephone number routing table updates store 278 in the storage memory 130. Once the start date of a campaign arrives, the microprocessor 126 directs the IP interface 140 of the I/O interface 132 to transmit the begin routing to termination telephone number message 268 (shown in Figure 11) to the call track server computer identified at block 262 substantially as described above with reference to block 266.
Still referring to Figures 2 and 9, after block 266 or after block 277, the add campaign codes 236 continue at block 279, which includes codes for directing the microprocessor 126 to schedule an update to the termination telephone number routing table (296 in the case of the call track server computer 106 as shown in Figure 12 and described below) of the call track server computer identified at block 262 to end, at the end date received at block 238, routing calls directed to the incoming telephone number identified by the incoming telephone number identifier received at block 238 to the termination telephone number received at block 238. The codes at block 279 direct the microprocessor 126 store such a scheduled update in the scheduled outgoing telephone number routing table updates store 278.
The add campaign codes 236 continue at block 579, which includes codes for directing the microprocessor 126 to generate a cryptographic hash value to identify the new campaign. In the embodiment shown, the codes at block 579 invoke cryptographic hash functions implemented by cryptographic hash function codes 580 in the program memory 128. In general, cryptographic hash functions receive input data, and produce fixed-length cryptographic hash values in response to the input data. In the embodiment shown, the codes at block 579 use, as the input data for the hash function codes 580, a concatenation of: an identifier of a reseller (not shown) associated with the customer identified by the customer record entry identifier received at block 238, wherein the reseller may be a person or business (not shown) that facilitated a business transaction for registration of that customer as a customer of the portal computer 102; the customer record entry identifier received at block 238; and the campaign record entry identifier stored in the campaign record entry identifier field 246 of the instance of the campaign record entry 244 (shown in Figure 10) stored at block 240. Block 579 also includes codes for directing the microprocessor 126 to transmit the cryptographic hash value generated by the hash function codes 580 to the customer. In general, the customer may use the cryptographic hash value (as described below) to identify the campaign without revealing the various data that were used as input data for the hash function codes 580. The cryptographic hash value may therefore be more generally referred to as an identifier of an advertising campaign. The add campaign codes 236 then end. As indicated above, the codes at block 266 or at block 277 cause the portal computer 102 to transmit the begin routing to termination telephone number message 268 to the call track server computer identified at block 262. Referring to Figure 12, the call track server computer 106 is illustrated schematically, and the call track server computers 108 and 110 (shown in Figure 1) are substantially the same as the call track server computer 106.
The call track server computer 106 includes a processor circuit, which in the embodiment shown is a microprocessor 280. The call track server computer 106 also includes a program memory 281 , a storage memory 282, a clock 284 that maintains values representing a current date and time and provides such values to the microprocessor 280, and an I/O interface 286, all of which are in communication with the microprocessor 280. The I/O interface 286 includes an IP interface 288, which may be a network adapter such as an Ethernet card for example, and which facilitates communication over the IP network 112 over various internet components.
The program memory 281 generally stores program codes for directing the microprocessor 280 to execute various functions of the call track server computer 106 and includes O/S codes 290, DBMS codes 292 generally for managing various databases in the storage memory 282, and VoIP repeater program codes 293, which in the embodiment shown also include codes of an open-source telephony application known as ASTERISK™. The VoIP repeater program codes 293 in the embodiment shown generally direct the call track server computer 106 to exchange SIP messages with the gate computer 104 (shown in Figure 1) as further described below. The program memory 281 also includes update termination telephone number routing table codes 294, which are executed in response to receiving the begin routing to termination telephone number message 268 (shown in Figure 11) at the IP interface 288 in response to the codes at blocks 266, 277, or 279 (shown in Figure 9). The update termination telephone number routing table codes 294 cause the DBMS codes 292 to store a new instance of a termination telephone number routing table entry in a termination telephone number routing table 296 in the storage memory 282.
Referring to Figure 13, the termination telephone number routing table entry is shown generally at 298, and includes a termination telephone number routing table entry identifier field 300, which in the embodiment shown stores an integer assigned by the DBMS codes 292 (shown in Figure 12) to identify an instance of the termination telephone number routing table entry uniquely in the termination telephone number routing table 296 (shown in Figure 12). The termination telephone number routing table entry 298 also includes an incoming telephone number field 302, a termination telephone number field 304, and a record calls field 306, which are for storing the incoming telephone number from the incoming telephone number field 272, the termination telephone number from the termination telephone number field 274, and the record calls value from the record calls field 276 of the begin routing to termination telephone number message 268 (shown in Figure 11) received at the IP interface 288 by the update telephone number routing table codes 294 (shown in Figure 12) in response to the codes at blocks 266, 277, or 279 (shown in Figure 9).
Referring to Figures 11 , 12, and 13, in summary, when the call track server computer 106 receives the begin routing to termination telephone number message 268 at the IP interface 288, the update termination telephone number routing table codes 294 cause the termination telephone number routing table 296 to store a new instance of the termination telephone number routing table entry 298 associating the incoming telephone number from the incoming telephone number field 272 with the termination telephone number from the termination telephone number field 274, and therefore the begin routing to termination telephone number message 268 causes the call track server computer 106 to associate the incoming telephone number from the incoming telephone number field 272 with the termination telephone number from the termination telephone number field 274. Further, the signal encoded with the begin routing to termination telephone number message 268 may more generally be referred to as a call track configuration signal encoded with codes associating the incoming telephone number from the incoming telephone number field 272 with the termination telephone number from the termination telephone number field 274. Figure 14 illustrates one example of operation of the call directing system 100 (shown in Figure 1). In the example shown in Figure 14, a caller using a PSTN of the one or more PSTN providers 120 initiates an incoming call directed to an incoming telephone number, and the incoming call is carried on at least one PSTN signal 308 over the voice circuit 124 (shown in Figure 1) to the I/O interface 182 of the gate computer 104 (shown in Figure 6). In an alternative embodiment (not shown), the caller initiates the incoming call directed to the incoming telephone number from one of the one or more VoIP providers 122 (shown in Figure 1), and in such an embodiment, the incoming call is carried on VoIP signals (such as a SIP INVITE request message and other SIP messages, for example) over the IP network 112 (shown in Figure 1) to the I/O interface 182 of the gate computer 104 (shown in Figure 6). In either embodiment, an inbound trunk is established between the PSTN of the one or more PSTN providers 120 or the one of the one or more VoIP providers 122 and the gate computer 104, and the PSTN of the one or more PSTN providers 120 or the one of the one or more VoIP providers 122 functions to carry the incoming call.
Referring to Figures 6 and 14, in the example of Figure 14, the PSTN interface 184 receives the at least one PSTN signal 308, and in response the PSTN gateway program codes 196 direct the microprocessor 176 to search the incoming telephone number routing table 194 for a call track server computer associated with the incoming telephone number to which the call carried on the at least one PSTN signal 308 was directed. In other words, the gate computer 104 identifies one of the plurality of call track server computers (106, 108, and 110 in the embodiment shown in Figure 1) associated with the incoming telephone number of the incoming call.
The PSTN gateway program codes 196 then direct the microprocessor 176 to cause the IP interface 186 to transmit a SIP INVITE request message 310 to the call track server computer identified in the incoming telephone number routing table 194 in association with the incoming telephone number of the incoming call, which in the embodiment shown is the call track server computer 106 shown in Figures 1 and 12. More generally, the gate computer 104 causes at least one signal carrying the incoming call to be transmitted from the IP interface 186 to the IP interface 288 of the call track server computer 106 associated with the incoming telephone number of the incoming call, and the call track server computer 106 receives the at least one signal carrying the incoming call from the IP interface 186 at the IP interface 288. As indicated above, in the embodiment shown, the PSTN gateway program codes 196 in the embodiment shown are part of an ASTERISK™ application that is configured to receive such PSTN calls and direct such PSTN calls to a server identified by a configuration file, namely the incoming telephone number routing table 194 in the embodiment shown.
The call track server computer 106 then responds to the SIP INVITE request message 310. Referring back to Figure 12, the program memory 281 includes receive SIP INVITE request message codes 312, which are executed in response to the SIP INVITE request message 310 in the example of Figure 14. Referring to Figures 12 and 15, the receive SIP INVITE request message codes 312 begin at 314 in response to receiving a SIP INVITE request message, such as the SIP INVITE request message 310 in the example of Figure 14. The receive SIP INVITE request message codes 312 continue at block 316, which includes codes for directing the microprocessor 280 to determine whether the SIP INVITE request message received at 314 identifies a call to an incoming telephone number in the incoming telephone number field 302 of an instance of the termination telephone number routing table entry 298 (shown in Figure 13) in the termination telephone number routing table 296. If not, then the call routed to the call track server computer 106 is to an incoming telephone number that the call track server computer 106 has not been configured to receive, and the receive SIP INVITE request message codes 312 therefore continue at block 318, which includes codes for directing the microprocessor 280 to transmit an error message to the portal computer 102 (shown in Figure 1), and the receive SIP INVITE request message codes 312 then end. However, if at block 316 the SIP INVITE request message received at 314 identifies a call to an incoming telephone number that is stored in the incoming telephone number field 302 of an instance of the termination telephone number routing table entry 298 (shown in Figure 13) in the termination telephone number routing table 296, then in the example of Figure 14, the incoming call is carried over a plurality of SIP messages 320 between the IP interface 186 of the gate computer 104 (shown in Figure 6) and the IP interface 288 of the call track server computer 106 (shown in Figure 12), and an inbound trunk is established between the gate computer 104 and the call track server computer 106.
Still referring to Figures 12 and 15, the receive SIP INVITE request message codes 312 continue at block 322, which includes codes for directing the microprocessor 280 to identify the termination telephone number from the termination telephone number field 304 of the termination telephone number routing table entry 298 (shown in Figure 13) of the instance of the termination telephone number routing table entry 298 having the incoming telephone number identified by the SIP INVITE request message received at 314 in the incoming telephone number field 302 (shown in Figure 13).
The receive SIP INVITE request message codes 312 continue at block 324, which includes codes for directing the microprocessor 280 to initiate an outgoing call to the termination telephone number identified at block 322. In the example of Figure 14, the codes at block 324 direct the microprocessor 280 to transmit a SIP INVITE request message 326 to the gate computer 104, thereby establishing a call carried over a plurality of SIP messages 328 (also shown in Figure 14) on an outbound trunk between the call track server computer 106 and the gate computer 104 for carrying the outgoing call from the call track server computer 106 to the termination telephone number identified at block 324 (shown in Figure 15) in response to the SIP INVITE request message 326. In other words, the IP interface 288 transmits at least one signal (encoded with the plurality SIP messages 328 in the example of Figure 14) to the IP interface 186, and the IP interface 186 receives the at least one signal from the IP interface 288, to carry the outgoing call to the termination telephone number identified at block 322. Further, the IP interface 288 transmits the at least one signal to the IP interface 186 in response to the begin routing to termination telephone number message 268 because the begin routing to termination telephone number message 268 associated the incoming telephone number with the termination telephone number. In the embodiment shown, the outgoing call is joined with the incoming call such that voice data from one of the incoming and outgoing calls is transmitted to the other of the incoming and outgoing calls. Thus, as indicated above, a caller who initiates the incoming call may have the incoming call directed to the termination callee over the outgoing call without even being aware that the call has been so directed. Referring back to Figure 6, when the gate computer 104 receives the SIP INVITE request message 326 (shown in Figure 14) in response to the codes at block 324 (shown in Figure 15), the microprocessor 176 executes initiate outgoing call codes 330 in the program memory 178. In general, the initiate outgoing call codes 330 direct the microprocessor 176 to identify an outgoing call provider to carry the outgoing call from the gate computer 104 to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14) and associated with the incoming telephone number of the incoming call.
Referring to Figures 6 and 16, the initiate outgoing call codes 330 begin at block 482, which includes codes for directing the microprocessor 176 to identify outgoing call providers capable of carrying the outgoing call to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14) received from the call track server computer 106. The codes at block 482 in the embodiment shown direct the microprocessor 176 to access a list of available outgoing call providers from a provider list 484 in the storage memory 180.
Referring to Figure 17, the provider list 484 in the embodiment shown includes a plurality of rows, such as the rows 486, 488, and 490 shown in Figure 17. Each row in the provider list 484 is associated with one of a plurality of outgoing call providers (such as the one or more telecommunication service providers 118 shown in Figure 1). Therefore, in the embodiment shown, the provider list 484 includes information for N outgoing call providers, which are shown in various rows such as the rows 486, 488, and 490.
The provider list 484 also includes a column 491 storing allowable geographic areas for each of the outgoing call providers listed in the provider list 484. For example, in the embodiment shown in Figure 17, the value in the column 491 for Provider 1 indicates that Provider 1 can complete calls directed to both Canada and the United States, whereas the values in the column 491 for Provider 2 and for Provider N indicate that those outgoing call providers may receive calls terminating only in the United States. Such allowable areas may be limitations of particular outgoing call providers, or they may be limitations in addition to limitations of the outgoing call providers. For example, Provider 2 in the embodiment shown may be capable of calls to parts of the world other than the United States, but because of cost or quality reasons for example, Provider 2 may be limited to the United States only in the provider list 484. The provider list 484 also includes a column 492 storing latency values for each of the outgoing call providers listed in the provider list 484. In general, "latency" herein refers to a measure of time delay experienced in a system, and the latency values stored in the column 492 may be an average round-trip latency of packets sent to each of the outgoing call providers listed in the provider list 484. For example, the value stored in the column 492 for Provider 1 indicates that Provider 1 has a latency of 20 milliseconds, whereas the value stored in column 492 for Provider 2 indicates that Provider 2 has a latency of 10 milliseconds. Such latency values may be updated from time to time by pings to the various outgoing call providers listed in the provider list 484 or from other latency measurements as calls are initiated to the various outgoing call providers listed in the provider list 484.
In the embodiment shown, the codes at block 482 (shown in Figure 16) direct the microprocessor 176 (shown in Figure 6) to retrieve, from the provider list 484, a list of outgoing call providers from the provider list 484 having values in the column 491 covering an area of the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14), and the codes at block 482 then direct the microprocessor 176 to store the list of available outgoing call providers in a temporary provider list 493 in the storage memory 180 (shown in Figure 6).
Referring back to Figures 6 and 16, after block 482, the initiate outgoing call codes 330 continue at block 494, which includes codes for directing the microprocessor 176 to determine whether any outgoing call providers were identified at block 482 and stored in the temporary provider list 493. If no outgoing call providers were identified at block 482 and stored in the temporary provider list 493, then the initiate outgoing call codes 330 continue at block 496, which includes codes for directing the microprocessor 176 to generate an error message. The initiate outgoing call codes 330 then end.
However, if it is determined at block 494 that at least one outgoing call provider was identified at block 482 and stored in the temporary provider list 493, then the initiate outgoing call codes 330 continue at block 498, which includes codes for directing the microprocessor 176 to determine whether only one outgoing call provider was identified at block 482 and stored in the temporary provider list 493. If at block 498 only one outgoing call provider was identified at block 482 and stored in the temporary provider list 493, then only the one outgoing call provider identified at block 482 and stored in the temporary provider list 493 is available to complete the call to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14).
The initiate outgoing call codes 330 therefore continue at block 500, which includes codes for directing the microprocessor 176 to cause the I/O interface 182 to transmit at least one signal carrying the outgoing call to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14) from the I/O interface 182 to the outgoing call provider identified at block 482 and stored in the temporary provider list 493.
In the embodiment shown, if the outgoing call provider identified at block 482 and stored in the temporary provider list 493 is a PSTN provider in communication with the gate computer 104 over the voice circuit 124, then the codes at block 500 direct the microprocessor 176 to cause the PSTN interface 184 to initiate the outgoing call over the voice circuit 124 to the outgoing call provider identified at block 482 and stored in the temporary provider list 493. However, if the outgoing call provider identified at block 482 and stored in the temporary provider list 493 is a PSTN provider in communication with the gate computer 104 over the IP network 112, or VoIP provider, then the codes at block 500 direct the microprocessor 176 to cause the IP interface 186 to initiate the outgoing call over the IP network 112 to the outgoing call provider identified at block 482 and stored in the temporary provider list 493. The initiate outgoing call codes 330 then end.
However, if at block 498 there was not only one outgoing call provider identified at block 482 and stored in the temporary provider list 493, then the initiate outgoing call codes 330 continue at block 502, which includes codes for directing the microprocessor 176 to determine whether all of the outgoing call providers identified at block 482 and stored in the temporary provider list 493 have latency values over a latency value threshold, which in the embodiment shown is 50 milliseconds but which may differ in other embodiments. Referring also to Figure 17, the codes at block 502 include codes for directing the microprocessor 176 to retrieve latency values from the column 492 for each of the outgoing call providers identified at block 482 and stored in the temporary provider list 493 and to determine whether all of the latency values retrieved from the column 492 for the outgoing call providers identified at block 482 and stored in the temporary provider list 493 are greater than 50 milliseconds.
If at block 502 not all of the outgoing call providers identified at block 482 and stored in the temporary provider list 493 have latency values greater than 50 milliseconds, then the initiate outgoing call codes continue at block 504, which includes codes for directing the microprocessor 176 to remove, from the list of outgoing call providers stored in the temporary provider list 493, the outgoing call providers having latency values greater than 50 milliseconds. The latency value threshold (which is 50 milliseconds in the embodiment shown, but which may be other time periods in alternative embodiments) may more generally be referred to as a call quality criterion, and the codes as block 504 exclude outgoing call providers that do not satisfy the call quality criterion. In an alternative embodiment, a number of network "hops" of an outgoing call provider may be another call quality criterion by which outgoing call providers may be excluded or associated with a lower priority. In the embodiment shown, the codes at block 504 are executed only if it was determined at block 502 that at least some of the outgoing call providers identified at block 482 and initially stored in the temporary provider list 493 have latency values less than or equal to 50 milliseconds. Therefore, following execution of the codes at block 504, at least one outgoing call provider will remain stored in the temporary provider list 493. If at block 502 all of the outgoing call providers identified at block 482 have latency values greater than 50 milliseconds, or after block 504, the initiate outgoing call codes 330 continue at block 506, which includes codes for directing the microprocessor 176 to determine whether any of the outgoing call providers in the temporary provider list 493 is subject to an override according to an override table 508 in the storage memory 180.
Referring to Figure 18, the override table 508 in the embodiment shown includes a plurality of rows, including rows 510, 512, 514, 516, and 518. Each such row is associated with a respective pair of an area code or numbering plan area ("NPA") and exchange code ("NXX") of the North American Numbering Plan ("NANP"). A pair of an NPA and an NXX generally uniquely identifies a geographical area in North America, and therefore may be associated with call quality of particular providers to that particular area. Further, the override table 508 in the embodiment shown includes a plurality of columns each associated with one of N outgoing call providers. For example, in the embodiment shown, the NPA 201 (an area code of New Jersey) is indicated as an override for Provider 1 , but not for Provider 2 or for Provider N, whereas calls to the NPA 989 (an area code of Michigan) are indicated as overridden for Provider N but not for Provider 1 or for Provider 2. In other embodiments, the override table may be configured manually, for example in response to particular call quality issues that may arise from time to time, for example. More generally, the values in the override table 508 may be referred to as at least one call quality criterion, and as described below, the codes at block 520 exclude outgoing call providers that do not satisfy the at least one call quality criterion.
Therefore, referring to Figures 6, 16, and 18, the codes at block 506 include codes for directing the microprocessor 176 to determine whether any of the outgoing call providers in the temporary provider list 493 is subject to an override according to the override table 508 and according to the NPA and NXX of the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14). Referring back to Figures 6 and 16, if at block 506 any of the outgoing call providers in the temporary provider list 493 is indicated to be overridden according to the override table 508, then the initiate outgoing call codes 330 continue at block 520, which includes codes for directing the microprocessor 176 to prioritize the outgoing call providers listed in the temporary provider list 493. If at block 506 at least one of the outgoing call providers in the temporary provider list 493 is indicated to be overridden according to the override table 508 and at least one of the outgoing call providers in the temporary provider list 493 is not indicated to be overridden according to the override table 508, then the codes at block 520 cause the at least one of the outgoing call providers not indicated at block 506 to be overridden according to the override table 508 to be indicated as prioritized in the temporary provider list 493 over the at least one of the outgoing call providers indicated at block 506 to be overridden according to the override table 508. Otherwise, for simplicity in the embodiment shown, if all or none of the providers listed in the temporary provider list 493 is indicated at block 506 to be overridden according to the override table 508, then the codes at block 520 cause all of the outgoing call providers in the temporary provider list 493 to be indicated as prioritized in the temporary provider list 493.
The initiate outgoing call codes 330 then continue at block 522, which includes codes for directing the microprocessor 176 to determine whether exactly one outgoing call provider in the temporary provider list 493 was prioritized at block 520. If so, then the initiate outgoing call codes 330 continue at block 524, which includes codes for directing the microprocessor 176 to cause the I/O interface 182 to transmit at least one signal carrying the outgoing call to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14) from the I/O interface 182 to the one outgoing call provider in the temporary provider list 493 that was indicated at block 520 as prioritized in the temporary provider list 493. The initiate outgoing call codes 330 then end. However, if at block 522 there is not exactly one outgoing call provider that was indicated at block 520 as prioritized in the temporary provider list 493, then the initiate outgoing call codes 330 continue at block 526, which includes codes for directing the microprocessor 176 to identify, from the outgoing call providers that were indicated at block 520 as prioritized in the temporary provider list 493, an outgoing call provider having a lowest cost for a call to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14). In the embodiment shown, the codes at block 526 direct the microprocessor 176 to query a cost table 528 in the storage memory 180. Referring to Figure 19, the cost table 528 in the embodiment shown includes a plurality of rows, including rows 334, 336, 338, 340, and 342 shown in Figure 19, each associated with a respective pair of an area code (or NPA) and exchange code (or NXX) of the NANP. A pair of an NPA and an NXX generally uniquely identifies a rate centre in the NANP, and therefore may be associated with a particular rate of a particular provider for calls to that rate centre. The cost table 528 includes such information for N outgoing call providers, which are shown in various columns such as the columns 344, 346, and 348. At the intersection of one of the rows and of one of the columns of the cost table 528, a cost value (such as 0.02 for a call to telephone numbers 201-201-XXXX using Provider 1 , for example) is stored in the cost table 528. Such cost values in the embodiment shown are dollars per minute. Although the cost table 528 in the embodiment shown includes only costs for NANP telephone number, alternative embodiments may include costs for international telephone numbers, such as by country code or other information, for example. Therefore, referring to Figures 6, 16, and 19, by retrieving values in a row of the cost table 528 associated with the NPA and NXX of the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14), and by comparing the values in that row from the columns of the cost table 528 associated with the outgoing call providers that were indicated at block 520 as prioritized in the temporary provider list 493, the codes at block 526 can direct the microprocessor 176 to identify, from the outgoing call providers that were indicated at block 520 as prioritized in the temporary provider list 493, an outgoing call provider having a lowest cost for a call to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14).
The initiate outgoing call codes 330 continue at block 530, which includes codes for directing the microprocessor 176 to cause the I/O interface 182 to transmit at least one signal carrying the outgoing call to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14) from the I/O interface 182 to the outgoing call provider having the lowest cost identified at block 526. The initiate outgoing call codes 330 then end. Referring back to Figures 6 and 16, if at block 506 none of the outgoing call providers in the temporary provider list 493 was indicated to be overridden according to the override table 508, then the initiate outgoing call codes 330 continue at block 532, which includes codes for directing the microprocessor 176 to determine whether only one outgoing call provider remains in the temporary provider list 493. If at block 532 only one outgoing call provider remains in the temporary provider list 493, then the initiate outgoing call codes 330 continue at block 534, which includes codes for directing the microprocessor 176 to cause the I/O interface 182 to transmit at least one signal carrying the outgoing call to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14) from the I/O interface 182 to the only outgoing call provider remaining in the temporary provider list 493. The initiate outgoing call codes 330 then end.
However, if at block 532 there is more than one outgoing call provider remaining in the temporary provider list 493, then the initiate outgoing call codes 330 continue at block 536, which includes codes for directing the microprocessor 176 to identify, from the outgoing call providers remaining in the temporary provider list 493, an outgoing call provider having a lowest cost for a call to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14).
Referring to Figures 6, 16, and 19, the codes at block 536 are substantially the same as the codes at block 526 described above, except that the codes at block 536 direct the microprocessor 176 to compare values in the columns of the cost table 528 associated with the outgoing call providers remaining in the temporary provider list 493 to identify, from the outgoing call providers remaining in the temporary provider list 493, an outgoing call provider having a lowest cost for a call to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14).
The initiate outgoing call codes 330 continue at block 538, which includes codes for directing the microprocessor 176 to cause the I/O interface 182 to transmit at least one signal carrying the outgoing call to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14) from the I/O interface 182 to the outgoing call provider having the lowest cost identified at block 536. The initiate outgoing call codes 330 then end.
In some cases, the lowest-cost outgoing call provider may be an outgoing call provider capable of carrying the outgoing call to the termination telephone number identified in the SIP INVITE request message (326 in the example of Figure 14) as a local call for no cost. In the embodiment shown, the cost table 528 may identify such a lowest-cost outgoing call provider as carrying calls to certain rate centres for no cost. However, in alternative embodiments, a service available from http://www.localcallingguide.com/lca_rcdist.php (and its XML query service http://www.localcallingguide.com/xmlquery.php) may identify whether the termination telephone number is a local call for one of the outgoing call providers, in which case such an outgoing call provider may be considered the lowest-cost outgoing call provider.
Referring back to Figure 14, the outgoing call from the gate computer 104 to the termination telephone number is carried by at least one signal 350, on an outbound trunk from the gate computer 104. In the example of Figure 14, the outgoing call from the gate computer 104 to the termination telephone number is carried to one of the one or more PSTN providers 120 (also shown in Figures 1 and 6), and therefore in that example, the at least one signal 350 carrying the outgoing call from the gate computer 104 includes at least one PSTN signal between the PSTN interface 184 (shown in Figure 6) and the one of the one or more PSTN providers 120. Alternatively, however, the call from the gate computer 104 to the termination telephone number could carried to one of the one or more VoIP providers 122 (shown in Figure 1), and in such an alternative, the at least one signal carrying the outgoing call from the gate computer 104 would include at least one SIP message between the IP interface 186 and the one of the one or more VoIP providers 122.
Referring back to Figures 12 and 15, after block 324, the receive SIP INVITE request message codes 312 continue at block 362, which includes codes for directing the microprocessor 280 to store a new instance of a call records table entry in a call records table 364 in the storage memory 282.
Referring to Figure 20, the call records table entry is shown generally at 366 and includes a call records table entry identifier 368, which in the embodiment shown stores an integer assigned by the DBMS codes 292 (shown in Figure 12) to identify an instance of the call records table entry 366 uniquely in the call records table 364 (shown in Figure 12). The call records table entry 366 also includes a start time field 370 for storing a start time of the call retrieved from the clock 284 (shown in Figure 12), a caller telephone number field 372 for storing a telephone number of the caller identified in the SIP INVITE request message 310 in the example of Figure 14, an incoming telephone number field 374 for storing the incoming telephone number identified in the SIP INVITE request message 310 in the example of Figure 14, a termination telephone number field 376 for storing the termination telephone number identified at block 322 (shown in Figure 15), and a ring time field 378 for storing a time that the outgoing call rang.
Once the call has terminated, additional information may be included in the call records table entry, namely a duration in a duration field 382 and a call completion type in a call completion type field 384 as further described below.
Referring back to Figure 15, after block 362, the receive SIP INVITE request message codes 312 end. In the example of Figure 14, the inbound call continues to be carried over the signals 308 and 320 and the outbound call continues to be carried over the signals 328 and 350 until one of the parties to the call terminates the call. As indicated above and shown in Figure 12, the program memory 281 of the call track server computer 106 includes the VoIP repeater program codes 293, which in the embodiment shown includes codes of an open-source telephony application known as ASTERISK™. The ASTERISK™ application generates various software events, including events that are listed a document available from http://www.voip-info.org/wiki/view/asterisk+manager+events. As shown in that document, ASTERISK™ event can be associated with certain data, such as "app data" and "UniquelD" information. The program memory 281 also includes receive ASTERISK™ event codes 540, which are executed each time one of a large number of ASTERISK™ events is generated by the VoIP repeater program codes 293, but only take specific actions in response to ASTERISK™ events that are either "Newexten" or "Dial" events. In general, a "Newexten" event and a "Dial" will be generated at initiation of each of the incoming and outgoing calls as described above. More particularly, a "Newexten" event identifies a channel carrying the incoming or the outgoing call, and a "Dial" event indicates initiation of the incoming or the outgoing call. By taking specific actions in response to the "Newexten" or "Dial" events as described further below, the receive ASTERISK™ event codes 540 generally allow the incoming and outgoing calls as described above to be recorded separately. Referring to Figures 12 and 21, the receive ASTERISK™ event codes 540 begin at block 542, which includes codes for directing the microprocessor 280 to determine whether the ASTERISK™ event is a "Newexten" event. If so, then the receive ASTERISK™ event codes 540 continue at block 543, which includes codes for directing the microprocessor 280 to determine whether "app data" of the "Newexten" event includes "FROM_DID" information. In general, such "FROM_DID" information indicates a telephone number of a caller of the incoming call described above. If at block 543 the "app data" of the "Newexten" event does not include "FROM_DID" information, then the receive ASTERISK™ event codes 540 end. However, if at block 543 the "app data" of the "Newexten" event includes "FROM_DID" information, then the receive ASTERISK™ event codes 540 continue at block 544, which includes codes for directing the microprocessor 280 to retrieve, and store in a temporary memory store (not shown), the "FROM_DID" information from the "app data" of the "Newexten" event.
The receive ASTERISK™ event codes 540 continue at block 546, which includes codes for directing the microprocessor 280 to determine whether the call that triggered the "Newexten" event should be recorded. Referring also to Figure 20, in the embodiment shown, the codes at block 546 direct the microprocessor 280 to search the call records table 364 for an instance of the call records table entry 366 associated with a current call (that is, having no values stored in the duration field 382 or in the call completion type field 384) and storing a caller telephone number in the caller telephone number field 372 matching the caller telephone number identified by the "FROM_DID" information from the "app data" of the "Newexten" event. Referring now also to Figure 13, if the call records table 364 includes such an instance of the call records table entry 366, then the codes at block 546 direct the microprocessor 280 to search the termination telephone number routing table 296 for an instance of the termination telephone number routing table entry 298 storing an incoming telephone number in the incoming telephone number field 302 matching the incoming telephone number field 374 of the instance of the call records table entry 366 previously identified by the codes at block 546 as described above. If the termination telephone number routing table 296 includes such an instance of the termination telephone number routing table entry 298, then the codes at block 546 determine that the call that triggered the "Newexten" event should be recorded if the record calls field 306 of the instance of the termination telephone number routing table entry 298 previously identified by the codes at block 546 as described above indicates that calls should be recorded. Otherwise, the codes at block 546 determine that the call that triggered the "Newexten" event should not be recorded. If the codes at block 546 determine that the call that triggered the "Newexten" event should not be recorded, then the receive ASTERISK™ event codes 540 end.
But if the codes at block 546 determine that the call that triggered the "Newexten" event should be recorded, then the receive ASTERISK™ event codes 540 continue at block 548, which includes codes for directing the microprocessor 280 to store a new entry in an associative array 550 (such as a hash table, for example) in the storage memory 282 associating the caller telephone number identified by the "FROM_DID" information from the "app data" of the "Newexten" event with an identifier of a channel carrying the call that triggered the "Newexten" event. In the embodiment shown, the identifier of a channel carrying the call that triggered the "Newexten" event is a "UniquelD" retrieved from the "Newexten" event.
If at block 542, the ASTERISK™ event is not a "Newexten" event, then the receive ASTERISK™ event codes 540 continue at block 552, which includes codes for directing the microprocessor 280 to determine whether the ASTERISK™ event is a "Dial" event. If so, then the receive ASTERISK™ event codes 540 continue at block 554, which includes codes for directing the microprocessor 280 to retrieve, and store in a temporary memory store (not shown), the "FROM_DID" information from the "app data" of the "Dial" event to identify a caller telephone number of the call that triggered the "Dial" event. The receive ASTERISK™ event codes 540 continue at block 556, which includes codes for directing the microprocessor 280 to query the associative array 550 to determine whether the caller telephone number identified by the "FROM_DID" information from the "app data" of the "Dial" event is associated with an identifier of a channel in the associative array 550. If not, then the receive ASTERISK™ event codes 540 end.
However, if at block 556 the caller telephone number identified by the "FROM_DID" information from the "app data" of the "Dial" event is associated with an identifier of a channel in the associative array 550, then the receive ASTERISK™ event codes 540 continue at block 558, which includes codes for directing the microprocessor 280 to begin recording of the channel identified by the identifier of a channel associated with the caller telephone number identified by the "FROM DID" information from the "app data" of the "Dial" event in the associative array 550. In the embodiment shown, the codes at block 556 direct the microprocessor 280 to initiate recording of the channel by a recorder 358 in the program memory 281 , which in the embodiment shown includes a waveform ("WAV") audio file encoder configured to store call recordings in a call recordings store 360 in the storage memory 282. Further, in the embodiment shown, the codes at block 556 direct recorder 358 to store a recording of the channel in the program memory 281 under a file name including an eight-digit epoch time value retrieved from the "Newexten" event and the ten-digit caller telephone number identified by the "FROM_DID" information from the "app data" of the "Newexten" event to facilitate identification of the recording later as described below.
The receive ASTERISK™ event codes 540 continue at block 560, which includes codes for directing the microprocessor 280 to remove the entry in the associative array 550 associating the caller telephone number identified by the "FROM_DID" information with the identifier of the channel. The receive ASTERISK™ event codes 540 then end.
The incoming and outgoing calls may be terminated in various ways, but in the example of Figure 14, the incoming and outgoing calls are terminated by a SIP BYE request message 386 received at the call track server computer 106, for example because the caller over the one or more PSTN providers 120 hangs up. However, in other embodiments, the incoming and outgoing calls may be terminated in other ways including a different SIP BYE request message or more generally a call completion signal.
In the example of Figure 14, the call track server computer 106 receives the SIP BYE request message 386, thereby terminating the incoming call. In order to terminate the outgoing call, the call track server computer 106 in the example of Figure 14 transmits a SIP BYE message 387 to the gate computer 104. Further, referring back to Figure 12, the program memory 281 also includes receive SIP BYE request message codes 388, which in the embodiment shown are executed in response to receiving the SIP BYE request message 386 at the call track server computer 106.
Referring to Figures 12 and 22, the receive SIP BYE request message codes 388 begin at 390 in response to receiving a SIP BYE request message, which in example of Figure 14 is the SIP BYE request message 386, at the call track server computer 106. The receive SIP BYE request message codes 388 continue at block 392, which includes codes for directing the microprocessor 280 to determine whether the call identified by the receive SIP BYE request message received at 390 identifies a current call in the call records table 364. If not, then the receive SIP BYE request message codes 388 continue at block 394, which includes codes for directing the microprocessor 280 to transmit an error message to the portal computer 102 (shown in Figure 1), and the receive SIP BYE request message codes 388 then end.
However, if at block 392 the call identified by the receive SIP BYE request message received at 390 identifies a current call in the call records table 364, then the receive SIP BYE request message codes 388 continue at block 396, which includes codes for directing the microprocessor 280 to store the duration and call completion type of the incoming and outgoing calls in the duration field 382 and the call completion type field 384 respectively of the instance of the call records table entry 366 (shown in Figure 20) in the call records table 364 identified by the receive SIP BYE request message received at 390. In the embodiment shown, the duration is calculated by subtracting a current time from the clock 284 from the start time stored in the start time field 370 of the instance of the call records table entry 366 identified by the SIP BYE request message received at 390, and the call completion type indicates whether the call was terminated because of a busy signal, no answer, or a hang-up event by one of the parties to the call.
The receive SIP BYE request message codes 388 continue at block 404, which includes codes for directing the microprocessor 280 to generate a call records message. Referring to Figure 23, the call records message is shown generally at 406 and is a binary message similar to the incoming telephone number routing message 168 (shown in Figure 5) and the begin routing to termination telephone number message 268 (shown in Figure 11). Therefore, the call records message 406 includes a message type identifier field 408, which, like the message type identifier fields 170 and 270 (shown in Figures 5 and 11 respectively), is a binary number uniquely identifying the call records message 406 from other messages in the embodiment shown and described herein. The call records message 406 also includes a start time field 410, a caller telephone number field 412, an incoming telephone number field 414, a termination telephone number field 416, a ring time field 418, a duration field 420, and a call completion type field 422, which store values retrieved from the start time field 370, the caller telephone number field 372, the incoming telephone number field 374, the termination telephone number field 376, the ring time field 378, the duration field 382, and the call completion type field 384 respectively of the instance of the call records table entry 366 (shown in Figure 20) of the call.
Referring back to Figures 12 and 22, after block 404, the receive SIP BYE request message codes 388 continue at block 426, which includes codes for directing the microprocessor 280 to cause the call track server computer 106 to transmit the call records message 406 (shown in Figure 23) to the portal computer 102 (as shown at 428 in Figure 14). The receive SIP BYE request message codes 388 then end, and the portal computer 102 then receives the call records message 406.
Referring back to Figure 2, the program memory 128 includes receive call records message codes 430, which in the embodiment shown are executed by the microprocessor 126 when the portal computer 102 receives (as shown at 428 in the example of Figure 14) the call records message 406 (shown in Figure 23) in response to the codes at block 426 (shown in Figure 22). The receive call records message codes 430 in the embodiment shown direct the microprocessor 126 to update a call log in a call logs store 432 in the storage memory 130 in response to the received call records message 406.
Referring to Figure 24, the call logs store 432 includes a plurality of binary flat files, one for each campaign identified in the campaign records database 242 (shown in Figure 2). In the embodiment shown in Figure 24, the call logs store 432 includes a first flat file 434 for a first campaign ("Campaign 1 "), a second binary flat file 436 for a second campaign ("Campaign 2"), and a third binary flat file 438 for a third campaign ("Campaign 3"). Each of the binary flat files 434, 436, and 438 shown in Figure 24 has a plurality of entries, and each such entry is stored in the binary flat file by the receive call records message codes 430 (shown in Figure 2).
One of the entries 440 of the first binary flat file 434 is expanded in Figure 24, and includes a plurality of fields, namely a start time field 442, a caller telephone number field 444, an incoming telephone number field 446, a termination telephone number field 448, a ring time field 450, a duration field 452, a call completion type field 454, and a recording identifier field 456, which may be initialized to a null value until varied as described below.
When the receive call records message codes 430 (shown in Figure 2) receive the call records message 406 (shown in Figure 23), the values of the start time field 410, the caller telephone number field 412, the incoming telephone number field 414, the termination telephone number field 416, the ring time field 418, the duration field 420, and the call completion type field 422 of the call records message 406 are stored in the start time field 442, the caller telephone number field 444, the incoming telephone number field 446, the termination telephone number field 448, the ring time field 450, the duration field 452, and the call completion type field 454 respectively of an entry in the binary flat file of the relevant campaign.
In the embodiment shown, the receive call records message codes 430 store entries in the binary flat files in the call logs store 432 in increasing time order according to the start time field 442. In many cases, the call records messages will arrive sequentially according to start time, in which case the entries may simply be appended to the relevant binary flat files. However, where the call records messages are not received sequentially, the receive call records message codes 430 cause an entry to be inserted into the relevant binary flat file to ensure that the entries are in increasing order according to the start time field 442. Maintaining the binary flat files in such sequential order permits more efficient searching and access to the binary flat files, as further described below.
The receive call records message codes 430 also direct the microprocessor 126 to increment various counts in a call counts store 460. Referring to Figure 25, the call counts store 460 in the embodiment shown includes a plurality of binary flat files, one binary flat file for each of the campaigns in the campaign records database 242 (shown in Figure 2). In the embodiment shown, the call counts store 460 includes a binary flat file 462 for Campaign 1 , a binary flat file 464 for Campaign 2, and a binary flat file 466 for Campaign 3. Each of the binary flat files in the call counts store 460 includes 24 fields, each storing an integer counting calls in a respective hour of the day. In the embodiment shown, the binary flat file 462 includes a store 468 for storing a count of calls started at a time between 0:00 and 0:59:59, a store 470 for storing a count of calls started at a time between 1 :00 and 1 :59:59, and various other stores for hours of the day ending with a store 474 for storing a count of calls started at a time between 23:00 and 23:59:59. The binary flat file 462 also includes a store 476 for storing a count of calls that were answered, a store 478 for storing a count of calls terminated with a busy signal, and a store 480 for storing a count of calls terminated because of no answer. Referring back to Figures 12 and 21, as indicated above, the codes at block 558 (shown in Figure 21) direct the microprocessor 280 to begin recording a channel. When the channel is closed, for example when the call carried on the channel is terminated, the microprocessor 280 executes channel closed codes 568 in the program memory 281. Referring to Figures 12 and 26, the channel closed codes 568 begin at block 570, which includes codes for directing the microprocessor 280 to terminate the recording of the channel. The channel closed codes 568 continue at block 572, which includes codes for directing the microprocessor 280 to determine whether recording of an associated channel has also been terminated. As indicated above, the receive ASTERISK™ event codes 540 generally allow the incoming and outgoing calls as described above to be recorded separately. Therefore, for example, if the recording terminated at block 570 was a recording of a channel carrying an incoming call, then the codes at block 572 determine that recording of the associated channel has also been terminated if recording of the channel carrying the outgoing call joined with the incoming call has also been terminated. Alternatively, if the recording terminated at block 570 was a recording of a channel carrying an outgoing call, then the codes at block 572 determine that recording of the associated channel has also been terminated if recording of the channel carrying the incoming call joined with the incoming call has also been terminated. As indicated above, in the embodiment shown, the codes at block 556 (shown in Figure 21) direct recorder 358 to store a recording of the channel in the program memory 281 under a file name including the epoch time value retrieved from the "Newexten" event and the caller telephone number identified by the "FROM_DID" information from the "app data" of the "Newexten" event to facilitate identification of the recording later as described below, and therefore the associated channels carrying an incoming call and an outgoing call joined with the incoming call may be identified because such recordings will be stored under file names including the same epoch time value and caller telephone number.
If at block 572 the recording of the associated channel has not also been terminated, then the channel closed codes 568 end. However, if at block 572 the recording of the associated channel has also been terminated, then the channel closed codes 568 continue at block 574, which includes codes for directing the microprocessor 280 to combine the two recordings of the two associated channels into a single recording, which in the embodiment shown is an MP3 file combined from the two WAV files recorded following the codes at block 558 (shown in Figure 21). In general, a WAV file may be encoded more efficiently than an MP3 file, and therefore a WAV file may be more suitable for encoding during the call itself. However, an MP3 file may require less storage space than a WAV file, and therefore may be appropriate for longer-term storage. Therefore, the embodiment shown records WAV files during the calls, but later converts those files to MP3 files for more efficient storage. In the embodiment shown, the single combined recording is also stored under a file name including the same epoch time value and caller telephone number to facilitate later association of the combined recording with the recorded call.
The channel closed codes 568 continue at block 576, which includes codes for directing the microprocessor 280 to transmit the combined recording to a call recordings store 458 in the storage memory 130, as shown at 578 in the example of Figure 14. The call recordings store 458 may be accessible to the call track server computer 106 as a shared network folder, for example. Further, the file name of the combined recording may include the recording identifier field 456 of the entry in the binary file to facilitate later identification of the combined recording.
Referring back to Figure 9, as indicated above, block 579 includes codes for directing the microprocessor 126 (shown in Figure 2) to transmit a cryptographic hash value to a customer who created a campaign so that the customer can use the cryptographic hash value to identify the campaign an advertising campaign.
In the embodiment shown in Figure 1 , an advertising server computer 582 is in communication with the IP network 112 and implements services of one or more advertising service providers, such as AdWords™ by Google Inc. or Bing™ by Microsoft Corporation for example. A customer of the portal computer 102 may employ advertising services of such an advertising service provider, and in doing so may configure the advertising server computer 582 to present HTML hyperlinks to various users of the world-wide web ("WWW") that direct such WWW users to one or more web pages on a web server computer 584 also in communication with the IP network 112. In general, an HTML hyperlink includes a uniform resource locator ("URL") that identifies a particular web page on a particular web server computer, and therefore more generally may be referred to as a "web page identifier". The customer of the portal computer 102 may also cause such an HTML hyperlink to include the cryptographic hash value transmitted in response to the codes at block 580 (shown in Figure 9), in which case the HTML hyperlink (or more generally the web page identifier) is encoded with the cryptographic hash value (or more generally the identifier of an advertising campaign). When a user (not shown) of a web user computer 583, which is also in communication with the IP network 112, directs a web browser application (not shown) on the web user computer 583 to a URL identifying the web server computer 584, the web browser application will transmit an HTTP query including the URL to the web server computer 584, and the web server computer 584 will respond by transmitting a web page including various information (such as HTML codes for example) to the web user computer 583. In general, such a web page may also include program codes (such as JavaScript™ script codes, for example) that direct a processor circuit (not shown) of the web user computer
583 to carry out particular functions such as retrieve incoming telephone number codes 586 shown in Figure 27, which in the embodiment shown may be executed by the processor circuit of the web user computer 583 when the web browser application of the web user computer 583 retrieves a web page from the web server computer 584 in response to selection of an HTML hyperlink generated by the advertising server computer 582 as configured by a customer of the portal computer 102. Referring to Figure 27, the retrieve incoming telephone number codes 586 begin at block 588 after receiving the URL that was sent to the web server computer
584 in the HTTP query from the web browser application of the web user computer 583. Block 588 includes codes for directing the processor circuit of the web user computer 583 (shown in Figure 1) to determine whether the URL includes a cryptographic hash value. If so, then the retrieve incoming telephone number codes 586 continue at block 590, which includes codes for directing the processor circuit of the web user computer 583 (shown in Figure 1) to transmit the cryptographic hash value that was encoded in the URL to the portal computer 102 (shown in Figures 1 and 2). Referring to Figure 2, when the portal computer 102 receives a cryptographic hash value in response to the codes at block 590 (shown in Figure 27), the microprocessor 126 executes return incoming telephone number codes 592 in the program memory 128, which direct the microprocessor 126 to:
(a) decrypt the cryptographic hash value using the cryptographic hash function codes 580;
(b) identify an instance of the campaign record entry 244 having a campaign record entry identifier in the campaign record entry identifier field 246 matching the campaign record entry identifier from the decrypted cryptographic hash value; (c) retrieve the telephone number from the telephone number field 156 of an instance of the incoming telephone number record entry 152 having an incoming telephone number record entry identifier in the incoming telephone number record entry identifier field 154 matching the incoming telephone number record entry identifier in the incoming telephone number record entry identifier field 250 of the instance of the campaign record entry 244 identified as described at (b) above; and
(d) transmit the telephone number identified as described at (c) above to the web user computer 583. Referring back to Figure 27, if at block 588 the URL did not include a cryptographic hash value, then the retrieve incoming telephone number codes 586 continue at block 594, which is substantially the same as block 590 except that the codes at block 594 transmit a default cryptographic hash value (which may identify a default campaign in the absence of an indication of another campaign) instead of the cryptographic hash value retrieved from the URL.
After block 590 or 594, the retrieve incoming telephone number codes 586 continue at block 596, which includes codes for directing the processor circuit of the web user computer 583 (shown in Figure 1) to receive an incoming telephone number from the portal computer 102, which involves receiving the telephone number in response to execution of the return incoming telephone number codes 592 (shown in Figure 2) as described above.
The retrieve incoming telephone number codes 586 continue at block 598, which includes codes for directing the processor circuit of the web user computer 583 (shown in Figure 1) to display the incoming telephone number received at block 596. The incoming telephone number may be displayed among other information in the web page identified by the URL, and thus as a result of the retrieve incoming telephone number codes 586, the user of the web user computer 583 is presented with a web page that includes some information that is standard in the web page, and that also includes an incoming telephone number that is determined by the campaign that the customer of the portal computer 102 identified with the cryptographic hash value that the customer of the portal computer 102 configured in the advertising server computer 582.
Therefore, when user of the web user computer 583 calls the telephone number shown in the web page, the call may be tracked to a particular campaign as described above, and the customer of the portal computer 102 can identify which calls originated from the one or more advertising service providers implementing services on the advertising server computer 582, which may facilitate evaluation of effectiveness of such advertising service providers.
Generally speaking, the aforementioned tasks of the portal computer 102 and gate computer 104 (Figure 1) demand relatively few computer resources, and therefore in the embodiment shown the portal computer 102 is a single computer and the gate computer 104 is also a single computer. However, alternative embodiments may include more than one portal computer 102 and more than one gate computer 104 to distribute the tasks of the portal computer 102 and of the gate computer 104 over multiple computers. Also generally speaking, the aforementioned tasks of the call track server computer 106 demand relatively great computer resources, and therefore such tasks in the embodiment shown are distributed over the plurality of call track server computers (106, 108, and 110 in the embodiment shown in Figure 1). Various embodiments may include more or fewer call track server computers in order to provide the computer resources necessary for efficient call tracking as described above.
Referring back to Figure 2, the call logs stored in the call logs store 432, the call recordings stored in the call recordings store 458, and the call counts stored in the call counts store 460 may be accessed by a customer user using the customer user computer 116 (shown in Figure 1) to obtain various data regarding the campaigns of that customer. For example, if the customer wishes to see the most recent ten calls for a particular campaign, then the portal computer 102 can access the logs of the last ten calls for that campaign by accessing the last ten entries of the binary flat file in the call logs store 432 for that campaign. Accessing the last ten entries in a binary flat file, for example, may be much more straightforward than accessing a database, because the entries in the binary flat files in the call logs store 432 have predetermined lengths, and pointing a flat file pointer to the beginning of the last ten entries is generally a relatively straight forward operation. Further, the customer may access various counters in a binary flat file in the call counts store 460, and because such counts are stored in the binary flat files as shown in Figure 25, accessing such binary flat files may be much more efficient then accessing such information in a conventional database, for example.
More generally, embodiments such as those described above may facilitate collection, summarization, and analysis of records of telephone calls from prospective customers to particular telephone numbers associated with respective marketing campaigns, and such records of such telephone calls may facilitate decisions regarding future marketing campaigns. However, the embodiments described herein are not limited to such applications, and more generally may be used to direct calls, and in some embodiments may be used to record various information about the calls or record the calls themselves.
While specific embodiments of the invention have been described and illustrated, such embodiments should be considered illustrative of the invention only and not as limiting the invention as construed in accordance with the accompanying claims.

Claims

What is claimed is:
1. A method of directing a call to a termination callee having a termination callee identifier, the method comprising: receiving, at an interface of at least one gate computer, at least one signal carrying an incoming call directed to an incoming callee identifier different from the termination callee identifier; identifying one of a plurality of call track server computers associated with the incoming callee identifier; causing at least one signal carrying the incoming call to be transmitted from the interface of the at least one gate computer to an interface of the one of the plurality of call track server computers associated with the incoming callee identifier; receiving, at the interface of the at least one gate computer and from the interface of the one of the plurality of call track server computers associated with the incoming callee identifier, at least one signal carrying an outgoing call directed to the termination callee identifier; and causing at least one signal carrying the outgoing call to be transmitted from the interface of the at least one gate computer to an interface of an outgoing call provider.
2. The method of claim 1 wherein the termination callee identifier comprises a termination telephone number.
3. The method of claim 1 or 2 wherein the incoming callee identifier comprises an incoming telephone number.
4. The method of claim 1 , 2, or 3 further comprising associating the one of the plurality of call track server computers with the incoming callee identifier. The method of claim 4 wherein associating the one of the plurality of call track server computers with the incoming callee identifier comprises receiving, at the interface of the at least one gate computer, an incoming callee identifier routing signal encoded with codes associating the one of the plurality of call track server computers with the incoming callee identifier, and wherein identifying the one of the plurality of call track server computers associated with the incoming callee identifier comprises identifying the one of the plurality of call track server computers associated with the incoming callee identifier in response to the incoming callee identifier routing signal.
The method of claim 5 wherein the incoming callee identifier routing signal comprises object fields serialized in binary form.
The method of any one of claims 1 to 6 wherein the at least one signal carrying the incoming call and received at the interface of the at least one gate computer comprises a signal from a public switched telephone network ("PSTN").
The method of any one of claims 1 to 6 wherein the at least one signal carrying the incoming call and received at the interface of the at least one gate computer comprises a first plurality of session initiation protocol ("SIP") messages.
The method of any one of claims 1 to 8 wherein the at least one signal carrying the incoming call and transmitted from the interface of the at least one gate computer to the one of the plurality of call track server computers associated with the incoming callee identifier comprises a second plurality of SIP messages.
The method of any one of claims 1 to 9 wherein the at least one signal carrying the outgoing call and received at the interface of the at least one gate computer from the one of the plurality of call track server computers associated with the incoming callee identifier comprises a third plurality of SIP messages.
11. The method of any one of claims 1 to 10 further comprising identifying the outgoing call provider from a plurality of outgoing call providers.
12. The method of claim 11 wherein identifying the outgoing call provider comprises identifying a lowest-cost outgoing call provider, for the termination callee identifier, from the plurality of outgoing call providers as the outgoing call provider.
13. The method of claim 11 wherein identifying the outgoing call provider comprises identifying a lowest-cost outgoing call provider, for the termination callee identifier, from at least one of the plurality of outgoing call providers satisfying at least one call quality criterion as the outgoing call provider.
14. The method of claim 11 wherein identifying the outgoing call provider comprises identifying a lowest-cost outgoing call provider, for the termination callee identifier, from at least one of the plurality of outgoing call providers associated with a latency time below a threshold latency time.
15. The method of any one of claims 1 to 14 further comprising associating the incoming callee identifier with the termination callee identifier.
16. The method of claim 15 wherein associating the incoming callee identifier with the termination callee identifier comprises receiving, at the interface of the one of the plurality of call track server computers associated with the incoming callee identifier, a call track configuration signal encoded with codes associating the incoming callee identifier with the termination callee identifier. 17. The method of claim 16 wherein the call track configuration signal comprises object fields serialized in binary form.
18. The method of claim 15, 16, or 17 further comprising: receiving, at the interface of the one of the plurality of call track server computers associated with the incoming callee identifier, the at least one signal carrying the incoming call from the interface of the at least one gate computer; and causing the at least one signal carrying the outgoing call directed to the termination callee to be transmitted from the interface of the one of the plurality of call track server computers associated with the incoming callee identifier to the interface of the at least one gate computer in response to associating the incoming callee identifier with the termination callee identifier and in response to the at least one signal carrying the incoming call from the interface of the at least one gate computer such that the incoming call and the outgoing call are joined.
The method of any one of claims 15 to 18 further comprising storing records associated with the incoming call and the outgoing call on at least one computer-readable storage memory in communication with the one of the plurality of call track server computers associated with the incoming callee identifier.
The method of claim 19 wherein the records comprise one or more of a start time of at least one of the incoming call and the outgoing call, a caller identifier of a caller that initiated the incoming call, the incoming callee identifier, the termination callee identifier, a ring time of the outgoing call, a duration of at least one of the incoming call and the outgoing call, and an identifier of completion type of at least one of the incoming call and the outgoing call.
The method of claim 19 or 20 wherein the records comprise a recording of at least one of the incoming call and the outgoing call.
The method of claim 19, 20, or 21 further comprising receiving, at the interface of the one of the plurality of call track server computers associated with the incoming callee identifier, a call completion signal associated with completion of at least one of the incoming call and the outgoing call.
23. The method of claim 22 wherein the call completion signal comprises a SIP BYE request message.
24. The method of claim 22 or 23 further comprising, in response to the call completion signal, causing at least one call records signal encoded with the records to be transmitted from the interface of the one of the plurality of call track server computers associated with the incoming callee identifier to an interface of at least one portal computer.
25. The method of claim 24 wherein the at least one call records signal comprises object fields serialized in binary form. 26. The method of claim 25 further comprising receiving the at least one call records signal at the at least one portal computer.
27. The method of claim 26 further comprising storing at least some of the records in at least one binary flat file on at least one computer-readable storage memory in communication with the at least one portal computer and in a sequence in the at least one binary flat file associated with the respective start times of records in the at least one binary flat file.
28. At least one computer-readable medium comprising stored thereon codes for directing at least one computer to implement the method of any one of claims 1 to 27. 29. A call directing apparatus comprising: a means for receiving, from a means for carrying an incoming call, at least one signal carrying the incoming call directed to an incoming callee identifier; a means for identifying one of a plurality of means for call tracking associated with the incoming callee identifier; a means for transmitting at least one signal carrying the incoming call to the one of the plurality of means for call tracking associated with the incoming callee identifier; a means for receiving, from the one of the plurality of means for call tracking associated with the incoming callee identifier, at least one signal carrying an outgoing call directed to a termination callee identifier; and a means for transmitting at least one signal carrying the outgoing call to a means for carrying the outgoing call to a termination callee identified by the termination callee identifier.
30. The apparatus of claim 29 wherein the termination callee identifier comprises a termination telephone number. 31. The apparatus of claim 29 or 30 wherein the incoming callee identifier comprises an incoming telephone number.
32. The apparatus of claim 29, 30, or 31 further comprising a means for associating the one of the plurality of means for call tracking with the incoming callee identifier. 33. The apparatus of claim 32 wherein the means for associating the one of the plurality of means for call tracking with the incoming callee identifier comprises a means for receiving an incoming callee identifier routing signal encoded with codes associating the one of the plurality of means for call tracking with the incoming callee identifier, and wherein the means for identifying the one of the plurality of means for call tracking associated with the incoming callee identifier is configured to identify the one of the plurality of call track server computers associated with the incoming callee identifier in response to the incoming callee identifier routing signal.
34. The apparatus of claim 33 wherein the means for receiving the incoming callee identifier routing signal comprises a means for decoding object fields serialized in binary form.
35. The apparatus of any one of claims 29 to 34 wherein the means for receiving from the means for carrying the incoming call comprises a means for receiving from a PSTN.
36. The apparatus of any one of claims 29 to 35 wherein the means for receiving from the means for carrying the incoming call comprises a means for receiving a first plurality of SIP messages.
37. The apparatus of any one of claims 29 to 36 wherein the means for transmitting the at least one signal carrying the incoming call comprises a means for transmitting a second plurality of SIP messages.
38. The apparatus of any one of claims 29 to 37 wherein the means for receiving the at least one signal carrying the outgoing call comprises a means for receiving a third plurality of SIP messages. 39. The apparatus of any one of claims 29 to 38 further comprising a means for identifying the means for carrying the outgoing call from a plurality of means for carrying the outgoing call.
40. The apparatus of claim 39 wherein the means for identifying the means for carrying the outgoing call is configured to identify a lowest-cost means for carrying the outgoing call, for the termination callee identifier, from the plurality of means for carrying the outgoing call as the means for carrying the outgoing call.
41. The apparatus of claim 39 wherein the means for identifying the means for carrying the outgoing call is configured to identify a lowest-cost means for carrying the outgoing call, for the termination callee identifier, from at least one of the plurality of means for carrying the outgoing call satisfying at least one call quality criterion.
42. The apparatus of claim 39 wherein the means for identifying the means for carrying the outgoing call is configured to identify a lowest-cost means for carrying the outgoing call, for the termination callee identifier, from at least one of the plurality of means for carrying the outgoing call associated with a latency time below a threshold latency time.
43. A call directing system comprising: a plurality of means for call tracking; a means for receiving, from a means for carrying an incoming call, at least one signal carrying the incoming call directed to an incoming callee identifier; a means for identifying one of the plurality of means for call tracking associated with the incoming callee identifier; a means for transmitting at least one signal carrying the incoming call to the one of the plurality of means for call tracking associated with the incoming callee identifier; a means for receiving, from the one of the plurality of means for call tracking associated with the incoming callee identifier, at least one signal carrying an outgoing call directed to a termination callee identifier; and a means for transmitting at least one signal carrying the outgoing call to a means for carrying the outgoing call to a termination callee identified by the termination callee identifier; wherein each one of the plurality of means for call tracking comprises: a means for associating the incoming callee identifier with the termination callee identifier such that the termination callee identifier is different from the incoming callee identifier; a means for receiving the at least one signal carrying the incoming call from the means for transmitting the at least one signal carrying the incoming call; and a means for transmitting, in response to receiving the at least one signal carrying the incoming call from the means for transmitting the at least one signal carrying the incoming call, the at least one signal carrying the outgoing call directed to the termination callee identifier associated with the incoming callee identifier such that the incoming call and the outgoing call are joined.
44. The system of claim 43 wherein the termination callee identifier comprises a termination telephone number.
45. The system of claim 43 or 44 wherein the incoming callee identifier comprises an incoming telephone number.
46. The system of claim 43, 44, or 45 further comprising a means for associating the one of the plurality of means for call tracking with the incoming callee identifier.
47. The system of claim 46 wherein the means for associating the one of the plurality of means for call tracking with the incoming callee identifier comprises a means for receiving an incoming callee identifier routing signal encoded with codes associating the one of the plurality of means for call tracking with the incoming callee identifier, and wherein the means for identifying the one of the plurality of means for call tracking associated with the incoming callee identifier is configured to identify the one of the plurality of call track server computers associated with the incoming callee identifier in response to the incoming callee identifier routing signal.
48. The system of claim 47 wherein the means for receiving the incoming callee identifier routing signal comprises a means for decoding object fields serialized in binary form.
49. The system of any one of claims 43 to 48 wherein the means for receiving from the means for carrying the incoming call comprises a means for receiving from a PSTN.
50. The system of any one of claims 43 to 49 wherein the means for receiving from the means for carrying the incoming call comprises a means for receiving a first plurality of SIP messages.
51. The system of any one of claims 43 to 50 wherein the means for transmitting the at least one signal carrying the incoming call comprises a means for transmitting a second plurality of SIP messages.
52. The system of any one of claims 43 to 51 wherein the means for receiving the at least one signal carrying the outgoing call comprises a means for receiving a third plurality of SIP messages.
53. The system of any one of claims 43 to 52 further comprising a means for identifying the means for carrying the outgoing call from a plurality of means for carrying the outgoing call. 54. The system of claim 53 wherein the means for identifying the means for carrying the outgoing call is configured to identify a lowest-cost means for carrying the outgoing call, for the termination callee identifier, from the plurality of means for carrying the outgoing call as the means for carrying the outgoing call. 55. The system of claim 53 wherein the means for identifying the means for carrying the outgoing call is configured to identify a lowest-cost means for carrying the outgoing call, for the termination callee identifier, from at least one of the plurality of means for carrying the outgoing call satisfying at least one call quality criterion. 56. The system of claim 53 wherein the means for identifying the means for carrying the outgoing call is configured to identify a lowest-cost means for carrying the outgoing call, for the termination callee identifier, from at least one of the plurality of means for carrying the outgoing call associated with a latency time below a threshold latency time. 57. The system of any one of claims 43 to 56 wherein the means for associating the incoming callee identifier with the termination callee identifier of each one of the plurality of means for call tracking comprises a means for receiving a call track configuration signal encoded with codes associating the incoming callee identifier with the termination callee identifier.
58. The system of claim 57 wherein the means for receiving the call track configuration signal of each one of the plurality of means for call tracking comprises a means for decoding object fields serialized in binary form.
59. The system of any one of claims 43 to 58 wherein each one of the plurality of means for call tracking further comprises a means for storing records associated with the incoming call and the outgoing call.
60. The system of claim 59 wherein the means for storing records of each one of the plurality of means for call tracking is configured to store one or more of a start time of at least one of the incoming call and the outgoing call, a caller identifier of a caller that initiated the incoming call, the incoming callee identifier, the termination callee identifier, a ring time of the outgoing call, a duration of at least one of the incoming call and the outgoing call, and an identifier of completion type of at least one of the incoming call and the outgoing call. 61. The system of claim 59 or 60 wherein the means for storing records of each one of the plurality of means for call tracking comprises a means for recording at least one of the incoming call and the outgoing call and a means for storing the recording.
62. The system of claim 59, 60, or 61 wherein each one of the plurality of means for call tracking further comprises a means for receiving a call completion signal associated with completion of at least one of the incoming call and the outgoing call.
63. The system of claim 62 wherein the call completion signal comprises a SIP BYE request message. 64. The system of claim 62 or 63 wherein each one of the plurality of means for call tracking further comprises a means for transmitting, in response to receiving the call completion signal, at least one call records signal encoded with the records to a means for collecting call records.
65. The system of claim 64 wherein the means for transmitting the at least one call records signal of each one of the plurality of means for call tracking comprises a means for transmitting the at least one call records signal comprising object fields serialized in binary form. 66. The system of claim 65 further comprising the means for collecting call records, wherein the means for collecting call records comprises a means for receiving the at least one call records signal.
67. The system of claim 66 wherein the means for collecting call records further comprises a means for storing at least some of the records in at least one binary flat file in a sequence in the at least one binary flat file associated with the respective start times of records in the at least one binary flat file.
68. A call directing apparatus comprising: an interface in communication with at least one telecommunication service provider and with a plurality of call track server computers; and a processor circuit in communication with the interface and configured to: cause the interface to receive, from a first one of the at least one telecommunication service provider, at least one signal carrying an incoming call directed to an incoming callee identifier; identify one of the plurality of call track server computers associated with the incoming callee identifier; cause the interface to transmit at least one signal carrying the incoming call to the one of the plurality of call track server computers associated with the incoming callee identifier; cause the interface to receive, from the one of the plurality of call track server computers associated with the incoming callee identifier, at least one signal carrying an outgoing call directed to a termination callee identifier; and cause the interface to transmit, to a second one of the at least one telecommunication service provider, at least one signal carrying the outgoing call directed to the termination callee identifier.
69. The apparatus of claim 68 wherein the termination callee identifier comprises a termination telephone number.
70. The apparatus of claim 68 or 69 wherein the incoming callee identifier comprises an incoming telephone number.
71. The apparatus of claim 68, 69, or 70 wherein the processor circuit is further configured to associate the one of the plurality of call track server computers with the incoming callee identifier.
72. The apparatus of claim 71 wherein the processor circuit is further configured to cause the interface to receive an incoming callee identifier routing signal encoded with codes associating the one of the plurality of call track server computers with the incoming callee identifier, and wherein the processor circuit is configured to identify the one of the plurality of call track server computers associated with the incoming callee identifier in response to the incoming callee identifier routing signal.
73. The apparatus of claim 72 wherein the processor circuit is configured to cause the interface to receive the incoming callee identifier routing signal by decoding object fields serialized in binary form.
74. The apparatus of any one of claims 68 to 73 wherein the processor circuit is configured to cause the interface to receive the at least one signal carrying the incoming call directed to the incoming callee identifier by causing the interface to receive at least one signal from a PSTN.
75. The apparatus of any one of claims 68 to 74 wherein the processor circuit is configured to cause the interface to receive the at least one signal carrying the incoming call directed to the incoming callee identifier by causing the interface to receive a first plurality of SIP messages. 76. The apparatus of any one of claims 68 to 75 wherein the processor circuit is configured to cause the interface to transmit the at least one signal carrying the incoming call by causing the interface to transmit a second plurality of SIP messages.
77. The apparatus of any one of claims 68 to 76 wherein the processor circuit is configured to cause the interface to receive the at least one signal carrying the outgoing call by causing the interface to receive a third plurality of SIP messages.
78. The apparatus of any one of claims 68 to 77 wherein the processor circuit is further configured to identify the second one of the at least one telecommunication service provider from a plurality of telecommunication service providers.
79. The apparatus of claim 78 wherein the processor circuit is configured to identify the second one of the at least one telecommunication service provider from the plurality of telecommunication service providers by identifying a lowest-cost one, for the termination callee identifier, from the plurality of telecommunication service providers as the second one of the at least one telecommunication service provider.
80. The apparatus of claim 78 wherein the processor circuit is configured to identify the second one of the at least one telecommunication service provider from the plurality of telecommunication service providers by identifying a lowest-cost one, for the termination callee identifier, from at least one of the plurality of telecommunication service providers satisfying at least one call quality criterion as the second one of the at least one telecommunication service provider. The apparatus of claim 78 wherein the processor circuit is configured to identify the second one of the at least one telecommunication service provider from the plurality of telecommunication service providers by identifying a lowest-cost one, for the termination callee identifier, from at least one of the plurality of telecommunication service providers associated with a latency time below a threshold latency time as the second one of the at least one telecommunication service provider.
A call directing system comprising: a plurality of call track server computers each comprising a call track server computer interface; and at least one gate computer comprising: a gate computer interface in communication with at least one telecommunication service provider and with the call track server computer interface of each one of the plurality of call track server computers; and a processor circuit in communication with the gate computer interface and configured to: cause the gate computer interface to receive, from a first one of the at least one telecommunication service provider, at least one signal carrying an incoming call directed to an incoming callee identifier; identify one of the plurality of call track server computers associated with the incoming callee identifier; cause the gate computer interface to transmit at least one signal carrying the incoming call to the call track server computer interface of the one of the plurality of call track server computers associated with the incoming callee identifier; cause the gate computer interface to receive, from the one of the plurality of call track server computers associated with the incoming callee identifier, at least one signal carrying an outgoing call directed to a termination callee identifier; and cause the gate computer interface to transmit, to a second one of the at least one telecommunication service provider, at least one signal carrying the outgoing call directed to the termination callee identifier; wherein each one of the plurality of call track server computers further comprises a processor circuit in communication with the call track computer interface of the one of the plurality of call track server computers and configured to: associate the incoming callee identifier with the termination callee identifier such that the termination callee identifier is different from the incoming callee identifier; cause the call track server computer interface to receive the at least one signal carrying the incoming call from the gate computer interface; and cause the call track server computer interface to transmit, in response to receiving the at least one signal carrying the incoming call from the gate computer interface, the at least one signal carrying the outgoing call directed to the termination callee identifier associated with the incoming callee identifier such that the incoming call and the outgoing call are joined.
The system of claim 82 wherein the termination callee identifier comprises a termination telephone number.
84. The system of claim 82 or 83 wherein the incoming callee identifier comprises an incoming telephone number.
85. The system of claim 82, 83, or 84 wherein the processor circuit of the at least one gate computer is further configured to associate the one of the plurality of call track server computers with the incoming callee identifier.
86. The system of claim 85 wherein the processor circuit of the at least one gate computer is further configured to cause the gate computer interface to receive an incoming callee identifier routing signal encoded with codes associating the one of the plurality of call track server computers with the incoming callee identifier, and wherein the processor circuit of the at least one gate computer is configured to identify the one of the plurality of call track server computers associated with the incoming callee identifier in response to the incoming callee identifier routing signal.
87. The system of claim 86 wherein the processor circuit of the at least one gate computer is configured to cause the gate computer interface to receive the incoming callee identifier routing signal by decoding object fields serialized in binary form.
88. The system of any one of claims 82 to 87 wherein the processor circuit of the at least one gate computer is configured to cause the gate computer interface to receive the at least one signal carrying the incoming call directed to the incoming callee identifier by causing the gate computer interface to receive at least one signal from a PSTN.
89. The system of any one of claims 82 to 88 wherein the processor circuit of the at least one gate computer is configured to cause the gate computer interface to receive the at least one signal carrying the incoming call directed to the incoming callee identifier by causing the gate computer interface to receive a first plurality of SIP messages.
90. The system of any one of claims 82 to 89 wherein the processor circuit of the at least one gate computer is configured to cause the gate computer interface to transmit the at least one signal carrying the incoming call by causing the gate computer interface to transmit a second plurality of SIP messages.
91. The system of any one of claims 82 to 90 wherein the processor circuit of the at least one gate computer is configured to cause the gate computer interface to receive the at least one signal carrying the outgoing call by causing the gate computer interface to receive a third plurality of SIP messages.
92. The system of any one of claims 82 to 91 wherein the processor circuit of the at least one gate computer is further configured to identify the second one of the at least one telecommunication service provider from a plurality of telecommunication service providers.
93. The system of claim 92 wherein the processor circuit of the at least one gate computer is configured to identify the second one of the at least one telecommunication service provider from the plurality of telecommunication service providers by identifying a lowest-cost one, for the termination callee identifier, from the plurality of telecommunication service providers as the second one of the at least one telecommunication service provider.
94. The system of claim 92 wherein the processor circuit of the at least one gate computer is configured to identify the second one of the at least one telecommunication service provider from the plurality of telecommunication service providers by identifying a lowest-cost one, for the termination callee identifier, from at least one of the plurality of telecommunication service providers satisfying at least one call quality criterion as the second one of the at least one telecommunication service provider. 95. The system of claim 92 wherein the processor circuit of the at least one gate computer is configured to identify the second one of the at least one telecommunication service provider from the plurality of telecommunication service providers by identifying a lowest-cost one, for the termination callee identifier, from at least one of the plurality of telecommunication service providers associated with a latency time below a threshold latency time as the second one of the at least one telecommunication service provider.
The system of any one of claims 82 to 95 wherein the processor circuit of each one of the plurality of call track server computers is configured to: cause the call track server computer interface of the one of the plurality of call track server computers to receive a call track configuration signal encoded with codes associating the incoming callee identifier with the termination callee identifier; and associate the incoming callee identifier with the termination callee identifier in response to the call track configuration signal.
The system of claim 96 wherein the processor circuit of each one of the plurality of call track server computers is configured to cause the call track server computer interface of the one of the plurality of call track server computers to receive the call track configuration signal by decoding object fields serialized in binary form.
The system of any one of claims 82 to 97 wherein each one of the plurality of call track server computers further comprises at least one computer- readable storage memory in communication with the processor circuit of the one of the plurality of call track server computers, and wherein the at least one computer-readable storage memory of each one of the plurality of call track server computers is configured to store records associated with the incoming call and the outgoing call.
The system of claim 98 wherein the at least one computer-readable storage memory of each one of the plurality of call track server computers is configured to store one or more of a start time of at least one of the incoming call and the outgoing call, a caller identifier of a caller that initiated the incoming call, the incoming callee identifier, the termination callee identifier, a ring time of the outgoing call, a duration of at least one of the incoming call and the outgoing call, and an identifier of completion type of at least one of the incoming call and the outgoing call.
100. The system of claim 98 or 99 wherein the processor circuit of each one of the plurality of call track server computers is configured to record at least one of the incoming call and the outgoing call, and wherein the at least one computer-readable storage memory of each one of the plurality of call track server computers is configured to store the recording.
101. The system of claim 98, 99, or 100 wherein the processor circuit of each one of the plurality of call track server computers is configured to cause the call track server computer interface of the one of the plurality of call track server computers to receive a call completion signal associated with completion of at least one of the incoming call and the outgoing call.
102. The system of claim 101 wherein the call completion signal comprises a SIP BYE request message.
103. The system of claim 101 or 102 wherein the processor circuit of each one of the plurality of call track server computers is configured to cause the call track server computer interface of the one of the plurality of call track server computers to transmit at least one call records signal encoded with records from the at least one computer-readable storage memory of the one of the plurality of call track server computers to at least one portal computer in response to receiving the call completion signal. 104. The system of claim 103 wherein the processor circuit of each one of the plurality of call track server computers is configured to cause the call track server computer interface of the one of the plurality of call track server computers to transmit the at least one call records signal by causing the call track server computer interface of the one of the plurality of call track server computers to transmit the at least one call records signal comprising object fields serialized in binary form.
105. The system of claim 104 further comprising the at least one portal computer, wherein the at least one portal computer comprises: a portal computer interface in communication with the call track server computer interfaces of the plurality of call track server computers; and a processor circuit configured to cause the portal computer interface to receive the at least one call records signal.
106. The system of claim 105 wherein the at least one portal computer further comprises at least one computer-readable storage memory in communication with the processor circuit of the at least one portal computer, and wherein the processor circuit of the at least one portal computer is further configured to cause at least some of the records in the at least one call records signal to be stored on the at least one computer- readable storage memory of the at least one portal computer in at least one binary flat file in a sequence in the at least one binary flat file associated with the respective start times of records in the at least one binary flat file.
107. A method of communicating a callee identifier associated with an advertising service provider, the method comprising: receiving a web page identifier encoded with an identifier of an advertising campaign; transmitting the identifier of the advertising campaign to at least one portal computer; in response to transmitting the identifier of the advertising campaign to at least one portal computer, receiving the callee identifier; and directing a computer to display the callee identifier among information received in association with the web page identifier.
108. The method of claim 107 wherein the identifier of the advertising campaign comprises a cryptographic hash value.
109. The method of claim 107 or 108 wherein the web page identifier comprises a uniform resource locator ("URL"). 110. The method of claim 109 wherein the information received in association with the web page identifier comprises a web page retrieved from a web server in response to a hypertext transfer protocol ("HTTP") query comprising the URL.
111. At least one computer-readable medium comprising stored thereon codes for directing at least one computer to implement the method of any one of claims 107 to 110.
PCT/CA2012/000514 2012-05-31 2012-05-31 Call directing methods, apparatuses, and systems WO2013177651A1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
PCT/CA2012/000514 WO2013177651A1 (en) 2012-05-31 2012-05-31 Call directing methods, apparatuses, and systems

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CA2012/000514 WO2013177651A1 (en) 2012-05-31 2012-05-31 Call directing methods, apparatuses, and systems

Publications (1)

Publication Number Publication Date
WO2013177651A1 true WO2013177651A1 (en) 2013-12-05

Family

ID=49672209

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/CA2012/000514 WO2013177651A1 (en) 2012-05-31 2012-05-31 Call directing methods, apparatuses, and systems

Country Status (1)

Country Link
WO (1) WO2013177651A1 (en)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5329578A (en) * 1992-05-26 1994-07-12 Northern Telecom Limited Personal communication service with mobility manager
US20020161646A1 (en) * 2001-04-27 2002-10-31 Gailey Michael L. Advertising campaign and business listing management for a location-based services system

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5329578A (en) * 1992-05-26 1994-07-12 Northern Telecom Limited Personal communication service with mobility manager
US20020161646A1 (en) * 2001-04-27 2002-10-31 Gailey Michael L. Advertising campaign and business listing management for a location-based services system

Similar Documents

Publication Publication Date Title
US9729715B2 (en) System and methods for selecting a dialing strategy for placing an outbound call
US11461805B2 (en) Call tracking
US8798036B2 (en) Communication system and method
US7809398B2 (en) System and method of storing contact information
US9384496B2 (en) Call tracking system and method
US9160851B2 (en) System, method, and computer program product for lead management
US8144847B2 (en) Telephone number assignment method
US20080267377A1 (en) Method and apparatus for enhanced call reporting
US7072328B2 (en) Computer-implemented voice markup language-based server
CN111010527B (en) Method and related device for establishing video call through short message link
CN101141517B (en) Method and system for implementing internet advertisement telephone
US20080247533A1 (en) Method and system for call to role
US20050041792A1 (en) Method and system for providing a privacy management service
US20110231247A1 (en) Pay-Per-Call ad system
US20130102274A1 (en) Systems and methods for mobile call measurement
WO2006128487A1 (en) Enhanced call detail record with information provided by user
US10367941B1 (en) Apparatus, method, and computer program for optimizing communication
US10229371B2 (en) Systems and methods for indexing and searching administrative data
US20090285378A1 (en) System and method for obfuscating contact numbers
US20140348316A1 (en) System and Method for Replacing Hold-Time with a Call-Back in a Contact Center Environment
WO2013177651A1 (en) Call directing methods, apparatuses, and systems
CN113159533A (en) Customer service representative pushing method, device, equipment and medium
US20160156784A1 (en) Dynamic telephone number allocation management
US20060098793A1 (en) Dynamic content delivery
JP6570182B2 (en) ENUM cache setting system, ENUM authority server, and ENUM cache setting method

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 12877993

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 12877993

Country of ref document: EP

Kind code of ref document: A1