# 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 - ClassC:WAVファイル名 ※すでに同じファイルが登録済みの場合はスキップ - AttachmentA:WAV本体保存 ## 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`参照