Open6

ngrokを利用して、LINE Messaging APIのwebhookを簡易にローカルに送る

鷹

ngrokで公開したローカルのポートにwebhookを転送させる感じっぽい

鷹

LINEの公式アカウントが必要、BusinessとDevelopers両方必要そうな感じ
Developersから進めていけば勝手にBusinessの方に案内されて、ある程度進めたらまたDevelopersの方に案内されるから楽かも

鷹

細い手順は覚えてないので書かない

鷹

ほぼAIに聞いたままだけど

uv add fastapi uvicorn
uv add --dev ruff mypy
uv run uvicorn main:app --reload --port 3000
# main.py
from fastapi import FastAPI, Request

app = FastAPI()

@app.post("/callback")
async def callback(request: Request):
    body = await request.json()
    print("=== Webhook Event ===")
    print(body)  # LINEから送られてきたメッセージ内容をそのまま表示
    return "OK" 

鷹
ngrok(Ctrl+C to quit)

🤫 Decouple policy and sensitive data with vaults: https://ngrok.com/r/secrets

Session Status                online
Account                       xxxxxx@gmail.com (Plan: Free)
Version                       3.29.0
Region                        Japan (jp)
Latency                       12ms
Web Interface                 http://127.0.0.1:4040
Forwarding                    https://xxxxxx.ngrok-free.dev -> http://localhost:3000

Connections                   ttl     opn     rt1     rt5     p50     p90
                              2       0       0.00    0.00    5.01    5.01

Forwardingの https://xxxxxx.ngrok-free.dev をLINEのwebhookに登録すると

{
  'destination': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  'events': [
    {
      'type': 'message',
      'message': {
        'type': 'text',
        'id': '000000000000000000',
        'quoteToken': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
        'text': 'こんにちは'
      },
      'webhookEventId': 'xxxxxxxxxxxxxxxxxxxxxxxxxx',
      'deliveryContext': { 'isRedelivery': False },
      'timestamp': 1758592055707,
      'source': {
        'type': 'user',
        'userId': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
      },
      'replyToken': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
      'mode': 'active'
    }
  ]
}

こんな感じでメッセージが取得できる