skebby api

Ciao a tutti, sono riuscito ad interfacciarmi con le API di skebby per l’invio di sms utilizzando il plugin CURL MBS (monkeybread).

ho difficolt invece per la ricezione dei messaggi, sulla loro documentazione trovo questi comandi (a livello di shell):

# Session Key example
curl -XGET 'https://api.skebby.it/API/v1.0/REST/newsrsmsmessage' -H 'Content-Type: application/json' \\
-H 'user_key: {USER_KEY}' -H 'Session_key: {SESSION_KEY}' 

# Access token example
curl -XGET 'https://api.skebby.it/API/v1.0/REST/newsrsmsmessage' -H 'Content-Type: application/json' \\
 -H 'user_key: {USER_KEY}' -H 'Access_token: {ACCESS_TOKEN}' 

    On success, the above command returns the following response:

{
    "result": "OK",
    "srsmshistory": [
        {
                  "id_message": "31",
                  "id_sim": "+393400000001",
                  "sender": "+393356242290",
                  "message": "sadasd",
                  "sms_date": "20160503102231",
                  "keyword": "qwe"
        },
        {
                  "id_message": "29",
                  "id_sim": "+393400000001",
                  "sender": "+393356242290",
                  "message": "sadasd",
                  "sms_date": "20160503102231",
                  "keyword": "qwe"
        }
    ]
}

ho difficolt a tradurre in xojo l’istruzione, ad esempio con -H cosa si intende, come va tradotto in xojo???
io ho provato cosi:

//dati da passare a skebby
dim datas() as string

datas.Append "Content-Type: application/json"
datas.Append "user_key: ncssrl"
datas.Append "Access_token: mytoken"

dim c as new CURLSMBS
c.OptionVerbose = true
c.OptionURL = "https://api.skebby.it/API/v1.0/REST/newsrsmsmessage/+393665860580?limit=100'"
c.OptionGet = true
'c.OptionPostFields = Join(datas, "&")
c.OptionSSLVersion = c.kSSLVersionTLSv12

dim e as integer = c.Perform

DebugTextArea.Text = c.DebugData
ResultTextArea.Text = c.OutputData

c.ClearData

ma ottengo un bellissimo:

{“error_type”:“UnknownErrorException”,“code”:400,“error_message”:“Unknown error”}

idee???

-H sono intestazioni (e Content type te lo doveva suggerire)
In pratica non invii dati fai solo una richiesta a un path con le intestazioni corrette

antonio, non riesco a capire come tradurre le istruzioni che mi fornisce skebby, per l’invio sms sono riuscito cosi a risolvere:

dim datas() as string

datas.Append "method=send_sms_classic"
datas.Append "username=ncssrl"
datas.Append "password=mypassword"
'primo numero cellulare destinatario
datas.Append "recipients[]="+TextField1.Text.Trim
'secondo numero cellulare destinatario
if TextField2.Text.Trim.Len>0 then
  datas.Append "recipients[]="+TextField2.Text.Trim
end if
datas.Append "text="+TextField3.Text.Trim

dim c as new CURLSMBS

c.OptionVerbose = true
c.OptionURL = "http://gateway.skebby.it/api/send/smseasy/advanced/http.php"

c.OptionPost = true
c.OptionPostFields = Join(datas, "&")

c.OptionSSLVersion = c.kSSLVersionTLSv12

dim e as integer = c.Perform
'
DebugTextArea.Text = c.DebugData
ResultTextArea.Text = c.OutputData

c.ClearData

partendo da qui:

curl --data “method=test_send_sms_classic&username=username&password=password&recipients[]=393471234567&text=Hi+Mike%2C+how+are+you%3F&sender_string=John” http://gateway.skebby.it/api/send/smseasy/advanced/http.php

ma per la ricezione non riesco proprio a capire…

Perch usi quelle per il router?

Queste mi sembrano pi chiare e puoi utilizzare direttamente Xojo.Net.HttpSocket per inviarle

http://developers.skebby.it/#send-an-sms-message

ciao Antonio, sto guardando l’esempio RESTy di xojo, vorrei capire (scusa l’ignoranza) ma la parte dopo i -H come vengono passati?

mi pare di aver capito che non fanno parte della url di chiamata…

allora, sto facendo dei piccoli passi avanti,

Dim Socket as new HTTPSocket
Dim result As String

Socket.SetRequestContent("","application/json; charset=utf-8")

result = Socket.get("https://api.skebby.it/API/v1.0/REST/login?username=myuser&password=mypwd", 30) 
result = DefineEncoding(result, Encodings.UTF8)

ResultTextArea.Text = result

Dim user_key,Session_key as string
Dim rowFromFile As String
Dim tab(-1) As String //= ";" 'ChrB(9)

rowFromFile = result
tab=Split(rowFromFile,";")

user_key = if(tab(0).Trim.Len>0,tab(0)," ") 
Session_key =  if(tab(1).Trim.Len>0,tab(1)," ") 

'ho ottenuto la user key e la session key, chiamo il secondo web service con questi valori

Socket.ClearRequestHeaders

socket.SetRequestHeader("user_key",user_key)
socket.SetRequestHeader("Session_key",Session_key)
Socket.SetRequestContent("","application/json; charset=utf-8")

result = Socket.get("https://api.skebby.it/API/v1.0/REST/newsrsmsmessage", 30) 
result = DefineEncoding(result, Encodings.UTF8)

ResultTextArea.Text = result

credo che il problema sia qui:

socket.SetRequestHeader(“user_key”,user_key)
socket.SetRequestHeader(“Session_key”,Session_key)

la chiamata che mi chiede skebby (da shell)

Session Key example

curl -XGET ‘https://api.skebby.it/API/v1.0/REST/newsrsmsmessage’ -H ‘Content-Type: application/json’ \
-H ‘user_key: {USER_KEY}’ -H ‘Session_key: {SESSION_KEY}’

per non mi restituisce nulla, n errori n niente…

OK la prima ti risponde. Bene.
Per la seconda dei vedere lo status della risposta. (questa una app REST per cui il risultato dell’operazione anche nello status)

Per quanto sia comodo dal punto delle sviluppo la versione asincrona delle chiamate, ti consiglio di utilizzare (creare) una subclasse della Xojo.net.httpsocket e lavorare con quella.

Rivedendo la documentazione…
Hai attivato il servizio? il comando specifico richiede che il servizio sia attivato altrimenti puoi usare le altre 2 chiamate per ottenere lo storico.

si, il servizio attivo, il secondo non mi risponde purtroppo, nel senso che nel campo resulttextarea non trovo nulla…
quindi come se si perdesse chiss dove, il problema che non riesco a capire se i dati user_key e session_key li passo bene

anche con questi nessuna risposta…

Ciao a tutti! ritorno sull’argomento in quanto pur confrontandomi con il supporto skebby non riesco a cavarne un ragno dal buco!

allora, adesso una webpage con 2 pulsanti, il primo chiama il ws di skebby per ottenere la user_key e session_key da utilizzare nelle successive chiamate, e funziona correttamente, questa la sintassi:

Dim Socket as new HTTPSocket
Dim d As New Dictionary
Dim result As String

Socket.SetRequestContent("","application/json; charset=utf-8")


result = Socket.get("https://api.skebby.it/API/v1.0/REST/login?username=myusername&password=mypwd", 30) 
result = DefineEncoding(result, Encodings.UTF8)

Dim rowFromFile As String
Dim tab(-1) As String //= ";" 'ChrB(9)

rowFromFile = result
tab=Split(rowFromFile,";")

user_key = if(tab(0).Trim.Len>0,tab(0)," ") 
Session_key =  if(tab(1).Trim.Len>0,tab(1)," ") 

Socket.ClearRequestHeaders

Label_user.Text=user_key
Label_session.Text=Session_key

il secondo dovrebbe chiamare il ws di ricezione messaggi utilizzando la coppia user_key e session_key (le ho definite come properties nella mia pagina e tramite due labels ne vedo il contenuto.

Questo il codice dietro l’action del secondo pulsante:

msgbox("ciao")

Dim Socket as new HTTPSocket
Dim d As New Dictionary
Dim result As String

socket.SetRequestHeader("user_key",user_key)
socket.SetRequestHeader("Session_key",Session_key)

Socket.SetRequestContent("","application/json; charset=utf-8")

result = Socket.get("https://api.skebby.it/API/v1.0/REST/newsrsmsmessage/+393665860580?limit=20", 30) 
result = DefineEncoding(result, Encodings.UTF8)

break

ResultTextArea.Text = result

il problema che non sembra accada nulla quando schiaccio il pulsante 2, ho provato a mettere un break o un msgbox ma niente, non ci passa mai…dove sta il problema???

grz
Ciro

Essendo sul web eviterei il msgbox per vedere se va, ma utilizzerei in debug il debugger e system.debuglog e in live un file di log.

In ogni caso se non succede nulla forse non ci arriva proprio! Hai provato a mettere solo il msgbox?

Consiglio: per quanto istintivamente più utilizzabile non utilizzare socket.get per ottenere il risultato immediatamente.
Sei sulla rete, ci possono essere una miriadi di motivazioni per cui la risposta possa venire in tempi diversi.
Utilizza un oggetto socket con delle delegate come callback per notificare l’applicazione e/o l’utente.

Guarda come esempi quelli relativi alla classificazione delle immagini e la creazione di pdf su https://www.xojoitaliablog.com
Anche se riguardano altri servizi non è difficile trasformarli al tuo caso.

Ciao Antonio!

allora, si ho provato a commentare tutto tranne il msgbox e cosi appare.
in realt questa una prima fase di valutazione del servizio, per cui mi serve un’app che me lo faccia fare subito (devo dare risposta ad un cliente se usare skebby o altro servizio), ovviamente in caso di esito positivo, la cosa verrebbe “sistemata” (anche se non so ancora come, mi guarder gli esempi che mi citi…)

Ok se funziona il msgbox allora piano piano (con il break) inserisci le altre righe per capire cosa ti blocca.
Se ti blocca…

Allora Antonio, non sempre riesco ad andare in break, a volte va, poi le volte successive no…come mai?

mi sono fermato all’istruzione:

result = Socket.get("https://api.skebby.it/API/v1.0/REST/newsrsmsmessage/+393665860580?limit=20", 30) 

fino all’istruzione precedente va sempre in debug

Visto che vuoi provare la funzionalit, ti consiglio di provarla prima in una app desktop.
In una app web avere oggetti asincroni (anche se chiamati sincroni) pu creare problemi (se ci pensi un attimo)

Come ti ho consigliato, dopo trasforma le chiamate in notifiche per la sessione (per notificare l’utente del risultato) lasciando le chiamate asincrone su app
Basta che registri l’identificativo della sessione nella chiamata (cosa che puoi utilizzare anche per limitare il numero di invii contemporaneo per utente) e poi lo utilizzerai per trovare la sessione (se esiste ancora) e inviare la notifica alla sessione corretta.