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

2.7 KiB
Raw Blame History

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-portalNodeSrv/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_URLn8n Webhookードの入口URLへPOST、結果を待たず202返却
  • .env.exampleにPORTAL_APP_TYPE=batch等のポータル登録変数一式を用意済み。Dokploy Environment画面でPORTAL_SECRETN8N_WEBHOOK_URLを設定してから使う
  • ポータル管理・トリガー実装パターンの詳細はNodeSrv/apps/_template/README.md「アプリポータルへの登録」章、実装例はNodeSrv/apps/portal-sample-batch参照