API.AI上的Facebook Checkbox插件

时间:2017-06-20 14:51:41

标签: facebook-graph-api dialogflow facebook-messenger-bot

我们正在使用API​​.AI,我们希望实现Facebook的Facebook Checkbox插件,以便将bot与用户连接起来。

如果我清楚地了解它的工作原理,Facebook会在用户验证包含此复选框的表单时发送一个事件。

是否可以在不修改Facebook和API.AI之间的heroku应用程序的情况下获取事件?

全部谢谢

1 个答案:

答案 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);
?>

希望这有帮助!