はじめに
仕事の中で、たまにFAXで資料を送るよう求められることがある。
そのたびにコンビニへ行くか、既存のアプリを使うかで対応していたが、どれも使い勝手が悪かった。「もっとシンプルに送れないか」とずっと思っていた。
ある時、中小企業の社長が「FAXを確認するためだけに会社へ行っている」という話を聞いた。FAXさえWebで扱えれば、わざわざ出社する必要がなくなる。それは小さいようで、働き方に直結する課題だと感じた。
FAXは古い技術に見られがちだが、業種によっては今後もなくならないインフラだと思っている。むしろそこをWebと繋ぐことが、中小企業のDX推進の入り口になると考え、技術的な興味と学習を兼ねて開発をスタートした。
サービスの概要
PDFをアップロードして、送信先のFAX番号を指定するだけで送信できるWebサービス。
- ✓ ログイン認証あり(自分だけが使える)
- ✓ 送信履歴の保存・確認・削除
- ✓ 送信ステータスの更新確認
- ✓ Renderにて公開・稼働中
データの流れ
このサービスがどう動いているか、流れを整理するとこうなる。
↓
② サーバー(Express)がPDFを受け取り、/pdfsフォルダに保存する
↓
③ 保存したPDFの公開URL(Render上のURL)を動的に生成する
↓
④ Telnyx APIに「この番号へ、このURLのPDFをFAX送信して」とリクエストを送る
↓
⑤ TelnyxがそのURLにアクセスしてPDFを取得し、FAX回線へ送信する
↓
⑥ 送信結果(ID・ステータス)をhistory.jsonに保存し、画面に返す
ポイントはステップ③④で、TelnyxはPDFファイルを直接受け取るのではなく、PDFが置いてある公開URLを指定する仕組みになっている。そのため、RenderのサーバーにPDFを置いて外部から取得できる状態にしておく必要があった。
// Render上の公開URLを環境変数から動的に取得
const baseUrl = process.env.RENDER_EXTERNAL_URL || `http://localhost:${PORT}`;
const media_url = `${baseUrl}/pdfs/${req.file.filename}`;
// TelnyxにURLを渡してFAX送信を依頼
const fax = await telnyx.faxes.create({
connection_id: process.env.TELNYX_CONNECTION_ID,
to,
from: process.env.TELNYX_PHONE_NUMBER,
media_url: media_url,
quality: "high",
});
TwilioからTelnyxへ——苦労した点
当初はTwilio(有名なAPI通信サービス)でFAX送信を実装しようとしていた。しかしTwilioはFAXサービスをすでに終了していた。
代替サービスをいくつか調査した結果、TelnyxがFAX送信に対応しており、ドキュメントも整っていると判断して採用した。同じように「TwilioでFAXをやりたかったけどできない」と困っている人は、Telnyxを試してみると良いと思う。
使用技術
| 技術 | 用途 |
|---|---|
| Node.js / Express | サーバーサイド |
| multer | PDFファイルのアップロード処理 |
| Telnyx API | FAX送信 |
| express-session | ログイン認証・セッション管理 |
| Render | クラウドホスティング・公開 |
おわりに
作ってみて改めて思ったのは、FAXという枯れた技術でも、Webと繋ぐことで十分に現役になれるということだ。
「古いから使えない」ではなく、「どう繋ぐか」を考えることが、中小企業のデジタル化において大事なことだと感じている。このサービスが、出社しなくてもFAXを扱える仕組みの一例になれば良いと思っている。