Costs have gone down for computer hardware and network communication. In addition, there has been increasing variety in the types of software and systems available for facilitating real-time person-to-person communication (“calling” for short). The proliferation of devices, networks, and applications available for calling has created a problem observed only by the instant inventors. At any given time, a person might potentially be reachable through a large number of calling options but someone intending to call that person has no way to know which calling option is most likely to succeed.
Consider a person who regularly uses multiple computing devices, each with multiple calling platforms. The person may have multiple identities and perhaps multiple identities on some of the calling platforms. Not only might there be many options for potentially calling the person, the viability of those options can change significantly over conditions such as time, location, and other conditions. One of the person's devices might be powered off. Another device, perhaps at another time, might not be able to communicate with a particular network. At other times, a privacy setting might render certain applications unavailable. Sometimes the person might be busy and unable to respond to calls to particular devices or to particular identities associated with the person. Network conditions might make one form of communication (e.g., video calling) impossible. So many variables can affect the likelihood of a particular calling option being successful that it is difficult or impossible for a person to keep track of or predict the best calling option to reach a particular person at any given time.
Although it is known that calling channels can generally be automatically monitored and avoided when offline, when multiple calling channels are apparently available for calling, it is difficult for the caller to know which of those channels are most likely to result in actual person-to-person communication with the callee. Over time, which calling channel is the best option may depend on conditions that are difficult for a user to perceive or predict.
Techniques related to intelligent call routing are discussed below.
The following summary is included only to introduce some concepts discussed in the Detailed Description below. This summary is not comprehensive and is not intended to delineate the scope of the claimed subject matter, which is set forth by the claims presented at the end.
Embodiments relate to virtual call routing to enable a user (caller) to communicate with another person (callee) without specifying details of calling. A variety of independent communication channels are selected from and prioritized for calling the callee. The channels may be independent in that they might not communicate with each other, share a common backend support service, operate through a same common local application or local background communication service, use a same communication network, etc. Any real-time person-to-person communication channel (application) on a calling device can potentially be used to attempt to reach the callee. Even if the callee has multiple unrelated identities on multiple different channels, the caller can focus on specifying the person to be called and perhaps constraints for the call without regard for which channels are available, which channels and/or identities are likely to succeed, or which channels are suitable to the constraints.
Many of the attendant features will be explained below with reference to the following detailed description considered in connection with the accompanying drawings.
The present description will be better understood from the following detailed description read in light of the accompanying drawings, wherein like reference numerals are used to designate like parts in the accompanying description.
The channels 106 are configured for real-time exchange of remote and local communication data, e.g., text, voice, and/or video data, as well as call management data for establishing and managing connections with remote software. Remote communication data is inputted by a user at a remote calling application, encoded, transmitted over one or more networks 104A, 104B, received through a network interface 102A, 102B, passed up through a communication protocol stack of the computing device 100, and decoded and rendered by the corresponding local calling application. Local calling data is similarly conveyed from the local device 100 to the remote device. Calling data may be exchanged synchronously or asynchronously. In some cases, the calling application may also communicate with a communication service/network 108A, 1088, which can intermediate the exchange of communication and/or management data, aid in helping calling applications/devices locate and connect with each other on a network 104B, manage user identities and credentials, provide gateways between networks (e.g., between telephony networks and data networks), authenticate calls to user identities, and so forth. In one embodiment, the different communication services/networks are operated by different providers, have their own user identifier namespaces, etc. One communication channel/application may be configured to use a first communication service/network to make calls and another communication channel/application may be configured to use a second communication service/network to make calls. In some cases, the first communication service does not service calls placed through the second communication service/network, and the second communication service/network does not service calls placed through the first communication service/network. Servicing calls might entail helping a calling device identify an address or device endpoint for placing a call, routing call setup messages, authenticating callers and/or callees, bridging calls between data or telephone networks, and others.
The device 100 also includes a software layer that provides the caller 110 with a single point for abstracted access to the channels 106. The software layer will be referred to as a calling agent 109. The calling agent 109 can be an independent module such as a background executable process, part of one of the applications/channels 106, an element of a user shell, or any other component capable of identifying callees and possibly interacting with the channels 106 to invoke calls thereon. In one embodiment, the calling agent 109 is implemented in an intelligent agent or intelligent personal assistant (IPA). IPAs typically use machine learning and disparate information sources to make inferences about user intent for purposes such as providing information or performing actions such as making calls.
The calling agent 106 maintains or accesses a set of identities of unique users, i.e., contacts 112A, 112B. Each contact 112A, 112B represents a unique person or entity and is associated with a set 114 of user identifiers 116. Whenever a callee/contact is referenced by the calling agent 106, based on an association with a set 114 of identifiers for that contact, the calling agent 106 is able to identify all of the possible combinations of identifiers and channels that are potentially available to call the contact. As discussed below, given a contact, the calling agent 106 is able to provide a virtual call router with a corresponding list of ID-channel candidates that the virtual call router can filter and prioritize for making a call.
In one embodiment, the contacts data structure might include a field for each channel to store traits of the channels (X, Y, Z in
If the calling agent 106 determines that a contact named “Pat” is to be called, the calling agent 106 accesses the contacts data structure 130 and determines which contact “Pat” refers to. The calling agent 106 then identifies all of the channel-IDs for the callee contact, as shown in
Notably, the communication applications that are part of respective communication channels may be autonomous with respect to each other. The applications may be objects distinctly installed on the computing device 100. The communication applications may be represented in a user shell of the computing device 100 by distinct respective user-selectable icons or the like. The communication applications may execute as distinct processes managed by the operating system on the computing device 100. Embodiments described herein form a communication layer above heterogeneous communication applications in a way that allows a calling user to communicate with contacts at a high level of abstraction, for instance by only specifying a person to communicate with. The communication layer above the communication applications is able to intelligently decide the ideal communication applications/channels to use and initiate calls thereon without the calling user having to switch applications, input identifiers of the callee, guess at the best communication channels to attempt or which order they should be used to attempt calls to the callee, etc. Calls may be initiated with any form of inter-process communication between a communication application and a calling agent or virtual call router.
At step 196 the virtual call router 170 receives the callee's identity 192 and possible call parameters. As will be described below, routing logic 195 of the virtual call router 170 identifies, from the contacts data structure 130, which channel-ID combinations are registered for the contact being called. The virtual call router 170 may filter out any channels that are determined or predicted to be unavailable, or which are precluded by call parameters. Among the remaining channel-IDs the virtual call router may draw on a wide range of current context and historical data (routing information), perhaps aided by machine learning, to rank or prioritize the channel-IDs relative to each other. In effect, as discussed below, the virtual call router 170 computes ranks, scores, or relative priorities 197 of the channel-IDs in a way that corresponds to likelihoods that calls respectively placed on the channel-IDs will result in successful communication between the caller and the callee.
Once the virtual call router 170 has prioritized the candidate channel-IDs, calls are attempted on the channel-IDs according to the order or relative priorities 197 determined by the virtual call router 170. As discussed above, either the virtual call router 170 may manage the attempts to call the channel-IDs, or the virtual call router 170 may return the priorities 197 to the calling agent 106, which in turn performs the prioritized calling (represented by dashed lines in
Whether instructed by the virtual call router or the calling agent, per the priorities 197, the calling software/applications 202 (channels) for the prioritized channel-IDs are instructed to call the appropriate IDs 204. For example, a first-priority cellular voice call (CHANNEL-B) to a first phone (ID-3) number might be attempted. If the cellular voice call fails, then a second-priority IP-based voice client might be instructed to attempt to reach a particular user ID (possibly with an intermediary providing a network address of the remote device). If that fails, a third-priority cellular voice call might be attempted using a different telephone number.
In one embodiment, the virtual call router and the calling agent are modules of a same application or process and exchange data using intra-process communication. In such an embodiment, the calling agent and the virtual call router may both be logic implemented in an IPA.
The call history data 230 is just one form of training data that can be used. The call history data 230 may be a log of past calls and any captured data (features) associated with the call.
Returning to
A channel monitor 234 may also be included to monitor the availability of channels independently of placement of calls on the channels. The channel monitor 234 attempts to determine which channels are technically reachable and record the status of each channel. A channel's availability can be determined in a variety of ways. For example, the channel monitor 234 might request a calling application to report on its availability. Some calling applications are able to determine their own viability, for instance by tracking whether a necessary service or network is up or down, by determining whether the application is disabled by the user or the operating system, etc. The channel monitor 234 might also send connectivity-determining packets/information such as pings, beacons IMS presence and capability exchanges, and Session Initiation Protocol keep-alive packets for example, to determine whether remote resources needed by a channel are available. Some communication applications or services (e.g. a social network or chat service) might publish regular updates or availability status changes.
The virtual call router 170 may be configured with an API 236 to facilitate communication with the channels. The API 236 may be used by the calling applications (channels) to provide their availability status, initiate calls responsive to requests from the calling module, etc. The calling module 195 may record the results of calls in the call history data 230.
Channel filtering need not be performed. In one embodiment, channel availability is assumed, channel-ID candidates are prioritized, and each is attempted in order. If a channel fails, then the next candidate is attempted. In another embodiment, availability is implemented in the prioritization logic and availability is accounted for as one of the modeled call features. In addition, filtering can be informed by a call parameter passed in to the virtual call router. For example, if the caller specifies that a voice call is to be made, any non-voice channels are filtered out at step 244. Current and/or past availability status may be tracked and monitored for IDs using the techniques similar to those for channels. In some cases, a channel might be available but an ID is not available. Filtering may be performed based on ID availability and historical ID availability information may be used as a feature for prioritizing channel-IDs.
At step 246, the remaining channel-ID pairs are iterated over and scored, prioritized or ranked at step 248. At step 248 a candidate channel-ID pair is evaluated. In one embodiment, a score is computed for the channel-ID being evaluated. As discussed above, a machine learning model or statistical model may be used. Current features related to the channel-ID being evaluated are used to compute a likelihood that a call on the channel-ID, given those features, would be successful. At step 250, when the candidate channel-IDs have been prioritized, the prioritized channel-IDs are outputted to whichever component will handle calling.
In another embodiment, a set of ranking rules or ranking logic is used instead of a statistical inference model. A set of prioritization rules may be in place to prioritize the channels as a function of the current call-related features (e.g., time of day, day of week, call location, callee location, contact, etc.). In another embodiment, a static scoring function may be implemented that scores each channel-ID based on fixed scoring rules that score the channel-ID pairs according to the call-related features. Feature distances may be used, where locations of a feature vector in a feature space reflect likelihoods of success or failure.
Although embodiments have been described for ordering or prioritizing combinations of channels and IDs, channels per se may be prioritized or IDs alone may be prioritized. The use of channel-ID pairs is representative of all three approaches or combinations thereof.
It will be appreciated that the virtual call router is able to take a user's intent to generically contact a person and direct that intent to a variety of communication channels even when those channels are mutually autonomous. The channels by which a person can possibly be reached are not limited to channels that locally communicate with each other, share a common backend support service, operate through a common local application or local background communication service, use a same communication network, use a same identity namespace, or share a same cloud-based resource or service. Any real-time person-to-person communication channel on the device 100 can potentially be used to satisfy a need to communicate with a particular person. Even if the person to be called has multiple unrelated identities on multiple different channels, the caller can focus on specifying the person to be called without regard for the details of which channel is available, which channels are most likely to succeed, or which channels are suitable to the nature of the call.
In addition to abstracting details of calling such as user identity, mode of communication (voice, text, etc.), etc., the virtual call router may be designed as an extensible framework that allows new communication channels to be incorporated into virtual call routing without requiring special coding for the new communication channels. Extensibility constructs such as shims, APIs, configuration settings, or the like can be used to inform the router/framework about the new calling options and details thereof.
The computing device 100 may have a display 252, a network interface 254 (or several), as well as storage hardware 256 and processing hardware 258, which may be a combination of any one or more: central processing units, graphics processing units, analog-to-digital converters, bus chips, FPGAs, ASICs, Application-specific Standard Products (ASSPs), or Complex Programmable Logic Devices (CPLDs), etc. The storage hardware 256 may be any combination of magnetic storage, static memory, volatile memory, non-volatile memory, optically or magnetically readable matter, etc. The meaning of the term “storage”, as used herein does not refer to signals or energy per se, but rather refers to physical apparatuses and states of matter. The hardware elements of the computing device 100 may cooperate in ways well understood in the art of computing. In addition, input devices may be integrated with or in communication with the computing device 100. The computing device 100 may have any form-factor or may be used in any type of encompassing device. The computing device 100 may be in the form of a handheld device such as a smartphone, a tablet computer, a gaming device, a server, a rack-mounted or backplaned computer-on-a-board, a system-on-a-chip, or others.
Embodiments and features discussed above can be realized in the form of information stored in volatile or non-volatile computer or device readable storage hardware. This is deemed to include at least hardware such as optical storage (e.g., compact-disk read-only memory (CD-ROM)), magnetic media, flash read-only memory (ROM), or any current or means of storing digital information. The stored information can be in the form of machine executable instructions (e.g., compiled executable binary code), source code, bytecode, or any other information that can be used to enable or configure computing devices to perform the various embodiments discussed above. This is also deemed to include at least volatile memory such as random-access memory (RAM) and/or virtual memory storing information such as central processing unit (CPU) instructions during execution of a program carrying out an embodiment, as well as non-volatile media storing information that allows a program or executable to be loaded and executed. The embodiments and features can be performed on any type of computing device, including portable devices, workstations, servers, mobile wireless devices, and so on.