kintoneでFAX受信箱をつくろう

:::note alert
2023年5月1日を持ちまして、株式会社KDDIウェブコミュニケーションズのTwilioリセール事業が終了したため、本記事に記載されている内容は正確ではないことを予めご了承ください。
:::

# kintoneでFAX受信箱をつくろう

## はじめに

kintoneはいろいろな情報を扱える非常に便利なツールです。
そこで、FAXの管理もkintoneに任せてしまおうということで、従来のようなFAXを紙による管理から電子データに置き換えて、kintoneと連携させることでペーパーレス化を実現したいと思います。
<img width="1011" alt="スクリーンショット 2017-08-21 15.33.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/86046/6a1d31a9-214e-490d-f0c9-2534c0cc4ddf.png">

FAXには、[Twilio FAX](https://jp.twilio.com/docs/api/fax)を利用します。Twilio FAXでは、050番号を使ったFAXの送受信をプログラムで制御可能なため、今回のように受信したFAXを自動的にkintoneに保存するようなソリューションでも活躍します。

## 準備するもの

- kintoneの開発者ライセンス
- twilioのアカウント（トライアルアカウントでも可）
- python3.x開発環境
- git（必須ではありません）
- ngrok（別途サーバーを用意する場合は不要）

## 動作のしくみ

1. Twilio FAXでFAXを受信します。
2. pythonで記述されたプログラムがTwilioに受信するよう指示を出します。
3. TwilioがFAXを受信し、受信が完了したら、再度pythonプログラムを呼び出します。
4. Twilioから通知されたFAXデータのURLからpdfをダウンロードします。
5. ダウンロードしたpdfファイルをkintoneにアップロードします。

## 作業手順

1. kintoneの開発者ライセンスを取得します。
2. kintone上でアプリを作成します。
3. twilioのアカウントを取得します。
4. twilioでFAX番号を購入します。
5. pythonプログラムをダウンロードします。
6. 各種環境情報を更新します。
7. pythonプログラムを実行します。
8. ngrokを起動します。
9. twilio上で受信設定を行います。
10. FAXの受信テストをします。

## ハンズオン

### 1. kintoneの開発者ライセンスを取得します。
この記事では、kintoneのAPIを利用してデータのアップロードを行います。
そのために、開発者ライセンスを取得する必要がありますので、以下の記事を参考に申込をしてください。
http://qiita.com/rocca0504/items/391e0bc276a63a5556f7
なお、開発者ライセンスが届くには2〜3営業日かかることがございます。

### 2. kintone上でアプリを作成します。
この記事で作成するkintoneアプリは、すでにアプリテンプレートとして準備してありますので、各自ダウンロードをした後、ご自分の環境に読み込みを行ってください。
[fax2kintone.zip](https://goo.gl/aNKf7z)

アプリテンプレートの読み込み方法は、以下の記事を参考にしてください。
https://help.cybozu.com/ja/k/admin/import_template.html

アプリテンプレートを読み込めたら、テンプレートをベースにアプリを生成します。

アプリが読み込めたら、次にAPIトークンを生成してください。今回使うAPIトークンでは、レコード閲覧の他に、レコード追加の権限が必要になりますので、チェックを入れておきます。
APIトークンの生成方法は、以下の記事を参考にしてください。
https://help.cybozu.com/ja/k/user/api_token.html

なお、APIトークンの生成画面での保存ボタンと、その後でアプリの更新を行うのを忘れないようにしましょう。生成したAPIトークンは後ほど利用しますので、メモ帳などに記録しておきます。

### 3. twilioのアカウントを取得します。

[Twilio](https://twilio.kddi-web.com)は、電話やFAXなどのコミュニケーションツールをAPIで操作することができるサービスです。今回は、Twilioの電話番号を使ってFAXを受信したいと思います。
まずは、以下の手順を参考に、Twilioのトライアルアカウントを作成しましょう。
[twilio_signup.pdf](https://goo.gl/JYdxUG)

なお、今回の手順はトライアルアカウントでも実施可能ですが、トライアルアカウントでは利用できるポイントが有限なため、継続して利用するためにはアップグレードが必要です。

### 4. twilioでFAX番号を購入します。

Twilioのアカウントが取得できたら、管理コンソールに[ログイン](https://jp.twilio.com/login/kddi-web)をして、以下の手順で電話番号を購入します。

1. 左側のスライドメニューを開き、「電話番号」を選択します。
2. 「電話番号を購入」を選択します。
3. 国が「Japan(+81)」になっていることを確認し、Faxにチェックを入れてから「検索」ボタンを押します。
4. 一覧の中からTYPEがローカルとなっているもののいずれかの「購入」ボタンを押します。
5. 番号購入確認ダイアログが表示されたら、「この番号を購入する」ボタンを押します。
6. 購入完了ダイアログが表示されたら「閉じる」ボタンを押して、ダイアログを閉じておきます。

このFAXの番号に後ほどFAXを送るので、番号をメモ帳などに控えておきましょう。
なお、+8150-xxxx-xxxxという電話番号は、先頭の+81を0に置き換えて使用します（050-xxxx-xxxx）。

### 5. pythonプログラムをダウンロードします。

この記事で利用するプログラムを以下のgithubに公開してあります。
ローカルPC内でPython3.xが動作するディレクトリに移動し、以下のコマンドを使ってソースコードを展開します。もし永続的に利用したい場合などは、このあとの手順を公開サーバー上で実行してください。

```# git clone https://github.com/twilioforkwc/fax2kintone.git```

もしgitコマンドが使えない場合は、以下のURLからzipファイルをダウンロードして展開してください。
https://github.com/twilioforkwc/fax2kintone/archive/master.zip

### 6. 各種環境情報を更新します。

以下の手順で、設定ファイルをお使いの環境にあわせて設定します。

```lang:sh
# cd fax2kintone
# cp sample.ini config.ini
```

config.iniファイルをテキストエディタなどで開き、以下の項目を編集します。
- 3行目、urlには、kintoneのサブドメインを指定します。
- 5行目、app_idには、アプリID（最初のアプリなら通常は1）を指定します。アプリIDは、URLから判別可能です。https://（サブドメイン名）.cybozu.com/k/（アプリのID）/
- 7行目、api_tokenには、先程生成したAPIトークンを指定します。
- 9行目、login_userには、アプリにログインが可能なkintoneのユーザIDを指定します。
- 11行目、login_passには、同じくログイン可能なユーザのパスワードを指定します。

設定が完了したら、設定を保存します。

### 7. pythonプログラムを実行します。

以下の手順で、プログラムを実行します。

```lang:sh
# python app.py
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
```

このようなメッセージが表示されれば起動成功です。
プログラムは5000番ポートで待ち受けています。

### 8. ngrokを起動します。

ローカルPCで実行している場合は、5000番ポートを外部からアクセスできるようにするために、以下の手順が必要です。先程のプログラムとは別のターミナル（コマンドウィンドウ）を開き作業してください。

```lang:sh
# ngrok http 5000
```

しばらくすると以下のようなメッセージが表示されて、外部からの接続が可能になります。

```
ngrok by @inconshreveable                                                                                                                                                             (Ctrl+C to quit)

Session Status                online
Update                        update available (version 2.2.8, Ctrl-U to update)
Version                       2.2.4
Region                        United States (us)
Web Interface                 http://127.0.0.1:4040
Forwarding                    http://XXXXXXXX.ngrok.io -> localhost:5000
Forwarding                    https://XXXXXXXX.ngrok.io -> localhost:5000
```

重要なのは、最後の行にかかれている「[https://xxxxxxxx.ngrok.io]()」（XXXXXXXXは起動毎に異なります）の部分です。このURLをこのあと使いますので、メモ帳などに控えておきましょう。

### 9. twilio上で受信設定を行います。

最後にtwilio側で受信番号の設定を行います。この作業はTwilioの管理コンソールで行います。

1. スライドメニューの「電話番号」のサブメニューである「アクティブな電話番号」を選択します。
2. 先程購入した電話番号を選択します（電話番号部分がリンクになっています）。
3. Voice&FAX欄の「ACCEPT INCOMING」を「Faxes」に変更します。
4. 「A FAX COMES IN」を「Webhook」、更にURLとして先程控えておいたngrokのURLに、/receiveを追加したものを指定します。
5. 「保存」ボタンを押して設定を保存します。

<img width="1004" alt="スクリーンショット 2017-08-22 10.27.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/86046/9dd59c3e-1722-3d41-7deb-dd0c91c8bd82.png">

以上で設定はすべて終了となります。

### 10. FAXの受信テストをします。

お手持ちのFAX機から、先程Twilioで取得した番号にFAXを送信して、kintoneアプリに格納されることを確認します。