Various embodiments concern computer-implemented techniques for facilitating international calls and, more specifically, software applications and/or hardware appliances that route voice traffic between multiple telephone network endpoints.
The public switched telephone network (PSTN) is the aggregate of the world's circuit-switched telephone networks that are operated by national, regional, or local telephony operators, The PSTN includes telephone lines, fiber optic cables, cellular networks, communications satellites, and undersea telephone cables that are interconnected by switching centers. The PSTN provides the infrastructure and services for public telecommunication and allows most telephones to seamlessly communicate with one another.
But keeping connected via voice on the PSTN is often difficult for international travelers who are faced with poor alternatives: (1) use one or more local wireless providers for the intended destination; or (2) use international roaming supported by their primary wireless provider. Problems accompany each of these alternatives. For example, a traveler will be forced to use a phone number that is unknown to those individuals the traveler is attempting to contact when using a local wireless provider, while the traveler may be charged exorbitant fees when using his or her primary wireless provider. Moreover, the former option may have elevated outbound international calling per-minute rates (for the traveler and those he or she attempts to contact) that negatively impact cost savings when compared to traditional international roaming.
Various objects, features, and characteristics will become apparent to those skilled in the art from a study of the Detailed Description in conjunction with the appended claims and drawings, all of which form a part of this specification. While the accompanying drawings include illustrations of various embodiments, the drawings are not intended to limit the claimed subject matter.
The figures depict various embodiments described throughout the Detailed Description for the purposes of illustration only. While specific embodiments have been shown by way of example in the drawings and are described in detail below, the invention is amenable to various modifications and alternative forms. The intention is not to limit the invention to the particular embodiments described herein. Accordingly, the claimed subject matter is intended to cover all modifications, equivalents, and alternatives falling within the scope of the invention as defined by the appended claims.
Various embodiments are described herein that relate to computer hardware and programs for facilitating international calls between individuals. More specifically, an international call system can route voice traffic between multiple telephone network endpoints. For example, a client application (also referred to as a “client”) may be accessed by a traveler on a mobile phone. The client could be accessible as a standalone mobile application, a website, or some other means (e.g., via Short Messaging Service (SMS) or email). The client application is configured to connect to a network-accessible application server, which can communicate with a call processing system that routes voice traffic from the traveler's mobile phone to the mobile phone of a desired contact (and, preferably, vice versa).
The international call system may provide a consistent return path for the desired contact to reach the traveler, even as the phone number associated with the traveler changes from country to country. Note that, for purposes of discussion here, the term “country” may refer to a geographic area assigned with a specific telephone country code. Moreover, the international call system may not require a certain application be executed on the desired contact's mobile phone. The desired contact may instead simply be able to complete a call to, or receive a call from, a local access number associated with a connection to the traveler.
The international call system described herein makes use of the local providers in each country traversed by the traveler (and thus keeps costs low). Thus, low-cost calling can be enabled in both directions, while predictable reachability is guaranteed as the traveler moves between different local providers. These benefits are possible despite the international call system continuing to also make use of the (generally more reliable) PSTN for the termini of the voice call, rather than an end-to-end VoIP solution,
Several exemplary use cases highlight the advantages of such a system:
Primary Use Case
Secondary Use Cases
Various embodiments may be described with reference to particular system configurations (e.g., mobile phones operated by the user and the contact) and networks. However, one skilled in the art will recognize that the features and techniques described herein may be equally applicable to other system configurations, network, types, etc. Moreover, the techniques introduced herein could be embodied as special-purpose hardware (e.g., circuitry), circuitry programmed with software and/or firmware, or a combination of special-purpose hardware and programmable circuitry. Hence, embodiments may include a machine-readable medium having instructions stored thereon that can be used to program a computer (or some other computing device) to perform a process. The machine-readable medium may include, but is not limited to, floppy diskettes, optical disks, compact disk read-only memories (CD-ROMs), magneto-optical disks, read-only memories (ROMs), random access memories (RAMs), erasable programmable read-only memories (EPROMs), electrically erasable programmable read-only memories (EEPROMs), magnetic or optical cards, flash memory, or any other type of media/machine-readable medium suitable for storing electronic instructions.
Brief definitions of terms, abbreviations, and phrases used throughout the Detailed Description are given below.
Reference in this specification to “one embodiment” or “an embodiment” means that a particular feature, structure, or characteristic described in connection with the embodiment is included in at least one embodiment of the disclosure. The appearances of the phrase “in one embodiment” in various places in the specification are not necessarily all referring to the same embodiment, nor are separate or alternative embodiments mutually exclusive of other embodiments. Moreover, various features are described that may be exhibited by some embodiments and not by others. Similarly, various requirements are described that may be requirements for some embodiments but not others.
Unless the context clearly requires otherwise, throughout the description and the claims, the words “comprise,” “comprising,” and the like are to be construed in an inclusive sense, as opposed to an exclusive or exhaustive sense; that is to say, in the sense of “including, but not limited to.” As used herein, the terms “connected,” “coupled,” or any variant thereof, means any connection or coupling, either direct or indirect, between two or more elements; the coupling of connection between the elements can be physical, logical, or a combination thereof. For example, two devices may be coupled directly, or via one or more intermediary channels or devices. As another example, devices may be coupled in such a way that information can be passed there between, while not sharing any physical connection with one another. Additionally, the words “herein,” “above,” “below,” and words of similar import, when used in this application, shall refer to this application as a whole and not to any particular portions of this application. Where the context permits, words in the Detailed Description using the singular or plural number may also include the plural or singular number respectively. The word “or,” in reference to a list of two or more items, covers all of the following interpretations of the word: any of the items in the list, all of the items in the list, and any combination of the items in the list.
If the specification states a component or feature “may,” “can,” “could,” or “might” be included or have a characteristic, that particular component or feature is not required to be included or have the characteristic.
The term “module” refers broadly to software, hardware, or firmware (or any combination thereof) components. Modules are typically functional components that can generate useful data or other output using specified input(s). A module may or may not be self-contained. An application program (also called an “application”) may include one or more modules, or a module can include one or more application programs.
The terminology used in the Detailed Description is intended to be interpreted in its broadest reasonable manner, even though it is being used in conjunction with certain examples. The terms used in this specification generally have their ordinary meanings in the art, within the context of the disclosure, and in the specific context where each term is used. For convenience, certain terms may be highlighted, for example using capitalization, italics, and/or quotation marks. The use of highlighting has no influence on the scope and meaning of a term; the scope and meaning of a term is the same, in the same context, whether or not it is highlighted. It will be appreciated that same element can be described in more than one way.
Consequently, alternative language and synonyms may be used for any one or more of the terms discussed herein, and special significance is not to be placed upon whether or not a term is elaborated or discussed herein. Synonyms for certain terms are provided. A recital of one or more synonyms does not exclude the use of other synonyms. The use of examples anywhere in this specification including examples of any terms discussed herein is illustrative only, and is not intended to further limit the scope and meaning of the disclosure or of any exemplified term. Likewise, the disclosure is not limited to various embodiments given in this specification.
The international call system includes three main components: a client 102, an application server 104, and a call processing system 106. One or more networks 108a-b connect the client 102 to the application server 104, and the application server 104 to the call processing system 106. The networks 108a-b could be, for example, the Internet or a cellular network.
The client 102 is a client-side interface with which the traveler interacts. For example, the client 102 may be executed by the operating system of the traveler's device (e.g., a mobile phone, tablet, or laptop). The call processing system 106, meanwhile, has Public Switch Telephone Network (PSTN) access in both the traveler's current country and the countries of the contacts the traveler wishes to communicate with.
The application server 104 interacts directly with (and serves as an interface between) the client 102 and the call processing system 106. More specifically, the application server can identify appropriate number routing policies, apply those number routing policies, and perform various other traveler account-related activities (e.g., maintain a list of contacts across multiple traveler devices).
As shown in
As noted above, the client 204 communicates with a call processing system 226 via an application server 212. Such communication may occur across one or more networks, such as an Internet Protocol (IP) network 216 or the PSTN 218. Moreover, in some embodiments the application server 212 is connected to a database 214 that provides storage capabilities for the application server 212. For example, the database 214 could include assignable local telephone numbers, user information, instructions for implementing the operations described herein, etc.
The call processing system 226 enables the traveler's mobile phone 202 to place a call to a contact's mobile phone 220. The contact's mobile phone 220 can also include a (conventional) phone application 222 and a SIM card 224. The phone application 222 allows the contact (i.e., the person to whom the traveler has placed a call) to receive any calls placed by devices connected to the PSTN 218. The contact's mobile phone 220 need not necessarily include a client if the contact is only interested in receiving, rather than placing, international calls.
The client 302 can include numerous modules for facilitating the placement of international calls. Here, for example, the client 302 includes a sign-up module 304 and a contact management module 306. The sign-up module 304 provides a means for a user (e.g., a traveler) to direct the international call system and interact with it to perform preliminary activities that make it possible to place and receive low-cost international calls. The sign-up module 304 may also be responsible for processing and storing registration information provided by the user during a registration process. The registration information could be input by the user into one or more interfaces shown by the client 302. The contact management module 306 may maintain a list of contacts that the user can communicate with via the international call system. Moreover, the contact management module 306 may enable the user to add and delete contacts from the list and place calls to the contacts within the list.
As shown in
Communication between the client 302 and the application server preferably transpires over standard protocols and data formats (e.g., a Representational State Transfer (REST) API over HTTPS with JavaScript Object Notation (JSON) request and response payloads). However, other embodiments may use other data protocols, such as a Simple Object Access Protocol (SOAP) over HTTP application with Extensible Markup Language (XML), or a binary format transmitted directly over Transmission Control Protocol (TCP), provided the client 302 on a standard mobile provider can interact with the application server over SMS or the provider's data network.
In some embodiments, the user is initially authenticated between the client 302 and the application via a primary credential (e.g., an email address) and one or both of a fixed secondary credential (e.g., a password or passphrase) and a variable secondary credential (e.g., a time-based or event-based one-time password). Once initially authenticated, users (e.g., travelers) can be provided with a time-limited token that the client 302 uses to authenticate additional interactions with the international call system. In some embodiments, travelers are also provided a less strictly limited token (e.g., one that is not time limited) that is used in place of the original credentials to acquire new time-limited tokens once the current token expires. One example of such an authentication system is OAuth 2.0, which is an open standard for authorization flows for web applications, desktop applications, mobile phones, etc.
The application server 404 can include an API module 406 that comprises endpoints and business logic in a conventional architecture for facilitating operation of the international call system. In some embodiments, the application server 404 calls for a conventional web application server exposing an API over HTTPS and persisting information on users of the international call system, such as users' local numbers (i.e., phone numbers associated with SIMs installed in users' phones), users' contacts, and users' contact call routing bridges in a relational database (e.g., database 408).
The web application may reside on the same hardware as the database 408, or it may exist on one or more pieces of hardware dedicated to serving the web application with the database 408 on a separate machine (as shown here). In such embodiments, the database 408 may reside behind a load balancer that assigns incoming requests based on resource availability. However, a non-relational data store may be used to store user information and call routing information, provided this information can change in real time in response to call routing requests initiated by the client executing on the user's mobile phone. The application server 404 is the component that, among other things, determines how to route calls between the user (e.g., a traveler) and contact(s) with whom the user wishes to communicate.
One key component of the application server that enables it to realize the advantages described herein is its use of a connection logic service. As shown in
The application server can exploit a conventional architecture that includes external HTTP interfaces (labeled as HTTP endpoints) and business logic, which includes queries and models that utilize information stored in a database. The information could be used to determine call routing, manage users, and perform other logic-heavy activities, The connection logic service module can include components in one or both of these areas of the application, though in the case of both HTTP endpoints and business logic, the connection logic service module's components are typically not the sole component of these modules.
As shown here, the HTTP endpoints in the connection logic service module can communicate via native APIs with business logic in the connection logic service module. The HTTP endpoints, which may be wrapped in a thin routing layer, may dispatch inbound HTTP calls and return HTTP responses. The HTTP calls and/or the HTTP responses could be encoded using JSON or XML. The business logic can then communicate with a database to store and retrieve data via a protocol specific to that database, such as MySQL.
In one preferred embodiment, the connection logic service module includes multiple HTTP endpoints, InboundAction and Contact::UpdateAction, and one business logic query, BridgeQuery. Other embodiments may structure these endpoints and/or business logic differently, provided that the endpoints respond to bridge creation requests with a newly assigned bridge or an error stating that a bridge could not be assigned. InboundAction may receive an HTTP notification that includes the particulars of an inbound call from a voice services API module, including the phone number called and the phone number of the caller. InboundAction can parse the incoming HTTP request, query BridgeQuery to determine whether a bridge exists that matches the call information, and then either return XML over HTTP representing a “hang up” response to the voice services API module or return XML over HTTP directing the voice services API module to connect the call to a destination number. In some embodiments, the direction to form a connection includes parameters, such as a maximum call length.
Contact::UpdateAction can then receive an HTTP request from a client stating that a user wishes to activate a bridge for a contact or reset the access number to one that is local to the user's current location (potentially in addition to other updates to the user's or contact's information). Contact::UpdateAction can validate the user to ensure they have a local number to bridge from. In some embodiments, additional validations can be performed (e.g., the verification status of the active local number). Contact::UpdateAction then queries BridgeQuery for either a new or updated bridge to connect the user and the selected contact. If bridge creation fails, Contact::UpdateAction can send an HTTP response indicating the nature of the failure. However, if bridge creation succeeds, Contact::UpdateAction can send an HTTP response that includes information on the newly-created bridge (e.g., active local number, access number, callback number, or destination number).
The call processing system 702 also includes a VoIP services API module 706 that supports or performs services for facilitating the operation of the international call system. For example, the call processing system 702 may use a VoIP infrastructure-as-a-service system (e.g., Twilio) that makes it possible for inbound calls from mobile phones to notify a defined HTTP Uniform Resource Locator (URL) on an application server 708 with a pre-defined data payload. The application server 708 may then reply over HTTP to determine the call processing system's next course of action. In some embodiments, the call processing system 702 abstracts the PSTN-IP gateways 704a-b and the networks to which the gateways are linked to facilitate the realization of at least some of the advantages described herein. However, partially or fully self-hosted IP-based or time-division multiplexing (TDM) based call routing facilities, whether exposed via an HTTP API or otherwise, may alternatively be used, provided those facilities can communicate with the application server 708 to make routing decisions, and provided those facilities interconnect with the PSTN on both the user phone and contact phone sides.
As shown in
Phone applications 914a-b (also referred to as “phone apps”) executed by the mobile phones 906a-b can communicate with one another directly via the PSTN 908. As shown by
As noted above, the international call systems described above (and supporting infrastructure) can be used to make low-cost international calls. However, a user (e.g., a traveler) will typically have to initiate such a process using a client executing on a mobile phone.
As shown here, the application server and database are initially setup (step 1001). This step is preferably carried out prior to all other operational steps in order to expedite the execution of the remaining steps. Unlike the subsequent steps, which can be carried out by the user, this step may be carried out by a system administrator or an automated procedure.
The user can then set up an account with a calling service that manages the international calling system by performing a sequence of two steps. First, the user can create an account with the calling service (step 1002). For example, the user could input information (e.g., personal or financial information) into the client executing on the user's mobile phone. Second, the user can validate the SIM card installed within the mobile phone (step 1003). Note that a new user will typically be required to complete both of these steps, and, upon completion, the user will be able to make low-cost international calls from a single country. However, if the user has already carried out these steps but wants to configure the mobile phone to make low-cost international calls from another country, he can do so by repeating execution of the SIM validation step for the new country.
Once the user has completed the setup process, the user can add contacts to the client (step 1004). For example, the user could specify a phone number or some other identifier (e.g., an email address or name). The user can then place a low-cost international phone call to an individual listed within the contacts list by selecting that individual (step 1005).
As noted above, once a user sets up an account with the calling service and adds contacts, the user will be able to place low-cost international calls from a single country. The single country will be the one that is associated with the phone number, which, in turn, is associated with the conventional SIM card that is in the phone when the user completes the setup process. However, the user will not be able to make low-cost international calls from any other countries. In order to do so, the user must replace the SIM card that was in the mobile phone when it was initially set up with another SIM card corresponding to a phone number associated with a different country.
If the mobile phone is locked, the first step for the user is to unlock it. For example, the user can obtain a mobile phone (or some other computing device, such as a tablet or laptop) that is already carrier unlocked, or the user can unlock the mobile phone with the telecom carrier that issued the mobile phone (step 1101). This step can be skipped if the mobile phone is already unlocked. The user can remove the SIM card associated with the first country from the mobile phone (step 1102). A new (conventional) SIM card associated with the second country can then be installed into the mobile phone (step 1103). Afterwards, the user can validate the SIM card (i.e., complete step 1003 of
Note that the user will typically not need to re-complete the account creation process, nor will the user have to re-add the contacts previously entered into the client. Instead, the user will generally be able to continue to make low-cost international calls to those contact(s) that have already been added (though the user may also choose to add new contacts after installing the second SIM card). When the user travels to other countries, the process 1100 can be repeated by replacing the SIM card and repeating the SIM card validation step, which enables the international call system to make low-cost calls from the country associated with the currently-installed SIM card.
The user can then proceed to validate the SIM card, as shown by
When the user selects a phone number, the phone number and the name of the corresponding contact can be added to the list of contacts maintained by the international call system. As shown in
The process of adding contacts by a user who previously set up an account with the international call system for at least one SIM card is similar, but may not require the user experience the interfaces shown in
Database setup can be carried out when the international call system is initially configured and prior to making the database accessible to potential users (e.g., travelers). One of the purposes of database setup is to obtain a pool of phone numbers local to the countries the international call system supports. For example, a pool of domestic German numbers could be obtained to support Germany, while a pool of domestic French numbers could be obtained to support France. These numbers are referred to as “access numbers” and “callback numbers.” Access numbers are associated with the country in which the user is currently located, while a callback number is linked to the country that is associated with the SIM card installed within the contact's phone. As further described below, access numbers and callback numbers can be used in connection with a bridge data structure.
Setting up the database requires completion of at least two steps, as shown in
In some embodiments, the application server locally maintains a whitelist of acceptable countries for users and contacts, as well as a list of access numbers the application server may use as bridge endpoints, which are populated as part of the database setup process. For example, these access numbers may be represented as a list of internationally formatted (e.g., E.164) phone numbers that are grouped by call processing provider. Each number could also have its associated country precomputed as a performance measure, and the list of acceptable countries may be precomputed. Available country and phone number information could be used to validate requested local and contact numbers and to assign new bridges.
In some embodiments, the application server queries the associated call processing system for access numbers in real time (i.e., “on the fly”) rather than storing the list of available access numbers locally, However, such a configuration is typically accompanied by a performance penalty (in comparison to having a local lookup table). Such an implementation may require the access numbers and the callback numbers to be stored explicitly as part of the bridge, rather than maintaining references to those numbers elsewhere in the local data store.
The process starts when the user opens the client and provides a username and password (e.g., via the interface depicted in
After completing the account creation process, the client can prompt the user to enter the phone number associated with the SIM card installed within the mobile phone. Upon determining the user has entered the phone number, the client transmits the phone number to the application server. The API module residing on the application server can validate the phone number, for example, by checking its syntax and ensuring the syntax complies with one or more rules.
If the phone number is determined to be valid, the API module can do two things. First, the API module (via the application server) transmits a validation code to the user's mobile phone. For example, this could be accomplished by sending an SMS message to a text messaging application executing on the mobile phone, as illustrated in
Accordingly, the process begins when the user taps an “Add Contact” icon. The client can then access and present the address book stored on the mobile phone. This may take the form of launching the native contacts application, though other variations are possible. The contacts application displays to the user a list of contacts with their phone numbers. As shown here, the user can select a contact and one of the phone number(s) linked to the contact, and the contact application transmits the name of the contact and the selected phone number (as well as possible additional information about the contact) to the client. The client then passes this information to the application server, where the API module can create a resource for the contact and store the resource in a database communicatively coupled to the application server. When the API module receives an acknowledgement from the database that the contact resource has been successfully stored, the API module can transmit a contact identifier associated with the contact resource to the client.
As shown in
As noted above, when the user adds a contact, a bridge data structure can be created that is used to place a low-cost international call.
The destination number is the number for the contact that is the analog of the active local for the user. That is, the destination number is the number associated with the contact's SIM card and is typically associated with the contact's home country.
The access number is a number associated with the country in which the user is currently located. For example, if the user is traveling in a foreign country, the access number will be a number associated with that country. When the user makes a call to the contact, the access number is the number that is actually dialed. As a result, when the user calls the contact, the user is making a (low-cost) local call rather than an (expensive) long-distance call. Metadata associated with the access number can include a code that identifies the country associated with the access number.
The callback number is a number associated with the same country that the contact's SIM card number is associated with. When the user calls the contact, the callback number is displayed to the contact as a caller identifier (“caller ID”) for the user. Thus, if the contact attempts to call the user back via the caller ID after the user has called the contact, the contact will be making a (low-cost) local call.
The bridge object shown here represents the bridge itself and has a primary key (id), a many-to-one relationship with the user object (via user_id), two many-to-one relationships with the access_number object (via access_number_id and callback_access_number_id), and a destination_number, which can include an E.164-formatted phone number. The access_number object represents a phone number from a voice service provider that the international call system may use as either an access number or a callback number (or as both) for any number of bridges. The access_number object can include a primary key (id), an external_id key (representing the number's identifier in the voice service provider's system), a source identifier (to differentiate between multiple voice providers), a number (in E.164 format), and a country identifier (e.g., a two-letter ISO code for easier bridge calculations). The contact object represents a contact and can include a primary key (id), a many-to-one relationship with a user object (via user_id), a reference to an associated bridge object if one exists (via bridge_id), a number (in E.164 format), and a country identifier (e.g., a two-letter ISO code for easier bridge calculations).
The user object represents a user of the international call system and can include a primary key (id), the user's email, a cryptographic hash of the user's password (password_hash), and a reference to the user's currently active local_number object if one exists (active_local_number_id). The local_number object represents a phone number associated with the user, which may be actively in use, active within the application, verified via text message, or a mix of multiple or none of the three. The local_number object can include a primary key (id), a many-to-one relationship with a user object (via user_id), a number (in E.164 format), a country identifier (e.g., a two-letter ISO code for easier bridge calculations), and a flag noting whether the number has been verified. The local_number_verify_code object represents a verification code sent to a user's local number by text message to verify ownership of the local number and can include a reference to the user object (via user_id), a reference to the local number object (via local_number_id), and the verification code itself.
The international call system (and, more specifically, the connection logic service module) first checks to see whether the user has provided a phone number associated with the currently-active SIM card installed within the user's mobile phone (step 2). If there is none, an error is triggered (step 3). In some embodiments, verification of the phone number by successfully entering a code sent in a text message to that number is a precondition for a local phone number being marked as active.
If the user has an active local number, the international call system then compares the bridge endpoints (i.e., the user's local number and the contact's destination number) to determine whether a bridge connects those endpoints (step 4). If an exact match already exists, the international call system can check to see whether the user requested that the bridge be reset (step 5). In such a scenario, the international call system attempts to update the access number for the existing bridge (step 6, and further shown in
However, if an exact match is not found, the international call system can remove any bridges associated with the contact (step 8). The international call system then attempts to find access numbers suitable for the bridge (step 9, and further shown in
When the international call system finds available access numbers and callback numbers, the international call system can persist the new bridge to the database (step 12), update contact(s) with the same destination number to use the new bridge (step 13), including the contact for which the bridge request was requested, and return the newly-created bridge (step 14).
However, if the bridge access number and the user's active local number do not belong to the same country, the international call system attempts to find one or more access numbers suitable for the bridge (step 19, and further shown in
In some embodiments, a mapping representing local groups of area codes (usually within a province) is consulted (step 37), and the phone number(s) local to the user's SIM card are prioritized above other potential access numbers (step 38). Such a technique could be effected if the country is, for example, Canada. In either case, if the filtered list of numbers has a nonzero length (step 39), the filtered list is returned to the user (also referred to as “the caller”) (step 41). If no numbers remain post-filtering, an exception could be thrown (step 40) and the bridge is not created. Note that other country-specific prioritizations or filters may be added to further optimize access number assignment.
In some embodiments, a mapping representing local groups of area codes (usually within a province) is consulted and the phone number(s) local to the contact destination number are prioritized above other potential callback numbers (step 47). Such a technique could be effected if the country is, for example, Canada. In either case, if the filtered list of numbers has a nonzero length (step 48), the filtered list is returned to the user (also referred to as “the caller”) (step 50). If no numbers remain post-filtering, an exception could be thrown (step 49) and the bridge is not created.
It will be apparent to one of ordinary skill in the art that other country-specific or region-specific prioritizations or filters may be added to further optimize callback number assignment, and that the prioritization described for provinces and Canada is one of many possible that could be employed for other countries or regions.
As noted above, one of the central capabilities of the international call system is enabling users traveling in foreign countries to make calls to contacts in other countries (and, in some embodiments, allowing those contacts to return calls to the users) without incurring the high costs typically associated with international calls. The process for making such calls is described below. It will be apparent to one of ordinary skill in the art that the same or similar processes can be used in a variety of other situations as well.
The VoIP services API module can then send a request to the application server (and, more specifically, to a connection logic service module) to obtain data needed to complete the call (step 5). In response, the application server returns data that may include the destination number for the contact and a callback number for the user (step 6). The VoIP services API module next transmits a message over the IP network to a PSTN-IP gateway to place a call to the destination number (step 7). In some embodiments, the message is accompanied by a request to display the callback number to the contact as a caller ID for the user. The PST-IP gateway makes the call to the contact's phone, which could be handled by a native phone application residing on the contact's mobile phone (step 8). Responsive to receiving the call via, for example, the native phone application, the contact can speak with the user (step 9).
But if the request is successfully authenticated, the number called (which is typically owned by the voice service provider) and the number making the call (which is owned by the user or contact) are parsed from the request body, and then passed as parameters to a query that returns a bridge. The query operations, which take the aforementioned numbers as parameters, are further detailed below with respect to
However, if a bridge is found, the numbers represented by the bridge can be compared with the caller's number and the called number parsed from the request body. If the call is determined to be a user-to-contact call (e.g., the called number is the bridge's access number), then the international call system can return an HTTP response indicating that the call should be connected with the contact's destination number, while displaying the bridge's callback number on caller ID. Otherwise, the call is determined to be from a contact to a user, and the international call system returns an HTTP response indicating that the call should be connected with the user's currently active local number, while displaying the bridge's access number on caller ID.
The bridge retrieval process could be partially or entirely carried out by the connection logic service module as part of the processing it performs in response to a request from the VoIP services API module when the user calls the contact or the contact calls the user. The international call system (and, more specifically, the connection logic service module) initially resolves access number references associated with existing bridges to concrete E.164-notated phone numbers (step 2). Next, the international call system similarly resolves callback numbers (step 3). User references on each bridge could be resolved to the resources representing that user's currently active local SIM card (step 4), which may be in turn resolved to the E.164-notated phone numbers associated with those SIM cards (e.g., +12125551212) (step 5). At this point, each potential bridge can include four E.164-notated phone numbers representing the call path for that bridge, and matching the incoming call data to the appropriate bridge can be attempted.
Next, the international call system iterates through the plurality of existing bridges (step 6), continuing until the international call system either finds a matching bridge or runs out of potential matches, in which case the query returns null (step 7). For each potential bridge, a match includes either a user's local SIM number matching the inbound caller ID (step 8) and the called number matching the bridge's access number (step 9), or the contact's destination number matching the inbound caller ID (step 10) and the called number matching the bridge's callback number (step 11). If a matching bridge is found using these criteria, the matching bridge is immediately returned and the query terminates (step 12).
One advantageous feature enabled by some embodiments described herein is the ability to make low-cost international calls from users to contacts and from contacts back to users. Although the client may be required for users to initially call contacts, the client may not be necessary for contacts to call back users. Further, once a user has set up a bridge by adding a contact using the client, the user may be able to subsequently call the contact without using the client.
After the VoIP services API module has received the data, it transmits a message over the network to the PSTN-IP gateway to place a call to the active local number and display the access number to the user as the caller ID for the contact (step 6). The PSTN-IP gateway then makes the call to the user's mobile phone, which is handled by the phone application residing on the user's mobile phone (step 7). Responsive to receiving the call via the phone application, the user can initiate the call and speak with the contact (step 8).
Note that the process by which the user makes a call to the contact and the process by which the contact makes a call to the user are very similar. Among the differences are that (1) no client is needed for a contact to call back the user, and (2) the call from the user involves calling the destination number and displaying the callback number as the caller ID, while the call from the contact involves calling the active local number and displaying the access number as the caller ID.
Numerous exemplary scenarios are described below that further illustrate various principles and benefits of the embodiments described herein. It will be apparent to one of ordinary skill in the art that although specific details of the operation of the international call system are presented, the principles of the international call system provide for a large number of alternative uses.
A. Primary Use Case
A traveler knowing they're traveling abroad obtains a carrier-unlocked mobile phone and acquires a SIM card local to a destination country. After arriving at the destination country, the traveler puts the local SIM card into the carrier-unlocked mobile phone. The traveler then validates the local SIM card with the international call system by interfacing with the client (e.g., a mobile application) that resides on the mobile phone.
More specifically, the traveler can validate the local SIM card by entering the phone number assigned to the local SIM card into the client. The traveler will then receive a PIN code delivered via text message to the phone number the traveler entered as belonging to the local SIM card. The traveler can then enter the PIN code into the client when prompted in order to complete the validation process.
The traveler then adds one or more contacts using the client supported by the international call system by tapping a button labeled “+” in the top right of the screen, selecting one of the contacts via a contact selection tool (e.g., contacts may be populated using the native contacts application residing on the mobile phone), and then selecting a specific phone number to use for that contact.
The traveler can dial the contact by tapping the name of the contact on the home screen of the client. The traveler may repeat the process to add as many contacts as desired and call those contacts at any point in time. Moreover, contacts may be able to call the traveler back at any time using the number they received a call from the traveler on.
Upon returning home, the traveler may wish to stay in touch with a foreign friend made during his travels. The traveler could validate the SIM card from the home country, add the foreign contact through the client, and be able to dial or be dialed at local rates for both parties.
B. Secondary Use Case 1
An expatriate downloads the client (e.g., as a mobile application) for the international call system, and then validates a local SIM card by entering the phone number assigned to the local SIM card into the client. The expatriate will then receive a PIN code sent via text message to the number entered as belonging to the local SIM card. The expatriate then enters the PIN code into the client when prompted to complete the validation process.
The expatriate then adds one or more contacts using the client supported by the international call system by tapping a button labeled “+” in the top right of the screen, selecting one of the contacts via a contact selection tool (e.g., contacts may be populated by the native contacts application residing on the mobile phone), and then selecting a specific phone number to use for that contact.
The expatriate can dial the contact by tapping the name of the contact on the home screen of the client. The expatriate may repeat the process to add as many contacts as desired and call those contacts at any point in time. Moreover, contacts may be able to call the expatriate back at any time using the number they received a call from the expatriate on.
When the expatriate returns to his country of origin, the expatriate can swap the SIM card for a local one, validate the new local SIM card using the client, and cheaply call (and be called by) contacts in their adopted nation(s).
C. Secondary Use Case 2
A child of immigrant parents wishes to stay in touch with his grandmother abroad. The grandchild logs into a client managed by an international call system and validates a home phone number via an automated confirmation call that delivers a PIN code via voice message. The grandchild enters the PIN code into the client (e.g., a web-based interface or application) to complete the phone number validation process.
The grandchild then adds the grandmother as a contact by clicking an icon labeled “+” on the client interface and entering the grandmother's phone number with a country code (e.g., in E.164 format). Upon entering the grandmother as a contact, the client displays both the phone number local to the grandchild that he can use to dial the grandmother, as well as the number local to the grandmother that she can use to call the grandchild.
The grandchild could then email this phone number to the grandmother, who promptly calls the grandchild and may proceed to call him daily. The grandchild is also able to return the grandmother's calls instantly whenever the calls are disconnected. The grandmother (or the grandchild) could create similar call bridges for any other grandchildren, though each grandchild will typically be associated with a separate user account for the international call system.
D. Secondary Use Case 3
A goods importer seeks to maintain a local presence in the country from which the goods are imported. The importer logs into the client and validates a business phone number via an automated confirmation call that delivers a PIN code via a voice message. The importer enters the PIN code into the client to complete the phone number validation process.
The importer can then add a supplier as a contact by clicking an icon labeled “+” on the client interface and entering the supplier's phone number with a country code. Upon entering the supplier as a contact, the client can display both the number local to the importer that can be used to dial the supplier and the number local to the supplier that can be used to dial the importer. The importer then emails one or both of these numbers to the supplier so that they can maintain a normal back and forth calling relationship.
When the importer visits the supplier's country, the importer can swap the SIM card for a local one, validate the new local SIM card, and then use the international call system to appear to still be using the same number previously used to call the supplier from the importer's country.
E. Secondary Use Case 4
A non-profit specializing in humanitarian relief in environmental crises seeks to create call bridges for those affected in an emergency. The non-profit creates a website for gathering the phone numbers of loved ones in peril from their relatives, as well as the relatives' phone numbers. Through the API module residing on the application server of the international call system, bridge numbers can be generated for each side and both parties can receive emails that include contact information for the bridge. Additionally, the international call system could create bridge numbers for relief effort workers and/or residents in peril. Those affected by the crises are now able to call and be called by loved ones, as are those orchestrating the relief efforts.
F. Secondary Use Case 5
A Brazilian resident wishes to call another Brazilian resident living in a different Brazilian province. Because long distance charges apply to Brazilians in inter-province calls, dialing a local provincial number will save on long distance fees.
The Brazilian can download the client (e.g., a mobile application) and then validate the local SIM card installed within the Brazilian's mobile phone through the client. The Brazilian then adds contacts in other countries, as well as other Brazilian provinces, via the client. The Brazilian can call the contacts, and the contacts can call the Brazilian back, with the international call system enabling a local call for both parties regardless of their country or province.
In various embodiments, the processing system 2400 operates as a standalone device, although the processing system 2400 may be connected (e.g., wired or wirelessly) to other machines. In a networked deployment, the processing system 2400 may operate in the capacity of a server or a client machine in a client-server network environment, or as a peer machine in a peer-to-peer (or distributed) network environment.
The processing system 2400 may be a server computer, a client computer, a personal computer (PC), a user device, a tablet (e.g., an Apple iPad), a laptop computer, a personal digital assistant (PDA), a mobile phone (e.g., an Apple iPhone), a processor, a telephone, a web appliance, a network router, switch, or bridge, a console, a hand-held console, a (hand-held) gaming device, a music player, a network-connected wearable device (e.g., a watch), or any machine capable of executing a set of instructions (sequential or otherwise) that specify actions to be taken by the computing system.
While the main memory 2406, non-volatile memory 2410, and storage medium 2426 (also called a “machine-readable medium) are shown to be a single medium, the term “machine-readable medium” and “storage medium” should be taken to include a single medium or multiple media (e.g., a centralized or distributed database, and/or associated caches and servers) that store one or more sets of instructions 2428. The term “machine-readable medium” and “storage medium” shall also be taken to include any medium that is capable of storing, encoding, or carrying a set of instructions for execution by the computing system and that cause the computing system to perform any one or more of the methodologies of the presently disclosed embodiments.
In general, the routines executed to implement the embodiments of the disclosure, may be implemented as part of an operating system or a specific application, component, program, object, module or sequence of instructions referred to as “computer programs.” The computer programs typically comprise one or more instructions (e.g., instructions 2404, 2408, 2428) set at various times in various memory and storage devices in a computer, and that, when read and executed by one or more processing units or processors 2402, cause the processing system 2400 to perform operations to execute elements involving the various aspects of the disclosure.
Moreover, while embodiments have been described in the context of fully functioning computers and computer systems, those skilled in the art will appreciate that the various embodiments are capable of being distributed as a program product in a variety of forms, and that the disclosure applies equally regardless of the particular type of machine or computer-readable media used to actually effect the distribution.
Further examples of machine-readable storage media, machine-readable media, or computer-readable (storage) media include, but are not limited to, recordable type media such as volatile and non-volatile memory devices 2410, floppy and other removable disks, hard disk drives, optical disks (e.g., Compact Disk Read-Only Memory (CD ROMS), Digital Versatile Disks, (DVDs)), and transmission type media such as digital and analog communication links.
The network adapter 2412 enables the computing system 2400 to mediate data in a network 2414 with an entity that is external to the computing device 2400, through any known and/or convenient communications protocol supported by the processing system 2400 and the external entity. The network adapter 2412 can include one or more of a network adaptor card, a wireless network interface card, a router, an access point, a wireless router, a switch, a multilayer switch, a protocol converter, a gateway, a bridge, bridge router, a hub, a digital media receiver, and/or a repeater.
The network adapter 2412 can include a firewall that can, in some embodiments, govern and/or manage permission to access/proxy data in a computer network, and track varying levels of trust between different machines and/or applications. The firewall can be any number of modules having any combination of hardware and/or software components able to enforce a predetermined set of access rights between a particular set of machines and applications, machines and machines, and/or applications and applications, for example, to regulate the flow of traffic and resource sharing between these varying entities. The firewall may additionally manage and/or have access to an access control list which details permissions including for example, the access and operation rights of an object by an individual, a machine, and/or an application, and the circumstances under which the permission rights stand.
Other network security functions can be performed or included in the functions of the firewall, can include, but are not limited to, intrusion-prevention, intrusion detection, next-generation firewall, personal firewall, etc.
As indicated above, the techniques introduced here implemented by, for example, programmable circuitry (e.g., one or more microprocessors), programmed with software and/or firmware, entirely in special-purpose hardwired (i.e., non-programmable) circuitry, or in a combination or such forms. Special-purpose circuitry can be in the form of, for example, one or more application-specific integrated circuits (ASICs), programmable logic devices (PLDs), field-programmable gate arrays (FPGAs), etc.
Given a contact, removeFromContact( ) disassociates any bridge currently associated with that contact (if one exists), and decommissions the bridge entirely if that contact was the only one using the bridge (as opposed to two contacts with the same user and destination number sharing a bridge). updateAccessNumber( ) attempts to realign a bridge's access number to the user's currently active local number, as described in
The foregoing description of various embodiments of the claimed subject matter has been provided for the purposes of illustration and description. It is not intended to be exhaustive or to limit the claimed subject matter to the precise forms disclosed. Many modifications and variations will be apparent to one skilled in the art. Embodiments were chosen and described in order to best describe the principles of the invention and its practical applications, thereby enabling others skilled in the relevant art to understand the claimed subject matter, the various embodiments, and the various modifications that are suited to the particular uses contemplated.
Although the above Detailed Description describes certain embodiments and the best mode contemplated, no matter how detailed the above appears in text, the embodiments can be practiced in many ways. Details of the systems and methods may vary considerably in their implementation details, while still being encompassed by the specification. As noted above, particular terminology used when describing certain features or aspects of various embodiments should not be taken to imply that the terminology is being redefined herein to be restricted to any specific characteristics, features, or aspects of the invention with which that terminology is associated. In general, the terms used in the following claims should not be construed to limit the invention to the specific embodiments disclosed in the specification, unless those terms are explicitly defined herein. Accordingly, the actual scope of the invention encompasses not only the disclosed embodiments, but also all equivalent ways of practicing or implementing the embodiments under the claims.
The language used in the specification has been principally selected for readability and instructional purposes, and it may not have been selected to delineate or circumscribe the inventive subject matter. It is therefore intended that the scope of the invention be limited not by this Detailed Description, but rather by any claims that issue on an application based hereon. Accordingly, the disclosure of various embodiments is intended to be illustrative, but not limiting, of the scope of the embodiments, which is set forth in the following claims.
This application claims the benefit of U.S. Provisional Application Ser. No. 62/199,201 filed Jul. 30, 2016, and titled “System and Method for Making Low-Cost International Phone Calls,” the entirety of which is incorporated herein by this reference thereto.
Number | Date | Country | |
---|---|---|---|
62199201 | Jul 2015 | US |