C# MVC Facebook 粉絲專頁自動回應機器人開發


C# mvc 使用 facebook message api 粉絲專頁自動回應機器人

作者:Matol

日期:2019-12-31

前言

粉絲專頁是眾多公司、政府、個人等推銷常用的功能,主因是可直接接觸客戶、民眾並可線上回答問題。

但如果人數眾多的粉絲專頁呢?光詢問,回答一來一往就花費不少功力。

其實客戶、民眾詢問問題中,絕大部分屬於類似問題,若有一個自動回應功能的機器人,即可減少支出成本。

前置作業

a. 建立粉絲專頁

facebook 粉絲專頁頁面建立粉絲專業

b. 建立 facebook 應用程式

facebook developer 點擊「我的應用程式」後選擇「建立應用程式」

c. 應用程式設定 Messager 與粉絲專頁鏈結

點選 Message(圖中紅框) 點選設定,並在設定頁面點選「新增或移除粉絲專頁」(圖2)

p1

圖2-

p2

d. 應用程式設定頁面中,點選「產生權杖」

產出權杖先保留,後續功能會使用到

程式功能撰寫

a. 撰寫驗證機制

Facebook webhook 是使用 GET 方式呼叫驗證功能 (需注意呼叫方式須為https get)

(自訂權杖部分等等會在b點說明)

    [HttpGet]
    [Route("~/api/FBWebHook/GetBotMessage/")]
    public HttpResponseMessage Webhook()
    {
        // 驗證
        var token = HttpContext.Current.Request.QueryString["hub.verify_token"];
        if (!string.IsNullOrEmpty(token))
        {
            // 自行設定的權杖驗證
            var myToken = ConfigurationManager.AppSettings["FBWookMessageVerifyToken"]; 
            if (myToken.Equals(token))
            {
                var response = new HttpResponseMessage(HttpStatusCode.OK)
                {
                    Content = new StringContent(HttpContext.Current.Request.QueryString["hub.challenge"])
                };
                response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/plain");
                return response;
            }
        }
        return null;
    }

b. 訊息服務程式部屬與設定

再來我們回到原先 message 設定頁面,在 webhooks 列新增回呼網址,並輸入剛剛所建立之呼叫連結

權杖則自行設定(如圖,確認後會進行呼叫驗證,正確才可儲存)

p3

c. 設定訂閱功能

完成b點回呼網址設定後,在message 設定頁面下方會看到粉絲專頁訂閱功能,這邊我們需要的是讀取與回應使用者的方法

所以選擇訂閱的是 messages (如圖) 並訂閱

p4

d. 加入回應功能 (可在此加入判斷或是導入dialogflow等自動回應邏輯)

驗證完成後,就可撰寫回應功能(如下方程式碼),須注意須為驗證呼叫網址一樣

    [HttpPost]
    [Route("~/api/FBWebHook/GetBotMessage/")]
    public IHttpActionResult FBWebhook()
    {
        //傳送訊息
        try
        {
            var sr = new StreamReader(HttpContext.Current.Request.InputStream);
            string content = sr.ReadToEnd();
            var mcs = JsonConvert.DeserializeObject<RootObject>(content);
            // 發送
            MessageLogic(mcs.entry[0].messaging[0].sender.id, message);
            return Ok();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

返回facebook message

    private void MessageLogic(string userId, string QueryMsg)
    {
        WebHookMessages.Text(userId, string.Format("{0}\n{1}", "[此為BOT自動回覆]", QueryMsg));
    }

啟用應用程式&測試

這是很重要的一點,當設定完成後必須回到developer應用程式頁面,去啟動剛剛所建立的程式才可正常運作(上方列條)

啟動後就可至粉絲專頁發送訊息進行測試囉!(圖為介接 DialogFlow 自動回應所撰寫的回應)

※ 目前仍為開發模式,僅有應用程式建立&管理者對粉絲專頁對話才有效 (一般使用者仍無回應)

如需開放一般使用者回應功能則須至應用程式設定下方去註冊 page_messages 功能並審核通過

● Facebook 文件 (WebHook事件)
  https://developers.facebook.com/docs/messenger-platform/reference/webhook-events
● RootObject Class 定義參考
  https://developers.facebook.com/docs/messenger-platform/reference/webhook-events/messages