[程式開發] Facebook Messenger 聊天機器人 API 環境建置 教學


概論: 此功能實現方式,將粉絲專頁的訊息都透過WebHooks 連到自己建置的伺服器上,自己的伺服器依據送過來的訊息,依照寫好的規則,透過API 回覆給使用者。

在此,我們用FB提供的範例,也就是用 NodeJS 寫的伺服器 達成 自動回覆公能
如果你對 NodeJS 不熟或完全沒概念,以下我都有詳盡解釋,歡迎留言

1. 到Facebook API 建立一個新的App (https://developers.facebook.com/) 左上角新增



2. 之後要求新增 Messenger



3. 開始建立 Webhooks 要連到的伺服器位址



4. Setup Webhooks 會長這樣,此時要先去架好NodeJS 伺服器



5. 由於安全性問題,網址FB要求一定要 HTTPS,如果自己有架伺服器經驗,這一部分可以申請個 CloudFlare 的SSL ,如果沒有架站過,在此推薦 cloud9 ,牠可以用虛擬機快速建立伺服器,並支援HTTPS,以下接用Cloud9去實做

6. 申請好帳號新增Workspace
git clone 填 https://github.com/fbsamples/messenger-platform-samples.git (FB的範例)



6.  建立好後 檔案目錄如下



7.下方有Terminal可以輸入指令 此時輸入下面指令

(1)     cd ~/workspace/node/

(2)    npm install  

此時會多一個node_module資料夾

8. 此時到node/config 的default.json設定全域變數



appSecret到這裡看


pageAccessToken 再這裡產生(需要有粉絲專頁,沒有的話去建立一個吧)


validationToken 隨意輸入,之後要填再第四點的 驗證權杖欄位

8.好了之後就可以輸入 node app.js 開啟伺服器了

9.此時到   https://專案名稱-帳號名稱.c9users.io/   可以正常看到訊息就是成功開啟了

10.此時回到第四點
回呼網址輸入剛剛的   https://專案名稱-帳號名稱.c9users.io/webhook驗證權杖輸入剛剛的   validationToken 
~運作方式解說~在app.js 裡面可以找到以下程式碼,牠會處理剛剛給FB的回乎網址送來的訊息並且看FB傳來的驗證權杖對不對如果跟剛剛設定的default.json一樣就回傳status 200 也就是成功訊息給FB


下面那些欄位全部勾選 最後驗證儲存

11.此時建立好了,可以使用機器人囉~

12. 預設功能(功能都在app.js裡面)

如果不是關鍵字詞,預設都會回覆使用者跟他說一樣的話

此時伺服器也會log出資料


當你輸入關鍵字詞時 比如說 receipt (generic,button,image) 牠會回覆app.js裡面設定好的回覆




13. 但是機器人功能只能自己使用,要跟FB申請
通常申請第一像別人就可以用了,使用者的Phone-number看你需不需要
(FB人工審查需要很多時間)





















小結:粉絲專頁可以簡單回覆使用者的問題 其實就是人工智慧 回覆訊息可以到很完善(利用龐大的資料庫網路) 甚至可以學習 可以依照使用者給你的訊息去學習該使用者的資訊 並給完善的回覆

下一篇會介紹 "如何客製化自己的回覆訊息"



7 則留言:

  1. 你好. 我看了你的文章覺得很有用, 但部份部驟我不太明白,想知道pageAccessToken 是指什麼?是不是與appSecret一樣???輸入node app.js 是在哪裡輸入?
    不好意思, 因為我是新手, 所以不太懂, 請指教!

    回覆刪除
  2. 你好,請問在7 點找不到 NODE 這個資料...但有這個node_moduele, 同時找不到NODE/CONFIG 設定唔到個變數,
    請指教!
    謝謝

    回覆刪除
  3. 作者已經移除這則留言。

    回覆刪除
  4. 按照你的做法,在Terminalu 填寫node app.js

    但他只會出現Missing config values

    回覆刪除
  5. 問題解決:

    default.json開起來之後會有四個欄位(上文中只有三個,少了一個serverURL,也沒教怎麼填)

    應該這樣填

    "appSecret": "應用程式密鑰",
    "pageAccessToken": "粉絲專頁存取權杖",
    "validationToken": "自己隨便填",
    "serverURL": "https://專案名稱-帳戶名稱.c9users.io"(這裡後面不需要加/webhook)

    填好之後在輸入指令的地方輸入node app.js

    就會出現Node app is running on port 8080

    回覆刪除
    回覆
    1. 請問輸入node app.js後

      我沒有顯示
      Node app is running on port 8080

      而是顯示
      Error: Cannot find module ‘/home/ec2-user/environment/app.js’

      是哪裡錯了嗎?

      刪除