0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Facebook Messenger API + Flask 備忘録 [導入編]

Last updated at Posted at 2020-12-12

Facebook Graph API の一部である Facebook Messenger Platform の使い方メモ

  • FBアプリを作り、自分が admin になっている FBページに紐付けて、様々なメッセージ送信が可能
  • 直接POSTリクエストでも送信できるが、Webhook 機能があるので、PHP や Flask などの別サーバーにおいたプログラムとリンクして高度な処理が可能
  • **予め Facebook for Developers で登録した admin, developer, tester しか使えない。**また、友達でない人のアプリへの追加は不可。一般公開して誰もが使えるようにするためには、Review 申請をして審査に通る必要あり。
  • Flask アプリは Heroku (USAリージョン) と AWS EC2 (シンガポールリージョン) において試してみたが、AWS の方がレスポンスが速い。
  • NLP機能もあるが、日本語・タイ語などは未対応 (2020-12)

初期設定

https://developers.facebook.com/apps/ から Create App でアプリを作成

What do you need your app to do? は Manage Business Integrations を選んだが、Something Else でも良さそう

App Display Name を入れて、Create App

Screen Shot 2020-12-12 at 3.38.12 PM.png

Add Products がたくさん出てくるが、とりあえず Messenger だけ選んで追加

Screen Shot 2020-12-12 at 3.40.11 PM.png

真ん中あたりの Access Tokens で、連携するFacebookページを追加。Add or Remove Pages
自分が admin のページ一覧が出るので選択。

Screen Shot 2020-12-12 at 3.41.50 PM.png

ページが登録されたら、右の Generate Token でアクセストークンを発行し、記録しておく。とりあえず環境変数 .env に保存。

これは Facebook Graph API を通してリクエストを送る時にパラメタとして毎回必ず添付する必要がある。めっちゃ長い。

Screen Shot 2020-12-12 at 3.47.50 PM.png

次に Webhook の設定。Callback URL は Flask アプリのコールバックプログラムがあるURLを指定、HTTP は不可なので、AWS EC2インスタンスのIPアドレスをそのまま使うことはできない(EC2のHTTPS化は別記載)。Heroku にデプロイするのなら HTTPS通信が可能。

URLは https://.../callback と設定した。ここに記入する Verify Token は Facebook 側からリクエストを送って返事がくるかどうかのテストをするためのものであり、なんでも良い。とりあえず test としておき、.envVERIFY_TOKEN=test と保存したが、個人用ならそのままプログラム内にハードコーディングしてもいいかもしれない。プログラムが正常なら、Verify and Save できる。

Screen Shot 2020-12-12 at 3.52.51 PM.png

ここで、Flask 側のプログラムは以下。このテスト用のリクエストは GET メソッドである。実際のコールバック関数となる 'POST' の部分は後で追記。

import os
from flask import Flask, request
from dotenv import load_dotenv
load_dotenv() # 環境変数ファイル .env の読み込み
VERIFY_TOKEN = os.getenv('VERIFY_TOKEN')

@app.route('/callback', methods=['GET', 'POST'])
def receive_message():
    if request.args.get("hub.verify_token") == VERIFY_TOKEN:
        return request.args.get("hub.challenge")
    else:
        return 'ちがうよ'

リクエストにどんなパラメータがあるかは、ここを参照。

要するに、送られてきた hub.verify_token の値をチェックし、同じならば hub.challenge の値を返しているだけ。ブラウザのURLバーに

https://.../callback?hub.verify_token=test&hub.challenge=SUCCESS

と入力して SUCCESS と表示されればOK

Webhook の登録が完了したら、今度は Add Subscription で使う API のタイプを選択。多すぎて違いがわからない (ここを参照) が、とりあえず messages, message_deliveries, messaging_postbacks を選ぶ。必要ならば後でいくらでも追加できる。

Screen Shot 2020-12-12 at 4.19.55 PM.png

Screen Shot 2020-12-12 at 4.22.38 PM.png

この後自分が管理しているFBページにいき、Page Settings > Advanced Messaging > Connected Apps のところに登録したアプリがあればOK。

返信用の Python プログラム実装は次回

実装編 1

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?