Messenger Bot
說明一下
我們需要一個權杖(權杖)
- FB帳號
- 應用程式
- 自己的粉絲專頁,
- 最後才能取得TOKEN(權杖)
- 拿來套程式即可
facebook for developers
設定新應用程式
應用程式頁
應用程式編號 等等在設定網頁平台時會用到
隱私政策、跟應用程式圖示 在正式提交時才需要
新增平台
選擇網站平台
- 把這邊的code 直接存成一個html檔,放到你的網站上
輸入網址
Tell us about your website Site URL // 這裡輸入剛才html網址
按下NEXT 拉到最後 FINISH 完成設定!
設定 Messenger
選擇自己想要對應的粉絲專頁,即取得權杖
(自己開一個粉絲專業不難吧 :) )
Webhooks (9/10 補上)
往下找到 Webhooks
Webhooks - > 新訂閱內容 -> Page 訂閱
勾選 message_deliveries, messages, messaging_optins, messaging_postbacks
在 回呼網址 欄位,把你的程式(網址)貼上
接著選擇訂閱剛才的粉絲專頁。
廢話不多說,直接上CODE
$challenge = $_REQUEST['hub_challenge'];
$verify_token = $_REQUEST['hub_verify_token'];
if ($verify_token === '使用申請到的TOKEN') {
echo $challenge;
}
$get = file_get_contents('php://input');
$input = json_decode($get, true);
//API Url
$url = 'https://graph.facebook.com/v2.6/me/messages?access_token=使用申請到的TOKEN';
// 安全消毒自己解決
$sender = $input['entry'][0]['messaging'][0]['sender']['id']; // 使用者
$message = $input['entry'][0]['messaging'][0]['message']['text']; // 接收 訊息文字
$_message = $input['entry'][0]['messaging'][0]['message']['seq']; // 接收 訊息文字 訊息序號
$_back = $input['entry'][0]['messaging'][0]['delivery']['seq']; // 接收 已接收 訊息序號
//=============================
$filename = "test.txt";
$file = fopen($filename, "a"); //以寫模式打開文件
// fwrite($file, "GET".$get."\r\n"); //換行\n ;window下要加 \r\n
if($_message>0){
fwrite($file, "來自".$sender."的".$_message."傳送:".$message."\r\n\r\n"); //換行\n ;window下要加 \r\n
$jsonData = initM($message,$sender); // 回傳json格式 訊息
cUrlsend($url,$jsonData,$file);
}else if($_back>0){
fwrite($file, $sender."的".$_back."傳送成功\r\n\r\n"); //換行\n ;window下要加 \r\n
}
fclose($file); //關閉文件
exit;
//=============================
function cUrlsend($url,$jsonData,$_message){
// 初始化 cURL.
$ch = curl_init($url);
// 因為我再initM()的最後已經encoded了,這裡直接給值就好
$jsonDataEncoded = $jsonData;
// 告訴cURL我要使用POST
curl_setopt($ch, CURLOPT_POST, 1);
// 增加一個POST欄位 並把值帶進去
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded);
// 設置 httpheader為json
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
if(!empty($_message)){
$result = curl_exec($ch);
}
}
//=============================
function initM($text,$sender){
$chars = preg_split('//u', $text, -1, PREG_SPLIT_NO_EMPTY); // 同上更精確
$num=mb_strlen($text); //計算字數
$search=explode(" ",$text); //應用程式
$content_type = "";
//應用程式 這可以玩很多 //天氣API壞掉了 先移除
switch ($search['0']) {
case '時間':
$content_type = "現在時間\r\n".date('Y-m-d H:i:s');
break;
default:
$content_type = "說啥呢?";
break;
}
// 設定接收字數上限 300
if($num>300){$content_type = "你話太多囉";}
//The JSON data. FB Message要長這樣
// $jsonData = '{
// "recipient":{
// "id":"'.$sender.'"
// },
// "message":{
// "text":"'.$content_type.'"
// }
// }';
$jsonData = json_encode(array("recipient"=>array("id" => $sender ),"message"=>array("text" => $content_type ) ));
return $jsonData;
}
其他幫助
- 可能錯誤,cURL沒開
- 官方網站教學