ken_nogi/NodeSrv/apps/get-voice-mail/spec.md
Kenichiro NOGI 76700845fe feat: get-voice-mail app-portalキッカー追加、app-portal UIをBootstrap化
get-voice-mailはn8n Webhookへの中継専用アプリ(SCP取得・プリザンター書込はn8n側で実施)。
app-portalはBootstrap 5導入で見た目を刷新(カード/モーダル/トースト化)。
dokploy-webapp SKILLはGitea統合(NodeSrv→ken_nogi)後の設定変更を反映。
2026-09-19 11:06:02 +09:00

60 lines
2.7 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# get-voice-mail
## 仕様
- n8nを利用
- SCPでサーバーから録音データ取得
- プリザンターに音声保存
## サーバー情報
pbx-server-secret.md 参照
## voiceメールのパス
/var/spool/asterisk/monitor
この下に、年フォルダ、月フォルダ、日フォルダが階層化されている
取得ファイルルール ※あとで変わるかもだがいまは固定ルール
- ファイル名の先頭がin-0420002706-で始まるもの
{方向}-{番号A}-{番号B}-{日付}-{時刻}-{uniqueid}.wav
- 方向: in=着信 / out=発信 / generic=内線間 or 方向判定不能時
- 番号A: 着信の場合は着信先(DID/内線番号)、発信の場合は発信元内線
- 番号B: 相手側番号(外部番号 or 内線)
- 日付: YYYYMMDD
- 時刻: HHMMSS
- uniqueid: Asteriskチャンネル固有ID (epoch秒.マイクロ秒)。通話開始時刻ベース、重複なし識別子
例:
- in-0420002706-05057998188-20260918-165846-1789718326.114385.wav
→ 着信、着信先0420002706、相手05057998188、2026-09-18 16:58:46
- generic-0425400505-05017446045-20260918-170343-1789718623.114390.wav
→ 内線間 or 方向不明、番号0425400505⇔05017446045
ファイル名からいつの音声データなのか日付情報も算出
ファイル名の日付はJST
## プリザンター
取得した音声ファイルと内容をプリザンターのテーブルへ書き出し
https://nextoffice.next-hd.co.jp/pleasanter/items/515888/index
- ClassA番号A
- ClassB番号B
- ClassCWAVファイル名 ※すでに同じファイルが登録済みの場合はスキップ
- AttachmentAWAV本体保存
## n8nワークフロー起動方式
入口=Webhookード固定。cron等の自前スケジューラは使わない。
起動元=app-portal`NodeSrv/apps/app-portal`のキッカーbatch型トリガー
実装=`NodeSrv/apps/get-voice-mail`直下のNode.jsアプリ他アプリと同じ1フォルダ1Dokploy Compose
役割=中継のみ。`/trigger`受信→n8n Webhook URLへPOST→202即返却。SCP取得・WAV判定・プリザンター書込は全部n8n側workflow内で実施。
- POST `/trigger`(ヘッダ`X-Portal-Secret`必須、`PORTAL_SECRET`と一致時のみ許可)
- 認証通過後、環境変数`N8N_WEBHOOK_URL`n8n Webhookードの入口URLへPOST、結果を待たず202返却
- `.env.example`にPORTAL_APP_TYPE=batch等のポータル登録変数一式を用意済み。Dokploy Environment画面で`PORTAL_SECRET`・`N8N_WEBHOOK_URL`を設定してから使う
- ポータル管理・トリガー実装パターンの詳細は`NodeSrv/apps/_template/README.md`「アプリポータルへの登録」章、実装例は`NodeSrv/apps/portal-sample-batch`参照