LINE
LINE Messaging API を使ったアウトバウンドプッシュメッセージング。署名済み webhook イベントに対応しており、日本・台湾のオペレーターに人気です。
🟡 アウトバウンド送信のみ対応。 Minara は LINE のプッシュ API(月次課金)を使用します。返信トークン(無料)はまだ接続されていないため、すべてのアウトバウンドメッセージがプランのクォータに計上されます。インバウンド webhook イベントは HMAC-SHA256 署名検証つきで完全サポートしています。
できること
POST /v2/bot/message/pushによるプッシュメッセージング。userId、groupId、roomId宛てに送信できます。/webhooks/lineでのインバウンド webhook。X-Line-Signatureヘッダーに含まれる HMAC-SHA256(raw ボディに対して算出)を、LINE の公開仕様に従って検証します。- 現時点ではテキストのみ対応。画像・スタンプ・動画などの添付は将来の機能拡張予定です。
- テキストメッセージは5000 文字制限。上限を超えると
send_messageがツール境界でトランケートします。
セットアップ
1. LINE チャネルを作成する
- LINE Developers Console を開く
- プロバイダーを作成し、その中に Messaging API チャネルを作成する
- チャネルページからチャネルアクセストークン(長期間有効。空欄なら「発行」をクリック)とチャネルシークレットを取得する
2. ユーザー / グループ ID を確認する
ユーザーがボットを友達追加すると、webhook に follow イベントが届き、そのユーザーの userId(U... 形式の不透明な文字列)を取得できます。グループの場合は、グループ内でメッセージを送信し、インバウンドペイロードから groupId を読み取ってください。連絡先を一覧で取得する方法はなく、最初のインタラクション時に ID をキャプチャする必要があります。
3. Minara を設定する
対話メニューを使うのが最も手軽です:
minara auth messaging add
# リストから `line` を選び、アクセストークン・チャネルシークレット・
# デフォルトの userId / groupId をプロンプトに貼り付けるまたはプロジェクトルートの .env ファイルに環境変数を直接記述することもできます:
LINE_CHANNEL_ACCESS_TOKEN=<長期間有効な bearer トークン>
LINE_CHANNEL_SECRET=<署名キー>
LINE_DEFAULT_USER_ID=<デフォルトの Uxxxxxxxxxxxxxx>4. テストする
minara auth messaging test line1 秒以内にボットアカウントへ「✅ Minara gateway test ping」が届くはずです。
インバウンド webhook
LINE チャネルが以下の URL に POST イベントを送信するよう設定してください:
https://<your-host>/webhooks/lineLINE はすべての webhook ボディを LINE_CHANNEL_SECRET で HMAC-SHA256 署名し、X-Line-Signature ヘッダーに格納して送信します。Minara はボディのパース前に署名を検証するため、改ざんされた POST は 401 を返し、Agent には転送されません。
現時点でインバウンドに対応している webhook イベントは、message.type === "text" の message イベントのみです。スタンプ・メディア・フォロー/アンフォローなど他のタイプは無視されます。
制限事項と注意点
- プッシュ API は月次課金です。 Developer trial プランは月 500 件まで。有料プランはより高い上限が設定されています。プロダクションアラートには控えめに使用してください。
- 返信トークンは無料ですが、まだ接続されていません。 将来の機能拡張で、インバウンドメッセージ受信後 30 秒以内であれば
replyTokenを使ってプッシュクォータを消費せずに返信できるようになる予定です。 - テキスト 5000 文字制限。 上限を超えるとトランケートされます。
トラブルシューティング
「テストメッセージが届かない」
- 受信側のアカウントでボットが友達追加されているか(またはグループに参加しているか)確認する
LINE_DEFAULT_USER_IDの形式を確認する。先頭のUが必要です~/.minara/logs/を確認し、api.line.meからの HTTP 4xx レスポンスがないか調べる
「インバウンド webhook が 401 を返す」
- 環境変数の
LINE_CHANNEL_SECRETが LINE コンソールのチャネルシークレットと一致していない - 署名ヘッダーは raw ボディに対して算出されます。リバースプロキシや CDN がバイト列を改変していないか確認してください
「プッシュ API が 429 を返す」
- 月次プッシュクォータを使い切った状態です。プランをアップグレードするか、アラート以外のメッセージには返信トークンへの切り替えを検討してください。