Enviar SMS con la API de OVHcloud en C#

Ver como Markdown

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:
  • Enviar SMS:

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.

Info

La siguiente URL le permite obtener automáticamente los permisos correctos para esta guía: https://auth.eu.ovhcloud.com/api/createToken?GET=/sms/&GET=/sms//jobs&POST=/sms//jobs.

creación de los tokens

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)
recuperación de los tokens

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.

Más información

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.

¿Le ha resultado útil esta página?