👌

Workplace の POST API をサクッと試す

2021/06/03に公開

やったこと

訳あって Facebook の提供してる Workplace で POST する仕組みを作ることに。
といっても、試したのは以下の API を使用しただけです。

https://developers.facebook.com/docs/workplace/reference/graph-api/post

割と簡単に試せたので忘備録(何ならこれを書いてる時間の方が長い説)
*ちなみに、本当に初めて知ったサービス、API なので表記ゆれ等あったらすみません。

この記事の内容を試すために必要な準備

  1. workplace の作成
    個人アカウントでも作れるみたいだけどある機能は 30 日で失効するらしいので注意
  2. API をテストするためのソフトの準備
    今回は個人的に気に入ってる VSCode + Rest Client で試した。
  3. GAS の実行できるアカウントの準備
    Gmail アカウントがあれば無料で試せます。

Workplace 側の準備

WorkPlace の作成

以下から作成します。もしもうある場合には、管理者権限をもつか、あるいは管理者権限をもってる協力者の方と一緒に作業してください。テスト用にグループを一つ用意すると良いかもしれません。
https://ja-jp.workplace.com/

WorkPlace

管理者パネルから「統合」を選択

「カスタム統合の作成」を選択。

好きに名前なりを決めて作成。

「統合の詳細」配下からアクセストークンを作成してどこかにメモします。(既にトークンを作成してる場合には以下のように"リセット"の表記になります)

「統合へのアクセス許可」は以下の「グループのコンテンツの管理」にチェックを入れます。

「統合のアクセス許可をグループに適用」配下から投稿先のグループを指定します。

下のほうに保存があるので保存します。

投稿先の GroupId を確認する

API で使用する groupid を確認します。

正式な確認方法は分からないのですが、該当のグループをbrowserで開いて、URL の/group/<groupid> みたいな形式になってます。ここをコピーします。(もしかしてと思ってやったら動いた感じなので正確なことを確認したい場合は公式の Docs を見た方が良いかと)

はい、なんともう準備完了です。

REST Client でテスト

私は REST Client の拡張機能で試しました。
詳細は以下の記事が丁寧にまとめていらっしゃるのでお勧めです。

https://qiita.com/toshi0607/items/c4440d3fbfa72eac840c

以下の <groupid> と <Token> をそれぞれ先の内容に変更しましょう。
なお、token の最後に "/" が入っている場合には、省いても動作してるように見えました。(エンドポイントとしてはルートを指してて変わらないってことかも)

### Post Test

POST https://graph.facebook.com/<groupid>/feed?message=TestPost&access_token=<Token>

改めてみると、トークンをクエリ形式で URL に指定するのとかなかなかに斬新に感じますね。(Header に入れることが多い印象)それはともかく、send request を押して実行してみましょう。

いけたっぽい :)

GAS で実行してみた。

まあ、一緒のことではありますが、試しに GAS からも実行してみました。

以下に groupId と token だけ埋めて main() を実行します。
癖で書きましたが return も logger も要らないので抜いても良いです。(options の一部も抜いても動きそう)

const groupId = "";
const token = "";

function main(){
  postMessage("This is TestPost from GAS")
}

function postMessage(message){
    const url = "https://graph.facebook.com/"+groupId+"/feed?message="+message+"&access_token="+token;
    const options = {
        "method": "post",
        "contentType": "application/json",
        "muteHttpExceptions": true
    };
    const response = UrlFetchApp.fetch(url, options);
    Logger.log(response.getContentText());
  return JSON.parse(response).token;
}

実行する時はひとまずはこんな感じでテストしましょう。

その後 Workplace を見ると。

うん、大丈夫そうですね。

これを何らかの形式でコールするようにしたら好きなように投稿できそうですね :)

Summary

ということで、API 形式でかつ POST 投稿だけであればサクッとお試しいただけるかと。
個人的には URL にtoken含めてるのが結構びっくりしました。(POST リクエストだけで body の要素を一切使用しないというのが初めての経験でした)

ただ、もしかしたら今後 API の ver が上がると多少リクエストの形式とかは変わるのかもしれないですね。(ただの個人的な意見で何の確証もないです。)

Discussion