(途中)TwilioでFAX送信 2020年6月時点


追記

2020年7月・・・その後の実装・動作確認を経て不採用としました。ご参考までに。

TwilioのFAX送信機能の評価結果=不可 - Qiita

2020年12月・・・Twilio社から2021年12月でFAX API機能の提供打ち切りというアナウンスがありました。採用していたら開発投資が無駄になるところでした…。良かった。

関連URL

料金(FAX送信)

公式サイトには記載されていないので問い合わせが必要です。
以下は2019年11月(消費税造成後)に問い合わせた時の回答です。
更新されている可能性があるので各自お問い合わせください。

050番号であればFAX送受信ともに約7円/枚です。これは現状では国内最安だと思います。

初期費用

無料

電話番号の維持費用

050番号維持費用  110円/月
0120/0800番号維持費用 1,650円/月

FAX送信費用

送信料 1.52778円/ページ ※毎月100枚まで無料
通信料 5.5円/分

FAX受信費用

受信料 1.52778円/ページ
通信料 0.61円/分(050の場合)
通信料 22円/分(0210/0800の場合)
※毎月送受信合計100枚までは送信料/受信料が無料です。(通信料は必要)

TwilioのFAX送信の特徴

  • 安い。7円/枚は国内最安。
    • 維持費110円が必要だが実質無料。(枚数100枚まで送信料金約1.52円は無料なので72枚送信すれば元をとれる)
  • プログラマブル(RestAPIに対応)で送信できる
  • PDFファイルのみ送信できる
    • メール送信するだけでFAX送信に変換してくれる他サービス(例えば秒速FAX送信)に比べると面倒ではある。
      • API実装したくない場合は「秒速FAX送信」がおすすめ。維持費ゼロで。10円/枚
  • PDFファイルの格納先は自前で用意する必要がある
  • PDFファイルは、Twilioサーバからアクセス可能なURLを持つ必要がある
  • 支払いはクレジットカード登録が必要

実装

実装上の考慮事項

  • PDFファイルアクセス時にBasic認証を必要とするか
    • 送信内容に個人情報が含まれるので「機密度」は高い
    • したがって必要
    • 特定のパスに対してだけ設定する
  • Twilio側にデータを残すかどうか?
    • デフォルトでは180日保管される
    • 保管要否はリクエスト時にStoreMediaパラメタで指定できる。False指定すれば保管させない。既定はTrue
    • 保管期間指定は不可?
  • PDFファイルの保管と削除
    • 保管期間
    • ファイル削除のバッチ実装
  • PDFファイルの格納先
    • Webアプリケーションサーバのローカルか?S3か?
      • Webアプリケーションサーバローカルの場合
        • PDFファイルがディスク消費するので定期的に削除する処理が必要
        • 実装は容易。すでにある実装にパスを追加するだけ。
    • S3にPDFアップロードしてそれをトリガとしてLambda関数から実行という仕組みだと
      • メリット
        • データ失われない
        • データ保持期間をS3機能で指定できる? ※バッチ削除処理の実装不要
        • Webアプリケーションサーバの負荷が低い(S3にアップロードするだけ)
      • デメリット
        • TwilioからPDFが参照されるので「データ転送料金」が発生する。
        • Lambda関数
        • PDFにベーシック認証かける実装がやや面倒(CloudFront+S3で実現可能)
      • この場合、PDFファイルアップロードで

設計

  • サブドメインを追加する.
    • 例えばtwilio_faxdata.sample.com
    • ディレクトリ/var/www/html/fax-data/に割り当てる
    • 当該サブドメインにベーシック認証を設定する。
    • https設定にする
  • PDFファイルを当該ディレクトリに出力する
  • サブドメイン+pdfファイル名をTwilioに渡す
  • 定期的に削除する。
    • 保管期間はサイト設定で指定できるように。デフォルト7日

開発言語

  • java
  • 既存アプリケーションに組み込む

設定

Apache設定

httpd.conf
<VirtualHost *:443>
  ServerName faxdata.sample.com
  DocumentRoot /var/www/html/faxdata
  <Location /var/www/html/faxdata>
    AuthType Basic
    AuthName "Basic Auth"
    AuthUserFile /etc/httpd/conf/.htpasswd
    Require valid-user
  </Location>

  SSL設定とか

</VirtualHost>