Inviare SMS con l'API di OVHcloud in C#
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:
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.
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)
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.