我们正在使用API.AI,我们希望实现Facebook的Facebook Checkbox插件,以便将bot与用户连接起来。
如果我清楚地了解它的工作原理,Facebook会在用户验证包含此复选框的表单时发送一个事件。
是否可以在不修改Facebook和API.AI之间的heroku应用程序的情况下获取事件?
全部谢谢
答案 0 :(得分:0)
我也一直在研究这个问题。从我能找到的API.AI不支持任何信使webhook事件除了"消息"和" messaging_postbacks。"你需要" messaging_optins"为了接收这些事件。
虽然您无法通过API.AI接收这些活动,但我确实找到了一种解决方法,可以让您在api.ai和facebook之间保持当前配置。
不要担心从Facebook接收选择加入事件,只需在确认选择加入后立即触发facebook发送API。
这是有效的,因为你是设置" user_ref"参数,因此只要用户登录到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);
?>
希望这有帮助!