注意事項
https://jp.twilio.com/docs/fax/twiml/receive#action-callback
MediaUrl:URLは2時間で有効期限が切れることに注意してください。
お値段
- Twilio
- slack
Slackでやること
- channelを作る
-
Incoming Webhook の設定
を参照しながら、Webhook用URLを取得する
Twilioでやること
※GUIでやったので、所々フワッとしてる
Functionの作成
環境変数の設定
- メニューから「Functions」を選択
- Functionsのメニューの「設定」を選択
- Environment Variablesに以下を設定
SLACK_INCOMING_WEBHOOK
:slackのWebhook用URL
- Environment Variablesに以下を設定
- 「Save」
Functionの作成
-
Functionsのメニューの「管理」を選択
-
「+」マークで新規作成
-
FUNCTION NAME:適当
-
PATH:適当
-
ACCESS CONTROL:
Check for valid Twilio signature
にチェック -
EVENT:
Select...
-
CODE:
const url = require('url'); const https = require('https'); exports.handler = function(context, event, callback) { const text = ` FAXを受信しました。 <${event['MediaUrl']}|here> From: ${event['From']} To: ${event['To']}`.replace(/^\s+/mg, ''); const message = { text: text } const body = JSON.stringify(message); const options = url.parse(context.SLACK_INCOMING_WEBHOOK); options.method = 'POST'; options.headers = { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(body), }; const postReq = https.request(options, (res) => { const chunks = []; res.setEncoding('utf8'); res.on('data', (chunk) => chunks.push(chunk)); res.on('end', (callback) => { var response = { statusCode: 200, headers: {}, body: "" }; if (res.statusCode >= 400) { response.statusCode = res.statusCode; response.body = `Error posting message to Slack API: ${res.statusCode} - ${res.statusMessage} - ${chunks.join('')}`; } callback(null, response); }); return res; }); postReq.on('error', (e) => { console.error(`Problem with request: ${e.message}`); }); postReq.write(body); postReq.end(callback); }
-
「Create」
-
編集画面に戻って、Properties->PATHをCopyしておく
TwiML Binの作成
-
メニューから「TwiML Bins」を選択
-
「+」マークで新規作成
-
TwiML Bin作成画面にて、
- FRIENDLY NAME:適当。日本語可
- TWIML:
<?xml version="1.0" encoding="UTF-8"?> <Response> <Receive action="Functionの作成の9.でコピーしたURLをペースト" method="POST"/> </Response>
-
「Create」
Programmable Voice
- メニューから「Phone Numbers」を選択
- 「+」マークで電話番号を新規購入
- COUNTRY:
Japan
- 機能:
Fax
にチェック
- COUNTRY:
- 電話番号から設定画面を開き、必要な設定を行う
- ACCEPT INCOMING:
Faxes
- CONFIGURE WITH:
Webhooks, TwiML Bins, Functions, Studio, or Proxy
- A FAX COMES IN:
TwiML Bin
- TwiML Binの作成の3.にて設定したFRIENDLY NAMEを選択
- ACCEPT INCOMING:
- 「Save」
動作確認
-
slackに以下のようなメッセージが投稿されること
FAXを受信しました。 here From: +81ぺけぺけ To: +8150ぺけぺけ
-
hereがリンクになっており、FAX内容がPDF参照できること
蛇足と言うか、補足
- 肝はTwilioのFunction機能を使うところなので、ここをうまい具合に実装すれば、メール転送するとかストレージにダウンロードするとか、できるのだろう。きっと。
- NTTボイスワープ for FAX