はじめに
この投稿はTwilioを使った面白いこと・Twilioの無駄遣いを共有しよう【PR】Twilio Advent Calendar 2021の16日目の投稿になります。
Twilio Programmable Faxの解説のようなタイトルになっていますが、この記事は主にTwilio SIP Registration + VoIP アダプターを使って、Twilio番号を固定電話のような形で使う方法の解説となります。
この記事にでてくるTwilio Programmable Faxは、明日(2021年12月17日)をもちまして、サービス提供を終了します。今までありがとうございました。
※Twilio Programmable Faxがサービス終了するので、Twilio番号でFAX送受信できる方法を考えました。(というか、密やかにTwilio Programmable Faxの追悼式をおこないましたw)
実装
さっそく作っていきます。
SIPレジストレーションの設定
SIPドメインにアクセスするためのIPアクセス制御リストを作成
今回は、自宅の固定FAX機として利用するため、自宅のIPアドレスからのみ接続できるようにします。
「Programmable Voice」→「SIPドメイン」→「IPアクセス制御リスト」→「Create new Access Control List」をクリック
以下の値を入力します。
項目 | 内容 |
---|---|
ACL Friendly Name | IPアドレスリストにつける名前 |
IP Address Range Friendly Name | IPアドレスにつける名前 |
CIDR Network Address | 接続元のIPアドレス ※今回は自宅IP |
ちなみに、作ったACLに、IPアドレスを追加する場合は、該当のACLの詳細画面から「Create new IP Address Range」をクリックします。
SIPドメインにアクセスするためのユーザー(クレデンシャル)を作成
「Programmable Voice」→「SIPドメイン」→「クレデンシャルリスト」→「Create new Access Control List」をクリック
以下の値を入力します。
項目 | 内容 |
---|---|
Friendly Name | ユーザー(クレデンシャル)リストにつける名前 |
Username | 接続するためのユーザー名 |
Password | 接続するためのパスワード ※複雑なものを設定すること。 |
SIPドメインの作成
「Programmable Voice」→「SIPドメイン」→「ドメイン」→「Create new Access Control List」をクリック
以下の値を入力します。
着信・発信の処理を作る
今回はTwilio Functionsを利用して作成します。
「Functions」→「Services」→「Create Service」をクリック
Service Nameには、サービス名を入力します。
着信をSIPへ転送する
Twilio番号に着信があったものをSIPへ転送するための処理を作成します。
「Add」→「Add Function」をクリック
Functionを作成します。パスを指定し、以下のソースコードを入力し、saveをします。
exports.handler = function(context, event, callback) {
let twiml = new Twilio.twiml.VoiceResponse();
twiml.dial().sip('sip:ユーザー名@SIPドメイン名.sip.twilio.com');
return callback(null, twiml);
};
SIPから発信する
SIPからの発信は、Twilioから呼び出されたWebhookで電話発信するTwiMLを返すことで、電話を発信することができます。上記と同様にFunctionを作成します。パスを指定し、以下のソースコードを入力し、saveをします。
exports.handler = function(context, event, callback) {
// 宛先を取得
const to = event.To || '';
const toNumber = to.indexOf("@") > 0 ? to.substring(4, to.indexOf("@")) : '';
const to_number = (toNumber.substring(0,1) === '+' ? toNumber : '+81' + toNumber.substring(1));
// 宛先に外線発信
let twiml = new Twilio.twiml.VoiceResponse();
const dial = twiml.dial({
callerId: 'Twilioで購入した電話番号'
});
dial.number(to_number);
return callback(null, twiml);
};
着信・発信の処理に割当
着信を割り当て
着信したい電話番号に、割り当てます。
「Phone Numbers」→「該当電話番号を選択」→「Voice & Fax」に以下を入力
項目 | 内容 |
---|---|
A CALL COMES IN | Function |
SERVICE | 上記で作ったFunctions名 |
ENVIRONMENT | ui |
FUNCTION PATH | 着信用に作ったパス |
発信を割り当て
SIPドメインに、割り当てます。
「Programmable Voice」→「SIPドメイン」→「ドメイン」→「該当ドメイン」を選択。
Call Control Configurationを設定します。
※SIPドメイン設定画面では、FunctionsはFunctions(Classic)しか選択ができないので、URLを指定することにします。
上記で作ったFunctionsの発信用FunctionのURLをコピーします。
そのURLを「Call Control Configuration」の「A CALL COMES IN」に設定します。
## VoIPアダプターの設定
今回、VoIPアダプターは、Grandstream HT801を使います。
マニュアルなどは以下。
User Guide
Administration Guide
IPアドレスの確認
設定画面にアクセスするため、IPアドレスを確認します。
電源、LANケーブル、モジュラーケーブルを接続します。モジュラーケーブルの先は普通の電話機に接続します。
電話機の受話器をとり、*(アスタリスク)を3回pushします。
「ENTER A MENU OPTION」という音声が聞こえるので「02」とpushします。
「IP ADDRESS」という音声の後で、英語でIPアドレスが音声で聞こえます。
ブラウザで設定画面にアクセス。
http://(IPアドレス) にアクセスします。
ユーザーIDとパスワードを聞いてくるので、両方とも「admin」と入力します。
※初期設定の場合は、その様になっています。
設定をする
[FXS PORT]の設定画面で、以下の部分を変更する。他はデフォルト。
項目 | 内容 |
---|---|
Primary SIP Server | 登録したSIPドメインのURI |
SIP User ID | 上記で作ったユーザー名 |
Authenticate ID | 上記で作ったユーザー名 |
Authenticate Password | 上記で作ったユーザーのパスワード |
Name | 上記で作ったユーザー名 |
Fax Mode | Pass-Through ※電話機によっては必要ないかも? |
※余談ですが、設定に「Enable Pulse Dialing」というものがあり、これを設定すると、黒電話も接続可能なのでは?と思っています。知らんけど。
Twilio Programmable FAXでFAXを送信、SIPで受信してみる。
Twilio Programmable FAXはTwilio CLIで簡単にFAXを送信することができます。
※送信内容はPDF形式でTwilioからインターネットを介してアクセスできる場所に設置する必要あります。
twilio api:fax:v1:faxes:create \
--from (FAX送信元番号)\
--to (FAX送信先番号\
--media-url (PDFファイルのURL)
動作確認
以下のような感じです。
最後に
さようなら、Twilio Programmable Fax。とても良いサービスだったと思います。感謝。
参考
Twilio Programmable Fax
https://jp.twilio.com/docs/fax
Twilio Programmable Fax リリース時の動画
Twilio Programmable Fax サービス終了のお知らせ
https://jp.twilio.com/changelog/programmable-fax-disabled-new-and-non-active-accounts
https://cloudapi.kddi-web.com/news/latest/twilio-programmable-fax-end-of-life-on-december-17-2021