Ir para o conteúdo principal

Com as APIs de SMS do Sendapp
você pode automatizar notificações por SMS
com qualquer plataforma

Projetado para pequenas e médias empresas,
para revolucionar a comunicação com o cliente.

Teste grátis

Script de exemplo de WebHook

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

definir("CHAVE_API", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

tentar {
    se (isset($_SERVIDOR["ASSINATURA_HTTP_X_SG"])) {
        $hash = codificação base64(hash_hmac('sha256', $_POST["mensagens"], CHAVE_API, verdadeiro));
        se ($hash === $_SERVIDOR["ASSINATURA_HTTP_X_SG"]) {
            Mensagens $ = json_decodificação($_POST["mensagens"], verdadeiro);

            /** * 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", * "deliveredDate" => "2018-10-20T00:00:00+02:00" * "groupID" => null * ] * ] * * senDate representa a data e a hora em que a mensagem foi recebida no dispositivo. * deliveredDate representa a data e a hora em que a mensagem foi recebida pelo servidor. */

            para cada (Mensagens $ como $mensagem) {
                se(strtolower($mensagem["mensagem"]) === "oi") {
                    // Responda à mensagem usando a API ou execute alguns comandos. As possibilidades são ilimitadas.
                }
            }
        } outro {
            código_de_resposta_http(401);
            log_de_erros("Assinaturas não conferem!");
        }
    } outro {
        código_de_resposta_http(400);
        log_de_erros("Assinatura não encontrada!");
    }
} pegar (Exceção $e) {
    log_de_erros($e->obter mensagem());
}

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", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

definir("USE_SPECIFIED", 0);
definir("USE_TODOS_OS_DISPOSITIVOS", 1);
definir("USE_TODOS_OS_SIMS", 2);

/** * @param string $number O número de celular para onde você deseja enviar a mensagem. * @param string $message A mensagem que você deseja enviar. * @param int|string $device O ID de um dispositivo que você deseja usar para enviar esta mensagem. * @param int $schedule Defina como timestamp quando quiser enviar esta mensagem. * * @return array Retorna a matriz contendo informações sobre a mensagem. * @throws Exceção se houver um erro ao enviar uma mensagem. */
função enviarMensagemÚnica($número, $mensagem, Dispositivo $ = 0, Cronograma $ = nulo)
{
    $url = SERVIDOR . "/serviços/enviar.php";
    $postData = variedade('número' => $número, 'mensagem' => $mensagem, 'agendar' => Cronograma $, 'chave' => CHAVE_API, 'dispositivos' => Dispositivo $);
    retornar enviarSolicitação($url, $postData)["mensagens"][0];
}

/** * @param array $messages A matriz contendo números e mensagens. * @param int $option Defina como USE_SPECIFIED se quiser usar dispositivos e SIMs especificados no argumento devices. * Defina como USE_ALL_DEVICES se quiser usar todos os dispositivos disponíveis e seus SIMs padrão para enviar mensagens. * Defina como USE_ALL_SIMS se quiser usar todos os dispositivos disponíveis e todos os SIMs para enviar mensagens. * @param array $devices A matriz de IDs de dispositivos que você quer usar para enviar essas mensagens. * @param int $schedule Defina como timestamp quando quiser enviar essas mensagens. * @param bool $useRandomDevice Defina como true se quiser enviar mensagens usando apenas um dispositivo aleatório entre os dispositivos selecionados. * * @return array Retorna a matriz contendo 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", * "deliveredDate" => null * "groupID" => ")V5LxqyBMEbQrl9*J$5bb4c03e8a07b7.62193871" * ] * ] * @throws Exceção se ocorrer um erro ao enviar mensagens. */
função enviar mensagens(Mensagens $, $option = USO_ESPECIFICADO, Dispositivos $ = [], Cronograma $ = nulo, $useRandomDevice = falso)
{
    $url = SERVIDOR . "/serviços/enviar.php";
    $postData = [
        'mensagens' => json_encode(Mensagens $),
        'agendar' => Cronograma $,
        'chave' => CHAVE_API,
        'dispositivos' => json_encode(Dispositivos $),
        'opção' => $option,
        'useRandomDevice' => $useRandomDevice
    ];
    retornar enviarSolicitação($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 $option Defina como USE_SPECIFIED se desejar usar dispositivos e SIMs especificados no argumento devices. * Defina como USE_ALL_DEVICES se desejar usar todos os dispositivos disponíveis e seus SIMs padrão para enviar mensagens. * Defina como USE_ALL_SIMS se desejar usar todos os dispositivos disponíveis e todos os SIMs para enviar mensagens. * @param array $devices O array de IDs dos dispositivos que você deseja usar para enviar a mensagem. * @param int $schedule Defina como timestamp quando desejar enviar esta mensagem. * * @return array Retorna o array contendo mensagens. * @throws Exceção se houver um erro ao enviar mensagens. */
função enviarMensagemParaListaDeContatos($listID, $mensagem, $option = USO_ESPECIFICADO, Dispositivos $ = [], Cronograma $ = nulo)
{
    $url = SERVIDOR . "/serviços/enviar.php";
    $postData = [
        'ID da lista' => $listID,
        'mensagem' => $mensagem,
        'agendar' => Cronograma $,
        'chave' => CHAVE_API,
        'dispositivos' => json_encode(Dispositivos $),
        'opção' => $option
    ];
    retornar enviarSolicitação($url, $postData)["mensagens"];
}

/** * @param int $id O ID de uma mensagem que você deseja recuperar. * * @return array O array que contém uma mensagem. * @throws Exceção se houver um erro ao obter uma mensagem. */
função obterMensagemPorID($id) {
    $url = SERVIDOR . "/serviços/leitura-mensagens.php";
    $postData = [
        'chave' => CHAVE_API,
        'eu ia' => $id
    ];
    retornar enviarSolicitação($url, $postData)["mensagens"][0];
}

/** * @param string $groupID O ID do grupo de mensagens que você deseja recuperar. * * @return array O array que contém mensagens. * @throws Exceção se houver um erro ao obter mensagens. */
função obterMensagensPorIDDoGrupo($groupID) {
    $url = SERVIDOR . "/serviços/leitura-mensagens.php";
    $postData = [
        'chave' => CHAVE_API,
        'ID do grupo' => $groupID
    ];
    retornar enviarSolicitação($url, $postData)["mensagens"];
}

/** * @param string $status O status das mensagens que você deseja recuperar. * @param int $startTimestamp Pesquisa por mensagens enviadas ou recebidas após esse horário. * @param int $endTimestamp Pesquisa por mensagens enviadas ou recebidas antes desse horário. * * @return array O array que contém mensagens. * @throws Exceção se houver um erro ao obter mensagens. */
função obterMensagensPorStatus(Status $, $startTimestamp, $endTimestamp)
{
    $url = SERVIDOR . "/serviços/leitura-mensagens.php";
    $postData = [
        'chave' => CHAVE_API,
        'status' => Status $,
        'startTimestamp' => $startTimestamp,
        'endTimestamp' => $endTimestamp
    ];
    retornar enviarSolicitação($url, $postData)["mensagens"];
}

/** * @param int $listID O ID da lista de contatos onde você deseja adicionar este contato. * @param string $number O número de celular do contato. * @param string $name O nome do contato. * @param bool $resubscribe Defina como true se desejar inscrever novamente este contato, caso ele já exista. * * @return array O array que contém um contato recém-adicionado. * @throws Exceção se ocorrer um erro ao adicionar um novo contato. */
função adicionar contato($listID, $número, $nome = nulo, $reinscreva-se = falso)
{
    $url = SERVIDOR . "/serviços/gerenciar-contatos.php";
    $postData = [
        'chave' => CHAVE_API,
        'ID da lista' => $listID,
        'número' => $número,
        'nome' => $nome,
        'inscrever-se novamente' => $reinscreva-se
    ];
    retornar enviarSolicitação($url, $postData)["contato"];
}

/** * @param int $listID O ID da lista de contatos da qual você deseja cancelar a assinatura deste contato. * @param string $number O número de celular do contato. * * @return array O array que contém o contato cancelado. * @throws Exceção se houver um erro ao definir a assinatura como falsa. */
função cancelar inscriçãoContato($listID, $número)
{
    $url = SERVIDOR . "/serviços/gerenciar-contatos.php";
    $postData = [
        'chave' => CHAVE_API,
        'ID da lista' => $listID,
        'número' => $número,
        'cancelar inscrição' => verdadeiro
    ];
    retornar enviarSolicitação($url, $postData)["contato"];
}

/** * @return string A quantidade de créditos de mensagem restantes. * @throws Exceção se ocorrer um erro ao obter créditos de mensagem. */
função obter saldo()
{
    $url = SERVIDOR . "/serviços/enviar.php";
    $postData = [
        'chave' => CHAVE_API,
    ];
    $créditos = enviarSolicitação($url, $postData)["créditos"];
    retornar é_nulo($créditos) ? "Ilimitado" : $créditos;
}

função enviarSolicitação($url, $postData)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, POSTAGEM_CURLOPT, verdadeiro);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, verdadeiro);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    se (curl_errno($ch)) {
        lançar novo Exceção(erro_curl($ch));
    }
    curl_close($ch);
    se ($httpCode == 200) {
        $json = json_decodificação($response, verdadeiro);
        se ($json == falso) {
            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 {
            se ($json["sucesso"]) {
                retornar $json["data"];
            } outro {
                lançar novo Exceção($json["erro"]["mensagem"]);
            }
        }
    } outro {
        lançar novo Exceção("Código de erro HTTP: {$httpCode}");
    }
}

Enviar mensagem única

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

    // Envie uma mensagem usando o ID do dispositivo 1.
    $msg = enviarMensagemÚnica("+911234567890", "Este é um teste de mensagem única.", 1);

    // Envie uma mensagem usando o SIM no slot 1 do ID do dispositivo 1 (representado como "1|0").
    // O slot do SIM é um índice, então 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 do SIM.
    $msg = enviarMensagemÚnica("+911234567890", "Este é um teste de mensagem única.", "1|0");

    // Enviar mensagem agendada usando o dispositivo principal.
    $msg = enviarMensagemÚnica("+911234567890", "Este é um teste do recurso de programação.", nulo, strtotime("+2 minutos"));
    imprimir_r($msg);

    eco "Mensagem enviada com sucesso.";
} pegar (Exceção $e) {
    eco $e->obter mensagem();
}

Enviar mensagens em massa

Mensagens $ = variedade();

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

tentar {
    // Envie mensagens usando o dispositivo principal.
    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.
    enviar mensagens(Mensagens $, USAR_TODOS_OS_DISPOSITIVOS);

    // Envie mensagens usando todos os SIMs de todos os dispositivos disponíveis. As mensagens serão divididas entre todos os SIMs.
    enviar mensagens(Mensagens $, USAR_TODOS_OS_SIMS);

    // Envie mensagens usando apenas os dispositivos especificados. As mensagens serão divididas entre os dispositivos ou SIMs que você especificar.
    // Se você enviar 12 mensagens usando este código, 4 mensagens serão enviadas pelo ID do dispositivo 1 e outras 4 pelo SIM no slot 1 de 
    // 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(Mensagens $, USO_ESPECIFICADO, [1, "2|0", "2|1"]);

    // Envie mensagens conforme programado usando o dispositivo principal.
    enviar mensagens(Mensagens $, nulo, nulo, strtotime("+2 minutos"));

    // Envia uma mensagem para contatos na lista de contatos com ID 1.
    enviarMensagemParaListaDeContatos(1, "Teste", USO_ESPECIFICADO, 1);

    // Enviar uma mensagem conforme agendado para contatos na lista de contatos com ID 1.
    $msgs = enviarMensagemParaListaDeContatos(1, "Teste", nulo, nulo, strtotime("+2 minutos"));

    imprimir_r($msgs);

    eco "Mensagens em massa enviadas com sucesso.";
} pegar (Exceção $e) {
    eco $e->obter mensagem();
}

Obter créditos de mensagem restantes

tentar {
    $créditos = obter saldo();
    eco "Créditos de mensagem restantes: {$credits}";
} pegar (Exceção $e) {
    eco $e->obter mensagem();
}

Receba mensagens e seu status atual

tentar {
    // Receba uma mensagem usando o ID.
    $msg = obterMensagemPorID(1);
    imprimir_r($msg);

    // Receba mensagens usando o ID do grupo.
    $msgs = obterMensagensPorIDDoGrupo(')V5LxqyBMEbQrl9*J$5bb4c03e8a07b7.62193871');
    imprimir_r($msgs);

    // Obtenha mensagens recebidas nas últimas 24 horas.
    $msgs = obterMensagensPorStatus("Recebido", tempo() - 86400);
    imprimir_r($msgs);
} pegar (Exceção $e) {
    eco $e->obter mensagem();
}

Gerenciar contatos

tentar {
    // Adicione um novo contato à lista de contatos 1 ou inscreva novamente o contato se ele já existir.
    Contato $ = adicionar contato(1, "+911234567890", "Teste", verdadeiro);
    imprimir_r(Contato $);

    // Cancelar a inscrição de um contato usando o número do celular.
    Contato $ = cancelar inscriçãoContato(1, "+911234567890");
    imprimir_r(Contato $);
} pegar (Exceção $e) {
    eco $e->obter mensagem();
}



Integração C#

usando Sistema;
usando Sistema.Coleções.Genérico;
usando Sistema.EU;
usando Sistema.Líquido;
usando Sistema.Texto;
usando Sistema.Rede;
usando Aplicativo_de_amostra_de_gateway.Propriedades;
usando Newtonsoft.Json;
usando Newtonsoft.Json.Linq;

espaço de nomes SMS
{
    estático aula API
    {
        privado estático somente leitura corda Servidor = "https://sms.sendapp.live"
        privado estático somente leitura corda Chave = "6e1bdb4ed91f3b83071dd5a520c9d226ea19245e";

        público enumeração Opção
        {
            USO_ESPECIFICADO = 0,
            USAR_TODOS_OS_DISPOSITIVOS = 1,
            USAR_TODOS_OS_SIMS = 2
        }

        ///
        /// Enviar mensagem única para um número de celular específico.
        ///
        /// O número de celular para onde você deseja enviar a mensagem.
        /// A mensagem que você quer enviar.
        /// O ID de um dispositivo que você deseja usar para enviar esta mensagem.
        /// Defina o registro de data e hora em que você deseja enviar esta mensagem.
        /// Se ocorrer um erro ao enviar uma mensagem.
        /// O dicionário contendo informações sobre a mensagem.
        público estático Dicionário<corda, objeto> Enviar mensagem única(corda número, corda mensagem, corda dispositivo = "0", longo? agendar = nulo)
        {
            var valores = novo Dicionário<corda, objeto>
            {
                { "número", número},
                { "mensagem", mensagem},
                { "agendar", agendar },
                { "chave", Chave },
                { "dispositivos", dispositivo }
            };

            retornar Obter mensagens(Obter resposta($"{Servidor}/serviços/send.php", valores)["mensagens"])[0];
        }

        ///
        /// Envie várias mensagens para diferentes números de celular.
        ///
        /// A matriz contendo números e mensagens.
        /// Defina como USE_SPECIFIED se quiser usar dispositivos e SIMs especificados no argumento de dispositivos.
        /// Defina como USE_ALL_DEVICES se quiser usar todos os dispositivos disponíveis e seus SIMs padrão para enviar mensagens.
        /// Defina como USE_ALL_SIMS se quiser usar todos os dispositivos disponíveis e todos os seus SIMs para enviar mensagens.
        /// A matriz de IDs de dispositivos que você deseja usar para enviar essas mensagens.
        /// Defina o registro de data e hora em que você deseja enviar esta mensagem.
        /// Defina como verdadeiro se quiser enviar mensagens usando apenas um dispositivo aleatório dentre os dispositivos selecionados.
        /// Se ocorrer um erro ao enviar mensagens.
        /// A matriz contendo mensagens.
        público estático Dicionário<corda, objeto>[] Enviar mensagens(Lista<Dicionário<corda, corda>> mensagens, Opção opção = Opção.USO_ESPECIFICADO, corda[] dispositivos = nulo, longo? agendar = nulo, bool useRandomDevice = falso)
        {
            var valores = novo Dicionário<corda, objeto>
            {
                { "mensagens", JsonConvert.SerializarObjeto(mensagens)},
                { "agendar", agendar },
                { "chave", Chave },
                { "dispositivos", dispositivos },
                { "opção", (int) opção },
                { "usarDispositivoAleatório", useRandomDevice }
            };

            retornar Obter mensagens(Obter resposta($"{Servidor}/serviços/send.php", valores)["mensagens"]);
        }

        ///
        /// Envia uma mensagem para contatos na lista de contatos especificada.
        ///
        /// O ID da lista de contatos para onde você deseja enviar esta mensagem.
        /// A mensagem que você quer enviar.
        /// Defina como USE_SPECIFIED se quiser usar dispositivos e SIMs especificados no argumento de dispositivos.
        /// Defina como USE_ALL_DEVICES se quiser usar todos os dispositivos disponíveis e seus SIMs padrão para enviar mensagens.
        /// Defina como USE_ALL_SIMS se quiser usar todos os dispositivos disponíveis e todos os seus SIMs para enviar mensagens.
        /// A matriz de IDs de dispositivos que você deseja usar para enviar essas mensagens.
        /// Defina o registro de data e hora em que você deseja enviar esta mensagem.
        /// Se ocorrer um erro ao enviar mensagens.
        /// A matriz contendo mensagens.
        público estático Dicionário<corda, objeto>[] Enviar mensagem para lista de contatos(int ID da lista, corda mensagem, Opção opção = Opção.USO_ESPECIFICADO, corda[] dispositivos = nulo, longo? agendar = nulo)
        {
            var valores = novo Dicionário<corda, objeto>
            {
                { "ID da lista", ID da lista},
                { "mensagem", mensagem},
                { "agendar", agendar },
                { "chave", Chave },
                { "dispositivos", dispositivos },
                { "opção", (int) opção }
            };

            retornar Obter mensagens(Obter resposta($"{Servidor}/serviços/send.php", valores)["mensagens"]);
        }

        ///
        /// Receba uma mensagem usando o ID.
        ///
        /// O ID de uma mensagem que você deseja recuperar.
        /// Se ocorrer um erro ao receber uma mensagem.
        /// O dicionário contendo informações sobre a mensagem.
        público estático Dicionário<corda, objeto> ObterMensagemPorID(int eu ia)
        {
            var valores = novo Dicionário<corda, objeto>
            {
                { "chave", Chave },
                { "eu ia", eu ia }
            };

            retornar Obter mensagens(Obter resposta($"{Servidor}/serviços/leitura-mensagens.php", valores)["mensagens"])[0];
        }

        ///
        /// Receba mensagens usando o ID do grupo.
        ///
        /// O ID do grupo de mensagens que você deseja recuperar.
        /// Se ocorrer um erro ao receber mensagens.
        /// A matriz contendo mensagens.
        público estático Dicionário<corda, objeto>[] ObterMensagensPorIDDoGrupo(corda ID do grupo)
        {
            var valores = novo Dicionário<corda, objeto>
            {
                { "chave", Chave },
                { "ID do grupo", ID do grupo }
            };

            retornar Obter mensagens(Obter resposta($"{Servidor}/serviços/leitura-mensagens.php", valores)["mensagens"]);
        }

        ///
        /// Receba mensagens usando o status.
        ///
        /// O status das mensagens que você deseja recuperar.
        /// Pesquise mensagens enviadas ou recebidas após esse período.
        /// Pesquise mensagens enviadas ou recebidas antes desse horário.
        /// Se ocorrer um erro ao receber mensagens.
        /// A matriz contendo mensagens.
        público estático Dicionário<corda, objeto>[] Obter mensagens por status(corda status, longo? startTimestamp = nulo, longo? carimbo de data/hora final = nulo)
        {
            var valores = novo Dicionário<corda, objeto>
            {
                { "chave", Chave },
                { "status", status },
                { "carimbo de data/hora de início", startTimestamp },
                { "carimbo de data/hora final", carimbo de data/hora final }
            };

            retornar Obter mensagens(Obter resposta($"{Servidor}/serviços/leitura-mensagens.php", valores)["mensagens"]);
        }

        ///
        /// Adicionar um novo contato à lista de contatos.
        ///
        /// O ID da lista de contatos onde você deseja adicionar este contato.
        /// O número de celular do contato.
        /// O nome do contato.
        /// Defina como verdadeiro se quiser inscrever novamente este contato, caso ele já exista.
        /// Um dicionário contendo detalhes sobre um contato recém-adicionado.
        público estático Dicionário<corda, objeto> Adicionar contato(int ID da lista, corda número, corda nome = nulo, bool reinscrever-se = falso)
        {
            var valores = novo Dicionário<corda, objeto>
            {
                {"chave", Chave},
                {"ID da lista", ID da lista},
                {"número", número},
                {"nome", nome},
                {"inscrever-se novamente", reinscrever-se ? '1' : '0'},
            };
            JObject jObject = (JObject) Obter resposta($"{Servidor}/serviços/gerenciar-contatos.php", valores)["contato"];
            retornar jObject.ParaObjeto<Dicionário<corda, objeto>>();
        }

        ///
        /// Cancelar 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 de celular do contato.
        /// Um dicionário contendo detalhes sobre o contato cancelado.
        público estático Dicionário<corda, objeto> Cancelar inscriçãoContato(int ID da lista, corda número)
        {
            var valores = novo Dicionário<corda, objeto>
            {
                {"chave", Chave},
                {"ID da lista", ID da lista},
                {"número", número},
                {"cancelar inscrição", '1'}
            };
            JObject jObject = (JObject)Obter resposta($"{Servidor}/serviços/gerenciar-contatos.php", valores)["contato"];
            retornar jObject.ParaObjeto<Dicionário<corda, objeto>>();
        }

        ///
        /// Obter créditos de mensagem restantes.
        ///
        /// Se ocorrer um erro ao obter créditos da mensagem.
        /// A quantidade de créditos de mensagem restantes.
        público estático corda Obter equilíbrio()
        {
            var valores = novo Dicionário<corda, objeto>
            {
                {"chave", Chave}
            };
            JToken créditos = Obter resposta($"{Servidor}/serviços/send.php", valores)["créditos"];
            se (créditos.Tipo != Tipo JToken.Nada)
            {
                retornar créditos.Para String();
            }
            retornar "Ilimitado";
        }

        privado estático Dicionário<corda, objeto>[] Obter mensagens(JToken mensagensJToken)
        {
            JArray jArray = (JArray)mensagensJToken;
            var mensagens = novo Dicionário<corda, objeto>[jArray.Contar];
            para (var índice = 0; índice < jArray.Contar; índice++)
            {
                mensagens[índice] = jArray[índice].ParaObjeto<Dicionário<corda, objeto>>();
            }
            retornar mensagens;
        }

        privado estático JToken Obter resposta(corda URL, Dicionário<corda, objeto> postData)
        {
            var solicitar = (Solicitação HttpWeb)Solicitação da Web.Criar(URL);
            var cadeia de dados = CriarString de Dados(postData);
            var data = Codificação.UTF8.Obter bytes(cadeia de dados);

            solicitar.Método = "PUBLICAR";
            solicitar.Tipo de conteúdo = "aplicativo/x-www-form-urlencoded";
            solicitar.Comprimento do conteúdo = data.Comprimento;
            Gerenciador de Pontos de Serviço.Expect100Continuar = verdadeiro;
            Gerenciador de Pontos de Serviço.Protocolo de Segurança = Tipo de protocolo de segurança.Tls12;
            usando (var fluxo = solicitar.Obter fluxo de solicitação())
            {
                fluxo.Escrever(data, 0, data.Comprimento);
            }

            var resposta = (HttpWebResponse)solicitar.Obter resposta();

            se (resposta.Código de status == Código de status HTTP.OK)
            {
                usando (Leitor de fluxo Leitor de fluxo = novo Leitor de fluxo(resposta.Obter fluxo de resposta()))
                {
                    var jsonResponse = Leitor de fluxo.Ler até o fim();
                    tentar
                    {
                        JObject jObject = JObject.Analisar(jsonResponse);
                        se ((bool)jObject["sucesso"])
                        {
                            retornar jObject["data"];
                        }
                        lançar novo Exceção(jObject["erro"]["mensagem"].Para String());
                    }
                    pegar (JsonReaderException)
                    {
                        se (corda.ÉNuloOuVazio(jsonResponse))
                        {
                            lançar novo Exceção de dados inválidos("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 Exceção da Web($"Erro HTTP: {(int)response.StatusCode} {response.StatusCode}");
        }

        privado estático corda CriarString de Dados(Dicionário<corda, objeto> data)
        {
            Construtor de Strings cadeia de dados = novo Construtor de Strings();
            bool primeiro = verdadeiro;
            para cada (var objeto em data)
            {
                se (objeto.Valor != nulo)
                {
                    se (primeiro)
                    {
                        primeiro = falso;
                    }
                    outro
                    {
                        cadeia de dados.Acrescentar("&");
                    }
                    cadeia de dados.Acrescentar(Utilitário Http.Codificação de URL(objeto.Chave));
                    cadeia de dados.Acrescentar("=");
                    cadeia de dados.Acrescentar(objeto.Valor é corda[]
                        ? Utilitário Http.Codificação de URL(JsonConvert.SerializarObjeto(objeto.Valor))
                        : Utilitário Http.Codificação de URL(objeto.Valor.Para String()));
                }
            }
            retornar cadeia de dados.Para String();
        }
    }
}

Enviar mensagem única

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

    // Envie uma mensagem usando o ID do dispositivo 1.
    Dicionário<corda, objeto> mensagem = SMS.API.Enviar mensagem única("+911234567890", "Este é um teste de mensagem única.", "1");

    // Envie uma mensagem usando o SIM no slot 1 do ID do dispositivo 1 (representado como "1|0").
    // O slot do SIM é um índice, então 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 do SIM.
    Dicionário<corda, objeto> mensagem = SMS.API.Enviar mensagem única("+911234567890", "Este é um teste de mensagem única.", "1|0");

    // Enviar mensagem agendada usando o dispositivo principal.
    longo carimbo de data/hora = (longo) Data e hora.UTCAgora.Adicionar minutos(2).Subtrair(novo Data e hora(1970, 1, 1)).TotalSegundos;
    Dicionário<corda, objeto> mensagem = Enviar mensagem única(Número da caixa de texto.Texto, mensagem da caixa de texto.Texto, nulo, carimbo de data/hora);

    Caixa de mensagem.Mostrar("Mensagem enviada com sucesso.");
}
pegar (Exceção exceção)
{
    Caixa de mensagem.Mostrar(exceção.Mensagem, "!Erro", Botões de caixa de mensagem.OK, Ícone da caixa de mensagem.Erro);
}

Enviar mensagens em massa

Lista<Dicionário<corda, corda>> mensagens = novo Lista<Dicionário<corda, corda>>();
para (int o = 1; o <= 12; o++)
{
    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);
}

tentar
{
    // 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.USAR_TODOS_OS_DISPOSITIVOS);

    // 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.USAR_TODOS_OS_SIMS);

    // Envie mensagens usando apenas os dispositivos especificados. As mensagens serão divididas entre os dispositivos ou SIMs que você especificar.
    // Se você enviar 12 mensagens usando este código, 4 mensagens serão enviadas pelo ID do dispositivo 1 e outras 4 pelo SIM no slot 1 de 
    // 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.USO_ESPECIFICADO, novo [] {"1", "2|0", "2|1"});

    // Envie mensagens conforme programado usando o dispositivo principal.
    longo carimbo de data/hora = (longo) Data e hora.UTCAgora.Adicionar minutos(2).Subtrair(novo Data e hora(1970, 1, 1)).TotalSegundos;
    Dicionário<corda, objeto>[] mensagens = SMS.API.Enviar mensagens(mensagens, Opção.USO_ESPECIFICADO, nulo, carimbo de data/hora);

    // Envia uma mensagem para contatos na lista de contatos com ID 1.
    Dicionário<corda, objeto>[] mensagens = SMS.API.Enviar mensagem para lista de contatos(1, "Teste", SMS.API.Opção.USO_ESPECIFICADO, novo [] {"1"});

    // Enviar uma mensagem conforme agendado para contatos na lista de contatos com ID 1.
    Dicionário<corda, objeto>[] mensagens = SMS.API.Enviar mensagem para lista de contatos(1, "Teste #1", Opção.USO_ESPECIFICADO, nulo, carimbo de data/hora);

    Caixa de mensagem.Mostrar("Sucesso");
}
pegar (Exceção exceção)
{
    Caixa de mensagem.Mostrar(exceção.Mensagem, "!Erro", Botões de caixa de mensagem.OK, Ícone da caixa de mensagem.Erro);
}

Obter créditos de mensagem restantes

tentar
{
    corda créditos = SMS.API.Obter equilíbrio();
    Caixa de mensagem.Mostrar($"Créditos da mensagem restantes: {créditos}");
}
pegar (Exceção exceção)
{
    Caixa de mensagem.Mostrar(exceção.Mensagem, "!Erro", Botões de caixa de mensagem.OK, Ícone da caixa de mensagem.Erro);
}

Receba mensagens e seu status atual

tentar
{
    // Receba uma mensagem usando o ID.
    Dicionário<corda, objeto> mensagem = SMS.API.ObterMensagemPorID(1);

    // Receba mensagens usando o ID do grupo.
    Dicionário<corda, objeto>[] mensagens = SMS.API.ObterMensagensPorIDDoGrupo(")V5LxqyBMEbQrl9*J$5bb4c03e8a07b7.62193871");

    // Obtenha mensagens recebidas nas últimas 24 horas.
    longo carimbo de data/hora = (longo) Data e hora.UTCAgora.Adicionar horas(-24).Subtrair(novo Data e hora(1970, 1, 1)).TotalSegundos;
    Obter mensagens por status("Recebido", carimbo de data/hora);
}
pegar (Exceção exceção)
{
    Caixa de mensagem.Mostrar(exceção.Mensagem, "!Erro", Botões de caixa de mensagem.OK, Ícone da caixa de mensagem.Erro);
}

Gerenciar contatos

tentar {
    // Adicione um novo contato à lista de contatos 1 ou inscreva novamente o contato se ele já existir.
    Dicionário<corda, objeto> contato = SMS.API.Adicionar contato(1, "+911234567890", "Teste C#", verdadeiro);

    // Cancelar a inscrição de um contato usando o número do celular.
    Dicionário<corda, objeto> contato = Cancelar inscriçãoContato(1, "+911234567890");
}
pegar (Exceção exceção)
{
    Caixa de mensagem.Mostrar(exceção.Mensagem, "!Erro", Botões de caixa de mensagem.OK, Ícone da caixa de mensagem.Erro);
}