Exemple de script WebHook

Créez un script avec le contenu suivant et fournissez son URL en tant que WebHook.

définir("Clé API", «Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx»);

essayer {
    si (isset($_SERVER["HTTP_X_SG_SIGNATURE"])) {
        $hash = base64_encode(hash_hmac(«Sha256», $_POST["Messages"], clé API, faux));
        si ($hash === $_SERVER["HTTP_X_SG_SIGNATURE"]) {
            $messages = json_decode($_POST["Messages"], faux);

            / ** * Par exemple: - * $messages = [* 0 => [* "ID" => "1", * "number" => "+911234567890", * "message" => "Ceci est un message de test . ", *" deviceID "=>" 1 ", *" simSlot "=>" 0 ", *" userID "=>" 1 ", *" status "=>" Reçu ", *" sentDate "=>" 2018-10-20T00: 00: 00 + 02: 00 ", *" deliveryDate "=>" 2018-10-20T00: 00: 00 + 02: 00 "*" groupID "=> null *] *] * * senDate représente la date et l'heure de réception du message sur l'appareil. * DeliveryDate représente la date et l'heure de réception du message par le serveur. * /

            pour chaque ($messages comme $message) {
                si(strtolower($message["Message"]) === "Salut") {
                    // Répondre au message en utilisant l'API ou exécuter certaines commandes. Les possibilités sont illimitées.
                }
            }
        } autre {
            http_response_code(401);
            error_log("La signature ne correspond pas!");
        }
    } autre {
        http_response_code(400);
        error_log("Signature introuvable!");
    }
} capture (Exception $e) {
    error_log($e->getMessage());
}

Intégration PHP

Incluez le code suivant dans votre fichier PHP pour commencer à envoyer des messages.

définir("SERVEUR", "Https://sms.sendapp.live");
définir("Clé API", «Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx»);

définir("USE_SPECIFIED", 0);
définir("USE_ALL_DEVICES", 1);
définir("USE_ALL_SIMS", 2);

/ ** * @param string $number Le numéro de mobile auquel vous souhaitez envoyer le message. * @param string $message Le message que vous souhaitez envoyer .. * @param int | string $device L'ID d'un périphérique que vous souhaitez utiliser pour envoyer ce message. * @param int $schedule Réglez-le sur horodatage lorsque vous souhaitez envoyer ce message. * * @return array Renvoie Le tableau contenant des informations sur le message. * @throws Exception S'il y a une erreur lors de l'envoi d'un message. * /
fonction sendSingleMessage(1TP2Nombre, $message, $device = 0, $schedule = nul)
{
    $url = SERVEUR . "/Services/send.php";
    $postData = tableau('Nombre' => 1TP2Nombre, 'Message' => $message, 'Des horaires' => $schedule, 'Clé' => clé API, 'Dispositifs' => $device);
    revenir envoyer une demande($url, $postData)["Messages"][0];
}

/ ** * @param array $messages Le tableau contenant les nombres et les messages. * @param int 1TP2 Option Définissez cette option sur USE_SPECIFIED si vous souhaitez utiliser les appareils et les cartes SIM spécifiés dans l'argument appareils. * Réglez ce paramètre sur USE_ALL_DEVICES si vous souhaitez utiliser tous les appareils disponibles et leur carte SIM par défaut pour envoyer des messages. * Réglez ce paramètre sur USE_ALL_SIMS si vous souhaitez utiliser tous les appareils disponibles et toutes leurs cartes SIM pour envoyer des messages. * @param array $devices Le tableau des ID des périphériques que vous souhaitez utiliser pour envoyer ces messages. * @param int $schedule Réglez-le sur horodatage lorsque vous souhaitez envoyer ces messages. * @param bool $useRandomDevice Définissez-le sur true si vous souhaitez envoyer des messages en utilisant un seul périphérique aléatoire à partir des périphériques sélectionnés. * * @return array Renvoie Le tableau contenant les messages. * Par exemple: - * [* 0 => [* "ID" => "1", * "number" => "+911234567890", * "message" => "Ceci est un message de test.", * " deviceID "=>" 1 ", *" simSlot "=>" 0 ", *" userID "=>" 1 ", *" status "=>" En attente ", *" sentDate "=>" 2018-10-20T00 : 00: 00 + 02: 00 ", *" deliveryDate "=> null *" groupID "=>") V5LxqyBMEbQrl9 * J$5bb4c03e8a07b7.621923871 "*] *] * @throws Exception S'il y a une erreur lors de l'envoi des messages. * /
fonction Envoyer des messages($messages, $option = USE_SPECIFIED, Périphériques $ = [], $schedule = nul, $useRandomDevice = faux)
{
    $url = SERVEUR . "/Services/send.php";
    $postData = [
        'Messages' => json_encode($messages),
        'Des horaires' => $schedule,
        'Clé' => clé API,
        'Dispositifs' => json_encode(Périphériques $),
        'Option' => $option,
        «UseRandomDevice» => $useRandomDevice
    ];
    revenir envoyer une demande($url, $postData)["Messages"];
}

/ ** * @param int $listID ID de la liste de contacts à laquelle vous souhaitez envoyer ce message. * @param string $message Le message que vous souhaitez envoyer. * @param int 1TP2 Option Définissez cette option sur USE_SPECIFIED si vous souhaitez utiliser les appareils et les cartes SIM spécifiés dans l'argument appareils. * Réglez ce paramètre sur USE_ALL_DEVICES si vous souhaitez utiliser tous les appareils disponibles et leur carte SIM par défaut pour envoyer des messages. * Réglez ce paramètre sur USE_ALL_SIMS si vous souhaitez utiliser tous les appareils disponibles et toutes leurs cartes SIM pour envoyer des messages. * @param array $devices Le tableau des ID des périphériques que vous souhaitez utiliser pour envoyer le message. * @param int $schedule Réglez-le sur horodatage lorsque vous souhaitez envoyer ce message. * * @return array Renvoie Le tableau contenant les messages. * @throws Exception S'il y a une erreur lors de l'envoi des messages. * /
fonction sendMessageToContactsList($listID, $message, $option = USE_SPECIFIED, Périphériques $ = [], $schedule = nul)
{
    $url = SERVEUR . "/Services/send.php";
    $postData = [
        "Listid" => $listID,
        'Message' => $message,
        'Des horaires' => $schedule,
        'Clé' => clé API,
        'Dispositifs' => json_encode(Périphériques $),
        'Option' => $option
    ];
    revenir envoyer une demande($url, $postData)["Messages"];
}

/ ** * @param int $id L'ID d'un message que vous souhaitez récupérer. * * @return array Le tableau contenant un message. * @throws Exception S'il y a une erreur lors de la réception d'un message. * /
fonction getMessageByID($id) {
    $url = SERVEUR . "/Services/read-messages.php";
    $postData = [
        'Clé' => clé API,
        «Id» => $id
    ];
    revenir envoyer une demande($url, $postData)["Messages"][0];
}

/ ** * @param string $groupID L'ID de groupe des messages que vous souhaitez récupérer. * * @return array Le tableau contenant les messages. * @throws Exception S'il y a une erreur lors de la réception des messages. * /
fonction getMessagesByGroupID($groupID) {
    $url = SERVEUR . "/Services/read-messages.php";
    $postData = [
        'Clé' => clé API,
        'GroupId' => $groupID
    ];
    revenir envoyer une demande($url, $postData)["Messages"];
}

/ ** * @param string $status Le statut des messages que vous souhaitez récupérer. * @param int $startTimestamp Recherche les messages envoyés ou reçus après cette heure. * @param int $endTimestamp Recherche les messages envoyés ou reçus avant cette heure. * * @return array Le tableau contenant les messages. * @throws Exception S'il y a une erreur lors de la réception des messages. * /
fonction getMessagesByStatus($status, $startTimestamp, $endTimestamp)
{
    $url = SERVEUR . "/Services/read-messages.php";
    $postData = [
        'Clé' => clé API,
        'statut' => $status,
        'StartTimestamp' => $startTimestamp,
        'EndTimestamp' => $endTimestamp
    ];
    revenir envoyer une demande($url, $postData)["Messages"];
}

/ ** * @param int $listID ID de la liste de contacts dans laquelle vous souhaitez ajouter ce contact. * @param string $number Le numéro de portable du contact. * @param string $name Le nom du contact. * @param bool $resubscribe Définissez-le sur true si vous souhaitez réinscrire ce contact s'il existe déjà. * * @return array Le tableau contenant un contact nouvellement ajouté. * @throws Exception S'il y a une erreur lors de l'ajout d'un nouveau contact. * /
fonction ajouter le contact($listID, 1TP2Nombre, $nom = nul, 1TP2Reinscription = faux)
{
    $url = SERVEUR . "/Services/manage-contacts.php";
    $postData = [
        'Clé' => clé API,
        "Listid" => $listID,
        'Nombre' => 1TP2Nombre,
        'Nom' => $nom,
        'Se réabonner' => 1TP2Reinscription
    ];
    revenir envoyer une demande($url, $postData)["Contact"];
}

/ ** * @param int $listID ID de la liste de contacts dont vous souhaitez désinscrire ce contact. * @param string $number Le numéro de portable du contact. * * @return array Le tableau contenant le contact désabonné. * @throws Exception S'il y a une erreur lors de la définition de l'abonnement sur false. * /
fonction se désinscrire($listID, 1TP2Nombre)
{
    $url = SERVEUR . "/Services/manage-contacts.php";
    $postData = [
        'Clé' => clé API,
        "Listid" => $listID,
        'Nombre' => 1TP2Nombre,
        'Se désabonner' => faux
    ];
    revenir envoyer une demande($url, $postData)["Contact"];
}

/ ** * @return string Le montant des crédits de message restants. * @throws Exception S'il y a une erreur lors de l'obtention des crédits de message. * /
fonction getBalance()
{
    $url = SERVEUR . "/Services/send.php";
    $postData = [
        'Clé' => clé API,
    ];
    $crédits = envoyer une demande($url, $postData)["Crédits"];
    revenir is_null($crédits) ? "Illimité" : $crédits;
}

fonction envoyer une demande($url, $postData)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, faux);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, faux);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    si (curl_errno($ch)) {
        jeter Nouveau Exception(curl_error($ch));
    }
    curl_close($ch);
    si ($httpCode == 200) {
        $json = json_decode($response, faux);
        si ($json == faux) {
            si (vide($response)) {
                jeter Nouveau Exception("Données manquantes dans la demande. Veuillez fournir toutes les informations requises pour envoyer des messages.");
            } autre {
                jeter Nouveau Exception($response);
            }
        } autre {
            si ($json["Succès"]) {
                revenir $json["Date"];
            } autre {
                jeter Nouveau Exception($json["Erreur"]["Message"]);
            }
        }
    } autre {
        jeter Nouveau Exception("Code d'erreur HTTP: {$httpCode}");
    }
}

Envoyer un seul message

essayer {
    // Envoie un message à l'aide de l'appareil principal.
    $msg = sendSingleMessage("+911234567890", "Ceci est un test de message unique.");

    // Envoie un message en utilisant l'ID de périphérique 1.
    $msg = sendSingleMessage("+911234567890", "Ceci est un test de message unique.", 1);
	
    // Envoie un message en utilisant la carte SIM dans l'emplacement 1 de l'ID d'appareil 1 (représenté par "1 | 0").
    // L'emplacement SIM est un index, donc l'indice de la première carte SIM est 0 et l'indice de la deuxième carte SIM est 1.
    // Dans cet exemple, 1 représente l'ID de l'appareil et 0 représente l'index de l'emplacement SIM.
    $msg = sendSingleMessage("+911234567890", "Ceci est un test de message unique.", "1|0");

    // Envoie un message programmé à l'aide de l'appareil principal.
    $msg = sendSingleMessage("+911234567890", "Ceci est un test de la fonctionnalité de planification.", nul, strtotime("+2 minutes"));
    print_r($msg);

    écho "Envoi d'un message réussi.";
} capture (Exception $e) {
    echo $e->getMessage();
}

Envoyer des messages en masse

$messages = tableau();

pour ($i = 1; $i <= 12; $i++) {
    array_push($messages,
        [
            "Nombre" => "+911234567890",
            "Message" => "Ceci est un test # {$i} de la version PHP. Test de la fonctionnalité de message en masse."
        ]);
}

essayer {
    // Envoie des messages à l'aide de l'appareil principal.
    Envoyer des messages($messages);

    // Envoyez des messages en utilisant la carte SIM par défaut de tous les appareils disponibles. Les messages seront répartis entre tous les appareils.
    Envoyer des messages($messages, USE_ALL_DEVICES);
	
    // Envoyez des messages en utilisant toutes les cartes SIM de tous les appareils disponibles. Les messages seront répartis entre toutes les cartes SIM.
    Envoyer des messages($messages, USE_ALL_SIMS);

    // Envoie des messages en utilisant uniquement les périphériques spécifiés. Les messages seront répartis entre les appareils ou les cartes SIM que vous avez spécifiés.
    // Si vous envoyez 12 messages en utilisant ce code, 4 messages seront envoyés par Device ID 1, les 4 autres par SIM dans l'emplacement 1 de 
    // Device ID 2 (représenté comme "2 | 0") et 4 restants par SIM dans l'emplacement 2 de Device ID 2 (représenté comme "2 | 1").
    Envoyer des messages($messages, USE_SPECIFIED, [1, "2|0", "2|1"]);
    
    // Envoie des messages dans les délais en utilisant l'appareil principal.
    Envoyer des messages($messages, nul, nul, strtotime("+2 minutes"));
    
    // Envoyer un message aux contacts de la liste de contacts avec l'ID de 1.
    sendMessageToContactsList(1, "Tester", USE_SPECIFIED, 1);
    
    // Envoie un message dans les délais aux contacts de la liste de contacts avec l'ID de 1.
    $msgs = sendMessageToContactsList(1, "Tester", nul, nul, strtotime("+2 minutes"));
    
    print_r($msgs);

    écho "Envoi de messages en masse avec succès.";
} capture (Exception $e) {
    echo $e->getMessage();
}

Obtenez les crédits de message restants

essayer {
    $crédits = getBalance();
    écho "Crédits de message restants: {$credits}";
} capture (Exception $e) {
    echo $e->getMessage();
}

Recevoir les messages et leur état actuel

essayer {
    // Récupère un message en utilisant l'ID.
    $msg = getMessageByID(1);
    print_r($msg);

    // Récupère les messages en utilisant l'ID de groupe.
    $msgs = getMessagesByGroupID(') * V5LxqyBMEbQrl9 J$5bb4c03e8a07b7.62193871');
    print_r($msgs);
    
    // Récupère les messages reçus au cours des dernières 24 heures.
    $msgs = getMessagesByStatus("Reçu", temps() - 86400);
    print_r($msgs);
} capture (Exception $e) {
    echo $e->getMessage();
}

Gérer les contacts

essayer {
    // Ajouter un nouveau contact à la liste de contacts 1 ou réinscrire le contact s'il existe déjà.
    $contact = ajouter le contact(1, "+911234567890", "Tester", faux);
    print_r($contact);
    
    // Désinscription d'un contact à l'aide du numéro de portable.
    $contact = se désinscrire(1, "+911234567890");
    print_r($contact);
} capture (Exception $e) {
    echo $e->getMessage();
}



Intégration C#

en utilisant Système;
en utilisant Système.Les collections.Générique;
en utilisant Système.je;
en utilisant Système.Net;
en utilisant Système.Texte;
en utilisant Système.la toile;
en utilisant Gateway_Sample_Application.Propriétés;
en utilisant Newtonsoft.jSON;
en utilisant Newtonsoft.jSON.Linq;

espace de noms SMS
{
    statique classe API
    {
        privé statique lecture seulement chaîne Serveur = "Https://sms.sendapp.live"
        privé statique lecture seulement chaîne Clé = "6e1bdb4ed91f3b83071dd5a520c9d226ea19245e";

        Publique énumération Option
        {
            USE_SPECIFIED = 0,
            USE_ALL_DEVICES = 1,
            USE_ALL_SIMS = 2
        }

        /// 
        /// Envoyer un message unique à un numéro de portable spécifique.
        /// 
        ///  Le numéro de mobile auquel vous souhaitez envoyer le message. 
        ///  Le message que vous souhaitez envoyer. 
        ///  L'ID d'un appareil que vous souhaitez utiliser pour envoyer ce message. 
        ///  Réglez-le sur horodatage lorsque vous souhaitez envoyer ce message. 
        ///  S'il y a une erreur lors de l'envoi d'un message. 
        ///  Le dictionnaire contenant des informations sur le message. 
        Publique statique dictionnaire<chaîne, objet> SendSingleMessage(chaîne nombre, chaîne message, chaîne dispositif = "0", longue? programme = nul)
        {
            var valeurs = Nouveau dictionnaire<chaîne, objet>
            {
                { "Nombre", nombre},
                { "Message", message},
                { "Programme", programme },
                { "Clé", Clé },
                { "Dispositifs", dispositif }
            };

            revenir getMessages(Avoir une réponse($"{Serveur} /services/send.php", valeurs)["Messages"])[0];
        }

        /// 
        /// Envoyez plusieurs messages à différents numéros de mobile.
        /// 
        ///  Le tableau contenant les nombres et les messages. 
        ///  Définissez ceci sur USE_SPECIFIED si vous souhaitez utiliser des appareils et des cartes SIM spécifiés dans l'argument appareils.
        /// Définissez ceci sur USE_ALL_DEVICES si vous souhaitez utiliser tous les appareils disponibles et leur carte SIM par défaut pour envoyer des messages.
        /// Définissez ceci sur USE_ALL_SIMS si vous souhaitez utiliser tous les appareils disponibles et toutes leurs cartes SIM pour envoyer des messages. 
        ///  Le tableau d'ID de périphériques que vous souhaitez utiliser pour envoyer ces messages. 
        ///  Réglez-le sur horodatage lorsque vous souhaitez envoyer ce message. 
        ///  Définissez-le sur true si vous souhaitez envoyer des messages en utilisant un seul appareil aléatoire à partir d'appareils sélectionnés. 
        ///  S'il y a une erreur lors de l'envoi des messages. 
        ///  Le tableau contenant les messages. 
        Publique statique dictionnaire<chaîne, objet> [] Envoyer des messages(liste<dictionnaire<chaîne, chaîne>> messages, Option options = Option.USE_SPECIFIED, chaîne[] dispositifs = nul, longue? programme = nul, booléen useRandomDevice = faux)
        {
            var valeurs = Nouveau dictionnaire<chaîne, objet>
            {
                { "Messages", JsonConvert.SerializeObject(messages)},
                { "Programme", programme },
                { "Clé", Clé },
                { "Dispositifs", dispositifs },
                { "Option", (int) options },
                { "UseRandomDevice", useRandomDevice }
            };

            revenir getMessages(Avoir une réponse($"{Serveur} /services/send.php", valeurs)["Messages"]);
        }

        /// 
        /// Envoyer un message aux contacts de la liste de contacts spécifiée.
        /// 
        ///  L'ID de la liste de contacts à laquelle vous souhaitez envoyer ce message. 
        ///  Le message que vous souhaitez envoyer. 
        ///  Définissez ceci sur USE_SPECIFIED si vous souhaitez utiliser des appareils et des cartes SIM spécifiés dans l'argument appareils.
        /// Définissez ceci sur USE_ALL_DEVICES si vous souhaitez utiliser tous les appareils disponibles et leur carte SIM par défaut pour envoyer des messages.
        /// Définissez ceci sur USE_ALL_SIMS si vous souhaitez utiliser tous les appareils disponibles et toutes leurs cartes SIM pour envoyer des messages. 
        ///  Le tableau d'ID de périphériques que vous souhaitez utiliser pour envoyer ces messages. 
        ///  Réglez-le sur horodatage lorsque vous souhaitez envoyer ce message. 
        ///  S'il y a une erreur lors de l'envoi des messages. 
        ///  Le tableau contenant les messages. 
        Publique statique dictionnaire<chaîne, objet> [] SendMessageToContactsList(int listid, chaîne message, Option options = Option.USE_SPECIFIED, chaîne[] dispositifs = nul, longue? programme = nul)
        {
            var valeurs = Nouveau dictionnaire<chaîne, objet>
            {
                { "Listid", listid},
                { "Message", message},
                { "Programme", programme },
                { "Clé", Clé },
                { "Dispositifs", dispositifs },
                { "Option", (int) options }
            };

            revenir getMessages(Avoir une réponse($"{Serveur} /services/send.php", valeurs)["Messages"]);
        }

        /// 
        /// Récupère un message en utilisant l'ID.
        /// 
        ///  L'ID d'un message que vous souhaitez récupérer. 
        ///  S'il y a une erreur lors de la réception d'un message. 
        ///  Le dictionnaire contenant des informations sur le message. 
        Publique statique dictionnaire<chaîne, objet> GetMessageByID(int id)
        {
            var valeurs = Nouveau dictionnaire<chaîne, objet>
            {
                { "Clé", Clé },
                { "Id", id }
            };

            revenir getMessages(Avoir une réponse($"{Serveur} /services/read-messages.php", valeurs)["Messages"])[0];
        }

        /// 
        /// Récupère les messages à l'aide de l'ID de groupe.
        /// 
        ///  L'ID de groupe des messages que vous souhaitez récupérer. 
        ///  S'il y a une erreur lors de la réception des messages. 
        ///  Le tableau contenant les messages. 
        Publique statique dictionnaire<chaîne, objet> [] GetMessagesByGroupID(chaîne ID de groupe)
        {
            var valeurs = Nouveau dictionnaire<chaîne, objet>
            {
                { "Clé", Clé },
                { "GroupId", ID de groupe }
            };

            revenir getMessages(Avoir une réponse($"{Serveur} /services/read-messages.php", valeurs)["Messages"]);
        }

        /// 
        /// Récupère les messages en utilisant l'état.
        /// 
        ///  L'état des messages que vous souhaitez récupérer. 
        ///  Recherchez les messages envoyés ou reçus après cette heure. 
        ///  Recherchez les messages envoyés ou reçus avant cette heure. 
        ///  S'il y a une erreur lors de la réception des messages. 
        ///  Le tableau contenant les messages. 
        Publique statique dictionnaire<chaîne, objet> [] GetMessagesByStatus(chaîne statut, longue? startTimestamp = nul, longue? endTimestamp = nul)
        {
            var valeurs = Nouveau dictionnaire<chaîne, objet>
            {
                { "Clé", Clé },
                { "statut", statut },
                { "StartTimestamp", startTimestamp },
                { "EndTimestamp", endTimestamp }
            };

            revenir getMessages(Avoir une réponse($"{Serveur} /services/read-messages.php", valeurs)["Messages"]);
        }
        
        /// 
        /// Ajouter un nouveau contact à la liste de contacts.
        /// 
        ///  L'ID de la liste de contacts dans laquelle vous souhaitez ajouter ce contact. 
        ///  Le numéro de portable du contact. 
        ///  Le nom du contact. 
        ///  Définissez-le sur true si vous souhaitez réinscrire ce contact s'il existe déjà. 
        ///  Un dictionnaire contenant des détails sur un contact nouvellement ajouté. 
        Publique statique dictionnaire<chaîne, objet> Ajouter le contact(int listid, chaîne nombre, chaîne Nom = nul, booléen se réinscrire = faux)
        {
            var valeurs = Nouveau dictionnaire<chaîne, objet>
            {
                {"Clé", Clé},
                {"Listid", listid},
                {"Nombre", nombre},
                {"Nom", Nom},
                {"Se réabonner", se réinscrire ? '1' : '0'},
            };
            projet projet = (projet) Avoir une réponse($"{Serveur} /services/manage-contacts.php", valeurs)["Contact"];
            revenir projet.ToObject<dictionnaire<chaîne, objet>> ();
        }
        
        /// 
        /// Désinscrire un contact de la liste de contacts.
        /// 
        ///  L'ID de la liste de contacts dont vous souhaitez désinscrire ce contact. 
        ///  Le numéro de portable du contact. 
        ///  Un dictionnaire contenant des détails sur le contact désabonné. 
        Publique statique dictionnaire<chaîne, objet> Se désinscrire(int listid, chaîne nombre)
        {
            var valeurs = Nouveau dictionnaire<chaîne, objet>
            {
                {"Clé", Clé},
                {"Listid", listid},
                {"Nombre", nombre},
                {"Se désabonner", '1'}
            };
            projet projet = (projet)Avoir une réponse($"{Serveur} /services/manage-contacts.php", valeurs)["Contact"];
            revenir projet.ToObject<dictionnaire<chaîne, objet>> ();
        }
        
        /// 
        /// Obtenez les crédits de message restants.
        /// 
        ///  S'il y a une erreur lors de l'obtention des crédits de message. 
        ///  Le montant des crédits de message restants. 
        Publique statique chaîne GetBalance()
        {
            var valeurs = Nouveau dictionnaire<chaîne, objet>
            {
                {"Clé", Clé}
            };
            JToken crédits = Avoir une réponse($"{Serveur} /services/send.php", valeurs)["Crédits"];
            si (crédits.Type != JTokenType.Nul)
            {
                revenir crédits.ToString();
            }
            revenir "Illimité";
        }

        privé statique dictionnaire<chaîne, objet> [] getMessages(JToken messagesJToken)
        {
            JArray jArray = (JArray)messagesJToken;
            var messages = Nouveau dictionnaire<chaîne, objet> [jArray.Compter];
            pour (var indice = 0; indice < jArray.Compter; indice++)
            {
                messages[indice] = jArray[indice].ToObject<dictionnaire<chaîne, objet>> ();
            }
            revenir messages;
        }

        privé statique JToken Avoir une réponse(chaîne URL, dictionnaire<chaîne, objet> postData)
        {
            var demande = (HttpWebRequest)WebRequest.Créer(URL);
            var datastring = CreateDataString(postData);
            var Date = Codage.UTF8.GetBytes(datastring);

            demande.Méthode = "PUBLIER";
            demande.ContentType = "Application / x-www-form-urlencoded";
            demande.ContentLength = Date.Longueur;
            ServicePointManager.Attendez-vous à 100 Continuer = faux;
            ServicePointManager.SécuritéProtocole = SecurityProtocolType.Tls12;
            en utilisant (var courant = demande.GetRequestStream())
            {
                courant.Écrire(Date, 0, Date.Longueur);
            }

            var réponse = (HttpWebResponse)demande.Avoir une réponse();

            si (réponse.StatusCode == HttpStatusCode.bien)
            {
                en utilisant (StreamReader StreamReader = Nouveau StreamReader(réponse.GetResponseStream()))
                {
                    var jsonResponse = StreamReader.ReadToEnd();
                    essayer
                    {
                        projet projet = projet.Analyser(jsonResponse);
                        si ((booléen)projet["Succès"])
                        {
                            revenir projet["Date"];
                        }
                        jeter Nouveau Exception(projet["Erreur"]["Message"].ToString());
                    }
                    capture (JsonReaderException)
                    {
                        si (chaîne.IsNullOrEmpty(jsonResponse))
                        {
                            jeter Nouveau InvalidDataException("Données manquantes dans la demande. Veuillez fournir toutes les informations requises pour envoyer des messages.");
                        }
                        jeter Nouveau Exception(jsonResponse);
                    }
                }
            }

            jeter Nouveau WebException($"Erreur HTTP: {(int) response.StatusCode} {response.StatusCode}");
        }

        privé statique chaîne CreateDataString(dictionnaire<chaîne, objet> Date)
        {
            StringBuilder datastring = Nouveau StringBuilder();
            booléen première = faux;
            pour chaque (var obj dans Date)
            {
                si (obj.Valeur != nul)
                {
                    si (première)
                    {
                        première = faux;
                    }
                    autre
                    {
                        datastring.Ajouter("&");
                    }
                    datastring.Ajouter(HttpUtility.UrlEncode(obj.Clé));
                    datastring.Ajouter("=");
                    datastring.Ajouter(obj.Valeur est chaîne[]
                        ? HttpUtility.UrlEncode(JsonConvert.SerializeObject(obj.Valeur))
                        : HttpUtility.UrlEncode(obj.Valeur.ToString()));
                }
            }
            revenir datastring.ToString();
        }
    }
}

Envoyer un seul message

essayer
{
    // Envoie un message à l'aide de l'appareil principal.
    SMS.API.SendSingleMessage("+911234567890", "Ceci est un test de message unique.");

    // Envoie un message en utilisant l'ID de périphérique 1.
    dictionnaire<chaîne, objet> message = SMS.API.SendSingleMessage("+911234567890", "Ceci est un test de message unique.", "1");
	
    // Envoie un message en utilisant la carte SIM dans l'emplacement 1 de l'ID d'appareil 1 (représenté par "1 | 0").
    // L'emplacement SIM est un index, donc l'indice de la première carte SIM est 0 et l'indice de la deuxième carte SIM est 1.
    // Dans cet exemple, 1 représente l'ID de l'appareil et 0 représente l'index de l'emplacement SIM.
    dictionnaire<chaîne, objet> message = SMS.API.SendSingleMessage("+911234567890", "Ceci est un test de message unique.", "1|0");

    // Envoie un message programmé à l'aide de l'appareil principal.
    longue horodatage = (longue) DateHeure.UtcNow.AjouterMinutes(2).Soustraire(Nouveau DateHeure(1970, 1, 1)).totalsecondes;
    dictionnaire<chaîne, objet> message = SendSingleMessage(textBoxNumber.Texte, textBoxMessage.Texte, nul, horodatage);
    
    Messagerie.Spectacle("Envoi d'un message réussi.");
}
capture (Exception exception)
{
    Messagerie.Spectacle(exception.Message, "! Erreur", MessageBoxButtons.bien, MessageBoxIcon.Erreur);
}

Envoyer des messages en masse

liste<dictionnaire<chaîne, chaîne>> messages = Nouveau liste<dictionnaire<chaîne, chaîne>> ();
pour (int les = 1; les <= 12; les++)
{
    var message = Nouveau dictionnaire<chaîne, chaîne>
    {
        { "Nombre", "+911234567890" },
        { "Message", "Ceci est un test # {$i} de la version C#. Test de la fonctionnalité de message en masse." }
    };
    messages.Ajouter(message);
}

essayer
{
    // Envoie des messages à l'aide de l'appareil principal.
    SMS.API.Envoyer des messages(messages);

    // Envoyez des messages en utilisant la carte SIM par défaut de tous les appareils disponibles. Les messages seront répartis entre tous les appareils.
    SMS.API.Envoyer des messages(messages, SMS.API.Option.USE_ALL_DEVICES);
	
    // Envoyez des messages en utilisant toutes les cartes SIM de tous les appareils disponibles. Les messages seront répartis entre toutes les cartes SIM.
    SMS.API.Envoyer des messages(messages, SMS.API.Option.USE_ALL_SIMS);

    // Envoie des messages en utilisant uniquement les périphériques spécifiés. Les messages seront répartis entre les appareils ou les cartes SIM que vous avez spécifiés.
    // Si vous envoyez 12 messages en utilisant ce code, 4 messages seront envoyés par Device ID 1, les 4 autres par SIM dans l'emplacement 1 de 
    // Device ID 2 (représenté comme "2 | 0") et 4 restants par SIM dans l'emplacement 2 de Device ID 2 (représenté comme "2 | 1").
    SMS.API.Envoyer des messages(messages, SMS.API.Option.USE_SPECIFIED, Nouveau [] {"1", "2|0", "2|1"});
    
    // Envoie des messages dans les délais en utilisant l'appareil principal.
    longue horodatage = (longue) DateHeure.UtcNow.AjouterMinutes(2).Soustraire(Nouveau DateHeure(1970, 1, 1)).totalsecondes;
    dictionnaire<chaîne, objet> [] messages = SMS.API.Envoyer des messages(messages, Option.USE_SPECIFIED, nul, horodatage);
    
    // Envoyer un message aux contacts de la liste de contacts avec l'ID de 1.
    dictionnaire<chaîne, objet> [] messages = SMS.API.SendMessageToContactsList(1, "Tester", SMS.API.Option.USE_SPECIFIED, Nouveau [] {"1"});

    // Envoie un message dans les délais aux contacts de la liste de contacts avec l'ID de 1.
    dictionnaire<chaîne, objet> [] messages = SMS.API.SendMessageToContactsList(1, "Test #1", Option.USE_SPECIFIED, nul, horodatage);
    
    Messagerie.Spectacle("Succès");
}
capture (Exception exception)
{
    Messagerie.Spectacle(exception.Message, "! Erreur", MessageBoxButtons.bien, MessageBoxIcon.Erreur);
}

Obtenez les crédits de message restants

essayer
{
    chaîne crédits = SMS.API.GetBalance();
    Messagerie.Spectacle($"Crédits de message restants: {credits}");
}
capture (Exception exception)
{
    Messagerie.Spectacle(exception.Message, "! Erreur", MessageBoxButtons.bien, MessageBoxIcon.Erreur);
}

Recevoir les messages et leur état actuel

essayer 
{
    // Récupère un message en utilisant l'ID.
    dictionnaire<chaîne, objet> message = SMS.API.GetMessageByID(1);

    // Récupère les messages en utilisant l'ID de groupe.
    dictionnaire<chaîne, objet> [] messages = SMS.API.GetMessagesByGroupID(") * V5LxqyBMEbQrl9 J$5bb4c03e8a07b7.62193871");
    
    // Récupère les messages reçus au cours des dernières 24 heures.
    longue horodatage = (longue) DateHeure.UtcNow.AddHours(-24).Soustraire(Nouveau DateHeure(1970, 1, 1)).totalsecondes;
    GetMessagesByStatus("Reçu", horodatage);
}
capture (Exception exception)
{
    Messagerie.Spectacle(exception.Message, "! Erreur", MessageBoxButtons.bien, MessageBoxIcon.Erreur);
}

Gérer les contacts

essayer {
    // Ajouter un nouveau contact à la liste de contacts 1 ou réinscrire le contact s'il existe déjà.
    dictionnaire<chaîne, objet> contact = SMS.API.Ajouter le contact(1, "+911234567890", "Tester C#", faux);
    
    // Désinscription d'un contact à l'aide du numéro de portable.
    dictionnaire<chaîne, objet> contact = Se désinscrire(1, "+911234567890");
}
capture (Exception exception)
{
    Messagerie.Spectacle(exception.Message, "! Erreur", MessageBoxButtons.bien, MessageBoxIcon.Erreur);
}