2017-06-20 23 views
0

我们正在使用API​​.AI,并且我们希望实施Facebook的Facebook复选框插件以将bot与用户连接起来。Facebook上的复选框插件API.AI

如果我清楚地了解它是如何工作当用户确认包含此复选框的表单,Facebook将发送一个事件。

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

谢谢全部

回答

0

我一直在研究这个。从我所能找到的信息API.AI不支持除“messages”和“messaging_postbacks”之外的任何messenger webhook事件。您需要“messaging_optins”才能接收这些事件。

虽然您无法通过API.AI接收这些事件,但我确实找到了一种解决方法,可以让您在api.ai和facebook之间保持当前配置。

不用担心从facebook接收选择事件,只需在确认选择加入后立即触发Facebook发送API即可。

这是有效的,因为你是设置“user_ref”参数的人,所以只要用户登录Facebook并勾选了复选框,触发确认将在facebook系统中存储user_ref,并且您可以致电之后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); 
?> 

希望这有助于!

+0

感谢这个非常好的主意! :)我已经重新实现了Facebook和API.AI之间的连接来处理这个事件,但对于未来的机器人,我一定会使用你的解决方案,这很简单^^ – LaPataaate