Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Invio sms parte 2

24 views
Skip to first unread message

Daniele

unread,
Nov 17, 2022, 4:38:49 AM11/17/22
to
Ciao a tutti,
grazie ai vostri suggerimenti, letture varie ed utilizzo del rest
debugger sono riuscito a capire (non totalmente) come si lavora con REST.

Mi rimane da "comprendere" l'invio del'sms.
Riporto l'esempio completo in csharp (dal loro sito
https://developers.skebby.it/?_ga=2.219328153.1049008826.1668593197-1190927089.1668008043&_gac=1.175433366.1668676352.EAIaIQobChMI4qf15--0-wIVCuZ3Ch21wQdLEAAYASAAEgJ3bPD_BwE#send-an-sms-message
)


namespace RestApplication
{
class Program
{
static void Main(string[] args)
{
using (var wb = new WebClient())
{
// Setting the encoding is required when sending UTF8
characters!
wb.Encoding = System.Text.Encoding.UTF8;

try {
wb.Headers.Set(HttpRequestHeader.ContentType,
"application/json");
wb.Headers.Add("user_key", "USER_KEY");
wb.Headers.Add("Session_key", "SESSION_KEY");

String payload = "{" +
" \"message_type\": \"MESSAGE_TYPE\", " +
" \"message\": \"Hello world!\", " +
" \"recipient\": [" +
" \"+393471234567\", " +
" \"+393471234568\"" +
" ], " +
" \"sender\": \"MySender\", " +
" \"scheduled_delivery_time\": \"20161223101010\",
" +
" \"order_id\": \"123456789\", " +
" \"returnCredits\": true" +
"}";

String response =
wb.UploadString("https://api.skebby.it/API/v1.0/REST/sms", "POST", payload);

dynamic obj = JsonConvert.DeserializeObject(response);
Console.WriteLine(obj);
} catch (WebException ex) {
var statusCode =
((HttpWebResponse)ex.Response).StatusCode;
var errorResponse = new
StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
Console.WriteLine("Error!, http code: " +
statusCode + ", body message: ");
Console.WriteLine(errorResponse);
}
}
}
}
}

Quello che non riesco a capire e' la stringa "payload" ovvero come si
deve presentare (alla fine inserite le variabili ed il corretto numero
di cellulare, come si presenta?) e la riga UploadString, dove la devo
digitare nel rest debugger?

Scusatemi se sono banalita' (per me non lo sono), ma non riesco a
mandare questo sms.

Grazie a tutti

Ciao
Daniele

Alberto Salvati

unread,
Nov 18, 2022, 3:36:32 AM11/18/22
to
Per prima cosa, ancor prima di gurdare REST, ti suggerisco di leggere qualcosa sul protocollo HTTP.

intanto mettismo qualche punto fermo.
Una richiesta HTTP "GET" si porta dietro i parametri insieme all'URL.
Puoi renderti conto di questa cosa in modo molto semplice...prova a fare una qualsiasi ricerca tipo bollong.com, italotreno etc.
Tu imposti dei filtri e i filtri che hai impostato passanno come tuple chiave+valore accodate all'URL.
Avrai quindi un URL http tipo http://sarkaz?campo1=pippo&campo2=pluto etc etc etc

Una richiesta HTTP "POST" si porta dietro i parametri nel "body" e non accodati all'URL.

Questa cosa, nel codice c#, la vedi su questa riga qua, dove è scritto senza mezzi termini "POST":

> wb.UploadString("https://api.skebby.it/API/v1.0/REST/sms", "POST", payload);

Riguardo le tue domande specifiche, posso aiutarti poco...
Ho usato REST in c# e Java ma mai in delphi; aggiungo che hodato un occhiata molto superificale alla implementazione REST di delphi e non mi ha convinto.


Veniamo a noi.

WebClient credo che in delphi sia TRestClient
Encoding è gestito da TRestRequest.AcceptCharset.
L'autenticazione che in c# è gestita in modo esplicito sull'header della richiesta HTTP, in delphi lo gestisci con una delle classi che trovi descritte qua:

https://docwiki.embarcadero.com/RADStudio/Sydney/en/REST_Client_Library

Poi, in c# mandi direttamente un JSON, mentre in delphi passi da una TRESTRequest, anch'essa descritta al link qui sopra.

Riguardo questa cosa qua sotto:

> ((HttpWebResponse)ex.Response).StatusCode;

Statuscode è un errore HTTP; questi errori sono standard e in giro trovi n-mila siti con l'elenco.

E' IMPORTANTE CHE TU CAPISCA CHE HTTP E' STANDARD E CHE REST SI BASA SU HTTP.
CHE TU STIA SCRIVENDO CODICE C#, JAVA, PYTHON, PHP, DELPHI ETC, STAI USANDO DEI WRAPPER, CHE POSSONO ESSERE IMPLEMENTATI PIU' O MENO BENE.
DA QUI L'INSISTENZA AD ACQUISIRE LE BASI DI HTTP.


Per quanto riguarda il RESTDebugger, presumo che la stringa payload debba essere inserita nel memo etichettato come "custom body".

> Quello che non riesco a capire e' la stringa "payload" ovvero come si
> deve presentare (alla fine inserite le variabili ed il corretto numero
> di cellulare, come si presenta?)

Dire "stringa" è riduttivo. Quella che tu chiami stringa è la SERIALIZZAZIONE JSON di un oggetto.
In pratica una richiesta REST è descritta da un oggetto e quando chiami un REST gli mandi questo oggetto serializzato.
Nota che in genere con REST si ua JSON ma il servizio lato server può essere configurato per accettare anche XML...

Nel tuo caso, quel pacchetto JSON descrive una classe che ha queste property:

Type
TXXSMSrequest = class
public
property Message_Type: string;
property Message: string;
property Recipients: TStringList;
property Sender: string;
property Schedudeled_Delivery_Time: TDateTime;
property OrderId: string;
property ReturnCredits: boolean;



> e la riga UploadString, dove la devo > digitare nel rest debugger?

Intanto, è bene svegliarsi un pochino e spiegarsi meglio:

> wb.UploadString("https://api.skebby.it/API/v1.0/REST/sms", "POST", payload);

1) UploadString è un METODO DELLA CLASSE C# WebClient, quindi chiedere "dove digitare uploadstring" non ha senso.
2) l'URL lo scrivi nell'edit URL
3) la parola "POST" la scegli dalla combobox
4) payload lo scrivi nel memo custom content

A.

Alberto Salvati

unread,
Nov 18, 2022, 6:54:21 AM11/18/22
to
Errata corrige:
>Puoi renderti conto di questa cosa in modo molto semplice...prova a fare una qualsiasi ricerca tipo booking.com, italotreno etc.

Daniele

unread,
Nov 21, 2022, 5:13:25 AM11/21/22
to
Ciao Alberto,

Il 18/11/2022 09:36, Alberto Salvati ha scritto:
> Per prima cosa, ancor prima di gurdare REST, ti suggerisco di leggere qualcosa sul protocollo HTTP.
[....]

>
>> wb.UploadString("https://api.skebby.it/API/v1.0/REST/sms", "POST", payload);
>
> 1) UploadString è un METODO DELLA CLASSE C# WebClient, quindi chiedere "dove digitare uploadstring" non ha senso.
> 2) l'URL lo scrivi nell'edit URL
> 3) la parola "POST" la scegli dalla combobox
> 4) payload lo scrivi nel memo custom content

Ti ringrazio per la spiegazione dettagliata, dove il ringraziamento e'
riduttivo.
Con riferimento all'esempio, quello che loro chiamano "payload" e' un
"record" json.
E' corretto il record che propongo (semprte dal loro esempio)?
Ho omesso scheduled_delivery_time ed order_id chwe son o flag che non
interessano.

{
"message_type" : "SI"
"message" : "Test SMS"
"recipient" : [ "+393471234567",
"+393471234568"]
"sender" : "Me stesso"
"returnCredits" : "True"
}

Ho chiesto la possibilita' di fare dei test ....
su skebby ...

Ti aggiorno sui progressi.

Grazie ancora

Ciao
Daniele



Daniele

unread,
Nov 21, 2022, 10:39:00 AM11/21/22
to
Ciao Alberto (e tutti),
sono riuscito ad inviarmi il messaggio dal rest debugger.
La stringa da inviare nel "body" deve essere cosi' formata (ho usato i
soli token obbligatori):

{"message_type" : "MESSAGE_TYPE", "message" : "MESSAGE_TEXT",
"recipient" : [INT_PREFIX + PHONE_NUMBER], "returnCredits" : true}

tutta su una riga, senza #13 o altri caratteri (sul loro server).

Adesso ho tutto per poter sostituire la vecchia procedura con quella nuova.

Ti ringrazio per la tua assistenza, sempre preziosa.

Ciao
Daniele

0 new messages