Я пытаюсь отправить запрос через Facebook MessengerExtensions.beginShareFlow ().Я попытался отправить этот API, чтобы он перенаправлял на новую страницу, называемую расписаниями.
var messageToShare = {
"attachment":{
"type":"template",
"payload":{
"template_type":"generic",
"elements": [{
"title":"Garfield is going to the cinema",
"image_url": "https://webhookboi.herokuapp.com/schedule",
"subtitle": "You have been invited to join them, let them know when you are free",
"default_action": {
"type": "web_url",
"url": "https://webhookboi.herokuapp.com/schedule",
"messenger_extensions": "true",
"webview_height_ratio": "full",
"fallback_url": "https://webhookboi.herokuapp.com/schedule"
},
"buttons":[{
"type":"web_url",
"url":"https://webhookboi.herokuapp.com/schedule",
"title":"Select Times",
"messenger_extensions": "true"
}]
}]
}
}
};
, и это beginShareFlow (), заключенный в слушателе кнопки отправки
document.getElementById('submitButton').addEventListener('click', () => {
MessengerExtensions.beginShareFlow(function success(response) {
if(response.is_sent === true){
// User shared. We're done here!
MessengerExtensions.requestCloseBrowser();
}
else{
// User canceled their share!
MessengerExtensions.requestCloseBrowser();
}
},
function error(errorCode, errorMessage) {
// An error occurred trying to share!
},
messageToShare,
"current_thread");
});
Запрос будетзатем перехватите их в основном javascript
app.get('/schedule', (req, res, next) => {
let referer = req.get('Referer');
if (referer) {
if (referer.indexOf('www.messenger.com') >= 0) {
res.setHeader('X-Frame-Options', 'ALLOW-FROM https://www.messenger.com/');
} else if (referer.indexOf('www.facebook.com') >= 0) {
res.setHeader('X-Frame-Options', 'ALLOW-FROM https://www.facebook.com/');
}
res.sendFile('public/schedule.html', {root: __dirname});
}
});
app.get('/schedulepostback', (req, res) => {
let body = req.query;
let response = {
"text": `Great, you have agreed to watch on ${body.dates} in the ${body.times} at ${body.locations} `
};
res.status(200).send('Please close this window to return to the conversation thread.');
callSendAPI(body.psid, response);
});
Вот основная проблема, во фрагменте ниже я попытался снова вызвать поток psid, но он так и не появился.
<html>
<head>
<title>Set your Schedule</title>
</head>
<body>
<script>
(function (d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {
return;
}
js = d.createElement(s);
js.id = id;
js.src = "//connect.facebook.com/en_US/messenger.Extensions.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'Messenger'));
window.extAsyncInit = () => {
// TODO: How to parse env file from here?
MessengerExtensions.getSupportedFeatures(function success(result) {
let features = result.supported_features;
if (features.includes("context")) {
MessengerExtensions.getContext(INPUTED_APP_ID_HERE,
function success(thread_context) {
// success
document.getElementById("psid").value = thread_context.psid;
document.getElementById("tid").value = thread_context.tid;
},
function error(err) {
// error
console.log(err);
}
);
}
},
function error(err) {
// error retrieving supported features
console.log(err);
});
var messageToShare = {
"text": `Your friend requested to watch on`.document.querySelector('input[name="dates"]:checked').value.'in the'.document.querySelector('input[name="times"]:checked').value.'at'.document.querySelector('input[name="locations"]:checked').value
};
document.getElementById('submitButton').addEventListener('click', () => {
MessengerExtensions.beginShareFlow(function success(response) {
if(response.is_sent === true){
// User shared. We're done here!
MessengerExtensions.requestCloseBrowser();
}
else{
// User canceled their share!
MessengerExtensions.requestCloseBrowser();
}
},
function error(errorCode, errorMessage) {
// An error occurred trying to share!
},
messageToShare,
"current_thread");
});
};
</script>
<form action="/schedulepostback" method="get">
<input type="text" name="psid" id="psid">
<input type="text" name="tid" id="tid">
<h3>Date</h3>
<input type="radio" name="dates" value="3 April" checked>3 April<br>
<input type="radio" name="dates" value="4 April">4 April<br>
<input type="radio" name="dates" value="5 April">5 April<br>
<input type="radio" name="dates" value="6 April">6 April<br>
<input type="radio" name="dates" value="7 April">7 April<br>
<h3>Time</h3>
<input type="radio" name="times" value="Daytime" checked>Daytime<br>
<input type="radio" name="times" value="Evening">Evening<br>
<h3>Location</h3>
<input type="radio" name="locations" value="Munich" checked>Munich<br>
<input type="radio" name="locations" value="Berlin">Berlin<br>
<input type="radio" name="locations" value="Dusseldorf">Dusseldorf<br>
<input type="submit" value="Submit" id="submitButton">
</form>
</body>
</html>
Это из-за моего типа шаблона?или что-то другое?Любая помощь будет оценена.
РЕДАКТИРОВАТЬ
Если я нажму на расширение чата, все будет работать нормально, и расширение мессенджера будет работать, что приводит к обратной передаче чата.
Однако, когда я нажимаю кнопку «Выбрать время» на обратной передаче, появляется psid doest.Три верхних бара должны были отображать psid, tid и object.Это также появилось не в X-Frame, а в новой вкладке.Любая помощь здесь?