我们正在使用API.AI,我们希望实现Facebook的Facebook复选框插件来连接机器人与用户。

如果我清楚地了解它是如何工作的,当用户验证包含此复选框的表单时,Facebook会发送一个事件。
有没有可能在不修改Facebook和API.AI之间的heroku应用的情况下获得活动?
感谢所有人
发布于 2017-10-07 07:16:06
我也一直在研究这个。据我所知,除了"messages“和”messaging_postbacks“之外,API.AI不支持任何messenger webhook事件。您需要"messaging_optins“才能接收这些事件。
虽然你不能通过API.AI接收这些事件,但我找到了一种变通方法,可以让你在api.ai和facebook之间保留当前的配置。
不必担心收到来自facebook的opt-in事件,只需在确认opt-in后立即触发facebook send API即可。
这是因为您是设置“facebook”参数的人,所以只要用户登录Facebook并选中复选框,触发确认就会将user_ref存储在Facebook的系统中,之后您可以使用相同的参数调用Facebook的API来发起与用户的对话。
下面是整个流程的一个示例:
Javascript和HTML前端。
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '<APP_ID>',
xfbml : true,
version : 'v2.6'
});
};
(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.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk')
);
function confirmOptIn() {
FB.AppEvents.logEvent('MessengerCheckboxUserConfirmation', null, {
'app_id':'<APP_ID>',
'page_id':'<PAGE_ID>',
'ref':"<OPTIONAL_REF>",
'user_ref':'<UNIQUE_USER_REF>'
});
setTimeout(function() {
// Send an AJAX call here with the user_ref param to a script that will call the facebook send API.
// Short delay to give facebook time to log the unique_user_ref
}, 1000);
}
</script>
<div class="fb-messenger-checkbox"
origin="<YOUR_SITE_URL>"
page_id=<PAGE_ID>
messenger_app_id=<APP_ID>
user_ref="<UNIQUE_USER_REF>"
prechecked="true"
allow_login="true"
size="large">
</div>
<input type="button" onclick="confirmOptIn()" value="Confirm Opt-in"/>下面是使用PHP调用send-api的服务器端代码示例
<?php
$url = "https://graph.facebook.com/v2.6/me/messages?access_token=<PAGE_ACCESS_TOKEN>";
$data = [
'recipient' => [
'user_ref' => <UNIQUE_USER_REF>
],
'message' => [
'text' => 'Hello world!'
]
];
$post_data = json_encode($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch);
var_export($response);
?>希望这能有所帮助!
https://stackoverflow.com/questions/44656412
复制相似问题