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


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


前言

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

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

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

前置作業

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

 

網站分享

Line