Este método forma parte del SDK de extensiones de Messenger. Para obtener información sobre cómo incluir el SDK en el sitio web, consulta Agregar el SDK de extensiones de Messenger.
Disponibilidad
Esta API solo está disponible en Messenger, a partir de la versión 113 de Android y de la 114 de iOS.
Para comprobar si está disponible para un cliente en particular, llama a getSupportedFeatures()
y comprueba que la propiedad context
esté en la respuesta.
El método getContext()
recupera información adicional sobre la persona y la conversación que abrió la vista web. Es útil para crear experiencias de grupo interactivas y juegos, así como para restringir contenido que estaba pensado para compartirse solo en una conversación específica.
Se deberá usar getContext()
en lugar de getUserID()
, ya que este ahora quedó obsoleto.
Llama a esta función para obtener el PSID de la persona, el identificador de la conversación y el tipo de conversación. Para obtener una lista completa de los parámetros de método, consulta la referencia de getContext().
MessengerExtensions.getContext('YOUR_APP_ID',
function success(thread_context){
// success
},
function error(err){
// error
}
);
Si la devolución de llamada es correcta se pasará una respuesta que será un objeto de JavaScript en el formato siguiente:
{
"thread_type": "GROUP",
"tid": "1411911565550430",
"psid": "1293479104029354",
"signed_request": "5f8i9XXH2hEaykXHKFvu-E5Nr6QRqN002JO7yl-w_9o.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTUwNDA0NjM4MCwicGFnZV9pZCI6NjgyNDk4MTcxOTQzMTY1LCJwc2lkIjoiMTI1NDQ1OTE1NDY4MjkxOSIsInRocmVhZF90eXBlIjoiVVNFUl9UT19QQUdFIiwidGlkIjoiMTI1NDQ1OTE1NDY4MjkxOSJ9"
}
signed_request
Habrá situaciones en las que te será útil transmitir la información que obtuviste de getContext()
a tu servidor interno y validarla antes de llevar a cabo alguna acción, como el inicio de sesión o una compra. Esto te permite asegurarte de que la información realmente proviene de Messenger y no se trata de un mensaje falsificado.
De acuerdo con la especificación de OAuth 2.0, signed_request
está codificado mediante base64url y firmado con una versión HMAC de la clave secreta de la aplicación.
Puedes realizar la validación mediante los cuatro pasos siguientes:
'.'
(por ejemplo, 238fsdfsd.oijdoifjsidf899
).issued_at
en la carga para asegurarte de que la solicitud es reciente. Esto se puede realizar en cualquier lenguaje de programación moderno. Este es un ejemplo en 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, '-_', '+/')); }
Decodificar la carga dará como resultado un objeto con la misma información que devolvió originalmente getContext()
, pero además contendrá los campos algorithm
, issued_at
y page_id
.
{ "psid": "1293479104029354", "algorithm": "HMAC-SHA256", "thread_type": "GROUP", "tid": "1411911565550430", "issued_at": 1491351619, "page_id": 167938560376726 }
Recuerda que para evitar divulgar accidentalmente tu clave secreta de la aplicación, debes realizar esta validación siempre en tu servidor y nunca en el código del lado del cliente.
Algunos negocios usan una estructura global de página con varias páginas asociadas a un identificador de aplicación o bot. Si este es el caso, los identificadores de conversación que devuelva getContext()
en la ampliación del chat serán diferentes para las personas en diferentes países.
Usa la API siguiente para convertir el identificador de conversación específico de la página de un país a uno global. Usa ese identificador de conversación global para mantener el estado de los usuarios que acceden a la ampliación del chat desde sus páginas regionales correspondientes.
Recuperar el identificador de conversación global:
curl -X GET "https://graph.facebook.com/v2.6/{thread-id}?access_token=<PAGE_ACCESS_TOKEN>"
Ejemplo de respuesta:
{"tid":1577059318985661,"global_tid":1577059318985661}
Si no hay una página global, global_tid
no estará presente.