Script de exemplo do WebHook

Crie um script com o seguinte conteúdo e forneça seu URL como WebHook.

definir("Chave API", "Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

experimentar {
    E se (isset($_SERVER["HTTP_X_SG_SIGNATURE"])) {
        $hash = base64_encode(hash_hmac('Sha256', $_POST["Mensagens"], Chave API, falso));
        E se ($hash === $_SERVER["HTTP_X_SG_SIGNATURE"]) {
            $messages = json_decode($_POST["Mensagens"], falso);

            / ** * Por exemplo: - * $messages = [* 0 => [* "ID" => "1", * "number" => "+911234567890", * "message" => "Esta é uma mensagem de teste . ", *" deviceID "=>" 1 ", *" simSlot "=>" 0 ", *" userID "=>" 1 ", *" status "=>" Recebido ", *" sentDate "=>" 2018-10-20T00: 00: 00 + 02: 00 ", *" deliverDate "=>" 2018-10-20T00: 00: 00 + 02: 00 "*" groupID "=> null *] *] *] senDate representa a data e a hora em que a mensagem foi recebida no dispositivo. * deliverDate representa a data e a hora em que a mensagem foi recebida pelo servidor. * /

            para cada ($messages Como $message) {
                E se(strtolower($message["Mensagem"]) === "Oi") {
                    // Responda à mensagem usando a API ou execute alguns comandos. As possibilidades são ilimitadas.
                }
            }
        } outro {
            http_response_code(401);
            error_log("Assinatura não corresponde!");
        }
    } outro {
        http_response_code(400);
        error_log("Assinatura não encontrada!");
    }
} pegar (Exceção $e) {
    error_log($e->getMessage());
}

Integração PHP

Inclua o seguinte código no seu arquivo PHP para começar a enviar mensagens.

definir("SERVIDOR", "Https://sms.sendapp.live");
definir("Chave API", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

definir("USE_SPECIFIED", 0);
definir("USE_ALL_DEVICES", 1);
definir("USE_ALL_SIMS", 2);

/ ** * @param string $number O número do celular para o qual você deseja enviar a mensagem. * @param string $message A mensagem que você deseja enviar. * @param int | string $device O ID do dispositivo que você deseja usar para enviar esta mensagem. * @param int $schedule Defina como carimbo de data / hora quando você deseja enviar esta mensagem. * * @return array Retorna O array que contém informações sobre a mensagem. * @throws Exception Se houver um erro ao enviar uma mensagem. * /
função sendSingleMessage($number, $message, $device = 0, $schedule = nulo)
{
    $url = SERVIDOR . "/Services/send.php";
    $postData = matriz('Número' => $number, 'Mensagem' => $message, 'Horários' => $schedule, 'Chave' => Chave API, 'Dispositivos' => $device);
    Retorna enviar pedido($url, $postData)["Mensagens"][0];
}

/ ** * @param array $messages A matriz que contém números e mensagens. * @param int Opção 1TP2 Defina como USE_SPECIFIED se desejar usar dispositivos e SIMs especificados no argumento de dispositivos. * Defina como USE_ALL_DEVICES se desejar usar todos os dispositivos disponíveis e o SIM padrão para enviar mensagens. * Defina como USE_ALL_SIMS se desejar usar todos os dispositivos disponíveis e todos os seus SIMs para enviar mensagens. * @param array $devices A matriz de ID dos dispositivos que você deseja usar para enviar essas mensagens. * @param int $schedule Defina como carimbo de data / hora quando você deseja enviar essas mensagens. * @param bool $useRandomDevice Defina como true se quiser enviar mensagens usando apenas um dispositivo aleatório dos dispositivos selecionados. * * @return array Retorna O array que contém as mensagens. * Por exemplo: - * [* 0 => [* "ID" => "1", * "number" => "+911234567890", * "message" => "Esta é uma mensagem de teste.", * " deviceID "=>" 1 ", *" simSlot "=>" 0 ", *" userID "=>" 1 ", *" status "=>" Pendente ", *" sentDate "=>" 2018-10-20T00 : 00: 00 + 02: 00 ", *" deliverDate "=> null *" groupID "=>") V5LxqyBMEbQrl9 * J$5bb4c03e8a07b7.621923871 "*] *] * @throws Exceção Se houver um erro ao enviar mensagens. * /
função Enviar mensagens($messages, $option = USE_SPECIFIED, $dices = [], $schedule = nulo, $useRandomDevice = falso)
{
    $url = SERVIDOR . "/Services/send.php";
    $postData = [
        'Mensagens' => json_encode($messages),
        'Horários' => $schedule,
        'Chave' => Chave API,
        'Dispositivos' => json_encode($dices),
        'Opção' => $option,
        'UseRandomDevice' => $useRandomDevice
    ];
    Retorna enviar pedido($url, $postData)["Mensagens"];
}

/ ** * @param int $listID O ID da lista de contatos para onde você deseja enviar esta mensagem. * @param string $message A mensagem que você deseja enviar. * @param int Opção 1TP2 Defina como USE_SPECIFIED se desejar usar dispositivos e SIMs especificados no argumento de dispositivos. * Defina como USE_ALL_DEVICES se desejar usar todos os dispositivos disponíveis e o SIM padrão para enviar mensagens. * Defina como USE_ALL_SIMS se desejar usar todos os dispositivos disponíveis e todos os seus SIMs para enviar mensagens. * @param array $devices A matriz de ID dos dispositivos que você deseja usar para enviar a mensagem. * @param int $schedule Defina como carimbo de data / hora quando você deseja enviar esta mensagem. * * @return array Retorna O array que contém as mensagens. * @throws Exception Se houver um erro ao enviar mensagens. * /
função sendMessageToContactsList($listID, $message, $option = USE_SPECIFIED, $dices = [], $schedule = nulo)
{
    $url = SERVIDOR . "/Services/send.php";
    $postData = [
        'Listid' => $listID,
        'Mensagem' => $message,
        'Horários' => $schedule,
        'Chave' => Chave API,
        'Dispositivos' => json_encode($dices),
        'Opção' => $option
    ];
    Retorna enviar pedido($url, $postData)["Mensagens"];
}

/ ** * @param int $id O ID da mensagem que você deseja recuperar. * * @return array A matriz que contém uma mensagem. * @throws Exception Se houver um erro ao receber uma mensagem. * /
função getMessageByID($id) {
    $url = SERVIDOR . "/Services/read-messages.php";
    $postData = [
        'Chave' => Chave API,
        'Eu iria' => $id
    ];
    Retorna enviar pedido($url, $postData)["Mensagens"][0];
}

/ ** * @param string $groupID O ID do grupo de mensagens que você deseja recuperar. * * @return array A matriz que contém as mensagens. * @throws Exception Se houver um erro ao obter mensagens. * /
função getMessagesByGroupID($groupID) {
    $url = SERVIDOR . "/Services/read-messages.php";
    $postData = [
        'Chave' => Chave API,
        'GroupId' => $groupID
    ];
    Retorna enviar pedido($url, $postData)["Mensagens"];
}

/ ** * @param string $status O status das mensagens que você deseja recuperar. * @param int $startTimestamp Procure mensagens enviadas ou recebidas após esse período. * @param int $endTimestamp Pesquise mensagens enviadas ou recebidas antes desse período. * * @return array A matriz que contém as mensagens. * @throws Exception Se houver um erro ao obter mensagens. * /
função getMessagesByStatus($status, $startTimestamp, $endTimestamp)
{
    $url = SERVIDOR . "/Services/read-messages.php";
    $postData = [
        'Chave' => Chave API,
        'status' => $status,
        'StartTimestamp' => $startTimestamp,
        'EndTimestamp' => $endTimestamp
    ];
    Retorna enviar pedido($url, $postData)["Mensagens"];
}

/ ** * @param int $listID O ID da lista de contatos em que você deseja adicionar esse contato. * @param string $number O número do celular do contato. * @param string $name O nome do contato. * @param bool $resubscribe Defina-o como true se você deseja se inscrever novamente neste contato, se ele já existir. * * @return array A matriz que contém um contato adicionado recentemente. * @throws Exception Se houver um erro ao adicionar um novo contato. * /
função adicionar contato($listID, $number, $name = nulo, 1TP2Assinatura = falso)
{
    $url = SERVIDOR . "/Services/manage-contacts.php";
    $postData = [
        'Chave' => Chave API,
        'Listid' => $listID,
        'Número' => $number,
        'Nome' => $name,
        'Reinscrever-se' => 1TP2Assinatura
    ];
    Retorna enviar pedido($url, $postData)["Contato"];
}

/ ** * @param int $listID O ID da lista de contatos da qual você deseja cancelar a inscrição deste contato. * @param string $number O número do celular do contato. * * @return array A matriz que contém o contato não assinado. * @throws Exception Se houver um erro ao definir a assinatura como false. * /
função unsubscribeContact($listID, $number)
{
    $url = SERVIDOR . "/Services/manage-contacts.php";
    $postData = [
        'Chave' => Chave API,
        'Listid' => $listID,
        'Número' => $number,
        'Cancelar subscrição' => falso
    ];
    Retorna enviar pedido($url, $postData)["Contato"];
}

/ ** * @return string A quantidade de créditos de mensagens restantes. * @throws Exception Se houver um erro ao obter créditos da mensagem. * /
função getBalance()
{
    $url = SERVIDOR . "/Services/send.php";
    $postData = [
        'Chave' => Chave API,
    ];
    $credits = enviar pedido($url, $postData)["Créditos"];
    Retorna é nulo($credits) ? "Ilimitado" : $credits;
}

função enviar pedido($url, $postData)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, falso);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, falso);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    E se (curl_errno($ch)) {
        lançar Novo Exceção(curl_error($ch));
    }
    curl_close($ch);
    E se ($httpCode == 200) {
        $json = json_decode($response, falso);
        E se ($json == falso) {
            E se (vazio($response)) {
                lançar Novo Exceção("Dados ausentes na solicitação. Forneça todas as informações necessárias para enviar mensagens.");
            } outro {
                lançar Novo Exceção($response);
            }
        } outro {
            E se ($json["Sucesso"]) {
                Retorna $json["encontro"];
            } outro {
                lançar Novo Exceção($json["Erro"]["Mensagem"]);
            }
        }
    } outro {
        lançar Novo Exceção("Código de erro HTTP: {$httpCode}");
    }
}

Enviar mensagem única

experimentar {
    // Envie uma mensagem usando o dispositivo principal.
    $msg = sendSingleMessage("+911234567890", "Este é um teste de mensagem única.");

    // Envie uma mensagem usando o ID do dispositivo 1.
    $msg = sendSingleMessage("+911234567890", "Este é um teste de mensagem única.", 1);
	
    // Envie uma mensagem usando o SIM no slot 1 da ID do dispositivo 1 (representado como "1 | 0").
    // O slot do SIM é um índice; portanto, o índice do primeiro SIM é 0 e o índice do segundo SIM é 1.
    // Neste exemplo, 1 representa o ID do dispositivo e 0 representa o índice do slot SIM.
    $msg = sendSingleMessage("+911234567890", "Este é um teste de mensagem única.", "1|0");

    // Enviar mensagem agendada usando o dispositivo principal.
    $msg = sendSingleMessage("+911234567890", "Este é um teste do recurso de agendamento.", nulo, strtotime("+2 minutos"));
    print_r($msg);

    eco "Enviou uma mensagem com sucesso.";
} pegar (Exceção $e) {
    eco $e->getMessage();
}

Enviar mensagens em massa

$messages = matriz();

para ($i = 1; $i <= 12; $i++) {
    array_push($messages,
        [
            "Número" => "+911234567890",
            "Mensagem" => "Este é um teste # {$i} da versão PHP. Testando a funcionalidade de mensagens em massa."
        ]);
}

experimentar {
    // Envie mensagens usando o dispositivo principal.
    Enviar mensagens($messages);

    // Envie mensagens usando o SIM padrão de todos os dispositivos disponíveis. As mensagens serão divididas entre todos os dispositivos.
    Enviar mensagens($messages, USE_ALL_DEVICES);
	
    // Envie mensagens usando todos os SIMs de todos os dispositivos disponíveis. As mensagens serão divididas entre todos os SIMs.
    Enviar mensagens($messages, USE_ALL_SIMS);

    // Envie mensagens usando apenas dispositivos especificados. As mensagens serão divididas entre dispositivos ou SIMs que você especificou.
    // Se você enviar 12 mensagens usando esse código, 4 mensagens serão enviadas pelo ID do dispositivo 1, outras 4 pelo SIM no slot 1 do 
    // ID do dispositivo 2 (representado como "2 | 0") e os 4 restantes pelo SIM no slot 2 do ID do dispositivo 2 (representado como "2 | 1").
    Enviar mensagens($messages, USE_SPECIFIED, [1, "2|0", "2|1"]);
    
    // Envia mensagens dentro do cronograma usando o dispositivo principal.
    Enviar mensagens($messages, nulo, nulo, strtotime("+2 minutos"));
    
    // Envia uma mensagem para os contatos na lista de contatos com o ID 1.
    sendMessageToContactsList(1, "Teste", USE_SPECIFIED, 1);
    
    // Envia uma mensagem agendada para os contatos na lista de contatos com o ID 1.
    $msgs = sendMessageToContactsList(1, "Teste", nulo, nulo, strtotime("+2 minutos"));
    
    print_r($msgs);

    eco "Enviou mensagens em massa com sucesso.";
} pegar (Exceção $e) {
    eco $e->getMessage();
}

Obter créditos de mensagem restantes

experimentar {
    $credits = getBalance();
    eco "Créditos de mensagem restantes: {$credits}";
} pegar (Exceção $e) {
    eco $e->getMessage();
}

Obter mensagens e seu status atual

experimentar {
    // Recebe uma mensagem usando o ID.
    $msg = getMessageByID(1);
    print_r($msg);

    // Obtenha mensagens usando o ID do grupo.
    $msgs = getMessagesByGroupID(') * V5LxqyBMEbQrl9 J$5bb4c03e8a07b7.62193871');
    print_r($msgs);
    
    // Recebe mensagens recebidas nas últimas 24 horas.
    $msgs = getMessagesByStatus("Recebido", Tempo() - 86400);
    print_r($msgs);
} pegar (Exceção $e) {
    eco $e->getMessage();
}

Gerenciar contatos

experimentar {
    // Adicione um novo contato à lista de contatos 1 ou reinscreva o contato, se ele já existir.
    $contato = adicionar contato(1, "+911234567890", "Teste", falso);
    print_r($contato);
    
    // Cancele a inscrição de um contato usando o número de celular.
    $contato = unsubscribeContact(1, "+911234567890");
    print_r($contato);
} pegar (Exceção $e) {
    eco $e->getMessage();
}



Integração C#

usando Sistema;
usando Sistema.Colecções.Genérico;
usando Sistema.Eu;
usando Sistema.Internet;
usando Sistema.Texto;
usando Sistema.Rede;
usando Gateway_Sample_Application.Propriedades;
usando Newtonsoft.jSON;
usando Newtonsoft.jSON.Linq;

namespace SMS
{
    estático classe API
    {
        privado estático somente leitura corda Servidor = "Https://sms.sendapp.live"
        privado estático somente leitura corda Chave = "6e1bdb4ed91f3b83071dd5a520c9d226ea19245e";

        público enum Opção
        {
            USE_SPECIFIED = 0,
            USE_ALL_DEVICES = 1,
            USE_ALL_SIMS = 2
        }

        /// 
        /// Envia uma mensagem para um número de celular específico.
        /// 
        ///  O número do celular para o qual você deseja enviar a mensagem. 
        ///  A mensagem que você deseja enviar. 
        ///  O ID do dispositivo que você deseja usar para enviar esta mensagem. 
        ///  Defina como carimbo de data e hora quando você deseja enviar esta mensagem. 
        ///  Se houver um erro ao enviar uma mensagem. 
        ///  O dicionário que contém informações sobre a mensagem. 
        público estático Dicionário<corda, objeto> SendSingleMessage(corda número, corda mensagem, corda dispositivo = "0", longo? cronograma = nulo)
        {
            var valores = Novo Dicionário<corda, objeto>
            {
                { "Número", número},
                { "Mensagem", mensagem},
                { "Cronograma", cronograma },
                { "Chave", Chave },
                { "Dispositivos", dispositivo }
            };

            Retorna getMessages(GetResponse($"{Servidor} /services/send.php", valores)["Mensagens"])[0];
        }

        /// 
        /// Envie várias mensagens para diferentes números de celular.
        /// 
        ///  A matriz que contém números e mensagens. 
        ///  Defina isso como USE_SPECIFIED se desejar usar dispositivos e SIMs especificados no argumento de dispositivos.
        /// Defina como USE_ALL_DEVICES se desejar usar todos os dispositivos disponíveis e o SIM padrão para enviar mensagens.
        /// Defina como USE_ALL_SIMS se desejar usar todos os dispositivos disponíveis e todos os seus SIMs para enviar mensagens. 
        ///  A matriz de ID dos dispositivos que você deseja usar para enviar essas mensagens. 
        ///  Defina como carimbo de data e hora quando você deseja enviar esta mensagem. 
        ///  Defina como true se desejar enviar mensagens usando apenas um dispositivo aleatório dos dispositivos selecionados. 
        ///  Se houver um erro ao enviar mensagens. 
        ///  A matriz que contém mensagens. 
        público estático Dicionário<corda, objeto> [] Enviar mensagens(Lista<Dicionário<corda, corda>> mensagens, Opção opções = Opção.USE_SPECIFIED, corda[] dispositivos = nulo, longo? cronograma = nulo, bool useRandomDevice = falso)
        {
            var valores = Novo Dicionário<corda, objeto>
            {
                { "Mensagens", JsonConvert.SerializeObject(mensagens)},
                { "Cronograma", cronograma },
                { "Chave", Chave },
                { "Dispositivos", dispositivos },
                { "Opção", (int) opções },
                { "UseRandomDevice", useRandomDevice }
            };

            Retorna getMessages(GetResponse($"{Servidor} /services/send.php", valores)["Mensagens"]);
        }

        /// 
        /// Envie uma mensagem para os contatos na lista de contatos especificada.
        /// 
        ///  O ID da lista de contatos para onde você deseja enviar esta mensagem. 
        ///  A mensagem que você deseja enviar. 
        ///  Defina isso como USE_SPECIFIED se desejar usar dispositivos e SIMs especificados no argumento de dispositivos.
        /// Defina como USE_ALL_DEVICES se desejar usar todos os dispositivos disponíveis e o SIM padrão para enviar mensagens.
        /// Defina como USE_ALL_SIMS se desejar usar todos os dispositivos disponíveis e todos os seus SIMs para enviar mensagens. 
        ///  A matriz de ID dos dispositivos que você deseja usar para enviar essas mensagens. 
        ///  Defina como carimbo de data e hora quando você deseja enviar esta mensagem. 
        ///  Se houver um erro ao enviar mensagens. 
        ///  A matriz que contém mensagens. 
        público estático Dicionário<corda, objeto> [] SendMessageToContactsList(int escasso, corda mensagem, Opção opções = Opção.USE_SPECIFIED, corda[] dispositivos = nulo, longo? cronograma = nulo)
        {
            var valores = Novo Dicionário<corda, objeto>
            {
                { "Listid", escasso},
                { "Mensagem", mensagem},
                { "Cronograma", cronograma },
                { "Chave", Chave },
                { "Dispositivos", dispositivos },
                { "Opção", (int) opções }
            };

            Retorna getMessages(GetResponse($"{Servidor} /services/send.php", valores)["Mensagens"]);
        }

        /// 
        /// Receba uma mensagem usando o ID.
        /// 
        ///  O ID de uma mensagem que você deseja recuperar. 
        ///  Se houver um erro ao receber uma mensagem. 
        ///  O dicionário que contém informações sobre a mensagem. 
        público estático Dicionário<corda, objeto> GetMessageByID(int Eu iria)
        {
            var valores = Novo Dicionário<corda, objeto>
            {
                { "Chave", Chave },
                { "Eu iria", Eu iria }
            };

            Retorna getMessages(GetResponse($"{Server} /services/read-messages.php", valores)["Mensagens"])[0];
        }

        /// 
        /// Obter mensagens usando o ID do grupo.
        /// 
        ///  O ID do grupo de mensagens que você deseja recuperar. 
        ///  Se houver um erro ao obter mensagens. 
        ///  A matriz que contém mensagens. 
        público estático Dicionário<corda, objeto> [] GetMessagesByGroupID(corda ID do grupo)
        {
            var valores = Novo Dicionário<corda, objeto>
            {
                { "Chave", Chave },
                { "GroupId", ID do grupo }
            };

            Retorna getMessages(GetResponse($"{Server} /services/read-messages.php", valores)["Mensagens"]);
        }

        /// 
        /// Receba mensagens usando o status.
        /// 
        ///  O status das mensagens que você deseja recuperar. 
        ///  Procure mensagens enviadas ou recebidas após esse período. 
        ///  Pesquise as mensagens enviadas ou recebidas antes deste horário. 
        ///  Se houver um erro ao obter mensagens. 
        ///  A matriz que contém mensagens. 
        público estático Dicionário<corda, objeto> [] GetMessagesByStatus(corda status, longo? startTimestamp = nulo, longo? endTimestamp = nulo)
        {
            var valores = Novo Dicionário<corda, objeto>
            {
                { "Chave", Chave },
                { "status", status },
                { "StartTimestamp", startTimestamp },
                { "EndTimestamp", endTimestamp }
            };

            Retorna getMessages(GetResponse($"{Server} /services/read-messages.php", valores)["Mensagens"]);
        }
        
        /// 
        /// Adicione um novo contato à lista de contatos.
        /// 
        ///  O ID da lista de contatos em que você deseja adicionar esse contato. 
        ///  O número do celular do contato. 
        ///  O nome do contato. 
        ///  Defina-o como true se você deseja assinar novamente este contato, se ele já existir. 
        ///  Um dicionário que contém detalhes sobre um contato adicionado recentemente. 
        público estático Dicionário<corda, objeto> Adicionar contato(int escasso, corda número, corda nome = nulo, bool reinscrever = falso)
        {
            var valores = Novo Dicionário<corda, objeto>
            {
                {"Chave", Chave},
                {"Listid", escasso},
                {"Número", número},
                {"Nome", nome},
                {"Inscrever-se novamente", reinscrever ? '1' : '0'},
            };
            jobject jobject = (jobject) GetResponse($"{Server} /services/manage-contacts.php", valores)["Contato"];
            Retorna jobject.ToObject<Dicionário<corda, objeto>> ();
        }
        
        /// 
        /// Cancele a inscrição de um contato da lista de contatos.
        /// 
        ///  O ID da lista de contatos da qual você deseja cancelar a inscrição deste contato. 
        ///  O número do celular do contato. 
        ///  Um dicionário que contém detalhes sobre o contato não inscrito. 
        público estático Dicionário<corda, objeto> Cancelar inscrição(int escasso, corda número)
        {
            var valores = Novo Dicionário<corda, objeto>
            {
                {"Chave", Chave},
                {"Listid", escasso},
                {"Número", número},
                {"Cancelar subscrição", '1'}
            };
            jobject jobject = (jobject)GetResponse($"{Server} /services/manage-contacts.php", valores)["Contato"];
            Retorna jobject.ToObject<Dicionário<corda, objeto>> ();
        }
        
        /// 
        /// Obtenha créditos de mensagens restantes.
        /// 
        ///  Se houver um erro ao obter créditos da mensagem. 
        ///  A quantidade de créditos de mensagens restantes. 
        público estático corda GetBalance()
        {
            var valores = Novo Dicionário<corda, objeto>
            {
                {"Chave", Chave}
            };
            JToken créditos = GetResponse($"{Servidor} /services/send.php", valores)["Créditos"];
            E se (créditos.Tipo != JTokenType.Nulo)
            {
                Retorna créditos.Para sequenciar();
            }
            Retorna "Ilimitado";
        }

        privado estático Dicionário<corda, objeto> [] getMessages(JToken messagesJToken)
        {
            JArray jArray = (JArray)messagesJToken;
            var mensagens = Novo Dicionário<corda, objeto> [jArray.Contagem];
            para (var índice = 0; índice < jArray.Contagem; índice++)
            {
                mensagens[índice] = jArray[índice].ToObject<Dicionário<corda, objeto>> ();
            }
            Retorna mensagens;
        }

        privado estático JToken GetResponse(corda url, Dicionário<corda, objeto> dados de postagem)
        {
            var solicitação = (HttpWebRequest)WebRequest.Crio(url);
            var datatring = CreateDataString(dados de postagem);
            var encontro = Codificação.UTF8.GetBytes(datatring);

            solicitação.Método = "POSTAR";
            solicitação.Tipo de conteúdo = "Application / x-www-form-urlencoded";
            solicitação.Comprimento do conteúdo = encontro.comprimento;
            ServicePointManager.Expect100Continue = falso;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            usando (var corrente = solicitação.GetRequestStream())
            {
                corrente.Escrever(encontro, 0, encontro.comprimento);
            }

            var resposta = (HttpWebResponse)solicitação.GetResponse();

            E se (resposta.StatusCode == HttpStatusCode.ok)
            {
                usando (StreamReader StreamReader = Novo StreamReader(resposta.GetResponseStream()))
                {
                    var jsonResponse = StreamReader.ReadToEnd();
                    experimentar
                    {
                        jobject jobject = jobject.Analisar(jsonResponse);
                        E se ((bool)jobject["Sucesso"])
                        {
                            Retorna jobject["encontro"];
                        }
                        lançar Novo Exceção(jobject["Erro"]["Mensagem"].Para sequenciar());
                    }
                    pegar (JsonReaderException)
                    {
                        E se (corda.IsNullOrEmpty(jsonResponse))
                        {
                            lançar Novo InvalidDataException("Dados ausentes na solicitação. Forneça todas as informações necessárias para enviar mensagens.");
                        }
                        lançar Novo Exceção(jsonResponse);
                    }
                }
            }

            lançar Novo WebException($"Erro HTTP: {(int) response.StatusCode} {response.StatusCode}");
        }

        privado estático corda CreateDataString(Dicionário<corda, objeto> encontro)
        {
            StringBuilder datatring = Novo StringBuilder();
            bool primeiro = falso;
            para cada (var obj no encontro)
            {
                E se (obj.Valor != nulo)
                {
                    E se (primeiro)
                    {
                        primeiro = falso;
                    }
                    outro
                    {
                        datatring.Acrescentar("&");
                    }
                    datatring.Acrescentar(HttpUtility.UrlEncode(obj.Chave));
                    datatring.Acrescentar("=");
                    datatring.Acrescentar(obj.Valor é corda[]
                        ? HttpUtility.UrlEncode(JsonConvert.SerializeObject(obj.Valor))
                        : HttpUtility.UrlEncode(obj.Valor.Para sequenciar()));
                }
            }
            Retorna datatring.Para sequenciar();
        }
    }
}

Enviar mensagem única

experimentar
{
    // Envie uma mensagem usando o dispositivo principal.
    SMS.API.SendSingleMessage("+911234567890", "Este é um teste de mensagem única.");

    // Envie uma mensagem usando o ID do dispositivo 1.
    Dicionário<corda, objeto> mensagem = SMS.API.SendSingleMessage("+911234567890", "Este é um teste de mensagem única.", "1");
	
    // Envie uma mensagem usando o SIM no slot 1 da ID do dispositivo 1 (representado como "1 | 0").
    // O slot do SIM é um índice; portanto, o índice do primeiro SIM é 0 e o índice do segundo SIM é 1.
    // Neste exemplo, 1 representa o ID do dispositivo e 0 representa o índice do slot SIM.
    Dicionário<corda, objeto> mensagem = SMS.API.SendSingleMessage("+911234567890", "Este é um teste de mensagem única.", "1|0");

    // Enviar mensagem agendada usando o dispositivo principal.
    longo timestamp = (longo) Data hora.UtcNow.AddMinutes(2).Subtrair(Novo Data hora(1970, 1, 1)).totalseconds;
    Dicionário<corda, objeto> mensagem = SendSingleMessage(textBoxNumber.Texto, textBoxMessage.Texto, nulo, timestamp);
    
    Caixa de mensagem.mostrar("Enviou uma mensagem com sucesso.");
}
pegar (Exceção exceção)
{
    Caixa de mensagem.mostrar(exceção.mensagem, "! Erro", MessageBoxButtons.ok, MessageBoxIcon.erro);
}

Enviar mensagens em massa

Lista<Dicionário<corda, corda>> mensagens = Novo Lista<Dicionário<corda, corda>> ();
para (int a = 1; a <= 12; a++)
{
    var mensagem = Novo Dicionário<corda, corda>
    {
        { "Número", "+911234567890" },
        { "Mensagem", "Este é um teste # {$i} da versão C#. Testando a funcionalidade de mensagens em massa." }
    };
    mensagens.Adicionar(mensagem);
}

experimentar
{
    // Envie mensagens usando o dispositivo principal.
    SMS.API.Enviar mensagens(mensagens);

    // Envie mensagens usando o SIM padrão de todos os dispositivos disponíveis. As mensagens serão divididas entre todos os dispositivos.
    SMS.API.Enviar mensagens(mensagens, SMS.API.Opção.USE_ALL_DEVICES);
	
    // Envie mensagens usando todos os SIMs de todos os dispositivos disponíveis. As mensagens serão divididas entre todos os SIMs.
    SMS.API.Enviar mensagens(mensagens, SMS.API.Opção.USE_ALL_SIMS);

    // Envie mensagens usando apenas dispositivos especificados. As mensagens serão divididas entre dispositivos ou SIMs que você especificou.
    // Se você enviar 12 mensagens usando esse código, 4 mensagens serão enviadas pelo ID do dispositivo 1, outras 4 pelo SIM no slot 1 do 
    // ID do dispositivo 2 (representado como "2 | 0") e os 4 restantes pelo SIM no slot 2 do ID do dispositivo 2 (representado como "2 | 1").
    SMS.API.Enviar mensagens(mensagens, SMS.API.Opção.USE_SPECIFIED, Novo [] {"1", "2|0", "2|1"});
    
    // Envia mensagens dentro do cronograma usando o dispositivo principal.
    longo timestamp = (longo) Data hora.UtcNow.AddMinutes(2).Subtrair(Novo Data hora(1970, 1, 1)).totalseconds;
    Dicionário<corda, objeto> [] mensagens = SMS.API.Enviar mensagens(mensagens, Opção.USE_SPECIFIED, nulo, timestamp);
    
    // Envia uma mensagem para os contatos na lista de contatos com o ID 1.
    Dicionário<corda, objeto> [] mensagens = SMS.API.SendMessageToContactsList(1, "Teste", SMS.API.Opção.USE_SPECIFIED, Novo [] {"1"});

    // Envia uma mensagem agendada para os contatos na lista de contatos com o ID 1.
    Dicionário<corda, objeto> [] mensagens = SMS.API.SendMessageToContactsList(1, "Teste #1", Opção.USE_SPECIFIED, nulo, timestamp);
    
    Caixa de mensagem.mostrar("Sucesso");
}
pegar (Exceção exceção)
{
    Caixa de mensagem.mostrar(exceção.mensagem, "! Erro", MessageBoxButtons.ok, MessageBoxIcon.erro);
}

Obter créditos de mensagem restantes

experimentar
{
    corda créditos = SMS.API.GetBalance();
    Caixa de mensagem.mostrar($"Créditos de mensagem restantes: {credits}");
}
pegar (Exceção exceção)
{
    Caixa de mensagem.mostrar(exceção.mensagem, "! Erro", MessageBoxButtons.ok, MessageBoxIcon.erro);
}

Obter mensagens e seu status atual

experimentar 
{
    // Recebe uma mensagem usando o ID.
    Dicionário<corda, objeto> mensagem = SMS.API.GetMessageByID(1);

    // Obtenha mensagens usando o ID do grupo.
    Dicionário<corda, objeto> [] mensagens = SMS.API.GetMessagesByGroupID(") * V5LxqyBMEbQrl9 J$5bb4c03e8a07b7.62193871");
    
    // Recebe mensagens recebidas nas últimas 24 horas.
    longo timestamp = (longo) Data hora.UtcNow.AddHours(-24).Subtrair(Novo Data hora(1970, 1, 1)).totalseconds;
    GetMessagesByStatus("Recebido", timestamp);
}
pegar (Exceção exceção)
{
    Caixa de mensagem.mostrar(exceção.mensagem, "! Erro", MessageBoxButtons.ok, MessageBoxIcon.erro);
}

Gerenciar contatos

experimentar {
    // Adicione um novo contato à lista de contatos 1 ou reinscreva o contato, se ele já existir.
    Dicionário<corda, objeto> contato = SMS.API.Adicionar contato(1, "+911234567890", "Teste C#", falso);
    
    // Cancele a inscrição de um contato usando o número de celular.
    Dicionário<corda, objeto> contato = Cancelar inscrição(1, "+911234567890");
}
pegar (Exceção exceção)
{
    Caixa de mensagem.mostrar(exceção.mensagem, "! Erro", MessageBoxButtons.ok, MessageBoxIcon.erro);
}