2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Instagram APIで自分の投稿へのコメントに自動返信するAWS Lambdaの実装

Posted at

Instagram APIを使用して投稿へのコメントに自動返信する機能

この記事では、Instagram APIを利用して、投稿へのコメントに自動でDMで返信する機能をAWS Lambdaを使って実装する方法を紹介します。Facebook MessengerのInstagram APIを活用し、コメントを解析して自動的にDMを送信するプロセスを詳しく解説します!

1. はじめに

Instagramの投稿に対するコメントに自動で返信する機能を作成することで、ユーザーとのエンゲージメントを高め、迅速な対応が可能になります。本記事では、その実装方法を詳細に説明します。

2. アーキテクチャの構成

フローチャート

  1. ユーザーがInstagramの投稿にコメント
  2. Webhookを通じてコメントデータを受信
  3. コメント内容を解析し、自動返信メッセージを生成
  4. DMを送信

使用する技術スタック

  • プログラミング言語: Python
  • サーバーレスプラットフォーム: AWS Lambda
  • APIゲートウェイ: AWS API Gateway
  • 外部ライブラリ: requests

3. Instagram APIの設定

開発者アカウントの取得方法

  1. Instagram for Developersにアクセスし、開発者アカウントを作成します。

アプリの登録と設定

  1. Facebook Developersサイトで新しいアプリを作成します。
  2. Instagram Graph APIを追加します。
  3. 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に、トリガーを設定します。
    スクリーンショット 2024-05-26 213832.png
  • Lambdaのプログラムは、下に示したプログラムをそのままデプロイしてみてください。
    環境設定には、以下の三つのトークンを設定してください。
    1. VERIFY_TOKEN - これは、InstagramとAWSをWebhookでつなげるときのパスワードのようなもので、自分で設定してください。
    2. ACCESS_TOKEN - 先ほど取得したAPIキーを設定してください。
    3. PAGE_ID - グラフAPIエクスプローラhttps://graph.facebook.com/v19.0/me?fields=id,nameをリクエストすると取得できます。

Webhookの設定

  • まずは、こちらにログインをして下の画面で作成したアプリから、Webhookの設定を探して開きます。

スクリーンショット 2024-05-26 212609.png

  • コールバックURLには、AWSのAPIエンドポイントのURLをセットします。

スクリーンショット 2024-05-26 224506.png

  • トークンを認証のところは、環境変数のVERIFY_TOKENに設定したものを設定します。

スクリーンショット 2024-05-26 214325.png

  • 認証が完了したら、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. 参考文献

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?