API di Feedaty
In questo articolo:
Recupero dei dati salienti sulle recensioni pubblicate
Informazioni generali
I servizi API resi disponibili dalla piattaforma Zoorate permettono i seguenti macro aspetti di interazione:
- Inserimento ordini Metodo per inserire uno o più ordini che poi Feedaty processerà per l’invio delle survey. Il metodo restituisce per ogni ordine processato l’esito (ordine inserito, ordine duplicato, utente ha fatto opt-out, ecc.)
- Recupero ordini Metodo per recuperare i dati degli ordini inseriti in Feedaty.
- Recupero recensioni Metodo per recuperare le recensioni attualmente pubblicate
Per facilitare il recupero degli ordini inseriti è possibile applicare i seguenti filtri:
- Recupera per codice ordine
- Recupera per codice cliente / indirizzo email cliente
- Recupera per range di date nella quale sono state rilasciate
Per ogni ordine viene restituita anche l’informazione su quando verrà o è avvenuto l’invio dell’email survey. Invece per facilitare il recupero delle recensioni pubblicati è possibile applicare i seguenti filtri:
- Recupera per codice prodotto
- Recupera per codice cliente / indirizzo email cliente
- Recupera per range di date nella quale sono state rilasciate
Sia per gli ordini che per le recensioni vengono forniti dei metodi per la paginazione dei risultati, così da poter gestire facilmente elenchi lunghi e recuperare solamente i dati che è necessario elaborare e/o mostrare.
L’autenticazione e autorizzazione avviene attraverso le specifiche OAuth 2 (http://oauth.net/2/) I dati di accesso sono disponibili nel back office alla specificazione sezione per la gestione delle API.
Importante
è possibile abilitare o disabilitare l’accesso tramite API, questa opzione è contenuta nell'Area Riservata di Feedaty nella sezione Pubblica le recensioni - API.
Autenticazione
Per l’autenticazione è necessario disporre del codice Merchant Code e del codice Client Secret, entrambi i codici sono disponibili nella pagina "Pubblica le recensioni > API" dell'area riservata Feedaty.
Esempio di credenziali di autenticazione:
- MerchantCode: 188727178
- Client Secret: 84d10d9d9def4bfdae66110889316113
Per potersi autenticare è innanzi tutto necessario richiedere un Request Token:
POST /OAuth/RequestToken HTTP/1.1 Host: api.feedaty.com Content-Type: application/x-www-form-urlencoded
Response:
HTTP/1.1 200 OK Server: ngix/1.2.0 Cache-Control: no-cache, no-store, must-revalidate Pragma: no-cache Content-Type: application/json; charset=utf-8 Expires: -1 Date: Tue, 13 Aug 2013 13:13:13 GMT Content-Length: 164 { "RequestToken": "5f8d57a9e0f44467bf8a0ed33161e47e", "AccessToken": null, "Expires": 300, "RefreshToken": "a8741a605307426d9e13df9d914ca5ba", "Scope": null, "Error": null, "Success": true,"RequireSsl": false }
A questo punto è possibile utilizzare il RequestToken per “crittografare” le credenziali di accesso necessarie per richiedere il token di accesso. Occorre notare che il RequestToken rimane valido per un determinato numero di secondi dal momento del suo rilascio (nell’esempio 300 secondi), passati i quali il RequestToken non sarà più utilizzabile. La crittografia delle credenziali prevede che venga calcolato il valore di hashing della stringa risultante dal request token al quale deve essere accodata l’API Client Secret, e codificato infine in BASE64.
BASE64(MerchantCode:SHA256(RequestToken + APIClientSecret))
ovvero, ad esempio:
BASE64(188727178:SHA256(5f8d57a9e0f44467bf8a0ed33161e47e84d10d9d9def4bfdae661108893
Il risultato con i dati di esempio è il seguente:
MTg4NzI3MTc4OjA5ZDg2NWFlOWM4NDdkYmU4MWUyYjBkMjEzMGI0NjQwNmY4YjM3MjE0YWU2YTg5ZTUwZWE2NDU0ZWVmMjc1NzY
Ottenimento dell’Access Token
L’Access Token rappresenta la chiave di autorizzazione necessaria per invocare i metodi dell’API che necessitano che il client sia stato preventivamente autorizzato. Affinché l’Access Token venga rilasciato è necessario fornire attraverso il parametro Authorization il codice crittografato delle credenziali del merchant ottenuto precedentemente, specificando lo schema Basic in questo modo:
Authorization: Basic <codice>
Esempio di chiamata:
POST /OAuth/AccessToken HTTP/1.1 User-Agent: Fiddler Host: api.feedaty.com Content-Type: application/x-www-form-urlencoded Authorization: Basic MTg4NzI3MTc4OjA5ZDg2NWFlOWM4NDdkYmU4MWUyYjBkMjEzMGI0NjQwNmY4YjM3MjE0YWU2YTg5ZTUwZWE2NDU0ZWVmMjc1NzY= oauth_token=5f8d57a9e0f44467bf8a0ed33161e47e&grant_type=authorization
Esempio di Risposta
HTTP/1.1 200 OK Server: ngix/1.2.0 Cache-Control: no-cache, no-store, must-revalidate Pragma: no-cache Content-Type: application/json; charset=utf-8 Expires: -1 Date: Tue, 13 Aug 2013 13:13:14 GMT Content-Length: 164 { "RequestToken": "5f8d57a9e0f44467bf8a0ed33161e47e", "AccessToken": "<AccessToken>", "Expires": 300, "RefreshToken": null, "Scope": null, "Error": null, "Success": true, "RequireSsl": false }
La proprietà “Success” indica se l’operazione è stata eseguita con successo. In caso affermativo occorre prendere nota dei valori delle proprietà AccessToken e RefreshToken, nonchè eventulamente dei secondi rimanenti di validità dell’Access Token indicati nella proprietà Expires. Nell’esempio mostrato sopra il token scade dopo 300 secondi dal momento del rilascio, è cura dello sviluppatore determinare quando rinnovare il token, meglio se a token scaduto o al limite oltre i 3/4 della sua vita. L’AccessToken a questo punto deve essere utilizzato per tutte le chiamate ai metodi API non appartenenti al percorso /OAuth, al fine di identificare correttamente il merchant e le relativi autorizzazioni per l’espletamento della funzione richiesta. Il modo corretto per fornire al metodo dell’API l’AccessToken è di passarlo come parametro della richiesta, in questo modo:
Authorization: OAuth <AccessToken>
Esempio di header contenente il parametro Authorization
POST <path> HTTP/1.1 Host: api.feedaty.com Content-Type: application/json Authorization: OAuth 0d9b2c7d4d9c42688eab195cfce75292
Prolungamento della validità dell’Access Token
Qualora fosse necessario prolungare la vita del token di accesso, è sufficiente richiamare il metodo RefreshToken passando come unico parametro il valore di RefreshToken ottenuto con l’autenticazione. Questo può essere ripetuto quante volte si vuole.
POST /OAuth/RefreshToken HTTP/1.1 Host: api.feedaty.com Content-Type: application/x-www-form-urlencoded RefreshToken=a8741a605307426d9e13df9d914ca5ba
Risposta in caso di successo
HTTP/1.1 200 OK Server: ngix/1.2.0 Cache-Control: no-cache, no-store, must-revalidate Pragma: no-cache Content-Type: application/json; charset=utf-8 Expires: -1 Date: Tue, 13 Aug 2013 13:23:53 GMT Content-Length: 194 Connection: Close { "RequestToken": null, "AccessToken": "0d9b2c7d4d9c42688eab195cfce75292", "Expires": 300, "RefreshToken": "8aebef5be272432c9a55940c802218c2", "Scope": null, "Error": null, "Success": true, "RequireSsl": false }
Ordini di acquisto
Gli ordini di acquisto rappresentano il dato base utilizzato dalla piattaforma zoorate per erogare il proprio servizio di survey.
Registrazione di nuovi ordini
Un ordine è identificato da un insieme minimo di informazioni:
ID (Obbligatorio) E’ un valore alfanumerico che identifica in modo univoco l’ordine.
Date (Obbligatorio) E’ la data di acquisto dell’ordine.
CustomerEmail (Obbligatorio) E’ l’indirizzo email del cliente che ha effettuato l’acquisto. Questo indirizzo email verrà utilizzato da Zoorate per inviare l’email relative alle survey.
CustomerID (Obbligatorio) E’ un valore alfanumerico che identifica in modo univoco il cliente che ha effettuato l’acquisto.
CustomerName (Opzionale) Nome del cliente che ha effettuato l’acquisto
Culture (Opzionale) Specifica la lingua predefinita da utilizzarsi nell’erogazione dell’email di survey. Valori ammessi sono: it, en, es, fr, de
LocationCode (Opzionale) con il quale è possibile specificare la location relativa all'acquisto effettuato (il parametro va specificato sullo stesso livello della proprietà CustomerEmail).
Products (Opzionale) Lista di ulteriori dati relativi ai prodotti o servizi acquistati dal cliente forniti al fine di raccogliere recensioni relativi ai singoli prodotti o servizi. Ogni singola informazione contenuta nella lista “Products” può contenere le seguenti informazioni:
- SKU (Obbligatorio) Codice alfanumerico identificativo del prodotto.
- Brand (Opzionale) Marca del prodotto. Opzionale.
- Name (Obbligatorio) Nome o descrizione breve del prodotto/servizio.
- Size (Opzionale) Taglia del prodotto (Max 20 caratteri consentiti).
- Color (Opzionale) Colore Del Prodotto (Max 20 caratteri consentiti).
- Category (opzionale) Categoria del prodotto, necessaria per attivare la survey verticale sui prodotti. Per maggiori informazioni su questa funzionalità contattare il nostro supporto tecnico.
- ThumbnailURL (Opzionale) Indirizzo URL assoluto ad un immagine rappresentativa del prodotto/servizio.
- URL ( Opzionale ) Indirizzo URL assoluto alla pagina di dettaglio del prodotto/servizio sulla propria piattaforma di e-commerce. E’ possibile registrare con un’unica chiamata uno o più ordini, per ognuno dei quali verrà restituito l’esito dell’operazione.
- EAN (Opzionale) European Article Number
Esempio di chiamata
POST /Orders/Insert HTTP/1.1 Host: api.feedaty.com Content-Type: application/json Authorization: OAuth 65fbe612523b4c05b3f9f95b5da2af4f [{ "ID": "NO-004", "Date": "2013/08/07 15:29:00.000", "CustomerID": "MR-072", "CustomerEmail": "mario.rossi@hotmail.com", "CustomerName": "Mario Rossi","Culture": "it", "LocationCode": "MIL01" "Products": [{ "SKU": "426865031d", "Brand": "Amazon", "Name": "THE COMPLETE SHERLOCK HOLMES", "Category": "Libri", "EAN": "6516846656460", "ThumbnailURL":"http://ecx.imagesamazon.com/images/I/41LO0VIDDCL._AA258_PIkin4,BottomRight,-32,22_AA280_SH20_OU29_.jpg", "URL":"http://www.amazon.it/gp/product/B004LE7PCM/ref=s9_qpp_gw_d99_g351_ir06pf_rd_m=A11IL2PNWYJU7H&pf_rd_s=center3&pf_rd_r=1YFCTJ4NH9W2WYYFT0XD&pf_rd_t=101&pf_rd_p=312234487&pf_rd_i=426865031" }, { "SKU": "111140495463", "Brand": "Apple", "Name": "Apple iPhone 5 (Latest Model) - 32GB - White & Silver (Verizon) Smartphone", "Size": "128GB", "Color": "Black", "EAN": "8976846656460", "ThumbnailURL":"http://pics.ebaystatic.com/aw/pics/viewitem/imgSoldCvi_96x96.png", "URL": "http://www.ebay.com/itm/Apple-iPhone-5-Latest-Model-32GB-White-Silver-Verizon-Smartphone-/111140495463" }] }, { "ID": "NA-005", "Date": "2013/08/08 15:29:00.000", "CustomerID": "EC-002", "CustomerEmail": "antonio.bianchi@google.com", "CustomerName": "Antonio Bianchi", "Culture": "it", "Products": [{ "SKU": "111140495463", "Brand": "Apple", "Name": "Apple iPhone 5 (Latest Model) - 32GB - White & Silver (Verizon) Smartphone", "Size": "128GB", "Color": "Blue", "EAN": "5476846656460", "ThumbnailURL": "http://pics.ebaystatic.com/aw/pics/viewitem/imgSoldCvi_96x96.png", "URL": "http://www.ebay.com/itm/Apple-iPhone-5-Latest-Model-32GB-White-Silver-Verizon-Smartphone-/111140495463" }] }]
Esempio di risposta
HTTP/1.1 200 OK Server: ngix/1.2.0 Date: Mon, 19 Aug 2013 10:31:37 GMT Cache-Control: private Content-Type: application/json; charset=utf-8 Content-Length: 193 Connection: Close { "Success": true, "Message": "Some issues was found during orders processing.", "Data": [{ "OrderID": "NA-004", "SKU": "426865031d", "Status": 201 }, { "OrderID": "NA-004", "SKU": "111140495463", "Status": 201 }, { "OrderID": "NA-005", "SKU": "111140495463", "Status": 1 }] }
La proprietà Success è true qualora i dati forniti al metodo Insert siano sintatticamente corretti, diversamente ritorna false. La proprietà Message contiene una semplice descrizione sull’esito dell’operazione. Infine la proprietà Data contiene per ogni ordine e dettaglio su prodotto/servizio fornito un oggetto contenente le informazioni per identificare l’ordine (OrderID) ed eventualmente il prodotto/servizio (SKU) e l’esito dell’operazione (Status).
Codici di stato e loro significato
VALORE | CODICE | DESCRIZIONE |
0 | Failed | Operazione non riuscita per cause tecniche |
1 | Success | Operazione riuscita |
101 | CustomerIDNotValid | Valore CustomerID nullo o non valido |
102 | CustomerEmailNotValid | Valore CustomerID nullo o non valido |
103 | CustomerOptedOut | L'email fornita in CustomerEmail risulta nella lista degli utenti che hanno effettuato l'opt-out |
104 | DateNotValid | La data dell'ordine non è valida |
105 | CultureCodeNotValid | Valore Culture non valido |
201 | Duplicate | L'ordine è già presente (stesso OrderID e Stesso CustomerID) |
202 | OrderIDNotValid | Valore SKU nullo o non valido |
301 | SKUNotValid | Valore SKU nullo o non valido |
303 | Colore non valido | Lunghezza superiore a 20 caratteri |
401 | SurveyFlowLimitExceeded | Superato il limite impostato di survey inviabili al cliente in un determinato periodo di tempo |
402 | EmailAmazonDiscarded | L'ordine proveniente da marketplace Amazon è stato scartato |
Recupero degli ordini di acquisto
E’ possibile recuperare l’elenco di tutti gli ordini registrati in Feedaty o solamente di quelli che rispondo a dei criteri impostati, ad esempio quelli effettuati in un certo periodo oppure quelli per i quali sono già state inviate le email di survey. Gli ordini vengono recuperati sempre secondo l’ordine cronologico inverso di registrazione, ovvero restituendo per prima gli ultimi ordini registrati.
Paginazione dei risultati
Per recuperare solamente un set di ordini è possibile passare un oggetto json con due parametri: Row e Count. Row indica il primo (zero based) ordine da restituire tra tutti quelli presenti, mentre Count specifica al massimo quanti ordini restituire. Nel caso in cui non venga specificato un valore per la proprietà Row viene assunto 0 come valore di default. Così come per Count viene assunto come valore di default 50, questo inoltre è anche il numero massimo di elementi restituiti per ogni richiesta. Con ogni risposta nella proprietà TotalResults contenuta nell’oggetto assegnata alla proprietà Data viene restituito il numero totale di ordini registrati, questo valore può essere utilizzato per determinare il numero di pagine necessarie per visualizzare tutti gli ordini presenti.
Filtraggio degli ordini
E’ possibile specificare alcuni parametri con i quali limitare ulteriormente il set di ordini restituito, fornendo così la possibilità di recuperare solamente quelli di proprio interesse. I parametri disponibili sono tutti opzionali, e agiscono in congiunzione tra di loro (operatore booleano AND). Di seguito l’elenco dei parametri disponibili che è possibile specificare nell’apposita proprietà Filters: OrderID Valore alfanumerico identificante l’ordine che si vuole recuperare. SKU Valore alfanumerico identificare il codice del prodotto di cui si vuole recuperare l’ordine o gli eventuali ordini che lo contengono. Da notare che qualora venga specificato uno SKU verranno restituiti anche gli altri prodotti contenuti nell’ordine nel quale è presente quello avente il valore di SKU specificato. CustomerID Valore alfanumerico del cliente che ha effettuato l’ordine. CustomerEmail Indirizzo email del cliente che ha effettuato l’ordine. FromDate Data di acquisto a partire dalla quale recuperare gli ordini. ToDate Data di acquisto entro la quale recuperare gli ordini. Le date specificate nei filtri FromDate e ToDate devono essere nel seguente formato: yyyy/MM/dd HH:mm:ss ad esempio: 2013/08/16 11:06:30 Occorre notare che se non viene specificato alcuna parte oraria, es. 2013/08/16, viene assunto il seguente orario: 00:00:00.000.
Esempio di chiamata
POST /Orders/Get HTTP/1.1 Host: api.feedaty.com Content-Type: application/json Authorization: OAuth be7c51cf1dae4ae9ad82f3f7a075714d { "Filters": { "SKU": "426865031d" } }
Esempio di risposta
HTTP/1.1 200 OK Server: ngix/1.2.0 Date: Mon, 19 Aug 2013 13:43:03 GMT Cache-Control: private Content-Type: application/json; charset=utf-8 Content-Length: 1132 Connection: Close { "Success": true, "Message": "Completed successfully", "Data": { "Orders": [{ "ID": 9877, "OrderID": "NA-004", "CustomerID": "EC-001", "CustomerEmail": "antonio.bianchi@hotmail.com", "EntryDate": "\/Date(1376058583490)\/", "OrderDate": "\/Date(1375882140000)\/", "ScheduledDeliveryDate": "\/Date(1376058643440)\/", "SentDate": "\/Date(1376284658673)\/", "Platform": "Feedaty API", "OrderDetails": [{ "SKU": "111140495463", "Brand": "Apple", "Name": "Apple iPhone 5 (Latest Model) - 32GB - White \u0026 Silver (Verizon) Smartphone", "ThumbnailURL":"http://pics.ebaystatic.com/aw/pics/viewitem/imgSoldCvi_96x96.png", "URL": "http://www.ebay.com/itm/Apple-iPhone-5-Latest-Model-32GB-White-Silver-Verizon-Smartphone-/111140495463" }, { "SKU": "426865031d", "Brand": "Amazon", "Name": "THE COMPLETE SHERLOCK HOLMES", "ThumbnailURL":"http://ecx.imagesamazon.com/images/I/41LO0VIDDCL._AA258_PIkin4,BottomRight,-32,22_AA280_SH20_OU29_.jpg", "URL":"http://www.amazon.it/gp/product/B004LE7PCM/ref=s9_qpp_gw_d99_g351_ir06pf_rd_m=A11IL2PNWYJU7H\u0026pf_rd_s=center-3\u0026pf_rd_r=1YFCTJ4NH9W2WYYFT0XD\u0026pf_rd_t=101\u0026pf_rd_p=312234487\u0026pf_rd_i=426865031" }] }], "TotalResults": 1 } }
Nel risultato della chiamata è possibile notare che per ogni ordine oltre alle proprietà fornite durante la registrazione vengono passati anche altri valori, in particolare: ID Numero intero interno utilizzato per identificare l’ordine all’interno della piattaforma zoorate. Questo dato viene fornito solamente a scopo di debugging e di futuri riferimenti. EntryDate Data di registrazione dell’ordine nella piattaforma zoorate. ScheduledDeliveryDate Data programmata per l’invio dell’email di survey. SentDate Data effettiva nella quale è stata inviata l’email di survey. Se il valore è nullo è indice che non è stata ancora inviata alcuna email di survey. Platform Valore alfanumerico indicante la piattaforma o la metodologia con cui è stato inserito l’ordine.
Recensioni pubblicate
Attenzione
Al fine di evitare rallentamenti sul vostro sito o latenze indesiderate è necessario prevedere un sistema di caching che memorizzi le informazioni da mostrare.
Consigliamo di programmare una frequenza di aggiornamento almeno ogni ora (meglio ancora se ogni 24h) e di non collegare direttamente le pagine del sito web ai nostri webservices, ma di salvare i dati sincronizzati in un vostro database e collegare le pagine del sito al vostro sistema di caching. Senza queste accortezze in caso di manutenzioni o rallentamenti dei nostri sistemi si corre il rischio di avere il proprio sito web bloccato o rallentato.
Come frequenza massima di aggiornamento non è consentito superare le 500 chiamate/ora. Nel caso fosse necessario concordare un limite superiore bisognerà inviare una richiesta specifica all’indirizzo: support@feedaty.com
Anche se al momento non è prevista una politica di limitazione del numero di chiamte verso le API di feedaty, è comunque previsto un un tetto di chiamate da poter effettuare.
Per un utilizzo normale dei webservices i limiti sono calcolati in modo da non creare problemi, ma faremo in modo che, se le nostre API vengono chiamate troppo di frequente, verranno applicati dei blocchi temporanei.
Suggerimenti per evitare le limitazioni all’accesso delle API:
- Anziché generare un token di accesso per ogni transazione, riutilizzare il token valido.
- Assicurarsi di non chiamare le API di Feedaty ogni volta che viene caricato il front-end del tuo sito web. Se desideri visualizzare recensioni o valutazioni sul tuo sito, assicurati che i dati siano archiviati nel tuo backend e aggiornati giornalmente.
E’ possibile recuperare le recensioni pubblicate riguardo al merchant e/o ai prodotti rilasciate dai clienti. Per far questo è sufficiente chiamare il metodo Reviews/Get, eventualmente fornendo parametri per la paginazione nonché per filtrare tutte le recensioni pubblicate affinché vengano restituite solo quelle di cui si ha interesse. Di default la singola chiamata è limitata a restituire solo le ultime 50 recensioni merchant e prodotto associate, per reperire i feedback successivi è necessario usare i filtri row e count necessari per la paginazione dei risultati.
Esempio di chiamata
GET /Reviews/Get HTTP/1.1 Host: api.feedaty.comC ontent-Type: application/x-www-form-urlencoded Authorization: OAuth be7c51cf1dae4ae9ad82f3f7a075714d row=0&count=2
Esempio di risposta
HTTP/1.1 200 OK Server: nginx/1.4.7 Date: Mon, 19 May 2014 14:34:58 GMT Content-Type: application/json; charset=utf-8 Content-Length: 1755 Connection: keep-alive Vary: Accept-Encoding Cache-Control: private { "Success": true, "Message": null, "Data": { "Reviews": [{ "ID": 86111, "Released": "\/Date(1382608357110)\/", "CustomerID": "mariorossi@email.com", "CustomerEmail": "mariorossi@email.com", "CustomerName": "Mario Rossi", "OrderID": "A7", "MerchantRating": 5, "MerchantReview": "eccellente", "FeedatyPageURL": "/feedaty/reviews/shopsite?review=806111", "ThumbsFeedback": { "Up": 0, "Down": 0 }, "ProductsReviews": [{ "SKU": "PROD1", "Brand": "", "Name": "iPod shuffle - Colore : Verde", "ThumbnailURL": "/app_themes/feedaty/images/place-holder.png", "URL": "http://shopsite/prestashop/index.php?id_product=2\u0026controller=product\u0026id_lang=1", "FeedatyPageURL": "/feedaty/reviews/shopsite/parmigiano700gr/reviews", "Rating": 5, "Review": "eccellente", "ThumbsFeedback": { "Up": 3, "Down": 0 }, "Size": "56GB" "Color": "Green" } ], "Source": null "Language": "it-IT", "LocationCode": "MIL01" }, { "ID": 86113, "Released": "\/Date(1382608348343)\/", "CustomerID": "gianniverdi@email.com", "CustomerEmail": "gianniverdi@email.com", "CustomerName": "Gianni Verdi", "OrderID": "a9", "MerchantRating": 5, "MerchantReview": "Ottimo negozio, prezzi molto vantaggiosi.", "FeedatyPageURL": "/feedaty/reviews/shopsite?review=806113", "ThumbsFeedback": { "Up": 0, "Down": 0 }, "ProductsReviews": null, "OtherQuestions": [{ "Question": "Consegna", "Rating": 5 }, { "Question": "Servizio clienti", "Rating": 4 }, { "Question": "Sito web (semplicità e chiarezza)", "Rating": 3 }, { "Question": "Sistema di pagamento", "Rating": 5 }, { "Question": "Servizio di reso", "Rating": 3 }, { "Question": "Packaging", "Rating": 4 }, { "Question": "Lo consiglieresti ad un amico?", "Value": true } ], "Source": null, "Language": "it-IT", "LocationCode": "MIL01" } ], "TotalResults": 37 "TotalProductReviews": 50 } }
Il valore TotalResults indica il numero totale di recensioni merchant disponibili
Il valore TotalProductReviews indica il numero totale di recensioni prodotto disponibili
Volendo ricercare solo determinate recensioni è possibile specificare nella query string uno o più dei seguenti filtri:
retrieve: Usato per specificare se si vogliono recuperare solo le recensioni merchant (valore “onlymerchantreview”), solo le recensioni prodotto (“onlyproductreviews”) o entrambe (parametro non specificato o valore nullo o non valido)
customerEmail: Usato per recuperare solo le recensioni rilasciate dall’utente con l’email specificata
customerID: Usato per recuperare solo le recensioni rilasciate dall’utente con il codice cliente specificato
fromDate: Se specificata una data (formato yyyy/mm/dd, es. 2014/04/19) recupera le recensioni relative ad ordini effettuati nella o dalla data specificata
toDate: Se specificata una data (formato yyyy/mm/dd, es. 2014/04/19) recupera le recensione relativi ad ordini effettuati precedentemente o nella data specificata
sku: Usato per recuperare solo le recensioni relative a prodotti con il codice prodotto specificato. Nel caso in cui non si specifichi esplicitamente tramite il parametro retrieve di recuperare esclusivamente le recensioni prodotto, verranno restituite tutte le recensioni merchant relativi ad ordini per le quali sono state anche rilasciate recensioni per il prodotto con il codice specificato.
source: Usato per recuperare solo le recensioni importate da una specifica piattaforma, ad esempio “ebay”.
lang: Usato per recuperare solo le recensioni categorizzate nella lingua specificata, valori ammessi sono: it, en, fr, es, de
Qualora sia presente una risposta del negoziante ad un recensione merchant e/o prodotto, sarà restituita come valore di tipo stringa della proprietà MerchantReply, inoltre se insieme alla recensione è stata fornito anche un profilo d’indagine al quale l’utente ha fornito almeno una risposta, le relative domande e risposte saranno fornite nella proprietà OtherQuestions. Per ogni domanda con risposta verrà fornita il testo della domanda (proprietà Question), inoltre se è presente un rating questo verrà fornito nella proprietà Rating, una risposta testuale nella proprietà Answer, infine se la domanda prevede un si o un no, tale valore verrà restituito nella proprietà Value come valore boolean (true = si, false = no).
location: parametro opzionale di tipo stringa con il quale è possibile filtrare le recensioni per codice location
Esempio di query composta da più filtri
row=0&count=10&customerEmail=mariorossi@email.com&fromDate=2013/01/01&lang=it
Oggetto ThumbsFeedback restituito per ogni recensione
Per ogni recensione, sia merchant sia prodotto, viene fornito anche un oggetto ThumbsFeedback contenente due proprietà, “Up” e “Down”, le quali rappresentano rispettivamente il numero di risposte Si e No alla domanda “Hai trovato utile questa recensione?”. Proprietà TotalResults restituito per ogni richiesta Il numero indicato fornisce il numero di recensioni pubblicate che rispondono agli aventuali filtri applicati e che è possibile recuperare. Tale numero può essere utilizzato anche per calcolare il numero di “pagine” di recensione da visualizzare.
Proprietà TotalResults restituito per ogni richiesta
Il numero indicato fornisce il numero di recensioni pubblicate che rispondono agli aventuali filtri applicati e che è possibile recuperare. Tale numero può essere utilizzato anche per calcolare il numero di “pagine” di recensione da visualizzare.
Recupero dei dati salienti sulle recensioni pubblicate
Attenzione
Al fine di evitare rallentamenti sul vostro sito o latenze indesiderate è necessario prevedere un sistema di caching che memorizzi le informazioni da mostrare.
Consigliamo di programmare una frequenza di aggiornamento almeno ogni ora (meglio ancora se ogni 24h) e di non collegare direttamente le pagine del sito web ai nostri webservices, ma di salvare i dati sincronizzati in un vostro database e collegare le pagine del sito al vostro sistema di caching. Senza queste accortezze in caso di manutenzioni o rallentamenti dei nostri sistemi si corre il rischio di avere il proprio sito web bloccato o rallentato.
Come frequenza massima di aggiornamento non è consentito superare le 500 chiamate/ora. Nel caso fosse necessario concordare un limite superiore bisognerà inviare una richiesta specifica all’indirizzo: support@feedaty.com
Anche se al momento non è prevista una politica di limitazione del numero di chiamte verso le API di feedaty, è comunque previsto un un tetto di chiamate da poter effettuare.
Per un utilizzo normale dei webservices i limiti sono calcolati in modo da non creare problemi, ma faremo in modo che, se le nostre API vengono chiamate troppo di frequente, verranno applicati dei blocchi temporanei.
Suggerimenti per evitare le limitazioni all’accesso delle API:
- Anziché generare un token di accesso per ogni transazione, riutilizzare il token valido.
- Assicurarsi di non chiamare le API di Feedaty ogni volta che viene caricato il front-end del tuo sito web. Se desideri visualizzare recensioni o valutazioni sul tuo sito, assicurati che i dati siano archiviati nel tuo backend e aggiornati giornalmente.
E’ possibile recuperare con un’unica chiamata i dati salienti sulle recensioni come voto medio Merchant/Prodotti e numero di recensioni Merchant/Prodotti Pubblicate
In questa chiamata è possibile utilizzare i seguenti filtri:
fromDate: Se specificata una data (formato yyyy/mm/dd, es. 2014/04/19) recupera il voto medio Merchant/Prodotti e numero di recensioni Merchant/Prodotti relative ad ordini effettuati nella o dalla data specificata
toDate: Se specificata una data (formato yyyy/mm/dd, es. 2014/04/19) recupera il voto medio Merchant/Prodotti e numero di recensioni Merchant/Prodotti relativi ad ordini effettuati precedentemente o nella data specificata.
sku: Usato per recuperare voto medio e numero di recensioni relativi al prodotto con il codice specificato.
LocationCode: Usato per recuperare voto medio e numero di recensioni merchant relativi alla location con il codice specificato.
Esempio di chiamata
GET /Reviews/AverageRatings HTTP/1.1 Host: api.feedaty.com Content-Type: application/x-www-form-urlencoded Authorization: OAuth ff476ee563d044d4b746368e1023442f
Esempio di risposta
{ "Success": true, "Message": null, "Data": { "Merchant": { "RatingsCount": 2553, "AverageValue": 4.9 }, "Products": { "RatingsCount": 1623, "AverageValue": 4.6 } } }