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'
}
]
}
こんな感じでメッセージが取得できる