statusCallback
、あるいは類似したプロパティにコールバックURLを設定することでアプリケーション側にログを通知し、分析やエラー処理を行えるようになっています。mkdir event-stream-destination cd event-stream-destination npm init --y
npm i express
index.js
ファイルを作成し、次のコードを追加します。const express = require('express'); // expressサーバーアプリケーションを初期化 const app = new express(); // JSONリクエストを処理するためのミドルウェアを追加 app.use(express.json()); // /eventに対しての全てのリクエストをハンドル app.all('/events', (req, res) => { const events = req.body; console.log(events); res.sendStatus(200); }); // Expressサーバーアプリケーションとngrokを起動し、外部からアクセス可能にする app.listen(3000, () => console.log('Listening Port 3000...'));
index.js
ではExpressサーバーを初期化し、/events
ルートを実装しています。/events
ルートではリクエストのbody
をコンソールに出力し、ステータスコード200
を返します。3000
番でリクエストを待つように実装しています。node index.js
http://localhost:3000/events
をブラウザーで開き、OK
と出力されることを確認します。$ ngrok http 3000
/events
(画像の例ではhttps://49149f5418d7.ngrok.io/events
)をブラウザーで開き、先ほどと同じ結果が得られることを確認しましょう。このURLはEvent Streamsの設定に必要になります。ngrokを再起動するとURLが変更されてしまうため、以後、チュートリアルを完了するまで ngrokを起動したまま にしておいてください。Sink
と呼ばれるイベントの配信先を作成する必要があります。これまではTwilio CLIを用いて各種設定を行う必要がありましたが、先日、新しいコンソールから直感的に設定できるようになりました。Event Streams
を選択します。Create new sink
ボタンをクリックし、新しいSinkを作成します。Sink tutorial
、Webhook
を設定・選択します。Next step
ボタンをクリックするとWebhook Sinkの設定画面に遷移します。この画面ではそれぞれ次の設定を行えます。 項目名 | 説明 | 設定値 |
Destination | イベントの配信先 | 先ほどngrokによって生成されたURL/events |
Method | Destinationにイベントを送信する際のリクエストメソッド | POST |
Batch | イベントをまとめて (Batchで) 送信するかどうか | True |
Finish
ボタンをクリックするとSinkが作成されます。ここでダイアログが表示され、Validate sink connection
をクリックするとSinkへの接続をテストできます。Destination
にイベントが送信されているかどうかを確認できます。Send test event
ボタンをクリックするとテストイベントが発行されます。実行中のExpressサーバーアプリケーションでテストイベントが出力されていることを確認してください。test_id
の値を先ほどの接続確認ページのTest event ID
フィールドに入力し、Validate connection
ボタンをクリックすると検証が行われます。test_id
が正しいものである場合は接続確認が完了します。Create subscription
ボタンをクリックしイベントの購読設定を行います。Subscription description
フィールドに任意の名前を入力し、次にどのイベントを購読するかを設定します。Messaging
のMessage
についてApply schema version to all
項目を1
と設定します。Create Subscription
ボタンを押して設定を反映します。Buy a number
ボタンをクリックします。SMS
を提供している番号を一つ購入します。npm i twilio
sendSMS.js
ファイルを作成し次のコードを追加します。const twilio = require('twilio'); // Twilioコンソールから資格情報を取得 const account_sid = '<Account Sid>'; const auth_token = '<Auth Token>'; // 購入したTwilio番号 E.164フォーマット const twilio_number = '+1xxxxxxxxxxx'; // SMS送信先の電話番号 E.164フォーマット const my_number = '+81xxxxxxxxxx'; //Twilioクライアントを初期化 const client = new twilio(account_sid, auth_token); //SMSを送信 client.messages.create({ from: twilio_number, to: my_number, body: 'Event Streamsのテストメッセージです。' }).then(message => console.log(message.sid));
account_sid
とauth_token
に入力する値はTwilioコンソールで確認できます。twilio_number
には先ほど購入したSMS送信可能なTwilio番号を、my_number
には検証済みの送信先電話番号をそれぞれE.164フォーマットで入力します。node sendSMS.js
com.twilio.messaging.message.sent
とcom.twilio.messaging.message.delivered
イベントが配信されていることを確認できます。