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);
}