Search code examples
arduinogsmat-commandphone-callsim800

How can I start a conference call on GSM network?


I need to make a conference voice call on GSM network.

The maximum I have seen in the datasheet is that the command AT+CLCC can report a list of current calls of ME automatically when the current call status changes.

How can I make conference calls with a SIM800L? I have 2 phone numbers for call.


Solution

  • The key command for the feature you are asking for is AT+CHLD (Call Holding Services). It is important to say that this is well known GSM Supplementary Service, and since AT+CHLD is a standard command it is a feature that is likely to be supported by all cellular modems, not only SIM800.

    The main constraints that any user must know are:

    1. It is a service strictly related to VOICE calls
    2. The network operator must support this service as well

    ETSI Specifications about multi-party calls

    Though it may appear as a boring introduction, we need to build our procedure on solid basis. Feel free to skip this paragraph if you are just interested in the AT commands sequence.

    ETSI specification TS 127.007 v15.3.0 describes its behaviour at chapter 7.13: "Call related supplementary services +CHLD":

    This command allows the control of the following call related services:

    • a call can be temporarily disconnected from the MT but the connection is retained by the network;
    • multiparty conversation (conference calls);
    • the served subscriber who has two calls (one held and the other either active or alerting) can connect the other parties and release the served subscriber's own connection.

    A further document related to MPTY calls is then referenced : 3GPP TS 22.084 (that can be found here. Another interesting source is ETSI 300 954 which states

    The served mobile subscriber A may initiate an active MultiParty call from an active call C and a held call B.

    This means that we can obtain a conference call just by adding held calls to active calls.


    AT Commands procedure

    From the previous documents we can deduce that the following steps will setup a multi-party call:

    1. Start a voice call with one of the parties by issuing ATD<number>;, or answer to an incoming call with ATA
    2. Put on hold the first call by issuing AT+CHLD=2 (well supported by your SIM800, that for +CHLD=2 states "Place all active calls on hold (if any) and accept the other (held or waiting) call.").
    3. Start a call with the third party
    4. Start the multiparty by issuing AT+CHLD=3 (well supported by your SIM800, that for +CHLD=3 states "adds an held call to the conversation.").

    About AT+CLCC

    The command you mentioned in the question is not directly responsible for starting a multiparty conversation, but it is someway related to it. In fact, it is able to list the status of all the active calls.

    Execution command AT+CLCC provides the following answer:

    [+CLCC: <id1>,<dir>,<stat>,<mode>,<mpty>[,<number>,<type >,<alphaID>]
    [<CR><LF>+CLCC: <id2>,<dir>,<stat>,<mode>,<mpty>[,<number>,<type>,<alphaID>]
    [...]]]
    OK 
    

    We will linger on just two relevant parameters:

    1. <id N> is the ID of the Nth call. It is relevant because many options of +CHLD command allow to selective hold/release an X call, and this ID it is required in order to specify X in the command. All these options, not mentioned in the this answer, can be useful in order to select correctly the call to be added in the multiparty conversation.
    2. <mpty> is the multiparty call flag, and if it is set to 1 it means that the call is one of multiparty (conference) call parties.