Este método forma parte del SDK de extensiones de Messenger. Para obtener información sobre cómo incluir el SDK en tu sitio web, consulta Añadir el SDK de extensiones de Messenger.
Disponibilidad
Esta API solo está disponible en Messenger en la versión 113 y superiores de Android, así como en la versión 114 y posteriores de iOS.
Si quieres verificar su disponibilidad para un cliente concreto, llama al método getSupportedFeatures()
y comprueba la propiedad context
de la respuesta.
El método getContext()
recupera información adicional sobre la persona y la cadena de mensajes que hizo que se abriese la vista web. Puede resultar útil cuando se crean experiencias de grupo y juegos interactivos, así como cuando se quiere limitar cualquier tipo de contenido que únicamente se desea compartir en una cadena de mensajes concreta.
Debería usarse getContext()
en lugar de getUserID()
, ya que este último es un método obsoleto.
Llama a esta función para obtener el identificador de usuario (PSID) de la persona, así como el identificador y el tipo de la cadena de mensajes. Si quieres obtener una lista completa de los parámetros del método, consulta la referencia de “getContext()”.
MessengerExtensions.getContext('YOUR_APP_ID',
function success(thread_context){
// success
},
function error(err){
// error
}
);
La respuesta que se pasará a la devolución de llamada correcta será un objeto de JavaScript con el siguiente formato:
{
"thread_type": "GROUP",
"tid": "1411911565550430",
"psid": "1293479104029354",
"signed_request": "5f8i9XXH2hEaykXHKFvu-E5Nr6QRqN002JO7yl-w_9o.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTUwNDA0NjM4MCwicGFnZV9pZCI6NjgyNDk4MTcxOTQzMTY1LCJwc2lkIjoiMTI1NDQ1OTE1NDY4MjkxOSIsInRocmVhZF90eXBlIjoiVVNFUl9UT19QQUdFIiwidGlkIjoiMTI1NDQ1OTE1NDY4MjkxOSJ9"
}
signed_request
En algunas situaciones, es posible que desees transmitir la información que se obtiene de la función getContext()
a tu back-end y validarla antes de realizar alguna acción, como iniciar sesión o comprar. De esta forma, puedes asegurarte de que la información proviene realmente de Messenger y no es falsa.
El parámetro signed_request
se cifra mediante base64url y se firma con una versión HMAC de la clave secreta de la aplicación, basada en la especificación OAuth 2.0.
Para validarlo, sigue estos cuatro pasos:
'.'
” (por ejemplo, 238fsdfsd.oijdoifjsidf899
).issued_at
en la carga útil para garantizar que la solicitud es reciente. Estos pasos pueden realizarse en cualquier lenguaje moderno de programación. A continuación figura 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, '-_', '+/')); }
Al descodificar la carga útil, se proporciona un objeto con la misma información que el método getContext()
ha devuelto originalmente, pero se añaden 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 difundir por error tu clave secreta de la aplicación, esta validación debería realizarse en tu servidor, nunca en el código del cliente.
Algunas empresas utilizan una estructura de páginas globales con varias de ellas asociadas a un identificador de la aplicación o bot. En este caso, los identificadores de cadenas de mensajes que el método getContext()
devuelve en la ampliación del chat son distintos para las personas de diferentes países.
Utiliza la siguiente API para convertir el identificador de la cadena de mensajes de la página específica del país en un identificador de cadena de mensajes global. A continuación, úsalo para mantener el estado entre los usuarios que accedan a la ampliación de chat desde sus respectivas páginas regionales.
Recuperar el identificador de cadena de mensajes global:
curl -X GET "https://graph.facebook.com/v2.6/{thread-id}?access_token=<PAGE_ACCESS_TOKEN>"
Respuesta de ejemplo:
{"tid":1577059318985661,"global_tid":1577059318985661}
Si no existe ninguna página global, el objeto global_tid
no aparece.