Messenger Bot

說明一下

我們需要一個權杖(權杖)

  1. FB帳號
  2. 應用程式
  3. 自己的粉絲專頁,
  4. 最後才能取得TOKEN(權杖)
  5. 拿來套程式即可

facebook for developers

FB開發者官網

設定新應用程式

應用程式頁

FBdeveloper0

應用程式編號 等等在設定網頁平台時會用到

隱私政策、跟應用程式圖示 在正式提交時才需要

新增平台

選擇網站平台

FBdeveloper

  1. 把這邊的code 直接存成一個html檔,放到你的網站上
  2. 輸入網址

    Tell us about your website
    Site URL
    // 這裡輸入剛才html網址
    
  3. 按下NEXT 拉到最後 FINISH 完成設定!

設定 Messenger

選擇自己想要對應的粉絲專頁,即取得權杖

(自己開一個粉絲專業不難吧 :) )

Webhooks (9/10 補上)

  1. 往下找到 Webhooks

  2. Webhooks - > 新訂閱內容 -> Page 訂閱

  3. 勾選 message_deliveries, messages, messaging_optins, messaging_postbacks

  4. 回呼網址 欄位,把你的程式(網址)貼上

  5. 接著選擇訂閱剛才的粉絲專頁。

廢話不多說,直接上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;

}

其他幫助

  1. 可能錯誤,cURL沒開
  2. 官方網站教學

results matching ""

    No results matching ""