Inviare SMS con l'API di OVHcloud in C#

Vedi come Markdown

Scopri come inviare SMS con l'API RESTful di OVHcloud in C#: crea le tue credenziali API, connettiti e invia il tuo primo SMS

Obiettivo

Gli SMS sono ampiamente utilizzati per diffondere informazioni pratiche, monitorare lo stato di un ordine o di un processo transazionale, ricevere avvisi in caso di evento insolito o ricordare appuntamenti. Questa guida illustra il metodo per inviare un primo SMS con l'API di OVHcloud in C#.

Scopri come inviare SMS con l'API RESTful di OVHcloud in C#.

Prerequisiti

  • Un ambiente di sviluppo C#.
  • Un account OVHcloud con crediti SMS.
  • Un mittente SMS convalidato.

Procedura

Chiamate verso l'API

Implementeremo la chiamata al servizio web direttamente nel codice. Per motivi di leggibilità e semplicità, la parte di consumo dell'API non è né fattorizzata né implementata completamente (deserializzazione JSON, ecc.).

Per l'implementazione della chiamata al servizio web, ti consigliamo di leggere la nostra guida sui primi passi con le API di OVHcloud.

In questa guida chiameremo due metodi:

  • Elenco dei servizi SMS attivi:
  • Inviare SMS:

Creazione delle credenziali

Le credenziali API sono necessarie per utilizzare l'API SMS; vengono create singolarmente per identificare l'applicazione che invierà gli SMS. La durata di queste credenziali è configurabile.

Crea le tue credenziali di Script (tutte le chiavi in una volta) su questa pagina: https://auth.eu.ovhcloud.com/api/createToken.

Info

Il seguente URL ti permette di ottenere automaticamente i permessi corretti per questa guida: https://auth.eu.ovhcloud.com/api/createToken?GET=/sms/&GET=/sms//jobs&POST=/sms//jobs.

creazione dei token

In questo semplice esempio, recuperiamo i permessi per accedere alle informazioni sull'account, alla possibilità di vedere gli invii in attesa e alla possibilità di inviare SMS.

  • GET /sms/
  • GET/sms/*/jobs
  • POST /sms/*/jobs

L'asterisco (*) attiva le chiamate a questi metodi per tutti i tuoi account SMS; puoi limitare le chiamate a un solo account se gestisci più account SMS sul tuo account OVHcloud.

Clicca su Create per recuperare le credenziali per il tuo script:

  • Application Key (identifica la tua applicazione)
  • Application Secret (autentica la tua applicazione)
  • Consumer Key (autorizza l'applicazione ad accedere ai metodi scelti)
recupero dei token

L'ambiente e le credenziali sono pronti: puoi scrivere il codice della tua prima chiamata all'API.

Connessione di base all'API: recupero dell'account SMS

Ora testeremo la corretta connessione all'API visualizzando semplicemente il nome 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();
        }

        //calcolo dello 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";
            
            //Parametri del metodo chiamato
            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();

            //calcolo della firma
            String signature = "$1$" + HashSHA1(AS + "+" + CK + "+" + METHOD + "+" + QUERY + "+" + BODY + "+" + TSTAMP);
            Console.WriteLine(signature);

            //Creazione della richiesta
            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
            {
                //Recupero del risultato della chiamata
                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();

            }
            //Gestione delle eccezioni
            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());
                }
            }
        }
    }
}

All'avvio di questa applicazione C#, dovresti recuperare l'elenco dei tuoi account SMS. Visualizziamo inoltre, per prima cosa, la firma calcolata della richiesta.

$1$c190e3e8d22399d11dcba599f782f9e11a016727
["sms-XX0000-1"]

Invio del primo SMS

Per inviare SMS, utilizziamo il metodo POST jobs:

Info

La risposta via SMS (numero breve tramite senderForResponse) è disponibile unicamente in Francia.

Il parametro senderForResponse permette di utilizzare un numero breve, il che ti consente di inviare SMS direttamente senza dover creare un mittente (es.: il tuo nome). I numeri brevi permettono anche di ricevere risposte dalle persone che hanno ricevuto l'SMS, il che può essere utile per un sondaggio di soddisfazione, un'applicazione di voto, un gioco, ecc.

private void sendSms()
        {
            String AK = "your_app_key";
            String AS = "your_app_secret";
            String CK = "your_consumer_key";

            //Parametri del metodo chiamato
            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);

            //Creazione della richiesta
            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);
       
            //Scrittura dei parametri BODY
            using (System.IO.Stream s = req.GetRequestStream())
            {
                using (System.IO.StreamWriter sw = new System.IO.StreamWriter(s))
                    sw.Write(BODY);
            }

            try
            {
                //Recupero del risultato della chiamata
                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());
                }
            }
        }

Ecco il tipo di risposta prevista:

$1$e591c367cebc15b1fe7f9a50d792602824a52e78
{"totalCreditsRemoved":1,"invalidReceivers":[],"ids":[27814656],"validReceivers":["+33600000000"]}

Si ottiene una risposta con 1 credito consumato per un numero valido. Il messaggio predefinito include il messaggio STOP che consente ai destinatari di annullare l'iscrizione. Puoi disattivare lo STOP tramite il parametro noStopClause. Tieni presente che, con lo STOP, non puoi inviare SMS dalle 20:00 alle 8:00 del mattino.

Per saperne di più

La console API ti permetterà di scoprire altri metodi per facilitare l'integrazione di servizi come: risposte via SMS, invio massivo con file CSV, mailing, monitoraggio degli avvisi di ricezione, ecc.

Contatta la nostra Community di utenti.

Questa pagina ti è stata utile?