Saltar al contenido principal

Con las API de SMS de Sendapp
Puedes automatizar las notificaciones SMS
con cualquier plataforma

Diseñado para pequeñas y medianas empresas,
Para revolucionar la comunicación con el cliente.

Prueba gratuita

Ejemplo de script de WebHook

Cree un script con el siguiente contenido y proporcione su URL como WebHook.

definir("CLAVE API", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

intentar {
    si (problema($_SERVIDOR["HTTP_X_SG_FIRMA"])) {
        $hash = codificación base64(hash_hmac('sha256', $_POST["mensajes"], CLAVE API, verdadero));
        si ($hash === $_SERVIDOR["HTTP_X_SG_FIRMA"]) {
            Mensajes de $ = json_decode($_POST["mensajes"], verdadero);

            /** * Por ejemplo: * $messages = [ * 0 => [ * "ID" => "1", * "number" => "+911234567890", * "message" => "Este es un mensaje de prueba.", * "deviceID" => "1", * "simSlot" => "0", * "userID" => "1", * "status" => "Recibido", * "sentDate" => "2018-10-20T00:00:00+02:00", * "deliveredDate" => "2018-10-20T00:00:00+02:00" * "groupID" => null * ] * ] * * senDate representa la fecha y hora en que se recibió el mensaje en el dispositivo. * deliverDate representa la fecha y hora en que el servidor recibió el mensaje. */

            para cada uno (Mensajes de $ como Mensaje $) {
                si(bajar la calle(Mensaje $["mensaje"]) === "Hola") {
                    Responde al mensaje usando la API o ejecuta comandos. Las posibilidades son ilimitadas.
                }
            }
        } demás {
            código de respuesta http(401);
            registro de errores("¡Las firmas no coinciden!");
        }
    } demás {
        código de respuesta http(400);
        registro de errores("¡Firma no encontrada!");
    }
} atrapar (Excepción $e) {
    registro de errores($e->obtenerMensaje());
}

Integración PHP

Incluya el siguiente código en su archivo PHP para comenzar a enviar mensajes.

definir("SERVIDOR", "https://sms.sendapp.live");
definir("CLAVE API", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

definir("USO_ESPECIFICADO", 0);
definir("UTILIZAR_TODOS_LOS_DISPOSITIVOS", 1);
definir("UTILIZAR_TODAS_LAS_SIM", 2);

/** * @param string $number El número de móvil al que desea enviar el mensaje. * @param string $message El mensaje que desea enviar. * @param int|string $device El ID de un dispositivo que desea usar para enviar este mensaje. * @param int $schedule Establezca la marca de tiempo cuando desee enviar este mensaje. * * @return array Devuelve la matriz que contiene información sobre el mensaje. * @throws Excepción si hay un error al enviar un mensaje. */
función enviarMensajeÚnico($number, Mensaje $, Dispositivo $ = 0, Horario $ = nulo)
{
    $url = SERVIDOR . "/servicios/enviar.php";
    $postData = formación('número' => $number, 'mensaje' => Mensaje $, 'cronograma' => Horario $, 'llave' => CLAVE API, 'dispositivos' => Dispositivo $);
    devolver enviarSolicitud($url, $postData)["mensajes"][0];
}

/** * @param array $messages La matriz que contiene los números y los mensajes. * @param int $option Establezca esto en USE_SPECIFIED si desea usar los dispositivos y las tarjetas SIM especificados en el argumento de dispositivos. * Establezca esto en USE_ALL_DEVICES si desea usar todos los dispositivos disponibles y su tarjeta SIM predeterminada para enviar mensajes. * Establezca esto en USE_ALL_SIMS si desea usar todos los dispositivos disponibles y todas sus tarjetas SIM para enviar mensajes. * @param array $devices La matriz de ID de los dispositivos que desea usar para enviar estos mensajes. * @param int $schedule Establézcalo en la marca de tiempo cuando desee enviar estos mensajes. * @param bool $useRandomDevice Establézcalo en verdadero si desea enviar mensajes usando solo un dispositivo aleatorio de los dispositivos seleccionados. * * @return array Devuelve la matriz que contiene los mensajes. * Por ejemplo:- * [ * 0 => [ * "ID" => "1", * "number" => "+911234567890", * "message" => "Este es un mensaje de prueba.", * "deviceID" => "1", * "simSlot" => "0", * "userID" => "1", * "status" => "Pendiente", * "sentDate" => "2018-10-20T00:00:00+02:00", * "deliveredDate" => null * "groupID" => ")V5LxqyBMEbQrl9*J$5bb4c03e8a07b7.62193871" * ] * ] * @throws Excepción si hay un error al enviar mensajes. */
función enviar mensajes(Mensajes de $, $opción = USO_ESPECIFICADO, Dispositivos $ = [], Horario $ = nulo, $useDispositivoAleatorio = FALSO)
{
    $url = SERVIDOR . "/servicios/enviar.php";
    $postData = [
        'mensajes' => codificación json(Mensajes de $),
        'cronograma' => Horario $,
        'llave' => CLAVE API,
        'dispositivos' => codificación json(Dispositivos $),
        'opción' => $opción,
        'useRandomDevice' => $useDispositivoAleatorio
    ];
    devolver enviarSolicitud($url, $postData)["mensajes"];
}

/** * @param int $listID El ID de la lista de contactos a la que desea enviar este mensaje. * @param string $message El mensaje que desea enviar. * @param int $option Establezca esto en USE_SPECIFIED si desea usar los dispositivos y las tarjetas SIM especificados en el argumento de dispositivos. * Establezca esto en USE_ALL_DEVICES si desea usar todos los dispositivos disponibles y su tarjeta SIM predeterminada para enviar mensajes. * Establezca esto en USE_ALL_SIMS si desea usar todos los dispositivos disponibles y todas sus tarjetas SIM para enviar mensajes. * @param array $devices La matriz de ID de los dispositivos que desea usar para enviar el mensaje. * @param int $schedule Establezca la marca de tiempo cuando desee enviar este mensaje. * * @return array Devuelve la matriz que contiene los mensajes. * @throws Excepción si hay un error al enviar mensajes. */
función enviarMensajeAListaDeContactos($listID, Mensaje $, $opción = USO_ESPECIFICADO, Dispositivos $ = [], Horario $ = nulo)
{
    $url = SERVIDOR . "/servicios/enviar.php";
    $postData = [
        'ID de lista' => $listID,
        'mensaje' => Mensaje $,
        'cronograma' => Horario $,
        'llave' => CLAVE API,
        'dispositivos' => codificación json(Dispositivos $),
        'opción' => $opción
    ];
    devolver enviarSolicitud($url, $postData)["mensajes"];
}

/** * @param int $id El ID de un mensaje que desea recuperar. * * @return array La matriz que contiene un mensaje. * @throws Excepción si hay un error al obtener un mensaje. */
función obtenerMensajePorID($id) {
    $url = SERVIDOR . "/servicios/leer-mensajes.php";
    $postData = [
        'llave' => CLAVE API,
        'identificación' => $id
    ];
    devolver enviarSolicitud($url, $postData)["mensajes"][0];
}

/** * @param string $groupID El ID del grupo de mensajes que desea recuperar. * * @return array La matriz que contiene los mensajes. * @throws Excepción si hay un error al obtener los mensajes. */
función obtenerMensajesPorIDDeGrupo($groupID) {
    $url = SERVIDOR . "/servicios/leer-mensajes.php";
    $postData = [
        'llave' => CLAVE API,
        'ID de grupo' => $groupID
    ];
    devolver enviarSolicitud($url, $postData)["mensajes"];
}

/** * @param string $status El estado de los mensajes que desea recuperar. * @param int $startTimestamp Busque mensajes enviados o recibidos después de este tiempo. * @param int $endTimestamp Busque mensajes enviados o recibidos antes de este tiempo. * * @return array La matriz que contiene los mensajes. * @throws Excepción si hay un error al obtener los mensajes. */
función obtenerMensajesPorEstado($estado, Marca de tiempo de inicio $, Marca de tiempo $end)
{
    $url = SERVIDOR . "/servicios/leer-mensajes.php";
    $postData = [
        'llave' => CLAVE API,
        'estado' => $estado,
        'marca de tiempo de inicio' => Marca de tiempo de inicio $,
        'marca de tiempo final' => Marca de tiempo $end
    ];
    devolver enviarSolicitud($url, $postData)["mensajes"];
}

/** * @param int $listID El ID de la lista de contactos donde desea agregar este contacto. * @param string $number El número de teléfono móvil del contacto. * @param string $name El nombre del contacto. * @param bool $resubscribe Establézcalo en verdadero si desea volver a suscribir este contacto si ya existe. * * @return array La matriz que contiene un contacto recién agregado. * @throws Excepción si hay un error al agregar un nuevo contacto. */
función añadirContacto($listID, $number, $name = nulo, $resubscribe = FALSO)
{
    $url = SERVIDOR . "/servicios/administrar-contactos.php";
    $postData = [
        'llave' => CLAVE API,
        'ID de lista' => $listID,
        'número' => $number,
        'nombre' => $name,
        'volver a suscribirse' => $resubscribe
    ];
    devolver enviarSolicitud($url, $postData)["contacto"];
}

/** * @param int $listID El ID de la lista de contactos de la que desea cancelar la suscripción de este contacto. * @param string $number El número de teléfono móvil del contacto. * * @return array La matriz que contiene el contacto cancelado la suscripción. * @throws Excepción si hay un error al establecer la suscripción en falso. */
función Darse de bajaContacto($listID, $number)
{
    $url = SERVIDOR . "/servicios/administrar-contactos.php";
    $postData = [
        'llave' => CLAVE API,
        'ID de lista' => $listID,
        'número' => $number,
        'darse de baja' => verdadero
    ];
    devolver enviarSolicitud($url, $postData)["contacto"];
}

/** * @return string La cantidad de créditos restantes del mensaje. * @throws Excepción si hay un error al obtener los créditos del mensaje. */
función obtenerSaldo()
{
    $url = SERVIDOR . "/servicios/enviar.php";
    $postData = [
        'llave' => CLAVE API,
    ];
    $ créditos = enviarSolicitud($url, $postData)["créditos"];
    devolver es_null($ créditos) ? "Ilimitado" : $ créditos;
}

función enviarSolicitud($url, $postData)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, verdadero);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, verdadero);
    curl_setopt($ch, CAMPOS DE CORTE_POST, consulta_de_construcción_http($postData));
    $respuesta = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CÓDIGO HTTP CURLINFO);
    si (curl_errno($ch)) {
        tirar nuevo Excepción(error de rizo($ch));
    }
    cierre de rizo($ch);
    si ($httpCode == 200) {
        $json = json_decode($respuesta, verdadero);
        si ($json == FALSO) {
            si (vacío($respuesta)) {
                tirar nuevo Excepción(Faltan datos en la solicitud. Por favor, proporcione toda la información necesaria para enviar los mensajes.);
            } demás {
                tirar nuevo Excepción($respuesta);
            }
        } demás {
            si ($json["éxito"]) {
                devolver $json["fecha"];
            } demás {
                tirar nuevo Excepción($json["error"]["mensaje"]);
            }
        }
    } demás {
        tirar nuevo Excepción(Código de error HTTP: {$httpCode});
    }
}

Enviar un solo mensaje

intentar {
    // Envía un mensaje usando el dispositivo principal.
    $msg = enviarMensajeÚnico("+911234567890", "Esta es una prueba de mensaje único".);

    // Envía un mensaje usando el ID del dispositivo 1.
    $msg = enviarMensajeÚnico("+911234567890", "Esta es una prueba de mensaje único"., 1);

    // Envía un mensaje utilizando la SIM en la ranura 1 del ID del dispositivo 1 (representado como "1|0").
    // La ranura SIM es un índice, por lo que el índice de la primera SIM es 0 y el índice de la segunda SIM es 1.
    // En este ejemplo, 1 representa el ID del dispositivo y 0 representa el índice de la ranura SIM.
    $msg = enviarMensajeÚnico("+911234567890", "Esta es una prueba de mensaje único"., "1|0");

    // Envía un mensaje programado usando el dispositivo principal.
    $msg = enviarMensajeÚnico("+911234567890", "Esta es una prueba de la función de programación"., nulo, tiempo de ejecución("+2 minutos"));
    imprimir_r($msg);

    eco "Mensaje enviado con éxito.";
} atrapar (Excepción $e) {
    eco $e->obtenerMensaje();
}

Enviar mensajes masivos

Mensajes de $ = formación();

para ($i = 1; $i <= 12; $i++) {
    matriz_push(Mensajes de $,
        [
            "número" => "+911234567890",
            "mensaje" => Esta es una versión de prueba de PHP. Se está probando la funcionalidad de mensajes masivos.
        ]);
}

intentar {
    // Envía mensajes usando el dispositivo principal.
    enviar mensajes(Mensajes de $);

    Envía mensajes usando la tarjeta SIM predeterminada de todos los dispositivos disponibles. Los mensajes se repartirán entre todos los dispositivos.
    enviar mensajes(Mensajes de $, USAR_TODOS_LOS_DISPOSITIVOS);

    Envía mensajes usando todas las tarjetas SIM de todos los dispositivos disponibles. Los mensajes se repartirán entre todas las tarjetas SIM.
    enviar mensajes(Mensajes de $, USAR_TODAS_LAS_SIMS);

    Envía mensajes usando solo los dispositivos especificados. Los mensajes se repartirán entre los dispositivos o tarjetas SIM que especifiques.
    // Si envía 12 mensajes usando este código, entonces 4 mensajes serán enviados por el ID del dispositivo 1, los otros 4 por la SIM en la ranura 1 de 
    // ID del dispositivo 2 (Representado como "2|0") y los 4 restantes por SIM en la ranura 2 del ID del dispositivo 2 (Representado como "2|1").
    enviar mensajes(Mensajes de $, USO_ESPECIFICADO, [1, "2|0", "2|1"]);

    // Envía mensajes según lo programado usando el dispositivo principal.
    enviar mensajes(Mensajes de $, nulo, nulo, tiempo de ejecución("+2 minutos"));

    // Envía un mensaje a los contactos en la lista de contactos con ID de 1.
    enviarMensajeAListaDeContactos(1, "Prueba", USO_ESPECIFICADO, 1);

    // Enviar un mensaje según lo programado a los contactos en la lista de contactos con ID de 1.
    $msgs = enviarMensajeAListaDeContactos(1, "Prueba", nulo, nulo, tiempo de ejecución("+2 minutos"));

    imprimir_r($msgs);

    eco "Mensajes masivos enviados exitosamente.";
} atrapar (Excepción $e) {
    eco $e->obtenerMensaje();
}

Obtener los créditos de mensajes restantes

intentar {
    $ créditos = obtenerSaldo();
    eco Créditos restantes del mensaje: {$credits};
} atrapar (Excepción $e) {
    eco $e->obtenerMensaje();
}

Recibir mensajes y su estado actual

intentar {
    // Obtener un mensaje usando el ID.
    $msg = obtenerMensajePorID(1);
    imprimir_r($msg);

    // Obtener mensajes usando el ID del grupo.
    $msgs = obtenerMensajesPorIDDeGrupo(')V5LxqyBMEbQrl9*J$5bb4c03e8a07b7.62193871');
    imprimir_r($msgs);

    // Obtener los mensajes recibidos en las últimas 24 horas.
    $msgs = obtenerMensajesPorEstado("Recibió", tiempo() - 86400);
    imprimir_r($msgs);
} atrapar (Excepción $e) {
    eco $e->obtenerMensaje();
}

Administrar contactos

intentar {
    // Agrega un nuevo contacto a la lista de contactos 1 o vuelve a suscribir el contacto si ya existe.
    Contacto $ = añadirContacto(1, "+911234567890", "Prueba", verdadero);
    imprimir_r(Contacto $);

    //Dar de baja un contacto usando el número de móvil.
    Contacto $ = Darse de bajaContacto(1, "+911234567890");
    imprimir_r(Contacto $);
} atrapar (Excepción $e) {
    eco $e->obtenerMensaje();
}



Integración C#

usando Sistema;
usando Sistema.Colecciones.Genérico;
usando Sistema.I;
usando Sistema.Neto;
usando Sistema.Texto;
usando Sistema.Web;
usando Aplicación de muestra de puerta de enlace.Propiedades;
usando Newtonsoft.Json;
usando Newtonsoft.Json.Linq;

espacio de nombres SMS
{
    estático clase API
    {
        privado estático solo lectura cadena Servidor = "https://sms.sendapp.live"
        privado estático solo lectura cadena Llave = "6e1bdb4ed91f3b83071dd5a520c9d226ea19245e";

        público enumeración Opción
        {
            USO_ESPECIFICADO = 0,
            USAR_TODOS_LOS_DISPOSITIVOS = 1,
            USAR_TODAS_LAS_SIMS = 2
        }

        ///
        /// Envía un mensaje único a un número de móvil específico.
        ///
        /// El número de móvil al que desea enviar el mensaje.
        /// El mensaje que desea enviar.
        /// El ID de un dispositivo que desea utilizar para enviar este mensaje.
        /// Configúrelo para que indique cuándo desea enviar este mensaje.
        /// Si hay un error al enviar un mensaje.
        /// El diccionario que contiene información sobre el mensaje.
        público estático Diccionario<cadena, objeto> EnviarMensajeÚnico(cadena número, cadena mensaje, cadena dispositivo = "0", largo? cronograma = nulo)
        {
            variedad valores = nuevo Diccionario<cadena, objeto>
            {
                { "número", número},
                { "mensaje", mensaje},
                { "cronograma", cronograma },
                { "llave", Llave },
                { "dispositivos", dispositivo }
            };

            devolver Obtener mensajes(Obtener respuesta($"{Servidor}/servicios/enviar.php", valores)["mensajes"])[0];
        }

        ///
        /// Envía múltiples mensajes a diferentes números móviles.
        ///
        /// La matriz que contiene números y mensajes.
        /// Establezca esto en USE_SPECIFIED si desea utilizar los dispositivos y las tarjetas SIM especificados en el argumento de dispositivos.
        /// Establezca esto en USE_ALL_DEVICES si desea utilizar todos los dispositivos disponibles y su SIM predeterminada para enviar mensajes.
        /// Establezca esto en USE_ALL_SIMS si desea utilizar todos los dispositivos disponibles y todas sus SIM para enviar mensajes.
        /// La matriz de ID de dispositivos que desea utilizar para enviar estos mensajes.
        /// Configúrelo para que indique cuándo desea enviar este mensaje.
        /// Configúrelo como verdadero si desea enviar mensajes utilizando solo un dispositivo aleatorio de los dispositivos seleccionados.
        /// Si hay un error al enviar mensajes.
        /// La matriz que contiene los mensajes.
        público estático Diccionario<cadena, objeto>[] Enviar mensajes(Lista<Diccionario<cadena, cadena>> mensajes, Opción opción = Opción.USO_ESPECIFICADO, cadena[] dispositivos = nulo, largo? cronograma = nulo, bool usarDispositivoAleatorio = FALSO)
        {
            variedad valores = nuevo Diccionario<cadena, objeto>
            {
                { "mensajes", JsonConvert.SerializarObjeto(mensajes)},
                { "cronograma", cronograma },
                { "llave", Llave },
                { "dispositivos", dispositivos },
                { "opción", (entero) opción },
                { "useRandomDevice", usarDispositivoAleatorio }
            };

            devolver Obtener mensajes(Obtener respuesta($"{Servidor}/servicios/enviar.php", valores)["mensajes"]);
        }

        ///
        /// Envía un mensaje a los contactos en la lista de contactos especificada.
        ///
        /// El ID de la lista de contactos a la que desea enviar este mensaje.
        /// El mensaje que desea enviar.
        /// Establezca esto en USE_SPECIFIED si desea utilizar los dispositivos y las tarjetas SIM especificados en el argumento de dispositivos.
        /// Establezca esto en USE_ALL_DEVICES si desea utilizar todos los dispositivos disponibles y su SIM predeterminada para enviar mensajes.
        /// Establezca esto en USE_ALL_SIMS si desea utilizar todos los dispositivos disponibles y todas sus SIM para enviar mensajes.
        /// La matriz de ID de dispositivos que desea utilizar para enviar estos mensajes.
        /// Configúrelo para que indique cuándo desea enviar este mensaje.
        /// Si hay un error al enviar mensajes.
        /// La matriz que contiene los mensajes.
        público estático Diccionario<cadena, objeto>[] Enviar mensaje a la lista de contactos(entero ID de lista, cadena mensaje, Opción opción = Opción.USO_ESPECIFICADO, cadena[] dispositivos = nulo, largo? cronograma = nulo)
        {
            variedad valores = nuevo Diccionario<cadena, objeto>
            {
                { "ID de lista", ID de lista},
                { "mensaje", mensaje},
                { "cronograma", cronograma },
                { "llave", Llave },
                { "dispositivos", dispositivos },
                { "opción", (entero) opción }
            };

            devolver Obtener mensajes(Obtener respuesta($"{Servidor}/servicios/enviar.php", valores)["mensajes"]);
        }

        ///
        /// Obtener un mensaje usando el ID.
        ///
        /// El ID de un mensaje que desea recuperar.
        /// Si hay un error al recibir un mensaje.
        /// El diccionario que contiene información sobre el mensaje.
        público estático Diccionario<cadena, objeto> Obtener mensaje por ID(entero identificación)
        {
            variedad valores = nuevo Diccionario<cadena, objeto>
            {
                { "llave", Llave },
                { "identificación", identificación }
            };

            devolver Obtener mensajes(Obtener respuesta($"{Servidor}/servicios/leer-mensajes.php", valores)["mensajes"])[0];
        }

        ///
        /// Obtener mensajes usando el ID del grupo.
        ///
        /// El ID del grupo de los mensajes que desea recuperar.
        /// Si hay un error al recibir mensajes.
        /// La matriz que contiene los mensajes.
        público estático Diccionario<cadena, objeto>[] Obtener mensajes por ID de grupo(cadena ID de grupo)
        {
            variedad valores = nuevo Diccionario<cadena, objeto>
            {
                { "llave", Llave },
                { "ID de grupo", ID de grupo }
            };

            devolver Obtener mensajes(Obtener respuesta($"{Servidor}/servicios/leer-mensajes.php", valores)["mensajes"]);
        }

        ///
        /// Obtener mensajes usando el estado.
        ///
        /// El estado de los mensajes que desea recuperar.
        /// Busque mensajes enviados o recibidos después de este tiempo.
        /// Busque mensajes enviados o recibidos antes de esta hora.
        /// Si hay un error al recibir mensajes.
        /// La matriz que contiene los mensajes.
        público estático Diccionario<cadena, objeto>[] Obtener mensajes por estado(cadena estado, largo? marca de tiempo de inicio = nulo, largo? Marca de tiempo final = nulo)
        {
            variedad valores = nuevo Diccionario<cadena, objeto>
            {
                { "llave", Llave },
                { "estado", estado },
                { "marca de tiempo de inicio", marca de tiempo de inicio },
                { "marca de tiempo final", Marca de tiempo final }
            };

            devolver Obtener mensajes(Obtener respuesta($"{Servidor}/servicios/leer-mensajes.php", valores)["mensajes"]);
        }

        ///
        /// Agregar un nuevo contacto a la lista de contactos.
        ///
        /// El ID de la lista de contactos donde desea agregar este contacto.
        /// El número de móvil del contacto.
        /// El nombre del contacto.
        /// Configúrelo como verdadero si desea volver a suscribir este contacto si ya existe.
        /// Un diccionario que contiene detalles sobre un contacto recién agregado.
        público estático Diccionario<cadena, objeto> Agregar contacto(entero ID de lista, cadena número, cadena nombre = nulo, bool volver a suscribirse = FALSO)
        {
            variedad valores = nuevo Diccionario<cadena, objeto>
            {
                {"llave", Llave},
                {"ID de lista", ID de lista},
                {"número", número},
                {"nombre", nombre},
                {"volver a suscribirse", volver a suscribirse ? '1' : '0'},
            };
            JObject jObject = (JObject) Obtener respuesta($"{Servidor}/servicios/administrar-contactos.php", valores)["contacto"];
            devolver jObject.AObjeto<Diccionario<cadena, objeto>>();
        }

        ///
        /// Dar de baja un contacto de la lista de contactos.
        ///
        /// El ID de la lista de contactos de la que desea cancelar la suscripción de este contacto.
        /// El número de móvil del contacto.
        /// Un diccionario que contiene detalles sobre el contacto cancelado.
        público estático Diccionario<cadena, objeto> Darse de bajaContacto(entero ID de lista, cadena número)
        {
            variedad valores = nuevo Diccionario<cadena, objeto>
            {
                {"llave", Llave},
                {"ID de lista", ID de lista},
                {"número", número},
                {"darse de baja", '1'}
            };
            JObject jObject = (JObject)Obtener respuesta($"{Servidor}/servicios/administrar-contactos.php", valores)["contacto"];
            devolver jObject.AObjeto<Diccionario<cadena, objeto>>();
        }

        ///
        /// Obtener los créditos del mensaje restante.
        ///
        /// Si hay un error al obtener los créditos del mensaje.
        /// La cantidad de créditos de mensaje restantes.
        público estático cadena Obtener saldo()
        {
            variedad valores = nuevo Diccionario<cadena, objeto>
            {
                {"llave", Llave}
            };
            JToken créditos = Obtener respuesta($"{Servidor}/servicios/enviar.php", valores)["créditos"];
            si (créditos.Tipo != Tipo de token J.Nada)
            {
                devolver créditos.Cadena de caracteres();
            }
            devolver "Ilimitado";
        }

        privado estático Diccionario<cadena, objeto>[] Obtener mensajes(JToken mensajesJToken)
        {
            Matriz JA jArray = (Matriz JA)mensajesJToken;
            variedad mensajes = nuevo Diccionario<cadena, objeto>[jArray.Contar];
            para (variedad índice = 0; índice < jArray.Contar; índice++)
            {
                mensajes[índice] = jArray[índice].AObjeto<Diccionario<cadena, objeto>>();
            }
            devolver mensajes;
        }

        privado estático JToken Obtener respuesta(cadena URL, Diccionario<cadena, objeto> postData)
        {
            variedad pedido = (Solicitud web HTTP)Solicitud web.Crear(URL);
            variedad cadena de datos = Crear cadena de datos(postData);
            variedad fecha = Codificación.UTF8.Obtener bytes(cadena de datos);

            pedido.Método = "CORREO";
            pedido.Tipo de contenido = "aplicación/x-www-form-urlencoded";
            pedido.Longitud del contenido = fecha.Longitud;
            Administrador de puntos de servicio.Expect100Continuar = verdadero;
            Administrador de puntos de servicio.Protocolo de seguridad = Tipo de protocolo de seguridad.Tls12;
            usando (variedad arroyo = pedido.Obtener flujo de solicitud())
            {
                arroyo.Escribir(fecha, 0, fecha.Longitud);
            }

            variedad respuesta = (Respuesta web HTTP)pedido.Obtener respuesta();

            si (respuesta.Código de estado == Código de estado HTTP.DE ACUERDO)
            {
                usando (Lector de flujo Lector de flujo = nuevo Lector de flujo(respuesta.GetResponseStream()))
                {
                    variedad jsonResponse = Lector de flujo.Leer hasta el final();
                    intentar
                    {
                        JObject jObject = JObject.Analizar gramaticalmente(jsonResponse);
                        si ((bool)jObject["éxito"])
                        {
                            devolver jObject["fecha"];
                        }
                        tirar nuevo Excepción(jObject["error"]["mensaje"].Cadena de caracteres());
                    }
                    atrapar (Excepción de lector Json)
                    {
                        si (cadena.IsNullOrEmpty(jsonResponse))
                        {
                            tirar nuevo Excepción de datos no válidos(Faltan datos en la solicitud. Por favor, proporcione toda la información necesaria para enviar los mensajes.);
                        }
                        tirar nuevo Excepción(jsonResponse);
                    }
                }
            }

            tirar nuevo Excepción web($"Error HTTP: {(int)respuesta.CódigoDeEstado} {respuesta.CódigoDeEstado}");
        }

        privado estático cadena Crear cadena de datos(Diccionario<cadena, objeto> fecha)
        {
            Constructor de cadenas cadena de datos = nuevo Constructor de cadenas();
            bool primero = verdadero;
            para cada uno (variedad objeto en fecha)
            {
                si (objeto.Valor != nulo)
                {
                    si (primero)
                    {
                        primero = FALSO;
                    }
                    demás
                    {
                        cadena de datos.Añadir("&");
                    }
                    cadena de datos.Añadir(Utilidad HTTP.Codificación de URL(objeto.Llave));
                    cadena de datos.Añadir("=");
                    cadena de datos.Añadir(objeto.Valor es cadena[]
                        ? Utilidad HTTP.Codificación de URL(JsonConvert.SerializarObjeto(objeto.Valor))
                        : Utilidad HTTP.Codificación de URL(objeto.Valor.Cadena de caracteres()));
                }
            }
            devolver cadena de datos.Cadena de caracteres();
        }
    }
}

Enviar un solo mensaje

intentar
{
    // Envía un mensaje usando el dispositivo principal.
    SMS.API.EnviarMensajeÚnico("+911234567890", "Esta es una prueba de mensaje único".);

    // Envía un mensaje usando el ID del dispositivo 1.
    Diccionario<cadena, objeto> mensaje = SMS.API.EnviarMensajeÚnico("+911234567890", "Esta es una prueba de mensaje único"., "1");

    // Envía un mensaje utilizando la SIM en la ranura 1 del ID del dispositivo 1 (representado como "1|0").
    // La ranura SIM es un índice, por lo que el índice de la primera SIM es 0 y el índice de la segunda SIM es 1.
    // En este ejemplo, 1 representa el ID del dispositivo y 0 representa el índice de la ranura SIM.
    Diccionario<cadena, objeto> mensaje = SMS.API.EnviarMensajeÚnico("+911234567890", "Esta es una prueba de mensaje único"., "1|0");

    // Envía un mensaje programado usando el dispositivo principal.
    largo marca de tiempo = (largo) Fecha y hora.UtcNow.Agregar minutos(2).Sustraer(nuevo Fecha y hora(1970, 1, 1)).Segundos totales;
    Diccionario<cadena, objeto> mensaje = EnviarMensajeÚnico(Número de cuadro de texto.Texto, mensaje de cuadro de texto.Texto, nulo, marca de tiempo);

    Cuadro de mensajes.Espectáculo("Mensaje enviado con éxito.");
}
atrapar (Excepción excepción)
{
    Cuadro de mensajes.Espectáculo(excepción.Mensaje, "!Error", Botones del cuadro de mensaje.DE ACUERDO, Icono del cuadro de mensaje.Error);
}

Enviar mensajes masivos

Lista<Diccionario<cadena, cadena>> mensajes = nuevo Lista<Diccionario<cadena, cadena>>();
para (entero el = 1; el <= 12; el++)
{
    variedad mensaje = nuevo Diccionario<cadena, cadena>
    {
        { "número", "+911234567890" },
        { "mensaje", Esta es una versión de prueba #{$i} de C#. Se está probando la funcionalidad de mensajes masivos. }
    };
    mensajes.Agregar(mensaje);
}

intentar
{
    // Envía mensajes usando el dispositivo principal.
    SMS.API.Enviar mensajes(mensajes);

    Envía mensajes usando la tarjeta SIM predeterminada de todos los dispositivos disponibles. Los mensajes se repartirán entre todos los dispositivos.
    SMS.API.Enviar mensajes(mensajes, SMS.API.Opción.USAR_TODOS_LOS_DISPOSITIVOS);

    Envía mensajes usando todas las tarjetas SIM de todos los dispositivos disponibles. Los mensajes se repartirán entre todas las tarjetas SIM.
    SMS.API.Enviar mensajes(mensajes, SMS.API.Opción.USAR_TODAS_LAS_SIMS);

    Envía mensajes usando solo los dispositivos especificados. Los mensajes se repartirán entre los dispositivos o tarjetas SIM que especifiques.
    // Si envía 12 mensajes usando este código, entonces 4 mensajes serán enviados por el ID del dispositivo 1, los otros 4 por la SIM en la ranura 1 de 
    // ID del dispositivo 2 (Representado como "2|0") y los 4 restantes por SIM en la ranura 2 del ID del dispositivo 2 (Representado como "2|1").
    SMS.API.Enviar mensajes(mensajes, SMS.API.Opción.USO_ESPECIFICADO, nuevo [] {"1", "2|0", "2|1"});

    // Envía mensajes según lo programado usando el dispositivo principal.
    largo marca de tiempo = (largo) Fecha y hora.UtcNow.Agregar minutos(2).Sustraer(nuevo Fecha y hora(1970, 1, 1)).Segundos totales;
    Diccionario<cadena, objeto>[] mensajes = SMS.API.Enviar mensajes(mensajes, Opción.USO_ESPECIFICADO, nulo, marca de tiempo);

    // Envía un mensaje a los contactos en la lista de contactos con ID de 1.
    Diccionario<cadena, objeto>[] mensajes = SMS.API.Enviar mensaje a la lista de contactos(1, "Prueba", SMS.API.Opción.USO_ESPECIFICADO, nuevo [] {"1"});

    // Enviar un mensaje según lo programado a los contactos en la lista de contactos con ID de 1.
    Diccionario<cadena, objeto>[] mensajes = SMS.API.Enviar mensaje a la lista de contactos(1, "Prueba #1", Opción.USO_ESPECIFICADO, nulo, marca de tiempo);

    Cuadro de mensajes.Espectáculo("Éxito");
}
atrapar (Excepción excepción)
{
    Cuadro de mensajes.Espectáculo(excepción.Mensaje, "!Error", Botones del cuadro de mensaje.DE ACUERDO, Icono del cuadro de mensaje.Error);
}

Obtener los créditos de mensajes restantes

intentar
{
    cadena créditos = SMS.API.Obtener saldo();
    Cuadro de mensajes.Espectáculo($Créditos restantes del mensaje: {créditos});
}
atrapar (Excepción excepción)
{
    Cuadro de mensajes.Espectáculo(excepción.Mensaje, "!Error", Botones del cuadro de mensaje.DE ACUERDO, Icono del cuadro de mensaje.Error);
}

Recibir mensajes y su estado actual

intentar
{
    // Obtener un mensaje usando el ID.
    Diccionario<cadena, objeto> mensaje = SMS.API.Obtener mensaje por ID(1);

    // Obtener mensajes usando el ID del grupo.
    Diccionario<cadena, objeto>[] mensajes = SMS.API.Obtener mensajes por ID de grupo(")V5LxqyBMEbQrl9*J$5bb4c03e8a07b7.62193871");

    // Obtener los mensajes recibidos en las últimas 24 horas.
    largo marca de tiempo = (largo) Fecha y hora.UtcNow.Añadir horas(-24).Sustraer(nuevo Fecha y hora(1970, 1, 1)).Segundos totales;
    Obtener mensajes por estado("Recibió", marca de tiempo);
}
atrapar (Excepción excepción)
{
    Cuadro de mensajes.Espectáculo(excepción.Mensaje, "!Error", Botones del cuadro de mensaje.DE ACUERDO, Icono del cuadro de mensaje.Error);
}

Administrar contactos

intentar {
    // Agrega un nuevo contacto a la lista de contactos 1 o vuelve a suscribir el contacto si ya existe.
    Diccionario<cadena, objeto> contacto = SMS.API.Agregar contacto(1, "+911234567890", "Prueba C#", verdadero);

    //Dar de baja un contacto usando el número de móvil.
    Diccionario<cadena, objeto> contacto = Darse de bajaContacto(1, "+911234567890");
}
atrapar (Excepción excepción)
{
    Cuadro de mensajes.Espectáculo(excepción.Mensaje, "!Error", Botones del cuadro de mensaje.DE ACUERDO, Icono del cuadro de mensaje.Error);
}