Questo metodo rientra nell'SDK per le estensioni di Messenger. Per informazioni su come includere l'SDK sul tuo sito, consulta Aggiunta dell'SDK per le estensioni di Messenger.
Disponibilità
Questa API è disponibile solo a partire dalla versione 113 di Messenger per Android e dalla versione 114 per iOS.
Per verificarne la disponibilità in un determinato client, chiama getSupportedFeatures()
e controlla la proprietà context
nella risposta.
Il metodo getContext()
recupera informazioni aggiuntive sull'utente e sulla conversazione che ha aperto la visualizzazione web. È utile per la creazione di esperienze di gruppo interattive e dei giochi, nonché per limitare la presentazione dei contenuti che devono essere condivisi solo in una determinata conversazione.
Usa getContext()
anziché getUserID()
, poiché è diventato obsoleto.
Chiama questa funzione per ottenere il PSID dell'utente, l'ID conversazione e il tipo di conversazione. Per una lista completa dei parametri del metodo, consulta il riferimento per getContext().
MessengerExtensions.getContext('YOUR_APP_ID',
function success(thread_context){
// success
},
function error(err){
// error
}
);
La risposta passata alla callback dell'azione eseguita correttamente è un oggetto JavaScript nel formato seguente:
{
"thread_type": "GROUP",
"tid": "1411911565550430",
"psid": "1293479104029354",
"signed_request": "5f8i9XXH2hEaykXHKFvu-E5Nr6QRqN002JO7yl-w_9o.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTUwNDA0NjM4MCwicGFnZV9pZCI6NjgyNDk4MTcxOTQzMTY1LCJwc2lkIjoiMTI1NDQ1OTE1NDY4MjkxOSIsInRocmVhZF90eXBlIjoiVVNFUl9UT19QQUdFIiwidGlkIjoiMTI1NDQ1OTE1NDY4MjkxOSJ9"
}
signed_request
In alcuni casi, potresti aver bisogno di trasmettere le informazioni ottenute da getContext()
al tuo sistema di back-end e convalidarle prima di eseguire alcune azioni, ad es. l'accesso o un acquisto. In questo modo, puoi verificare che le informazioni provengano effettivamente da Messenger e che non abbiano subito manomissioni.
La signed_request
presenta la codifica base64url, con firma creata mediante una versione HMAC della tua chiave segreta, in base alla specifica OAuth 2.0.
Puoi effettuare la convalida con i 4 passaggi seguenti:
'.'
(ad es 238fsdfsd.oijdoifjsidf899
).issued_at
nel payload, per garantire che la richiesta sia recente. Questa procedura è realizzabile con qualsiasi linguaggio di programmazione moderno. Ecco un esempio in PHP:
function parse_signed_request($signed_request) { list($encoded_sig, $payload) = explode('.', $signed_request, 2); $secret = "appsecret"; // Use your app secret here // Decode the data $sig = base64_url_decode($encoded_sig); $data = json_decode(base64_url_decode($payload), true); // Confirm the signature $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true); if ($sig !== $expected_sig) { error_log('Bad Signed JSON signature!'); return null; } return $data; } function base64_url_decode($input) { return base64_decode(strtr($input, '-_', '+/')); }
La decodifica del payload produrrà un oggetto contenente le stesse informazioni di quello restituito da getContext()
in origine, con l'aggiunta dei campi algorithm
, issued_at
e page_id
:
{ "psid": "1293479104029354", "algorithm": "HMAC-SHA256", "thread_type": "GROUP", "tid": "1411911565550430", "issued_at": 1491351619, "page_id": 167938560376726 }
Tieni presente che, per evitare di divulgare la tua chiave segreta per errore, questa convalida deve avvenire nel codice sul lato del tuo server, mai sul lato client.
Alcune aziende usano una struttura di tipo Pagina globale, con più Pagine associate a un unico ID app o bot. In questo caso, gli ID conversazione restituiti da getContext()
nell'estensione della chat variano in base al Paese in cui si trovano gli utenti.
Usa l'API seguente per risolvere l'ID conversazione specifico della Pagina in base al Paese in un ID conversazione globale e usa quest'ultimo per mantenere lo stato per i vari utenti che accedono all'estensione della chat dalle rispettive Pagine locali.
Recupera l'ID conversazione globale:
curl -X GET "https://graph.facebook.com/v2.6/{thread-id}?access_token=<PAGE_ACCESS_TOKEN>"
Esempio di risposta:
{"tid":1577059318985661,"global_tid":1577059318985661}
Se non è disponibile una Pagina globale, global_tid
non sarà presente.