跳到主要內容

Facebook Bot 踩雷筆記


Todd Quackenbush

Facebook Messenger Platform

最主要的還是看文件, 偶而需要使用 Facebook Search 功能, 可以看到神秘版的文件。

1. 粉絲頁 與 App 的關係

在開發 Bot 之前, 需要做幾件事情

  1. 申請 facebook app
  2. 申請 facebook fans-page
  3. 規劃流程, 最好有一個懂 UX 的開發者參與, 不然流程會很 XD


一個 bot 需要一個處理各種 events 的 callback,
一個 app 只能設定一個 callback, 所以 bot 跟 app 是 1 對 1 的關係,
一個 page 可以被最多 10 個 app 訂閱, 所以 page 跟 app 是 1 對 n(n<=10) 的關係,


這會有什麼影響呢? 在多人協作開發的時候, 你的好 partner 會送很多 event 給你,
禮尚往來, 你也會送一些 event 給他, 有幾個方式

  1. 從原生 App 申請一組開發 app 出來, webhook 只設定自己開發要用的 event
  2. 額外申請一個自己專用的 Fans-Page, 來 subscribed


2. GetStartButton Not Work

這邊的雷是因為, 自己開發的時候只 hook 了 messages 這個 event,
後來開發的時候, 就乾脆都拿, 之後再看用了哪些功能在慢慢推給 Facebook 審核

  1. check GetStartButton setting
    
    curl -X GET "https://graph.facebook.com/v2.10/me/messenger_profile?fields=get_started&access_token="
    
  2. check webhook messaging_postbacks event

  3. check your callback rsources is exist.

留言

這個網誌中的熱門文章

Parse URI query string to Key Value

Parse URI query String to Map 做 urlDecode 處理 沒有任何 query String 回傳 Empty Map 確保只處理 key-value 結構的 query String package com.example.util; import lombok.extern.slf4j.Slf4j; import org.apache.http.client.utils.URIBuilder; import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URISyntaxException; import java.net.URLDecoder; import java.util.LinkedHashMap; import java.util.Map; import java.util.Objects; /** * Created by jerry on 2017/12/28. * * @author jerry */ @Slf4j public class UriUtil { private UriUtil() { } public static Map splitQuery(final String uri) { Map queryPairs = new LinkedHashMap (); try { final URI uri = new URIBuilder(uri).build(); final String rawQuery = uri.getRawQuery(); log.info("CurrentUrl Query: {}", rawQuery); // 過濾沒有 query string // 還有過濾無法成對 keyValue 的 query, e.g. http://host/path?123 if (Objects.isNull(rawQuery) |...

Google Compute Engine‎ - AccessDeniedExceptions 403

原因 打算從 instance 打包 logs 到 google cloud storage 發生了 AccessDeniedException: 403 Insufficient OAuth2 scope to perform this operation. , 看起來是 instance 沒有 storage 權限 解決 Reference: https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#changeserviceaccountandscopes 重新設定 service account 權限 instance 上內建有 gcloud , 就直接用現有的工具查詢一下 instance 的 account. $ gsutil info 或者在本機直接 gcloud compute instances describe INSTANCE_NAMES Account: [alpha-number-compute@developer.gserviceaccount.com] Project: [our-project-name] 會看到 instance 的一些狀態, 接下來就簡單多了, 按照下列的說明, 要先 stop instance, 更改 storage scope 再重新 start 。 To change an instance's service account and access scopes, the instance must be temporarily stopped. To stop your instance, read the documentation for Stopping an instance. After changing the service account or access scopes, remember to restart the instance. # Stop Instance gcloud compute instances stop INSTANCE_NAMES # 設定 storage scope 為 full (Read, Write) gcloud co...

Spring-boot Thymeleaf Html5 SAXParseException 解析錯誤

thymeleaf 解析 html5 出錯 <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="description" content=""> <meta name="author" content=""> <title>SB Admin - Start Bootstrap Template</title> <!-- Bootstrap core CSS--> <link href="../static/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet"> <!-- Custom fonts for this template--> <link href="../static/vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> <!-- Page level plugin CSS--> <link href="../static/vendor/datatables/dataTables.bootstrap4.css" rel="stylesheet"> <!-- Custom styles for this template--> <li...