Passer au contenu principal

Avec les API SMS de Sendapp
vous pouvez automatiser les notifications par SMS
avec n'importe quelle plateforme

Conçu pour les petites et moyennes entreprises,
pour révolutionner la communication avec les clients.

Essai gratuit

Exemple de script WebHook

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

définir("CLÉ API", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

essayer {
    si (isset($_SERVER["HTTP_X_SG_SIGNATURE"])) {
        $hash = base64_encode(hash_hmac('sha256', $_POST["messages"], CLÉ API, vrai));
        si ($hash === $_SERVER["HTTP_X_SG_SIGNATURE"]) {
            $messages = json_decode($_POST["messages"], vrai);

            /**
             * Par exemple :-
             * $messages = [
             * 0 => [
             * "ID" => "1",
             * "number" => "+911234567890",
             * "message" => "Ceci est un message de test",
             * "deviceID" => "1",
             * "simSlot" => "0",
             * "userID" => "1",
             * "status" => "Received",
             * "sentDate" => "2018-10-20T00:00:00+02:00",
             * "deliveredDate" => "2018-10-20T00:00:00+02:00".
             * "groupID" => null
             * ]
             * ]
             *
             * "senDate" représente la date et l'heure auxquelles le message a été reçu sur l'appareil.
             * deliveredDate représente la date et l'heure auxquelles le message a été reçu 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(« Les signatures ne correspondent pas ! »);
        }
    } autre {
        http_response_code(400);
        error_log("Signature introuvable !");
    }
} attraper (Exception $e) {
    error_log($e->obtenirMessage());
}

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

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

/**
 * @param string $number Le numéro de téléphone mobile où vous souhaitez envoyer le message.
 * @param string $message Le message que vous voulez envoyer...
 * @param int|string $device L'ID d'un appareil que vous souhaitez utiliser pour envoyer ce message.
 * @param int $schedule Indique l'heure à laquelle vous souhaitez envoyer ce message.
 *
 * @return array Returns Le tableau contenant les informations sur le message.
 * @throws Exception S'il y a une erreur lors de l'envoi d'un message.
 */
fonction sendSingleMessage($numéro, Message $, 1Appareil TP4T = 0, Horaire $ = nul)
{
    $url = SERVEUR . "/services/envoi.php";
    $postData = tableaux('nombre' => $numéro, 'message' => Message $, 'calendrier' => Horaire $, 'clé' => CLÉ API, 'dispositifs' => 1Appareil TP4T);
    retour envoyer une demande($url, $postData)["messages"][0];
}

/**
 * @param array $messages Tableau contenant les numéros et les messages.
 * @param int $option Attribuez la valeur USE_SPECIFIED à ce paramètre si vous souhaitez utiliser les appareils et les cartes SIM spécifiés dans l'argument devices.
 * Définissez cette option à 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 à USE_ALL_SIMS si vous voulez utiliser tous les appareils disponibles et toutes leurs cartes SIM pour envoyer des messages.
 * @param array $devices Le tableau des ID des appareils que vous voulez utiliser pour envoyer ces messages.
 * @param int $schedule Définit l'horodatage du moment où vous souhaitez envoyer ces messages.
 * @param bool $useRandomDevice Réglez-le à true si vous voulez envoyer des messages en utilisant un seul appareil aléatoire parmi les appareils sélectionnés.
 *
 * @return array Returns 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" => "Pending",
 * "sentDate" => "2018-10-20T00:00:00+02:00",
 * "deliveredDate" => null
 * "groupID" => ")V5LxqyBMEbQrl9*J$5bb4c03e8a07b7.62193871"
 * ]
 * ]
 * @throws Exception S'il y a une erreur lors de l'envoi des messages.
 */
fonction envoyer des messages($messages, Option $ = USE_SPECIFIED, $appareils = [], Horaire $ = nul, $useRandomDevice = FAUX)
{
    $url = SERVEUR . "/services/envoi.php";
    $postData = [
        'messages' => json_encode($messages),
        'calendrier' => Horaire $,
        'clé' => CLÉ API,
        'dispositifs' => json_encode($appareils),
        'options' => Option $,
        'useRandomDevice' => $useRandomDevice
    ];
    retour envoyer une demande($url, $postData)["messages"];
}

/**
 * @param int $listID L'ID de la liste de contacts dans laquelle vous souhaitez envoyer ce message.
 * @param string $message Le message que vous souhaitez envoyer.
 * @param int $option Attribuez la valeur USE_SPECIFIED à ce paramètre si vous souhaitez utiliser les appareils et les cartes SIM spécifiés dans l'argument devices.
 * Définissez cette option 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 à USE_ALL_SIMS si vous voulez utiliser tous les appareils disponibles et toutes leurs cartes SIM pour envoyer des messages.
 * @param array $devices Le tableau d'ID des appareils que vous voulez utiliser pour envoyer le message.
 * @param int $schedule Indique l'heure à laquelle vous souhaitez envoyer ce message.
 *
 * @return array Returns 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, $appareils = [], Horaire $ = nul)
{
    $url = SERVEUR . "/services/envoi.php";
    $postData = [
        'listID' => $listID,
        'message' => Message $,
        'calendrier' => Horaire $,
        'clé' => CLÉ API,
        'dispositifs' => json_encode($appareils),
        'options' => Option $
    ];
    retour 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 l'obtention d'un message.
 */
fonction getMessageByID($id) {
    $url = SERVEUR . "/services/lire-messages.php";
    $postData = [
        'clé' => CLÉ API,
        'identifiant' => $id
    ];
    retour envoyer une demande($url, $postData)["messages"][0];
}

/**
 * @param string $groupID L'identifiant du groupe de messages que vous souhaitez récupérer.
 *
 * @return array Le tableau contenant les messages.
 * @throws Exception S'il y a une erreur lors de l'obtention des messages.
 */
fonction getMessagesByGroupID($groupID) {
    $url = SERVEUR . "/services/lire-messages.php";
    $postData = [
        'clé' => CLÉ API,
        'identifiant de groupe' => $groupID
    ];
    retour envoyer une demande($url, $postData)["messages"];
}

/**
 * @param string $status Le statut des messages que vous souhaitez récupérer.
 * @param int $startTimestamp Recherche des messages envoyés ou reçus après cette heure.
 * @param int $endTimestamp Recherche des 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 l'obtention des messages.
 */
fonction getMessagesByStatus($statut, $startHorodatage, $endTimestamp)
{
    $url = SERVEUR . "/services/lire-messages.php";
    $postData = [
        'clé' => CLÉ API,
        'statut' => $statut,
        'startTimestamp' => $startHorodatage,
        'horodatage de fin' => $endTimestamp
    ];
    retour envoyer une demande($url, $postData)["messages"];
}

/**
 * @param int $listID L'ID de la liste de contacts dans laquelle vous souhaitez ajouter ce contact.
 * @param string $number Le numéro de téléphone mobile du contact.
 * @param string $name Le nom du contact.
 * @param bool $resubscribe Définissez-le à true si vous souhaitez réinscrire ce contact s'il existe déjà.
 *
 * @return array Le tableau contenant un nouveau contact ajouté.
 * @throws Exception S'il y a une erreur lors de l'ajout d'un nouveau contact.
 */
fonction ajouter le contact($listID, $numéro, $nom = nul, $réabonner = FAUX)
{
    $url = SERVEUR . "/services/gérer-contacts.php";
    $postData = [
        'clé' => CLÉ API,
        'listID' => $listID,
        'nombre' => $numéro,
        'nom' => $nom,
        'réabonner' => $réabonner
    ];
    retour envoyer une demande($url, $postData)["contact"];
}

/**
 * @param int $listID L'ID de la liste de contacts à partir de laquelle vous souhaitez vous désinscrire de ce contact.
 * @param string $number Le numéro de téléphone mobile 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 à false.
 */
fonction se désinscrireContact($listID, $numéro)
{
    $url = SERVEUR . "/services/gérer-contacts.php";
    $postData = [
        'clé' => CLÉ API,
        'listID' => $listID,
        'nombre' => $numéro,
        'Se désabonner' => vrai
    ];
    retour envoyer une demande($url, $postData)["contact"];
}

/**
 * @return string La quantité de crédits de message restants.
 * @throws Exception S'il y a une erreur lors de l'obtention des crédits de message.
 */
fonction obtenirBalance()
{
    $url = SERVEUR . "/services/envoi.php";
    $postData = [
        'clé' => CLÉ API,
    ];
    $crédits = envoyer une demande($url, $postData)["crédits"];
    retour est_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, vrai);
    curl_setopt($ch, CURLOPT_RETURN TRANSFERT, vrai);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
    1TP4Réponse = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    si (curl_errno($ch)) {
        lancer nouveau Exception(curl_error($ch));
    }
    curl_close($ch);
    si ($httpCode == 200) {
        $json = json_decode(1TP4Réponse, vrai);
        si ($json == FAUX) {
            si (vide(1TP4Réponse)) {
                lancer nouveau Exception("Données manquantes dans la demande. Veuillez fournir toutes les informations requises pour envoyer des messages.");
            } autre {
                lancer nouveau Exception(1TP4Réponse);
            }
        } autre {
            si ($json["succès"]) {
                retour $json["date"];
            } autre {
                lancer nouveau Exception($json["erreur"]["message"]);
            }
        }
    } autre {
        lancer 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 messages uniques.");

    // Envoie un message en utilisant l'ID de périphérique 1.
    $msg = sendSingleMessage("+911234567890", "Ceci est un test de messages uniques.", 1);
	
    // Envoie un message en utilisant la carte SIM dans l'emplacement 1 de l'ID de périphérique 1 (représenté par "1|0").
    // L'emplacement SIM est un index donc l'index du premier SIM est 0 et l'index du deuxième 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 messages uniques.", "1|0");

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

    écho « Message envoyé avec succès.;
} attraper (Exception $e) {
    écho $e->obtenirMessage();
}

Envoyer des messages en masse

$messages = tableaux();

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é des messages en masse."
        ]);
}

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

    // Envoyer 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 partagés entre toutes les cartes SIM.
    envoyer des messages($messages, USE_ALL_SIMS);

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

    écho "Messages groupés envoyés avec succès.";
} attraper (Exception $e) {
    écho $e->obtenirMessage();
}

Obtenez les crédits de message restants

essayer {
    $crédits = obtenirBalance();
    écho "Crédits de message restant : {$credits}";
} attraper (Exception $e) {
    écho $e->obtenirMessage();
}

Obtenir des messages et leur statut actuel

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

    // Récupère les messages à l'aide de 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);
} attraper (Exception $e) {
    écho $e->obtenirMessage();
}

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", "Test", vrai);
    print_r($contact);
    
    // Se désabonner du contact en utilisant le numéro de mobile.
    $contact = se désinscrireContact(1, "+911234567890");
    print_r($contact);
} attraper (Exception $e) {
    écho $e->obtenirMessage();
}



Intégration C#

en utilisant Système;
en utilisant Système.Collections.Générique;
en utilisant Système.je;
en utilisant Système.filet;
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;

espaces de noms SMS
{
    statique classe Apis
    {
        privé statique lecture seulement chaîne Serveur = "https://sms.sendapp.live"
        privé statique lecture seulement chaîne clé = "6e1bdb4ed91f3b83071dd5a520c9d226ea19245e";

        public énumération option
        {
            USE_SPECIFIED = 0,
            USE_ALL_DEVICES = 1,
            USE_ALL_SIMS = 2
        }

        ///
        /// Envoyer un message unique à un numéro de mobile spécifique.
        ///
        /// Le numéro de mobile auquel vous souhaitez envoyer un message.
        /// Le message que vous souhaitez envoyer.
        /// L'ID d'un appareil que vous souhaitez utiliser pour envoyer ce message.
        /// Réglez-le sur l'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.
        public statique Dictionnaire<chaîne, objet> SendSingleMessage(chaîne Numéro, chaîne message, chaîne appareil = "0", long? calendrier = nul)
        {
            var valeurs = nouveau Dictionnaire<chaîne, objet>
            {
                { "nombre", Numéro},
                { "message", message},
                { "calendrier", calendrier },
                { "clé", clé },
                { "dispositifs", appareil }
            };

            retour Obtenir des messages(Avoir une réponse($"{Serveur}/services/envoi.php", valeurs)["messages"])[0];
        }

        ///
        /// Envoyez plusieurs messages à différents numéros mobiles.
        ///
        /// Le tableau contenant les nombres et les messages.
        /// Définissez ceci sur USE_SPECIFIED si vous souhaitez utiliser les appareils et les cartes SIM spécifiés dans l'argument des 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 d'appareils que vous souhaitez utiliser pour envoyer ces messages.
        /// Réglez-le sur l'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 parmi les appareils sélectionnés.
        /// S'il y a une erreur lors de l'envoi de messages.
        /// Le tableau contenant les messages.
        public statique Dictionnaire<chaîne, objet>[] Envoyer des messages(liste<Dictionnaire<chaîne, chaîne>> messages, option option = option.USE_SPECIFIED, chaîne[] dispositifs = nul, long? calendrier = nul, bourdonner useRandomDevice = FAUX)
        {
            var valeurs = nouveau Dictionnaire<chaîne, objet>
            {
                { "messages", JsonConvert.SerializeObjectSerializeObject(messages)},
                { "calendrier", calendrier },
                { "clé", clé },
                { "dispositifs", dispositifs },
                { "options", (entier) option },
                { "useRandomDevice", useRandomDevice }
            };

            retour Obtenir des messages(Avoir une réponse($"{Serveur}/services/envoi.php", valeurs)["messages"]);
        }

        ///
        /// Envoie 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 les appareils et les cartes SIM spécifiés dans l'argument des 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 d'appareils que vous souhaitez utiliser pour envoyer ces messages.
        /// Réglez-le sur l'horodatage lorsque vous souhaitez envoyer ce message.
        /// S'il y a une erreur lors de l'envoi de messages.
        /// Le tableau contenant les messages.
        public statique Dictionnaire<chaîne, objet>[] SendMessageToContactsList(entier ID de liste, chaîne message, option option = option.USE_SPECIFIED, chaîne[] dispositifs = nul, long? calendrier = nul)
        {
            var valeurs = nouveau Dictionnaire<chaîne, objet>
            {
                { "listID", ID de liste},
                { "message", message},
                { "calendrier", calendrier },
                { "clé", clé },
                { "dispositifs", dispositifs },
                { "options", (entier) option }
            };

            retour Obtenir des messages(Avoir une réponse($"{Serveur}/services/envoi.php", valeurs)["messages"]);
        }

        ///
        /// Obtenir 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.
        public statique Dictionnaire<chaîne, objet> GetMessageByID(entier identifiant)
        {
            var valeurs = nouveau Dictionnaire<chaîne, objet>
            {
                { "clé", clé },
                { "identifiant", identifiant }
            };

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

        ///
        /// Récupérez les messages à l'aide de l'ID de groupe.
        ///
        /// ID de groupe de 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.
        public statique Dictionnaire<chaîne, objet>[] GetMessagesByGroupID(chaîne ID de groupe)
        {
            var valeurs = nouveau Dictionnaire<chaîne, objet>
            {
                { "clé", clé },
                { "identifiant de groupe", ID de groupe }
            };

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

        ///
        /// Récupère les messages en utilisant le status.
        ///
        /// L'état des messages que vous souhaitez récupérer.
        /// Rechercher les messages envoyés ou reçus après cette heure.
        /// Rechercher 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.
        public statique Dictionnaire<chaîne, objet>[] GetMessagesByStatus(chaîne statut, long? startTimestamp = nul, long? endTimestamp = nul)
        {
            var valeurs = nouveau Dictionnaire<chaîne, objet>
            {
                { "clé", clé },
                { "statut", statut },
                { "startTimestamp", startTimestamp },
                { "horodatage de fin", endTimestamp }
            };

            retour Obtenir des messages(Avoir une réponse($"{Serveur}/services/read-messages.php", valeurs)["messages"]);
        }
        
        ///
        /// Ajouter un nouveau contact à la liste des contacts.
        ///
        /// L'ID de la liste de contacts où 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éabonner ce contact s'il existe déjà.
        /// Un dictionnaire contenant des détails sur un contact nouvellement ajouté.
        public statique Dictionnaire<chaîne, objet> Ajouter le contact(entier ID de liste, chaîne Numéro, chaîne nom = nul, bourdonner réabonner = FAUX)
        {
            var valeurs = nouveau Dictionnaire<chaîne, objet>
            {
                {"clé", clé},
                {"listID", ID de liste},
                {"nombre", Numéro},
                {"nom", nom},
                {"se réabonner", réabonner ? '1' : '0'},
            };
            JObject jObjet = (JObject) Avoir une réponse($"{Serveur}/services/manage-contacts.php", valeurs)["contact"];
            retour jObjet.VersObjet<Dictionnaire<chaîne, objet>>();
        }
        
        ///
        /// Désinscrire un contact de la liste des contacts.
        ///
        /// L'ID de la liste de contacts à partir de laquelle vous souhaitez désinscrire ce contact.
        /// Le numéro de portable du contact.
        /// Un dictionnaire contenant des détails sur le contact désabonné.
        public statique Dictionnaire<chaîne, objet> DésinscriptionContact(entier ID de liste, chaîne Numéro)
        {
            var valeurs = nouveau Dictionnaire<chaîne, objet>
            {
                {"clé", clé},
                {"listID", ID de liste},
                {"nombre", Numéro},
                {"Se désabonner", '1'}
            };
            JObject jObjet = (JObject)Avoir une réponse($"{Serveur}/services/manage-contacts.php", valeurs)["contact"];
            retour jObjet.VersObjet<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.
        public statique chaîne ObtenirBalance()
        {
            var valeurs = nouveau Dictionnaire<chaîne, objet>
            {
                {"clé", clé}
            };
            JTokens crédits = Avoir une réponse($"{Serveur}/services/envoi.php", valeurs)["crédits"];
            si (crédits.Taper != JTokenType.Nul)
            {
                retour crédits.ToString();
            }
            retour "Illimité";
        }

        privé statique Dictionnaire<chaîne, objet>[] Obtenir des messages(JTokens messagesJToken)
        {
            Tableau J jTableau = (Tableau J)messagesJToken;
            var messages = nouveau Dictionnaire<chaîne, objet>[jTableau.Compter];
            pour (var indice = 0; indice < jTableau.Compter; indice++)
            {
                messages[indice] = jTableau[indice].VersObjet<Dictionnaire<chaîne, objet>>();
            }
            retour messages;
        }

        privé statique JTokens Avoir une réponse(chaîne il cria, Dictionnaire<chaîne, objet> postdater)
        {
            var demande = (HttpWebRequest)WebRequest.Créer(il cria);
            var dataString = CreateDataString(postdater);
            var date = codage.UTF8.Obtenir des octets(dataString);

            demande.méthode = "POSTE";
            demande.Type de contenu = "application/x-www-formulaire-urlencodé";
            demande.Longueur du contenu = date.Longueur;
            Gestionnaire de points de service.Attendre100Continuer = vrai;
            Gestionnaire de points de service.Protocole de sécurité = SecurityProtocolTypeSecurityProtocolType.Tls12;
            en utilisant (var flux = demande.GetRequestStream())
            {
                flux.Écrire(date, 0, date.Longueur);
            }

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

            si (réponse.Code d'état == HttpStatusCode.D'accord)
            {
                en utilisant (Lecteur de flux streamReader = nouveau Lecteur de flux(réponse.GetResponseStream()))
                {
                    var jsonResponse = streamReader.LireAFin();
                    essayer
                    {
                        JObject jObjet = JObject.Il semblait(jsonResponse);
                        si ((bourdonner)jObjet["succès"])
                        {
                            retour jObjet["date"];
                        }
                        lancer nouveau Exception(jObjet["erreur"]["message"].ToString());
                    }
                    attraper (JsonReaderException)
                    {
                        si (chaîne.EstNullOuVide(jsonResponse))
                        {
                            lancer nouveau InvalidDataException("Données manquantes dans la demande. Veuillez fournir toutes les informations requises pour envoyer des messages.");
                        }
                        lancer nouveau Exception(jsonResponse);
                    }
                }
            }

            lancer nouveau WebException($"Erreur HTTP : {(int)response.StatusCode} {response.StatusCode}");
        }

        privé statique chaîne CreateDataString(Dictionnaire<chaîne, objet> date)
        {
            Générateur de chaînes dataString = nouveau Générateur de chaînes();
            bourdonner d'abord = vrai;
            pour chaque (var objet dans date)
            {
                si (objet.Valeur != nul)
                {
                    si (d'abord)
                    {
                        d'abord = FAUX;
                    }
                    autre
                    {
                        dataString.annexe("&");
                    }
                    dataString.annexe(HttpUtility.UrlEncode(objet.clé));
                    dataString.annexe("=");
                    dataString.annexe(objet.Valeur est chaîne[]
                        ? HttpUtility.UrlEncode(JsonConvert.SerializeObjectSerializeObject(objet.Valeur))
                        : HttpUtility.UrlEncode(objet.Valeur.ToString()));
                }
            }
            retour dataString.ToString();
        }
    }
}

Envoyer un seul message

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

    // Envoie un message en utilisant l'ID de périphérique 1.
    Dictionnaire<chaîne, objet> message = SMS.Apis.SendSingleMessage("+911234567890", "Ceci est un test de messages uniques.", "1");
	
    // Envoie un message en utilisant la carte SIM dans l'emplacement 1 de l'ID de périphérique 1 (représenté par "1|0").
    // L'emplacement SIM est un index donc l'index du premier SIM est 0 et l'index du deuxième 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.Apis.SendSingleMessage("+911234567890", "Ceci est un test de messages uniques.", "1|0");

    // Envoi d'un message programmé à l'aide de l'appareil principal.
    long horodatage = (long) DateHeure.UtcNow.Ajouter des minutes(2).Soustraire(nouveau DateHeure(1970, 1, 1)).TotalSecondes;
    Dictionnaire<chaîne, objet> message = SendSingleMessage(textBoxNumber.Texte, textBoxMessage.Texte, nul, horodatage);
    
    Messagerie.Montre(« Message envoyé avec succès.);
}
attraper (Exception exception)
{
    Messagerie.Montre(exception.message, "!Erreur", MessageBoxButtons.D'accord, MessageBoxIcon.Erreur);
}

Envoyer des messages en masse

liste<Dictionnaire<chaîne, chaîne>> messages = nouveau liste<Dictionnaire<chaîne, chaîne>>();
pour (entier le = 1; le <= 12; le++)
{
    var message = nouveau Dictionnaire<chaîne, chaîne>
    {
        { "nombre", "+911234567890" },
        { "message", "Ceci est un test #{$i} de la version C#. Test de la fonctionnalité des messages en masse." }
    };
    messages.Ajouter(message);
}

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

    // Envoyer 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.Apis.Envoyer des messages(messages, SMS.Apis.option.USE_ALL_DEVICES);
	
    // Envoyez des messages en utilisant toutes les cartes SIM de tous les appareils disponibles. Les messages seront partagés entre toutes les cartes SIM.
    SMS.Apis.Envoyer des messages(messages, SMS.Apis.option.USE_ALL_SIMS);

    // Envoie des messages en utilisant uniquement les appareils spécifiés. Les messages seront répartis entre les appareils ou les cartes SIM que vous spécifiez.
    // Si vous envoyez 12 messages à l'aide de ce code, 4 messages seront envoyés par l'ID de l'appareil 1, les 4 autres par la carte SIM dans l'emplacement 1 de 
    // Device ID 2 (représenté par "2|0") et 4 restants par SIM dans l'emplacement 2 de Device ID 2 (représenté par "2|1").
    SMS.Apis.Envoyer des messages(messages, SMS.Apis.option.USE_SPECIFIED, nouveau [] {"1", "2|0", "2|1"});
    
    // Envoie des messages dans les délais à l'aide de l'appareil principal.
    long horodatage = (long) DateHeure.UtcNow.Ajouter des minutes(2).Soustraire(nouveau DateHeure(1970, 1, 1)).TotalSecondes;
    Dictionnaire<chaîne, objet>[] messages = SMS.Apis.Envoyer des messages(messages, option.USE_SPECIFIED, nul, horodatage);
    
    // Envoie un message aux contacts de la liste de contacts avec l'ID 1.
    Dictionnaire<chaîne, objet>[] messages = SMS.Apis.SendMessageToContactsList(1, "Test", SMS.Apis.option.USE_SPECIFIED, nouveau [] {"1"});

    // Envoie un message dans les délais aux contacts de la liste de contacts avec l'ID 1.
    Dictionnaire<chaîne, objet>[] messages = SMS.Apis.SendMessageToContactsList(1, "Essai #1", option.USE_SPECIFIED, nul, horodatage);
    
    Messagerie.Montre("Succès");
}
attraper (Exception exception)
{
    Messagerie.Montre(exception.message, "!Erreur", MessageBoxButtons.D'accord, MessageBoxIcon.Erreur);
}

Obtenez les crédits de message restants

essayer
{
    chaîne crédits = SMS.Apis.ObtenirBalance();
    Messagerie.Montre($"Crédits de message restant : {crédits}");
}
attraper (Exception exception)
{
    Messagerie.Montre(exception.message, "!Erreur", MessageBoxButtons.D'accord, MessageBoxIcon.Erreur);
}

Obtenir des messages et leur statut actuel

essayer 
{
    // Récupère un message à l'aide de l'ID.
    Dictionnaire<chaîne, objet> message = SMS.Apis.GetMessageByID(1);

    // Récupère les messages à l'aide de l'ID de groupe.
    Dictionnaire<chaîne, objet>[] messages = SMS.Apis.GetMessagesByGroupID(")V5LxqyBMEbQrl9*J$5bb4c03e8a07b7.62193871");
    
    // Récupère les messages reçus au cours des dernières 24 heures.
    long horodatage = (long) DateHeure.UtcNow.AjouterHeures(-24).Soustraire(nouveau DateHeure(1970, 1, 1)).TotalSecondes;
    GetMessagesByStatus("Reçu", horodatage);
}
attraper (Exception exception)
{
    Messagerie.Montre(exception.message, "!Erreur", MessageBoxButtons.D'accord, 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.Apis.Ajouter le contact(1, "+911234567890", "Essai C#", vrai);
    
    // Se désabonner du contact en utilisant le numéro de mobile.
    Dictionnaire<chaîne, objet> contact = DésinscriptionContact(1, "+911234567890");
}
attraper (Exception exception)
{
    Messagerie.Montre(exception.message, "!Erreur", MessageBoxButtons.D'accord, MessageBoxIcon.Erreur);
}