Enviar SMS con la API de OVHcloud en C#
Descubra cómo enviar SMS con la API RESTful de OVHcloud en C#: cree sus credenciales de API, conéctese y envíe su primer SMS
Info
Las ofertas de SMS de OVHcloud solo están disponibles en los siguientes países: Francia, Reino Unido, Irlanda, España, Italia y Polonia.
Objetivo
Los SMS se utilizan ampliamente para difundir información práctica, hacer un seguimiento del estado de un pedido o de un proceso transaccional, recibir alertas sobre un evento inusual o recordar citas. Esta guía detalla el método para enviar un primer SMS con la API de OVHcloud en C#.
Descubra cómo enviar SMS con la API RESTful de OVHcloud en C#.
Requisitos
- Un entorno de desarrollo C#.
- Una cuenta de OVHcloud con créditos SMS.
- Un remitente de SMS validado.
Procedimiento
Llamadas a la API
Implementaremos la llamada al servicio web directamente en el código. Por motivos de legibilidad y simplicidad, la parte de consumo de la API no está factorizada ni implementada por completo (deserialización JSON, etc.).
Para la implementación de la llamada al servicio web, le recomendamos que lea nuestra guía sobre los primeros pasos con las API de OVHcloud.
En esta guía llamaremos a dos métodos:
- Lista de los servicios SMS activos:
Creación de las credenciales
Las credenciales de API son necesarias para consumir la API SMS; se crean de forma individual para identificar la aplicación que va a enviar los SMS. La duración de estas credenciales es configurable.
Cree sus credenciales de Script (todas las claves de una vez) en esta página: https://auth.eu.ovhcloud.com/api/createToken.
En este ejemplo sencillo, recuperamos los permisos para acceder a la información de la cuenta, a la posibilidad de ver los envíos pendientes y a la posibilidad de enviar SMS.
- GET /sms/
- GET/sms/*/jobs
- POST /sms/*/jobs
El asterisco (*) activa las llamadas a estos métodos para todas sus cuentas SMS; puede restringir las llamadas a una sola cuenta si gestiona varias cuentas SMS en su cuenta de OVHcloud.
Haga clic en Create para recuperar las credenciales de su script:
- Application Key (identifica su aplicación)
- Application Secret (autentica su aplicación)
- Consumer Key (autoriza a la aplicación a acceder a los métodos elegidos)
El entorno y las credenciales están listos: puede codificar su primera llamada a la API.
Conexión básica a la API: recuperación de la cuenta SMS
Ahora vamos a probar la correcta conexión a la API mostrando simplemente el nombre del serviceName:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Security.Cryptography;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
getSmsAccount();
}
//cálculo del SHA1
public static string HashSHA1(string sInputString)
{
SHA1 sha = new SHA1.Create();
byte[] bHash = sha.ComputeHash(Encoding.UTF8.GetBytes(sInputString));
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < bHash.Length; i++)
{
sBuilder.Append(bHash[i].ToString("x2"));
}
return sBuilder.ToString();
}
private static void getSmsAccount()
{
String AK = "your_app_key";
String AS = "your_app_secret";
String CK = "your_consumer_key";
//Parámetros del método llamado
String METHOD = "GET";
String QUERY = "https://eu.api.ovh.com/1.0/sms/";
String BODY = "";
Int32 unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
String TSTAMP = (unixTimestamp).ToString();
//cálculo de la firma
String signature = "$1$" + HashSHA1(AS + "+" + CK + "+" + METHOD + "+" + QUERY + "+" + BODY + "+" + TSTAMP);
Console.WriteLine(signature);
//Creación de la solicitud
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(QUERY);
req.Method = METHOD;
req.ContentType = "application/json";
req.Headers.Add("X-Ovh-Application:" + AK);
req.Headers.Add("X-Ovh-Consumer:" + CK);
req.Headers.Add("X-Ovh-Signature:" + signature);
req.Headers.Add("X-Ovh-Timestamp:" + TSTAMP);
try
{
//Recuperación del resultado de la llamada
HttpWebResponse myHttpWebResponse = (HttpWebResponse)req.GetResponse();
using (var respStream = myHttpWebResponse.GetResponseStream())
{
var reader = new StreamReader(respStream);
String result = reader.ReadToEnd().Trim();
Console.WriteLine(result);
}
myHttpWebResponse.Close();
}
//Gestión de las excepciones
catch (WebException e)
{
Console.WriteLine("Error : ");
using (WebResponse response = e.Response)
using (Stream data = ((HttpWebResponse)response).GetResponseStream())
using (var reader = new StreamReader(data))
{
Console.WriteLine(reader.ReadToEnd());
}
}
}
}
}
Al ejecutar esta aplicación C#, debería recuperar la lista de sus cuentas SMS. También mostramos en primer lugar la firma calculada de la solicitud.
$1$c190e3e8d22399d11dcba599f782f9e11a016727
["sms-XX0000-1"]
Envío del primer SMS
Para enviar SMS, utilizamos el método POST jobs:
Info
La respuesta por SMS (número corto mediante senderForResponse) solo está disponible en Francia.
El parámetro senderForResponse permite utilizar un número corto, lo que le permite enviar SMS directamente sin tener que crear un remitente (ej.: su nombre).
Los números cortos también permiten recibir respuestas de las personas que han recibido el SMS, lo que puede resultar útil para una encuesta de satisfacción, una aplicación de votación, un juego, etc.
private void sendSms()
{
String AK = "your_app_key";
String AS = "your_app_secret";
String CK = "your_consumer_key";
//Parámetros del método llamado
String ServiceName = "sms-XX00000-1";
String METHOD = "POST";
String QUERY = "https://eu.api.ovh.com/1.0/sms/"+ServiceName+"/jobs";
String BODY =@"{ ""charset"": ""UTF-8"", ""receivers"": [ ""+33660000000"" ], ""message"": ""Test SMS OVH"", ""priority"": ""high"", ""senderForResponse"": true, ""sender"": ""YOURSENDER""}";
Int32 unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
String TSTAMP = (unixTimestamp).ToString();
String signature = "$1$" + HashSHA1(AS + "+" + CK + "+" + METHOD + "+" + QUERY + "+" + BODY + "+" + TSTAMP);
Console.WriteLine(signature);
//Creación de la solicitud
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(QUERY);
req.Method = METHOD;
req.ContentType = "application/json";
req.Headers.Add("X-Ovh-Application:"+ AK);
req.Headers.Add("X-Ovh-Consumer:" + CK);
req.Headers.Add("X-Ovh-Signature:"+ signature);
req.Headers.Add("X-Ovh-Timestamp:" + TSTAMP);
//Escritura de los parámetros BODY
using (System.IO.Stream s = req.GetRequestStream())
{
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(s))
sw.Write(BODY);
}
try
{
//Recuperación del resultado de la llamada
HttpWebResponse myHttpWebResponse = (HttpWebResponse)req.GetResponse();
String[] l = null;
using (var respStream = myHttpWebResponse.GetResponseStream())
{
var reader = new StreamReader(respStream);
String result = reader.ReadToEnd().Trim();
Console.WriteLine(result);
}
myHttpWebResponse.Close();
}
catch (WebException e)
{
Console.WriteLine("Error : ");
Console.WriteLine("Error : ");
using (WebResponse response = e.Response)
using (Stream data = ((HttpWebResponse)response).GetResponseStream())
using (var reader = new StreamReader(data))
{
Console.WriteLine(reader.ReadToEnd());
}
}
}
Este es el tipo de respuesta esperada:
$1$e591c367cebc15b1fe7f9a50d792602824a52e78
{"totalCreditsRemoved":1,"invalidReceivers":[],"ids":[27814656],"validReceivers":["+33600000000"]}
Se obtiene una respuesta con 1 crédito consumido para un número válido. El mensaje predeterminado incluye el mensaje STOP que permite a los destinatarios darse de baja.
Puede desactivar el STOP mediante el parámetro noStopClause. Tenga en cuenta que, con el STOP, no puede enviar SMS de 20:00 a 8:00 de la mañana.
La consola de API le permitirá descubrir otros métodos para facilitar la integración de servicios como: respuestas por SMS, envío masivo con archivo CSV, mailing, seguimiento de los acuses de recibo, etc.
Interactúe con nuestra comunidad de usuarios.