Vai al contenuto


41 15124 <![CDATA[How To: Specifiche Providers.xml (2.0)]]> 22 10 Jan 2006 http://forum.smsclient.it/topic/15124-how-to-specifiche-providersxml-20/?view=findpost&p=22 Funzionamento generale
wwSmsClient per mandare i messaggi simula il comportamento di un browser, quindi a grandi linee prende dei dati (login, mittente e testo da spedire) ed effettua il submit di tali dati ad opportune pagine a seconda di quale provider si sta usando.

La cosa piu' noiosa e lunga da fare e' sgamare le pagine da contattare per mandare un messaggio con un certo provider. Quindi bisogna armarsi di:
- tanta pazienza
- tempo
- login e password necessari per accedere al provider
- probabilmente un http sniffer o un proxy locale che mostra i dati delle connessioni.

Le prime 4 non necessitano di spiegazione. Gli http sniffer sono dei programmi che intercettano le richieste che un programma invia al server e le risposte che il server manda. Consiglio vivamente

Please Login HERE or Register HERE to see this link!

che è sicuramente il migliore sulla piazza sia in fatto di stabilita' che di informazioni fornite. Questo programma esiste sia come plugin per IE sia come versione a se stante.

Nella RevE di smsclient è possibile editare i provider direttamente dal programma (Strumenti -> Gestione Provider).


Di seguito c'e' la documentazione di tutti i codici XML supportati con la relativa spiegazione ed esempio.
Tutti campi sono case sensitive, ossia maiuscole e minuscole contano e vanno rispettate!


Schema minimo provider
<provider>
				<ConfigConsts>
				 <const>
				</ConfigConsts>
				<GlobalVars>
				 <var>
				</GlobalVars>
		 <action>
				 <vars>
					 <var >
					 <var >
				 </var>
			  <page >
					 <UserVariables>
						 <var>
					 </UserVariables>
					 <cookies>
						 <cookie>
					 </cookies>
					 <link />
					 <field />  
					 <tag />
			  </page>
			 <page >
				 ....
			 </page>
			 <page >
				 ....
			 </page>
		  </action>
	  </provider>




<provider provID=&#34;23&#34; name=&#34;STANDARD GSM&#34; maxSmsLen=&#34;160&#34; supportsFlash=&#34;true&#34; type=&#34;GSMProvider.gsmProvider&#34; file=&#34;GSMModule.dll&#34;>

provider
- obbligatorio
- indica che si sta definendo un provider

maxSmsLen
-
facoltativo, viene assunto il valore 0 se omesso
- indica il numero massimo di caratteri spedibili tramite questo provider

provID
-
obbligatorio
- indica l'id del provider, deve essere univoco

name
- obbligatorio
- indica il nome del provider

supportsMMS
- facoltativo, assunto il valore False se omesso
- serve per indicare all'interfaccia grafica che questo provider supporta gli mms

supportsFlash
- facoltativo, assunto il valore False se omesso
- serve per indicare all'interfaccia grafica che questo provider supporta gli sms flash

type
- facoltativo, assunto il valore default se omesso
- serve per poter caricare dinamicamente un provider di un tipo non standard che spedisce sms utilizzando un protocollo diverso da quello http

file
- facoltativo, assunto il valore stringa vuota se omesso
- serve per indicare il file .dll da dove caricare il tipo specificato

allowAutoUpdate
- facoltativo, True se omesso
- serve per indicare che questo provider puo' essere automaticamente aggiornato

ver
- facoltativo, 0.0.0.0 se omesso
- serve per individuare la versione di questo provider

isActive
-
facoltativo, True se omesso
- indica se questo provider deve apparire nella lista dei provider visualizzata all'utente


New
<ConfigConsts>
		   <const name=&#34;SendsDelay&#34; DefaultValue=&#34;3000&#34;/>
		 </ConfigConsts>


ConfigConsts
- facoltativo
- indica che stiamo definendo un insieme di costanti che potranno essere configurate per ogni account associato a questo provider

const
- facoltativo
- indica che stiamo definendo una costante

name
- obbligatorio
- indica il nome della costante

value
- obbligatorio
- indica il valore di default della costante



New
<GlobalVars>
		   <var name=&#34;contatore&#34; value=&#34;0&#34;/>
		 </GlobalVars>


GlobalVars
- facoltativo
- indica che stiamo definendo un insieme di variabili condivise tra tutte le azioni di questo provider

var
- facoltativo
- indica che stiamo definendo una variabile

name
- obbligatorio
- indica il nome della variabile

value
- obbligatorio
- indica il valore iniziale della variabile




<action id=&#34;0&#34; baseAction=&#34;-1&#34; type=&#34;imagegetter.imagegetter&#34; file=&#34;./providers/imagegetter.dll&#34; Resetonerror=&#34;true&#34;>


action
- obbligatorio
- indica che si sta definendo un'azione

id
- obbligatorio
- indica l'id dell'azione che si sta definendo

baseAction
-
obbligatorio
- indica l'azione che deve essere eseguita prima che venga eseguita questa che si sta definendo. Se questa è la prima, o l'unica azione, questo valore deve essere -1

type
- facoltativo
- serve per specificare un tipo non standard per questa azione. Un'azione puo' avere anche un componente grafico (vedere il provider H3GInfo per un esempio).

file
- facoltativo
- serve per indicare la dll da dove caricare il tipo specificato

Resetonerror
- facoltativo, false se omesso
- indica se in caso di errore eseguendo questa azione, si deve effettuare un reset. Nel caso di un provider classico (http), cio' significa che tutte le variabili di sessione, cookies ecc, vengono reimpostati.

ResetOnEnd
- facoltativo, false se omesso
- indica se dopo aver eseguito l'ultima pagina appartenente a questa azione, si deve effettuare un reset. (Vedi sopra)

breakonerror
- facoltativo, true se omesso
- indica se in caso di errore durante l'esecuzione di questa azione, il processo di spedizione deve essere bloccato.

friendlyName
- facoltativo, stringa vuota se omesso
- indica il nome di questa azione. Le azioni che costituiscono l'entry-point per la spedizione dei messaggi devono chiamarsi Send, quelle che provvedono a spedire sms flash devono chiamarsi SendFlash, quelle che provvedono a spedire mms devono chiamarsi SendMMS.

reperformAfter
- facoltativo, 0 se omesso
- indica dopo quanto tempo questa azione deve essere rieffettuata dalla prima volta che va a buon fine. Il tempo è espresso in millisecondi.

mutualExclusive
- facoltativo, true se omesso
- true: se questa azione non puo' essere eseguita parallelamente da due o piu' thread. false: questa azione puo' essere eseguita parallelamente da due o piu' thread. (il motore di smsclient si preoccupera' di gestire tutto).

ExecuteOnlyIfFailed
- facoltativo, -1 se omesso
- L'azione che si sta definendo viene eseguita se e solo se un'altra azione avente questo ID ha fallito l'esecuzione.


<vars>
   <var name=&#34;sessionUserAgent&#34; value=&#34;Mozilla/5.0 &#40;Windows; U; Windows NT 5.1; en-US; rv&#58;1.8.0.4&#41; Gecko/20060508 Firefox/1.5.0.4&#34; />
 </vars>


vars
- facoltativo
- indica che stiamo definendo un insieme di variabili per questa azione (lo scope delle variabili è l'azione)

var
- facoltativo
- indica che stiamo definendo una variabile

name
- obbligatorio
- indica il nome della variabile

value
- obbligatorio
- indica il valore iniziale della variabile



<page submit=&#34;POST&#34;		
	Accept=&#34;text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5&#34;		 
	Accept-Language = &#34;it-it,it;q=0.8,en-us;q=0.5,en;q=0.3&#34; 
	Accept-Encoding = &#34;gzip,deflate&#34; 
	Accept-Charset = &#34;ISO-8859-1,utf-8;q=0.7,*;q=0.7&#34;
	okString=&#34;messaggio &egrave; stato inviato&#34; 
	DropCookies=&#34;true&#34; 
	AllowAutoRedirect=&#34;false&#34; 
	delay=&#34;1000&#34;>

page
- obbligatorio
- indica che stiamo definendo una pagina

submit
- obbligatorio
- POST o GET, indica il metodo con cui scaricare la pagina

Accept
- facoltativo, stringa vuota se omesso
- indica cosa si accetta in risposta a questa richiesta

Accept-Language
- facoltativo, stringa vuota se omesso
- indica le lingue supportate

Accept-Encoding
- facoltativo, stringa vuota se omesso
- indica l'encoding usato per codificare la risposta

Accept-Charset
- facoltativo, stringa vuota se omesso
- indica il set di caratteri supportato

DropCookies
- facoltativo, false se omesso
- indica se i cookies che vengono impostati da questa pagina devono essere scartati

AllowAutoRedirect
- facoltativo, true se omesso
- indica se automaticamente si devono seguire i redirect di tipo 302

KeepAlive
- facoltativo, true se omesso
- indica se la connessione deve essere mantenuta attiva

referer
- facoltativo, stringa vuota se omesso
- indica il referer di questa pagina

New
IsSecureImagePage
- Obbligatorio
- Indica che la pagina che si sta definendo è un'immagine che dovra' essere mostrata all'utente

New
AddValueAs
- Obbligatorio
- Indica il nome della variabile (non e' necessario dichiararla) dove verra' memorizzato il valore scritto dall'utente

New
OkUrlContains
- facoltativo, stringa vuota se omesso
- rappresenta una stringa che deve essere contenuta dal link risposto dal server (in caso di redirect), affinche' lo scaricamento della pagina venga considerato con esito positivo.

okString
- facoltativo, stringa vuota se omesso
- un insieme di stringhe, eventualmente separate da | che, se contenute nella risposta del server, indicano che lo scaricamento della pagina ha avuto successo.

denyString
- facoltativo, stringa vuota se omesso
- un insieme di stringhe, eventualmente separate da | che, se contenute nella risposta del server, indicano che lo scaricamente della pagina NON ha avuto successo.

Se okString e denyString non sono specificate, lo scaricamento della pagina avra' sempre esito positivo, a meno che non si verifica un errore di rete. Se lo scaricamento della pagina fallisce, fallisce l'esecuzione dell'azione

Msgonerror
- facoltativo, stringa vuota se omesso
- indica il messaggio da mostrare all'utente se questa pagina fallisce

delay
- facoltativo, 0 se omesso
- indica quanto tempo aspettare prima di iniziare l'esecuzione di questa pagina. espresso in millisecondi


<UserVariables>
			 <var name=&#34;codice&#34; DefaultValue=&#34;0&#34; userQuestion=&#34;Inserisci il codice arrivato sul cellulare&#34; />
	  </UserVariables>

New
UserVariables
- opzionale
- indica che stiamo definendo un insieme di domande che verrano poste all'utente

var
- facoltativo
- dichiara una domanda

name
- obbligatorio
- indica il nome della variabile in cui verra' memorizzato il valore che rispondera' l'utente

DefaultValue
- obbligatorio
- indica il valore di default da associare alla variabile e far vedere all'utente

userQuestion
- obbligatorio
- indica la domanda (testo per esteso) da chiedere all'utente


<cookies>
	 <cookie name=&#34;ilmiocookie&#34; value=&#34;valore del cookie&#34; />
 </cookies>


cookies
- opzionale
- Spedisce nella richiesta di questa pagina tutti i cookie specificati

cookie
- opzionale
- Dichiara un cookie

name
- obbligatorio
- il nome del cookie

value
- obbligatorio
- il valore del cookie


<link name=&#34;http&#58;//www.provadominio.com/pagina?&#34; />
 <link name=&#34;parametro&#34; value=&#34;valore_parametro&#34; />
 <field name=&#34;prefix&#34; value=&#34;Prefix&#34; eval=&#34;true&#34;/>
 <field name=&#34;numtel&#34; value=&#34;Number&#34; eval=&#34;true&#34;/>

link
- obbligatorio.
- il primo link definito nella pagina, rappresenta l'indirizzo della pagina, eventuali altri link specificati, rappresentano i segmenti dell'url. Nell'esempio, il link completo della pagina è

Please Login HERE or Register HERE to see this link!



field
- opzionale
- Se il metodo per scaricare la pagina è POST, ogni field rappresenta un campo da submittare

name
- obbligatorio
- Il nome del campo (o il link della pagina)

value
- opzionale, stringa vuota se omesso
- il valore da assegnare a campo avente il nome specificato

eval
- opzionale, false se omesso
- Indica se valutare al runtime il valore di qeusto campo (vedi sezione sull'autovalutazione dei parametri per maggiori info)


<page....>
 ...
	 <tag left=&#34;valore_sinistro&#34; right=&#34;valore_destro&#34; addas=&#34;MIOVALORE&#34; isCollection=&#34;True&#34;/>
 ...
 </page>

tag
- opzionale
- serve per cercare nell'html della pagina restituita un valore i cui estremi sono quelli indicati da left e right.
Se un valore avente tali estremi, sara' trovato nell'html della pagina restituita, verra' aggiunta una variabile che conterra' tale valore.

left
- obbligatorio
- indica l'estremo sinistro del valore da recuperare

right
- obbligatorio
- indica l'estremo destro del valore da recuperare

addas
- obbligatorio
- indica il nome da dare alla variabile che conterra' il valore recuperato

New
isCollection
- facoltativo, false se omesso
- indica se devono essere recuperate tutte le occorrenze tra i tag specificati

Esempio:
Questo metodo consente di recuperare un valore da una pagina ed associare a tale valore un nome.
Supponiamo che per poter spedire un messaggio, si deve effettuare il login alla pagina www.provadomain.ajk/login.asp che imposta un campo nascosto chiamato HIDDENCODE e successivamente si deve contattare la pagina www.provadomain.ajk/send.asp che oltre ai vari campi come testo e numero vuole anche il codice impostato da login.asp. Visto che HIDDENCODE varia sempre, non si puo' calcolare questo codice a priori, quindi utilizziamo per recuperare il codice fornito da login.asp e lo usiamo poi in send.asp.

Supponiamo inoltre che il codice html che corrisponde ad HIDDENCODE sia il seguente:

Questa informazione nella pratica si ottiene guardando il codice html recuperato con lo sniffer (vedi post d'inizio).

...
 <page method=&#34;POST&#34; >
	<link name=&#34;http&#58;//www.provadomain.ajk/login.asp&#34; />
	<field name=&#34;usrn&#34; value=&#34;UserName&#34; eval=&#34;True&#34; />
	<field name=&#34;pwd&#34; value=&#34;Password&#34; eval=&#34;True&#34; />
 
	<tag left=&#34;name=&#34;HIDDENCODE&#34; value=&#34;&#34; right=&#34;&#34;&#34; addas=&#34;MYCODE&#34;/>
 </page>
 
  <!--- questo significa che il valore avente come estremo sinistro name=&#34;HIDDENCODE&#34; value=&#34;
		 e come estremo destro &#34;
		 potra&#39; essere riferito da una variabile chiamata MYCODE -->
 
 <page method=&#34;POST&#34;>
	 <link name=&#34;http&#58;//www.provadomain.ajk/send.asp&#34; />
	 <field name=&#34;testo&#34; value=&#34;SmsText&#34; eval=&#34;True&#34; />
	 <field name=&#34;numero&#34; value=&#34;PrefixAndNumber&#34; eval=&#34;True&#34; />
 
	 <field name=&#34;HIDDENCODE&#34; value=&#34;MYCODE&#34; eval=&#34;True&#34; />
 </page>


New - Collections
Dalla versione XT è stata inserita la possibilita' di creare le collections: delle liste di valori.
Attualmente le collections possono essere create solamente tramite il tag visto in precedenza

supponiamo di avere il seguente HTML
<ul><li>primo</li><li>seconda</li><li>terza</li></ul>

scrivendo

<tag left=&#34;<li>&#34; right=&#34;/<&#34; addas=&#34;myList&#34; isCollection=&#34;True&#34;/>

Avremo che in myList saranno presenti tre valori, primo, secondo, terzo
Per accedere agli elementi della collection consultare il post sottostante. ]]>
0 2 0
34305 11 Aug 2006 http://forum.smsclient.it/topic/15124-how-to-specifiche-providersxml-20/?view=findpost&p=34305 Valutazione dei parametri

Se in link o field è specificato eval="True", allora il valore corrispondente a value verra' valutato al runtime.
Anche il valore associato a "name" di ogni nodo field/link e/o il valore associato a "referer" puo' essere valutato al runtime.
In questo caso è ininfluente specificare eval="True"; bisogna invece adottare un'altra sintassi, ad esempio è legittimo scrivere

referer=&#34;$%http&#58;//www.pippo.akj/login.asp?USERID=$idUtente$%&sessionid=$sessID&#34;

Le stringhe che seguono $% non verranno valutate, quelle che seguono $ verranno valutate.


Ad esempio il numero di telefono è uno di quei campi il cui valore cambia sempre. Quindi se vogliamo spedire
il campo NumeroDiTelefono ad una pagina dovremo fare (submit="POST"):

<field name=&#34;NumeroDiTelefono&#34; value=&#34;PrefixAndNumber&#34; eval=&#34;True&#34; />

Quando il motore di wwSmsClient si accorge che eval="True", provera' a cercare se esiste una chiave speciale PrefixAndNumber
e se esiste restituira' il suo vero valore. (Questa chiave ovviamente esiste e restituisce il prefisso e numero di telefono).

Se la chiave specificata non dovesse esistere, quindi non è possibile risolvere il suo valore, verra' mandata una stringa vuota per
il campo in questione.

Il motore di wwSmsClient è in grado di risolvere i valori tra:
1. Una qualsiasi variabile definita nell'azione
2. Un parametro appartenente all'url della pagina che ha risposto alla richiesta.

Esempio:
supponiamo che la pagina www.pippo.ajk/sendSms.asp voglia come parametro idUtente.
idUtente viene ottenuto facendo il login (contattando la pagina www.pippo.ajk/login.asp) che ci reindirizza
alla pagina www.pippo.ajk/login.asp?idUtente=10.
Come si vede idUtente, è un parametro appartenente all'url della pagina che ha risposto alla richiesta di effettuare il login.
Quindi, nella definizione della pagina www.pippo.ajk/sendSms.asp scriveremo
<field name=&#34;USERID&#34; value=&#34;idUtente&#34; eval=&#34;True&#34; />

3. Una funzione tra queste elencate di seguito
- Random(min, max): Restituisce un numero random compreso tra min e max. min e max possono essere costanti o valori da valutare al runtime.

- dChars(stringa): Sostituisce tutte le occorrenze di \XX con il carattere ASCII equivalente. Ad esempio, se si volesse mandare al server un campo avente lo username seguito da un invio, si potrebbe scrivere
<field name=&#34;username&#34; value=&#34;$UserName$dChars&#40;\13\10&#41;&#34; eval=&#34;True&#34; />

- RandomAmong(param1....paramX): Restituisce un valore casuale tra quelli forniti. ogni parametro puo' essere una costante o un valore da valutare al runtime.

- Incr(var, step): Incrementa var del valore specificato in step. Se step è negativo, var sara' decrementata. Var deve essere una variabile dichiarata nelle variabili dell'azione, step puo' essere una costante o un valore da valutare al runtime.

New - RandomString(strA, strB): Restituisce una stringa random la cui lunghezza è la maggiore tra le due ed ogni i-esimo carattere è uno generato random tra strA(i) e strB(i). dalla versione xt 2.0

funzioni valide solo per i provider Web

- GetHtmlCompliant(param): Restituisce una stringa valida secondo l'alfabeto HTML. param deve essere un valore da valutare al runtime.

- Escape(param): Restituisce l'escape di param. param deve essere un valore da valutare al runtime.

- GetOperatorID(param): Restituisce il codice dell'operatore. param è il prefisso in forma 3xx. param deve essere un valore da valutare al runtime.

New Funzioni sulle collections - (provider web)

- cGetItems(CollectionName, baseIndex, howMany, separator): Restituisce un numero howMany di elementi nella collection CollectionName[/] dall'indice baseIndex incluso. Ogni valore sara' separato dal separatore separator
- cCount(CollectionName): Restituisce il numero di elementi nella collection avente il nome specificato
- cAdd(CollectionName, value): Aggiunge il valore specificato nella collection
- cRemove(CollectionName, index): Rimuove il valore avente l'indice specificato dalla collection
- cClear(CollectionName): Rimuove tutti gli oggetti dalla collection


funzioni valide solo per i provider Smtp
- Base64(param): restituisce param codificata in base64. param deve essere un valore da valutare al runtime

- threatText(param): restituisce param stesso, controllando che non finisca con [invio].[invio] che è il carattere di terminazione della mail. param deve essere un valore da valutare al runtime

funzioni valide solo per i provider GSM
- PDULenght: restituisce la lunghezza della stringa PDU (dell'SMS in fase di spedizione) che dovra' essere mandata al cellulare

- PDUEncode: Restituisce il messaggio in fase di spedizione codificato secondo lo standard PDU

[i]nei casi in cui l'utilizzo delle costanti non è previsto, si puo' utilizzare comunque una costante anteponendole il token $%


4. Una parola chiave tra queste elencate di seguito
- Number : Restituisce il numero di telefono senza prefisso e prefisso internazionale del destinatario
- Prefix: Restituisce il prefisso del destinatario (es. 393)
- InternationalPrefix: Restituisce il prefisso internazionale del destinatario
- FullNumber: Restituisce il numero completo di prefisso internazionale e prefisso del destinatario
- PrefixAndNumber: Restituisce solo il prefisso e il numero del destinatario, senza prefisso internazionale.
- SmsText: Restituisce il testo del messaggio
- Subject: Restituisce i primi 20 caratteri del messaggio
- ByteMMSImage: Restituisce i byte del file allegato all'sms
<field name=&#34;FILE1&#34; value=&#34;ByteMMSImage&#34; FileName=&#34;pic.jpg&#34; ContentType=&#34;image/pjpeg&#34; IsFile=&#34;true&#34;  eval=&#34;True&#34;/>


5. Un valore aggiunto con <tag />
Vedere sopra per la sintassi e funzionamento.



Alcuni esempi di implementazione non semplicissime sono qui:

Please Login HERE or Register HERE to see this link!

]]>
0 2 0
314444 01 Feb 2008 http://forum.smsclient.it/topic/15124-how-to-specifiche-providersxml-20/?view=findpost&p=314444 post aggiornati con degli esempi che non si vedevano... ]]> 0 2 0