Accéder au contenu principal

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

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

Essai gratuit

Exemple de script WebHook

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

définir("API_KEY", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

essayer {
    si (isset($_SERVER[« HTTP_X_SG_SIGNATURE »])) {
        $hash = base64_encode(hash_hmac('sha256', $_POST["messages"], API_KEY, 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 de réception du message sur l'appareil. * deliveredDate 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épondez à un message via l'API ou exécutez des commandes. Les possibilités sont infinies.
                }
            }
        } autre {
            http_response_code(401);
            journal_d'erreurs("La signature ne correspond pas !");
        }
    } autre {
        http_response_code(400);
        journal_d'erreurs("Signature non trouvée !");
    }
} attraper (Exception $e) {
    journal_d'erreurs($e->obtenir un message());
}

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

définir("UTILISATION_SPÉCIFIÉE", 0);
définir(« UTILISER_TOUS_LES_APPAREILS », 1);
définir("UTILISER_TOUS_LES_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 appareil que vous souhaitez utiliser pour envoyer ce message. * @param int $schedule Définissez-le sur l'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 envoyer un message unique(Numéro $, Message $, Appareil $ = 0, Horaire $ = nul)
{
    $url = SERVEUR . "/services/send.php";
    $postData = tableau('nombre' => Numéro $, 'message' => Message $, 'calendrier' => Horaire $, 'clé' => API_KEY, « appareils » => Appareil $);
    retour envoyer une demande($url, $postData)["messages"][0];
}

/** * @param array $messages Le tableau contenant les numéros et les messages. * @param int $option Définissez ceci sur USE_SPECIFIED si vous souhaitez utiliser les appareils et les cartes SIM spécifiés dans l'argument devices. * 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. * @param array $devices Le tableau des identifiants des appareils que vous souhaitez utiliser pour envoyer ces messages. * @param int $schedule Définissez-le sur l'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 appareil aléatoire parmi les appareils 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", * "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 $ = UTILISATION_SPÉCIFIÉE, Appareils $ = [], Horaire $ = nul, $useRandomDevice = FAUX)
{
    $url = SERVEUR . "/services/send.php";
    $postData = [
        « messages » => json_encode(Messages $),
        'calendrier' => Horaire $,
        'clé' => API_KEY,
        « appareils » => json_encode(Appareils $),
        'option' => Option $,
        'useRandomDevice' => $useRandomDevice
    ];
    retour envoyer une demande($url, $postData)["messages"];
}

/** * @param int $listID L'ID de la liste de contacts à laquelle vous souhaitez envoyer ce message. * @param string $message Le message à envoyer. * @param int $option Définissez ce paramètre sur USE_SPECIFIED si vous souhaitez utiliser les appareils et les cartes SIM spécifiés dans l'argument devices. * Définissez 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. * Définissez ce paramètre sur USE_ALL_SIMS si vous souhaitez utiliser tous les appareils disponibles et leur carte SIM pour envoyer des messages. * @param array $devices Le tableau des ID des appareils à utiliser pour envoyer le message. * @param int $schedule Définissez ce paramètre sur timestamp lorsque vous souhaitez envoyer ce message. * * @return array Renvoie le tableau contenant les messages. * @throws Exception En cas d'erreur lors de l'envoi des messages. */
fonction envoyer un message à la liste de contacts($listID, Message $, Option $ = UTILISATION_SPÉCIFIÉE, Appareils $ = [], Horaire $ = nul)
{
    $url = SERVEUR . "/services/send.php";
    $postData = [
        'listID' => $listID,
        'message' => Message $,
        'calendrier' => Horaire $,
        'clé' => API_KEY,
        « appareils » => json_encode(Appareils $),
        'option' => 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 la récupération d'un message. */
fonction obtenirMessageByID($id) {
    $url = SERVEUR . "/services/read-messages.php";
    $postData = [
        'clé' => API_KEY,
        'identifiant' => $id
    ];
    retour 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écupération des messages. */
fonction obtenir des messages par ID de groupe($groupID) {
    $url = SERVEUR . "/services/read-messages.php";
    $postData = [
        'clé' => API_KEY,
        'groupId' => $groupID
    ];
    retour envoyer une demande($url, $postData)["messages"];
}

/** * @param string $status L'état des messages que vous souhaitez récupérer. * @param int $startTimestamp Rechercher les messages envoyés ou reçus après cette heure. * @param int $endTimestamp Rechercher les messages envoyés ou reçus avant cette heure. * * @return array Le tableau contenant les messages. * @throws Exception En cas d'erreur lors de la récupération des messages. */
fonction obtenir des messages par statut(Statut $, $startTimestamp, $endTimestamp)
{
    $url = SERVEUR . "/services/read-messages.php";
    $postData = [
        'clé' => API_KEY,
        'statut' => Statut $,
        'startTimestamp' => $startTimestamp,
        'endTimestamp' => $endTimestamp
    ];
    retour envoyer une demande($url, $postData)["messages"];
}

/** * @param int $listID L'ID de la liste de contacts à 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éabonner 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 ajouterContact($listID, Numéro $, $name = nul, $réabonnez-vous = FAUX)
{
    $url = SERVEUR . "/services/manage-contacts.php";
    $postData = [
        'clé' => API_KEY,
        'listID' => $listID,
        'nombre' => Numéro $,
        'nom' => $name,
        « se réabonner » => $réabonnez-vous
    ];
    retour envoyer une demande($url, $postData)["contact"];
}

/** * @param int $listID L'ID de la liste de contacts de laquelle vous souhaitez désabonner 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ésabonnerContact($listID, Numéro $)
{
    $url = SERVEUR . "/services/manage-contacts.php";
    $postData = [
        'clé' => API_KEY,
        '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 obtenir l'équilibre()
{
    $url = SERVEUR . "/services/send.php";
    $postData = [
        'clé' => API_KEY,
    ];
    $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_RETURNTRANSFER, vrai);
    curl_setopt($ch, CURLOPT_POSTFIELDS, requête de construction http($postData));
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    si (curl_errno($ch)) {
        lancer nouveau Exception(erreur_curl($ch));
    }
    curl_close($ch);
    si ($httpCode == 200) {
        $json = json_decode($response, vrai);
        si ($json == FAUX) {
            si (vide($response)) {
                lancer nouveau Exception(Données manquantes dans la demande. Veuillez fournir toutes les informations nécessaires pour envoyer des messages.);
            } autre {
                lancer nouveau Exception($response);
            }
        } 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 message unique

essayer {
    // Envoyer un message en utilisant l'appareil principal.
    $msg = envoyer un message unique("+911234567890", « Il s’agit d’un test de message unique. »);

    // Envoyer un message en utilisant l'ID de périphérique 1.
    $msg = envoyer un message unique("+911234567890", « Il s’agit d’un test de message unique. », 1);

    // Envoyer 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'index de la première SIM est 0 et l'index de la 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 = envoyer un message unique("+911234567890", « Il s’agit d’un test de message unique. », "1|0");

    // Envoyer un message planifié à l'aide de l'appareil principal.
    $msg = envoyer un message unique("+911234567890", « Il s'agit d'un test de la fonctionnalité de planification. », nul, strtotime("+2 minutes"));
    print_r($msg);

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

Envoyer des messages en masse

Messages $ = tableau();

pour ($i = 1; $i <= 12; $i++) {
    tableau_push(Messages $,
        [
            "nombre" => "+911234567890",
            "message" => « Ceci est un test #{$i} de la version PHP. Test de la fonctionnalité de messagerie en masse. »
        ]);
}

essayer {
    // Envoyer 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 $, UTILISER_TOUS_LES_APPAREILS);

    // Envoyez des messages avec toutes les cartes SIM de tous les appareils disponibles. Les messages seront répartis entre toutes les cartes SIM.
    envoyer des messages(Messages $, UTILISER_TOUS_LES_SIMS);

    // Envoyez des messages uniquement avec les appareils spécifiés. Les messages seront répartis entre les appareils ou cartes SIM spécifiés.
    // Si vous envoyez 12 messages en utilisant ce code, 4 messages seront envoyés par l'ID d'appareil 1, les 4 autres par la carte SIM dans l'emplacement 1 de 
    // ID de l'appareil 2 (représenté par « 2|0 ») et les 4 restants par carte SIM dans l'emplacement 2 de l'ID de l'appareil 2 (représentés par « 2|1 »).
    envoyer des messages(Messages $, UTILISATION_SPÉCIFIÉE, [1, "2|0", "2|1"]);

    // Envoyez des messages selon un calendrier à l'aide de 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 1.
    envoyer un message à la liste de contacts(1, "Test", UTILISATION_SPÉCIFIÉE, 1);

    // Envoyer un message selon un calendrier aux contacts de la liste de contacts avec l'ID 1.
    $msgs = envoyer un message à la liste de contacts(1, "Test", nul, nul, strtotime("+2 minutes"));

    print_r($msgs);

    écho « Messages groupés envoyés avec succès. »;
} attraper (Exception $e) {
    écho $e->obtenir un message();
}

Obtenez les crédits de message restants

essayer {
    $crédits = obtenir l'équilibre();
    écho Crédits de message restants : {$credits};
} attraper (Exception $e) {
    écho $e->obtenir un message();
}

Obtenez les messages et leur statut actuel

essayer {
    // Obtenir un message en utilisant l'ID.
    $msg = obtenirMessageByID(1);
    print_r($msg);

    // Récupérer des messages à l'aide de l'ID de groupe.
    $msgs = obtenir des messages par ID de groupe(')V5LxqyBMEbQrl9*J$5bb4c03e8a07b7.62193871');
    print_r($msgs);

    // Obtenez les messages reçus au cours des dernières 24 heures.
    $msgs = obtenir des messages par statut("Reçu", temps() - 86400);
    print_r($msgs);
} attraper (Exception $e) {
    écho $e->obtenir un message();
}

Gérer les contacts

essayer {
    // Ajouter un nouveau contact à la liste de contacts 1 ou réabonner le contact s'il existe déjà.
    $contact = ajouterContact(1, "+911234567890", "Test", vrai);
    print_r($contact);

    // Désabonner un contact en utilisant le numéro de mobile.
    $contact = se désabonnerContact(1, "+911234567890");
    print_r($contact);
} attraper (Exception $e) {
    écho $e->obtenir un message();
}



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.Web;
en utilisant Exemple d'application Gateway.Propriétés;
en utilisant Newtonsoft.Json;
en utilisant Newtonsoft.Json.Linq;

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

        publique énumération Option
        {
            UTILISATION_SPÉCIFIÉE = 0,
            UTILISER_TOUS_LES_APPAREILS = 1,
            UTILISER_TOUS_LES_SIMS = 2
        }

        ///
        /// Envoyer un message unique à un numéro de mobile spécifique.
        ///
        /// Le numéro de téléphone portable 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.
        /// Définissez 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.
        publique statique Dictionnaire<chaîne, objet> Envoyer un message unique(chaîne nombre, chaîne message, chaîne appareil = "0", long? calendrier = nul)
        {
            var valeurs = nouveau Dictionnaire<chaîne, objet>
            {
                { "nombre", nombre},
                { "message", message},
                { "calendrier", calendrier },
                { "clé", Clé },
                { « appareils », appareil }
            };

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

        ///
        /// Envoyez plusieurs messages à différents numéros de mobile.
        ///
        /// Le tableau contenant des nombres et des 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 des identifiants des appareils que vous souhaitez utiliser pour envoyer ces messages.
        /// Définissez l'horodatage lorsque vous souhaitez envoyer ce message.
        /// Définissez-le sur vrai 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 des messages.
        /// Le tableau contenant les messages.
        publique statique Dictionnaire<chaîne, objet>[] Envoyer des messages(Liste<Dictionnaire<chaîne, chaîne>> messages, Option option = Option.UTILISATION_SPÉCIFIÉE, chaîne[] appareils = nul, long? calendrier = nul, booléen utiliserRandomDevice = FAUX)
        {
            var valeurs = nouveau Dictionnaire<chaîne, objet>
            {
                { "messages", JsonConvert.SerializeObject(messages)},
                { "calendrier", calendrier },
                { "clé", Clé },
                { « appareils », appareils },
                { "option", (int) option },
                { « useRandomDevice », utiliserRandomDevice }
            };

            retour Obtenir des messages(Obtenir 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 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 des identifiants des appareils que vous souhaitez utiliser pour envoyer ces messages.
        /// Définissez l'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>[] Envoyer un message à la liste de contacts(int ID de liste, chaîne message, Option option = Option.UTILISATION_SPÉCIFIÉE, chaîne[] appareils = nul, long? calendrier = nul)
        {
            var valeurs = nouveau Dictionnaire<chaîne, objet>
            {
                { "listID", ID de liste},
                { "message", message},
                { "calendrier", calendrier },
                { "clé", Clé },
                { « appareils », appareils },
                { "option", (int) option }
            };

            retour Obtenir des messages(Obtenir une réponse($"{Serveur}/services/send.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.
        publique statique Dictionnaire<chaîne, objet> Obtenir le message par ID(int identifiant)
        {
            var valeurs = nouveau Dictionnaire<chaîne, objet>
            {
                { "clé", Clé },
                { "identifiant", identifiant }
            };

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

        ///
        /// Récupérez des messages en utilisant 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>[] Obtenir les messages par ID de groupe(chaîne identifiant de groupe)
        {
            var valeurs = nouveau Dictionnaire<chaîne, objet>
            {
                { "clé", Clé },
                { « groupId », identifiant de groupe }
            };

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

        ///
        /// Obtenez des messages en utilisant le statut.
        ///
        /// Le statut des messages que vous souhaitez récupérer.
        /// Rechercher 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>[] Obtenir des messages par statut(chaîne statut, long? horodatage de début = nul, long? horodatage de fin = nul)
        {
            var valeurs = nouveau Dictionnaire<chaîne, objet>
            {
                { "clé", Clé },
                { "statut", statut },
                { "startTimestamp", horodatage de début },
                { "endTimestamp", horodatage de fin }
            };

            retour Obtenir des messages(Obtenir 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 vrai si vous souhaitez réabonner 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 un contact(int ID de liste, chaîne nombre, chaîne nom = nul, booléen se réabonner = FAUX)
        {
            var valeurs = nouveau Dictionnaire<chaîne, objet>
            {
                {"clé", Clé},
                {"listID", ID de liste},
                {"nombre", nombre},
                {"nom", nom},
                {« se réabonner », se réabonner ? '1' : '0'},
            };
            JObject jObject = (JObject) Obtenir une réponse($"{Serveur}/services/manage-contacts.php", valeurs)["contact"];
            retour jObject.ÀObjet<Dictionnaire<chaîne, objet>>();
        }

        ///
        /// Désabonner un contact de la liste de contacts.
        ///
        /// L'ID de la liste de contacts à partir de laquelle vous souhaitez désabonner 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ésabonnerContact(int ID de liste, chaîne nombre)
        {
            var valeurs = nouveau Dictionnaire<chaîne, objet>
            {
                {"clé", Clé},
                {"listID", ID de liste},
                {"nombre", nombre},
                {"se désabonner", '1'}
            };
            JObject jObject = (JObject)Obtenir une réponse($"{Serveur}/services/manage-contacts.php", valeurs)["contact"];
            retour jObject.ÀObjet<Dictionnaire<chaîne, objet>>();
        }

        ///
        /// Obtenez les crédits de message restants.
        ///
        /// S'il y a une erreur lors de l'obtention des crédits du message.
        /// Le montant des crédits de message restants.
        publique statique chaîne Obtenir l'équilibre()
        {
            var valeurs = nouveau Dictionnaire<chaîne, objet>
            {
                {"clé", Clé}
            };
            Jeton J crédits = Obtenir une réponse($"{Serveur}/services/send.php", valeurs)["crédits"];
            si (crédits.Taper != JTokenType.Rien)
            {
                retour crédits.ToString();
            }
            retour "Illimité";
        }

        privé statique Dictionnaire<chaîne, objet>[] Obtenir des messages(Jeton J 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].ÀObjet<Dictionnaire<chaîne, objet>>();
            }
            retour messages;
        }

        privé statique Jeton J Obtenir une réponse(chaîne URL, Dictionnaire<chaîne, objet> données de publication)
        {
            var demande = (HttpWebRequest)WebRequest.Créer(URL);
            var chaîne de données = Créer une chaîne de données(données de publication);
            var date = Codage.UTF8.Obtenir des octets(chaîne de données);

            demande.Méthode = "POSTE";
            demande.Type de contenu = "application/x-www-form-urlencoded";
            demande.Longueur du contenu = date.Longueur;
            Gestionnaire de points de service.Expect100Continuer = vrai;
            Gestionnaire de points de service.Protocole de sécurité = Type de protocole de sécurité.Tls12;
            en utilisant (var flux = demande.Obtenir un flux de requêtes())
            {
                flux.Écrire(date, 0, date.Longueur);
            }

            var réponse = (Réponse HttpWeb)demande.Obtenir une réponse();

            si (réponse.Code d'état == Code d'état HTTP.D'ACCORD)
            {
                en utilisant (Lecteur de flux lecteur de flux = nouveau Lecteur de flux(réponse.GetResponseStream()))
                {
                    var jsonResponse = lecteur de flux.Lire jusqu'à la fin();
                    essayer
                    {
                        JObject jObject = JObject.Analyser(jsonResponse);
                        si ((booléen)jObject["succès"])
                        {
                            retour jObject["date"];
                        }
                        lancer nouveau Exception(jObject["erreur"]["message"].ToString());
                    }
                    attraper (JsonReaderException)
                    {
                        si (chaîne.EstNullOuVide(jsonResponse))
                        {
                            lancer nouveau Exception de données invalides(Données manquantes dans la demande. Veuillez fournir toutes les informations nécessaires pour envoyer des messages.);
                        }
                        lancer nouveau Exception(jsonResponse);
                    }
                }
            }

            lancer nouveau Exception Web($« Erreur HTTP : {(int)response.StatusCode} {response.StatusCode} »);
        }

        privé statique chaîne Créer une chaîne de données(Dictionnaire<chaîne, objet> date)
        {
            Générateur de chaînes chaîne de données = nouveau Générateur de chaînes();
            booléen d'abord = vrai;
            pour chaque (var objet dans date)
            {
                si (objet.Valeur != nul)
                {
                    si (d'abord)
                    {
                        d'abord = FAUX;
                    }
                    autre
                    {
                        chaîne de données.Ajouter("&");
                    }
                    chaîne de données.Ajouter(HttpUtility.UrlEncode(objet.Clé));
                    chaîne de données.Ajouter("=");
                    chaîne de données.Ajouter(objet.Valeur est chaîne[]
                        ? HttpUtility.UrlEncode(JsonConvert.SerializeObject(objet.Valeur))
                        : HttpUtility.UrlEncode(objet.Valeur.ToString()));
                }
            }
            retour chaîne de données.ToString();
        }
    }
}

Envoyer un message unique

essayer
{
    // Envoyer un message en utilisant l'appareil principal.
    SMS.API.Envoyer un message unique("+911234567890", « Il s’agit d’un test de message unique. »);

    // Envoyer un message en utilisant l'ID de périphérique 1.
    Dictionnaire<chaîne, objet> message = SMS.API.Envoyer un message unique("+911234567890", « Il s’agit d’un test de message unique. », "1");

    // Envoyer 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'index de la première SIM est 0 et l'index de la 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.API.Envoyer un message unique("+911234567890", « Il s’agit d’un test de message unique. », "1|0");

    // Envoyer un message planifié à 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 = Envoyer un message unique(Numéro de zone de texte.Texte, Message de zone de texte.Texte, nul, horodatage);

    MessageBox.Montrer(« Message envoyé avec succès. »);
}
attraper (Exception exception)
{
    MessageBox.Montrer(exception.Message, "!Erreur", Boutons de boîte de message.D'ACCORD, Icône de boîte de message.Erreur);
}

Envoyer des messages en masse

Liste<Dictionnaire<chaîne, chaîne>> messages = nouveau Liste<Dictionnaire<chaîne, chaîne>>();
pour (int le = 1; le <= 12; le++)
{
    var message = nouveau Dictionnaire<chaîne, chaîne>
    {
        { "nombre", "+911234567890" },
        { "message", « Il s'agit d'un test #{$i} de la version C#. Test de la fonctionnalité de messagerie en masse. » }
    };
    messages.Ajouter(message);
}

essayer
{
    // Envoyer des messages à l'aide de l'appareil principal.
    SMS.API.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.API.Envoyer des messages(messages, SMS.API.Option.UTILISER_TOUS_LES_APPAREILS);

    // Envoyez des messages avec 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.UTILISER_TOUS_LES_SIMS);

    // Envoyez des messages uniquement avec les appareils spécifiés. Les messages seront répartis entre les appareils ou cartes SIM spécifiés.
    // Si vous envoyez 12 messages en utilisant ce code, 4 messages seront envoyés par l'ID d'appareil 1, les 4 autres par la carte SIM dans l'emplacement 1 de 
    // ID de l'appareil 2 (représenté par « 2|0 ») et les 4 restants par carte SIM dans l'emplacement 2 de l'ID de l'appareil 2 (représentés par « 2|1 »).
    SMS.API.Envoyer des messages(messages, SMS.API.Option.UTILISATION_SPÉCIFIÉE, nouveau [] {"1", "2|0", "2|1"});

    // Envoyez des messages selon un calendrier à 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.API.Envoyer des messages(messages, Option.UTILISATION_SPÉCIFIÉE, nul, horodatage);

    // Envoyer un message aux contacts de la liste de contacts avec l'ID 1.
    Dictionnaire<chaîne, objet>[] messages = SMS.API.Envoyer un message à la liste de contacts(1, "Test", SMS.API.Option.UTILISATION_SPÉCIFIÉE, nouveau [] {"1"});

    // Envoyer un message selon un calendrier aux contacts de la liste de contacts avec l'ID 1.
    Dictionnaire<chaîne, objet>[] messages = SMS.API.Envoyer un message à la liste de contacts(1, « Test #1 », Option.UTILISATION_SPÉCIFIÉE, nul, horodatage);

    MessageBox.Montrer("Succès");
}
attraper (Exception exception)
{
    MessageBox.Montrer(exception.Message, "!Erreur", Boutons de boîte de message.D'ACCORD, Icône de boîte de message.Erreur);
}

Obtenez les crédits de message restants

essayer
{
    chaîne crédits = SMS.API.Obtenir l'équilibre();
    MessageBox.Montrer($Crédits de message restants : {crédits});
}
attraper (Exception exception)
{
    MessageBox.Montrer(exception.Message, "!Erreur", Boutons de boîte de message.D'ACCORD, Icône de boîte de message.Erreur);
}

Obtenez les messages et leur statut actuel

essayer
{
    // Obtenir un message en utilisant l'ID.
    Dictionnaire<chaîne, objet> message = SMS.API.Obtenir le message par ID(1);

    // Récupérer des messages à l'aide de l'ID de groupe.
    Dictionnaire<chaîne, objet>[] messages = SMS.API.Obtenir les messages par ID de groupe(")V5LxqyBMEbQrl9*J$5bb4c03e8a07b7.62193871");

    // Obtenez les messages reçus au cours des dernières 24 heures.
    long horodatage = (long) DateHeure.UtcNow.Ajouter des heures(-24).Soustraire(nouveau DateHeure(1970, 1, 1)).TotalSecondes;
    Obtenir des messages par statut("Reçu", horodatage);
}
attraper (Exception exception)
{
    MessageBox.Montrer(exception.Message, "!Erreur", Boutons de boîte de message.D'ACCORD, Icône de boîte de message.Erreur);
}

Gérer les contacts

essayer {
    // Ajouter un nouveau contact à la liste de contacts 1 ou réabonner le contact s'il existe déjà.
    Dictionnaire<chaîne, objet> contact = SMS.API.Ajouter un contact(1, "+911234567890", « Test C# », vrai);

    // Désabonner un contact en utilisant le numéro de mobile.
    Dictionnaire<chaîne, objet> contact = Se désabonnerContact(1, "+911234567890");
}
attraper (Exception exception)
{
    MessageBox.Montrer(exception.Message, "!Erreur", Boutons de boîte de message.D'ACCORD, Icône de boîte de message.Erreur);
}