Twilioブログ

kintoneでFAX受信箱をつくろう(サーバーレス編)

はじめに

みなさん、こんにちは。KDDIウェブコミュニケーションズのTwilio事業部エバンジェリストの高橋です。
 
今回は、Twilioのサーバーレス環境であるTwilio Functionsを使って、サーバーを用意せず、TwilioとkintoneだけでFAX受信をするしくみを作りたいと思います。
 

FAXには、Twilio Programmable FAXを利用します。Twilio FAXでは、050番号を使ったFAXの送受信をプログラムで制御可能なため、今回のように受信したFAXを自動的にkintoneに保存するようなソリューションでも活躍します。

準備

以下の環境が必要です。

インストール

  git clone https://github.com/mobilebiz/fax2kintone-function.git
cd fax2kintone-function
npm install
cp .env.sample .env
cp assets/twiml.sample.xml assets/twiml.xml

kintoneアプリの準備

assetsディレクトリの中に、FAX-APP.zipというテンプレートアプリがあるので、それをkintoneに読み込みます。

テンプレートアプリの読み込み方法については、こちらをご覧ください。
 
アプリが読み込めたら、次にAPIトークンを生成してください。今回使うAPIトークンでは、レコード閲覧の他に、レコード追加の権限が必要になりますので、チェックを入れておきます。
APIトークンの生成方法は、こちらを参考にしてください。なお、作成したAPIトークンはメモ帳などに保存しておいてください。
 
今回のアプリには以下の3つのフィールドが定義されています(フィールドコードは変更しないでください)。

フィールド名 フィールドコード 説明
受信日時 receivedDate FAXが格納された日時が自動的に設定されます
発信番号 from_ 発信者の電話番号がE.164形式で保存されます
添付ファイル pdf 受信したFAXデータがPDF形式で保存されます

.envファイルの編集

エディタで.envファイルを開き、以下の項目を編集します。

【注意】
先頭の2行(ACCOUNT_SIDとAUTH_TOKEN)は編集しないようにしてください。

項目名 設定内容
MASTER_ACCOUNT_SID ACから始まるTwilioのAccountSid
KINTONE_DOMAIN ご自分のkintoneのサブドメイン名(xxxxx.cybozu.comのxxxxxの部分)
KINTONE_APP_ID 作成したkintoneのアプリID(アプリIDは、URLから判別可能です。https://(サブドメイン名).cybozu.com/k/(アプリのID)/)
KINTONE_API_TOKEN 先程控えておいたAPIトークン

 

ローカルテスト

以下のコマンドでローカル実行します。


npm start
(中略)
┌────────────────────────────────────────────────────────────────────────┐
│ │
│ Twilio functions available: │
│ ├── [protected] /del-faxes | http://localhost:3000/del-faxes │
│ └── [protected] /save2kintone | http://localhost:3000/save2kintone │
│ │
│ Twilio assets available: │
│ ├── /FAX-APP.zip | http://localhost:3000/FAX-APP.zip │
│ ├── /fax-sample.pdf | http://localhost:3000/fax-sample.pdf │
│ ├── /twiml.sample.xml | http://localhost:3000/twiml.sample.xml │
│ └── /twiml.xml | http://localhost:3000/twiml.xml │
│ │
└────────────────────────────────────────────────────────────────────────┘

上記のようにローカル起動が成功したら、以下のURLをブラウザで開きます。

http://localhost:3000/save2kintone?FaxStatus=received
 
画面上にOKと表示されて、kintoneアプリ側には1件データが登録されていれば成功です。

ローカル実行を終了するには、Ctrl-Cを押します。

サーバーにデプロイ

以下のコマンドでサーバーにデプロイします。


twilio serverless:deploy

(中略)

✔ Serverless project successfully deployed


Deployment Details
Domain: fax2kintone-function-XXXX-dev.twil.io
Service:
fax2kintone-function (ZSxxxxxxxxxxxxxxxxxxxxxxx)
Environment:
dev (ZExxxxxxxxxxxxxxxxxxxxxxx)
Build SID:
ZBxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
View Live Logs:
https://www.twilio.com/console/assets/api/ZSxxxxxxxxxxxxxxxxxxxxxxxx/environment/ZExxxxxxxxxxxxxxxxxxxxxxxxxxxx
Functions:
[protected] https://fax2kintone-function-XXXX-dev.twil.io/del-faxes
[protected] https://fax2kintone-function-XXXX-dev.twil.io/save2kintone
Assets:
https://fax2kintone-function-XXXX-dev.twil.io/FAX-APP.zip
https://fax2kintone-function-XXXX-dev.twil.io/fax-sample.pdf
https://fax2kintone-function-XXXX-dev.twil.io/twiml.sample.xml
https://fax2kintone-function-XXXX-dev.twil.io/twiml.xml

表示された結果の中の、Functions項目にあるsave2kintoneへのリンクURLをメモ帳に保存してください。

assets/twiml.xmlの編集

エディタでassets/twiml.xmlを開きます。

3行目に書かれているaction=で指定しているURLを上でメモしたリンクURLに書き換えます(シングルクォーテーションを削除しないようにご注意ください)。
編集が完了したら、上書き保存します。

再度デプロイ

twiml.xmlを編集したので、もう一度以下のコマンドでデプロイします。


twilio serverless:deploy

(中略)


Functions:
[protected] https://fax2kintone-function-XXXX-dev.twil.io/del-faxes
[protected] https://fax2kintone-function-XXXX-dev.twil.io/save2kintone
Assets:
https://fax2kintone-function-XXXX-dev.twil.io/FAX-APP.zip
https://fax2kintone-function-XXXX-dev.twil.io/fax-sample.pdf
https://fax2kintone-function-XXXX-dev.twil.io/twiml.sample.xml
https://fax2kintone-function-XXXX-dev.twil.io/twiml.xml

デプロイが完了したら、最後に表示されたtwiml.xmlへのリンクURLをメモ帳に保存してください。

電話番号の設定

Twilioの管理コンソールにログインします。

  • スライドメニューかPhone Numbersを選択し、番号の管理 > アクティブな電話番号を選択します。
  • 購入済みの電話番号の一覧から、今回FAX着信に利用する電話番号を選択して設定画面を開きます(電話番号がリンクになっています)。
  • Voice & Faxセクションの中の、ACCEPT INCOMINGを、Faxesに変更します。
  • A FAX COMES INのプルダウンをWebhookにし、その右側の欄に先程メモしたtwiml.xmlのリンクURLを記載します。さらに右側のプルダウンからHTTP GETを選択します。
  • Saveボタンを押します。

テスト

以上ですべての設定が完了です。
設定した電話番号にFAXを送信してみて、kintoneに格納されることを確認してください。

補足

上記説明にはないのですが、FunctionsフォルダにはTwilio上のFAXリソースを削除するプログラム(del-faxes.protected.js)が入っています。Protectedなので、外部からは起動できませんが、ローカル実行時はhttp://localhost:3000/del-faxesで実行することができます。
特に使う必要はありませんが、使う場合は送信中のFAXを含めてTwilio上のFAXリソースがすべて削除されるので注意してください。

まとめ

Pythonプログラムは不要ですが、CLIの準備など少々手間がかかると感じた方もいらっしゃるのではないでしょうか。
しかし、Twilio CLIとTwilio Functions(とくにServerless Plugin)は、開発に慣れている方であれば、ほとんどのことがコマンドベースで実行できるので、いっぱい触ってぜひ慣れてください。

Twilioエバンジェリスト 高橋 克己
Twilioエバンジェリスト 高橋 克己

趣味は料理。 2014年7月に、留守番電話が文字で届く国内初の留守電サービス「TRANSREC」をリリース。 2015年4月にSmart Communication Award 2015で「自動電話リレーサービス」が最優秀賞を受賞。 2016年2月よりTwilioエバンジェリストとして活動

CTA_まずはtwilioを使ってみる。

Share!!

この記事を読んだ人へのオススメ

  • お役立ち情報
  • イベント情報
  • 相談会申込
  • 導入事例