get-voice-mailはn8n Webhookへの中継専用アプリ(SCP取得・プリザンター書込はn8n側で実施)。 app-portalはBootstrap 5導入で見た目を刷新(カード/モーダル/トースト化)。 dokploy-webapp SKILLはGitea統合(NodeSrv→ken_nogi)後の設定変更を反映。
2.7 KiB
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参照