Instagram APIを使用して投稿へのコメントに自動返信する機能
この記事では、Instagram APIを利用して、投稿へのコメントに自動でDMで返信する機能をAWS Lambdaを使って実装する方法を紹介します。Facebook MessengerのInstagram APIを活用し、コメントを解析して自動的にDMを送信するプロセスを詳しく解説します!
1. はじめに
Instagramの投稿に対するコメントに自動で返信する機能を作成することで、ユーザーとのエンゲージメントを高め、迅速な対応が可能になります。本記事では、その実装方法を詳細に説明します。
2. アーキテクチャの構成
フローチャート
- ユーザーがInstagramの投稿にコメント
- Webhookを通じてコメントデータを受信
- コメント内容を解析し、自動返信メッセージを生成
- DMを送信
使用する技術スタック
- プログラミング言語: Python
- サーバーレスプラットフォーム: AWS Lambda
- APIゲートウェイ: AWS API Gateway
- 外部ライブラリ: requests
3. Instagram APIの設定
開発者アカウントの取得方法
- Instagram for Developersにアクセスし、開発者アカウントを作成します。
アプリの登録と設定
- Facebook Developersサイトで新しいアプリを作成します。
- Instagram Graph APIを追加します。
- Webhookを設定し、コメントのフィールドを監視します。
必要な権限の取得と設定
以下の権限を取得します:
instagram_manage_comments
instagram_basic
pages_messaging
instagram_manage_messages
pages_manage_metadata
pages_show_list
business_management
これらの権限は、コメントの管理、メッセージの送信、ページの管理などに必要です。
APIキーの取得
- Facebook for Developersでアプリに関連付けられたアクセストークンを取得します。
こちらの記事がわかりやすいです!
- 取得したアクセストークンをAWS Lambdaの環境変数として設定します。
4. AWS API GateWayの設定
- まずは、AWSで作成したLambdaに、トリガーを設定します。
- Lambdaのプログラムは、下に示したプログラムをそのままデプロイしてみてください。
環境設定には、以下の三つのトークンを設定してください。- VERIFY_TOKEN - これは、InstagramとAWSをWebhookでつなげるときのパスワードのようなもので、自分で設定してください。
- ACCESS_TOKEN - 先ほど取得したAPIキーを設定してください。
- PAGE_ID - グラフAPIエクスプローラで
https://graph.facebook.com/v19.0/me?fields=id,name
をリクエストすると取得できます。
Webhookの設定
- まずは、こちらにログインをして下の画面で作成したアプリから、Webhookの設定を探して開きます。
- コールバックURLには、AWSのAPIエンドポイントのURLをセットします。
- トークンを認証のところは、環境変数のVERIFY_TOKENに設定したものを設定します。
- 認証が完了したら、
comment
のサブスクライブを有効化して設定は完了です。
5. プログラム
必要なライブラリのインストール
AWS Lambdaでは、requests
ライブラリを含むパッケージをデプロイする必要があります。ローカルでパッケージを準備し、ZIPファイルとしてアップロードします。
ソースコード
以下がプログラムコードです。
import os
import json
import requests
VERIFY_TOKEN = os.environ['VERIFY_TOKEN']
ACCESS_TOKEN = os.environ['ACCESS_TOKEN']
PAGE_ID = os.environ['PAGE_ID']
def verify_webhook(event):
params = event['queryStringParameters']
if params and params.get('hub.verify_token') == VERIFY_TOKEN:
return {
'statusCode': 200,
'body': params['hub.challenge']
}
return {
'statusCode': 403,
'body': 'Verification token mismatch'
}
def send_dm(comment_id, message):
url = f'https://graph.facebook.com/v19.0/{PAGE_ID}/messages'
params = {
'recipient': {
'comment_id': comment_id
},
'message': {
'text': message
},
'access_token': ACCESS_TOKEN
}
try:
response = requests.post(url, json=params)
if response.status_code == 200:
print("Direct message sent successfully.")
else:
print(f"Failed to send direct message. Status code: {response.status_code}")
except Exception as e:
print(f"An error occurred: {e}")
def lambda_handler(event, context):
if event['httpMethod'] == 'GET':
return verify_webhook(event)
if event['httpMethod'] == 'POST':
body = event.get('body')
if not body:
return {'statusCode': 400, 'body': 'Invalid event data'}
data = json.loads(body)
entries = data.get('entry', [])
for entry in entries:
changes = entry.get('changes', [])
for change in changes:
if change.get('field') == 'comments':
comment_data = change.get('value', {})
comment_id = comment_data.get('id')
comment_text = comment_data.get('text')
message = f"あなたが送信したコメントは「{comment_text}」です。"
send_dm(comment_id, message)
return {'statusCode': 200, 'body': 'Webhook received'}
return {'statusCode': 400, 'body': 'Unsupported method'}
6. 参考文献