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

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

Matol 2019-12-31 PM 223 複製此網址 回上頁

  1.   前言  
    粉絲專頁是眾多公司、政府、個人等推銷常用的功能,主因是可直接接觸客戶、民眾並可線上回答問題。
    但如果人數眾多的粉絲專頁呢?光詢問,回答一來一往就花費不少功力。
    其實客戶、民眾詢問問題中,絕大部分屬於類似問題,若有一個自動回應功能的機器人,即可減少支出成本。
  2.   前置作業  
    1. 建立粉絲專頁
      facebook 粉絲專頁頁面建立粉絲專業
    2. 建立 facebook 應用程式
      facebook developer 點擊「我的應用程式」後選擇「建立應用程式」
    3. 應用程式設定 Messager 與粉絲專頁鏈結
      點選 Message(圖中紅框) 點選設定,並在設定頁面點選「新增或移除粉絲專頁」(圖2)


      圖2-

       
    4. 應用程式設定頁面中,點選「產生權杖」
      產出權杖先保留,後續功能會使用到
  3.   程式功能撰寫  
    1. 撰寫驗證機制
      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;
              }

       

    2. 訊息服務程式部屬與設定
      再來我們回到原先 message 設定頁面,在 webhooks 列新增回呼網址,並輸入剛剛所建立之呼叫連結
      權杖則自行設定(如圖,確認後會進行呼叫驗證,正確才可儲存)
    3. 設定訂閱功能
      完成b點回呼網址設定後,在message 設定頁面下方會看到粉絲專頁訂閱功能,這邊我們需要的是讀取與回應使用者的
      所以選擇訂閱的是 messages (如圖) 並訂閱

    4. 加入回應功能 (可在此加入判斷或是導入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));
              }
      

       

  4.   啟用應用程式&測試  
    這是很重要的一點,當設定完成後必須回到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