Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Twilio Liftoff for Japan Part 2: Twilioアプリケーションの開発 / Twilio Liftoff Japan Part 2: Twilio App Development

Twilio Liftoff for Japan Part 2: Twilioアプリケーションの開発 / Twilio Liftoff Japan Part 2: Twilio App Development

Neri78

May 19, 2021
Tweet

More Decks by Neri78

Other Decks in Technology

Transcript

  1. © 2020 TWILIO INC. ALL RIGHTS RESERVED. © 2020 TWILIO

    INC. ALL RIGHTS RESERVED. 自己紹介 池原 大然 Developer Evangelist @ Twilio Email: [email protected] Twitter/Twitch/GitHub: “Neri78” Twitch Twitter GitHub
  2. © 2020 TWILIO INC. ALL RIGHTS RESERVED. Liftoffとは? 1 2

    3 Twilio アプリケーションの 開発 スケーラビリティ Twilio入門
  3. © 2020 TWILIO INC. ALL RIGHTS RESERVED. 本日カバーする内容 Part 1のふりかえり

    Twilioアプリケーションの セキュリティ Twilioを用いた動的な体験の構築 1 2 3 4 Part 2:まとめ
  4. © 2020 TWILIO INC. ALL RIGHTS RESERVED. © 2020 TWILIO

    INC. ALL RIGHTS RESERVED. Part 1のふりかえり https://www.twilio.com/go/liftoff-stage1-dev-webinar-Japan-1
  5. © 2020 TWILIO INC. ALL RIGHTS RESERVED. © 2020 TWILIO

    INC. ALL RIGHTS RESERVED. TwiML Twilio Markup Language 「動詞」と「名詞」 XML構文 Twilioの動作を指定 Twilio独自のタグを定義 音声またはメッセージの応答 TwiMLを使って構築できる
  6. © 2020 TWILIO INC. ALL RIGHTS RESERVED. Twilioとやりとりを行う方法 主に3つの方法を紹介 TwiML

    Twilioへの命令構文 webhook Twilioから発生する コールバックリクエスト API コール コードでTwilioの サービスを呼び出し </> API
  7. © 2020 TWILIO INC. ALL RIGHTS RESERVED. © 2020 TWILIO

    INC. ALL RIGHTS RESERVED. 音声着信 Twilioから リクエストを送信 Twilioが提供する電話番号 例: 050-xxxx-xxx アプリケーションの 応答 (TwiML) <?xml version="1.0" encoding="UTF-8"?> <Response> <Say language="ja-jp">こんにちは世界</Say> </Response> TwiMLをもとに 応答 “こんにちは世界”
  8. © 2020 TWILIO INC. ALL RIGHTS RESERVED. © 2020 TWILIO

    INC. ALL RIGHTS RESERVED. Twilioアプリケーションの セキュリティ
  9. © 2020 TWILIO INC. ALL RIGHTS RESERVED. © 2020 TWILIO

    INC. ALL RIGHTS RESERVED. Beware the Hackers
  10. © 2020 TWILIO INC. ALL RIGHTS RESERVED. © 2020 TWILIO

    INC. ALL RIGHTS RESERVED. Webアプリケーション(サーバー)Twilio のみが Webhookエンドポイントに アクセスする Twilioアカウント アカウントおよび APIクレデンシャルを 安全な場所に保存 Place any kind of visual or photo here Place any kind of visual or photo here
  11. © 2020 TWILIO INC. ALL RIGHTS RESERVED. © 2020 TWILIO

    INC. ALL RIGHTS RESERVED. Twilioアカウントの安全性 アカウントおよびAPIクレデンシャルの安全性を常 に高める APIキーの利用 二要素認証を有効化 APIキーは複数作成できる = 必要に応じて破棄できる 2020年10月より必須 クレデンシャルを公開しない ソースコードへの埋め込み、環境変数ファイルの公開を行 わない
  12. © 2020 TWILIO INC. ALL RIGHTS RESERVED. © 2020 TWILIO

    INC. ALL RIGHTS RESERVED. Webアプリケーション(サーバー)をセキュアに Webhookエンドポイントにアクセスできる リクエストを制御する リクエスト署名を検証 HTTP認証の利用 X-Twilio-Signature ヘッダに含まれているURLの ハッシュ、パラメーター、AuthTokenを活用し検証 TwilioはHTTP基本、ダイジェスト認証をサポート
  13. © 2020 TWILIO INC. ALL RIGHTS RESERVED. © 2020 TWILIO

    INC. ALL RIGHTS RESERVED. HTTP認証 webhookにTwilioのみがアクセス Twilio: HTTP基本、ダイジェスト認証をサポート webhook URLにユーザー名、パスワードを埋め込み HTTP認証をサーバーに追加
  14. © 2020 TWILIO INC. ALL RIGHTS RESERVED. © 2020 TWILIO

    INC. ALL RIGHTS RESERVED. HTTP認証 webhookにTwilioのみがアクセス TwilioはwebhookリクエストにコンテンツとAuth Tokenを用いて署名している アプリケーション側で同じ署名を生成し、X-Twilio-Signatureヘッダと 比較することでリクエストを検証 リクエスト署名を検証
  15. © 2020 TWILIO INC. ALL RIGHTS RESERVED. © 2020 TWILIO

    INC. ALL RIGHTS RESERVED. 1. Twilio電話番号で指定したリクエストURL 2. POSTリクエストの場合、全てのパラメータを英字順にソート 3. ソート済みのPOSTパラメータについてそれぞれ名前、値をURL末尾に追加 4. Twilio Auth TokenをキーとしてHMAC-SHA1でハッシュ計算 5. ハッシュの値をBase64でエンコード HTTP認証 webhookにTwilioのみがアクセス X-Twilio-Signature headerの検証方法
  16. © 2020 TWILIO INC. ALL RIGHTS RESERVED. © 2020 TWILIO

    INC. ALL RIGHTS RESERVED. Twilioライブラリを使用し複雑な処理を簡略化 HTTP認証 webhookにTwilioのみがアクセス X-Twilio-Signature headerの検証方法
  17. © 2020 TWILIO INC. ALL RIGHTS RESERVED. © 2020 TWILIO

    INC. ALL RIGHTS RESERVED. X-Twilio-Signature headerの検証 // 検証に利用する値 const url = "https://example.com"; const params = req.body; const authToken = process.env.TWILIO_AUTH_TOKEN; const signature = req.headers['x-twilio-signature']; // リクエストを検証 if (twilio.validateRequest(authToken, signature, url, params)) { // 通常の処理を実装 } else { res.status(401).send('not authorized'); } https://www.twilio.com/docs/usage/tutorials/how-to-secure-yo ur-express-app-by-validating-incoming-twilio-requests
  18. © 2020 TWILIO INC. ALL RIGHTS RESERVED. © 2020 TWILIO

    INC. ALL RIGHTS RESERVED. Twilioを用いた 動的な体験の構築
  19. © 2020 TWILIO INC. ALL RIGHTS RESERVED. © 2020 TWILIO

    INC. ALL RIGHTS RESERVED. アプリケーションの種類 Twilioを用いたアプリケーションを構築するにあたり検討す べき項目 コミュニケーションのトリガー 通知と対話 自社(サービス)または顧客、 どちらが起点となるのか 単一方向(1-way)と双方向(2-ways)のどちらを 実現するものなのか 利用するチャネル 単一、複数チャンネル、何を利用するのか
  20. © 2020 TWILIO INC. ALL RIGHTS RESERVED. © 2020 TWILIO

    INC. ALL RIGHTS RESERVED. 予約の記録 例: 電話で来場時間を予約 5月20日午後1時を予約 “05201300” を入力 入力された値を元に 予定を追加 予約時間を音声で通知
  21. © 2020 TWILIO INC. ALL RIGHTS RESERVED. © 2020 TWILIO

    INC. ALL RIGHTS RESERVED. Let’s Build!
  22. © 2020 TWILIO INC. ALL RIGHTS RESERVED. © 2020 TWILIO

    INC. ALL RIGHTS RESERVED. 予約状況 の確認 例: 予定を送信 バッチ処理 予約時間をSMSで一斉配信
  23. © 2020 TWILIO INC. ALL RIGHTS RESERVED. © 2020 TWILIO

    INC. ALL RIGHTS RESERVED. Let’s Build!
  24. © 2021 TWILIO INC. ALL RIGHTS RESERVED. AI: 人工知能、CDP: 顧客データプラットフォーム、

    SDK: ソフトウェア開発キット、 CLI: コマンドラインインタフェース Super Network コミュニケーション・インフラ Segment CDP 顧客データ・インフラ 主要インフラストラクチャ サービス ソリューションプラットフォーム AI/機械学習 デジタルチャネル ローコード & ノー コード サービス アイデンティティ Editions ガバナンス SDK CLI Debugger 各種リソース プログラム Voice SMS/Messaging Email Video Phone Numbers Interconnect Short Codes Segment Connections Segment Personas Context Store Event Streams 開発者向け ツール アクセス制御 データの復元力 ユーザ同意の管理 Data classification 管理 & ガバナンス 洞察・知見 Functions Assets Audience Predictions Language Intelligence Individualized Sending Studio TaskRouter Authy Verify Lookup Data Edition Admin Edition Security Edition Enterprise Edition Sync コンタクトセンター Twilio Flex フィールドサービス自動化 Frontline Eメール キャンペーン Marketing Campaigns SIP Trunking IoT Conversations Facebook Messenger WhatsApp 他の製品と組み合わせてより簡単に、より複雑に
  25. © 2020 TWILIO INC. ALL RIGHTS RESERVED. © 2020 TWILIO

    INC. ALL RIGHTS RESERVED. クロージング
  26. © 2020 TWILIO INC. ALL RIGHTS RESERVED. © 2020 TWILIO

    INC. ALL RIGHTS RESERVED. Twilioの利用開始方法 • トライアルアカウントを作成する方法 https://www.twilio.com/blog/how-to-create-twilio-account-jp
  27. © 2020 TWILIO INC. ALL RIGHTS RESERVED. © 2020 TWILIO

    INC. ALL RIGHTS RESERVED. リソース • Liftoffシリーズで使用しているサンプルコード https://github.com/neri78/twilio-liftoff-jp • Twilioハンズオンシリーズ https://github.com/neri78?tab=repositories&q=twilio+handson • 日本語Blog記事 https://www.twilio.com/blog/tag/japanese • Twitter: @twiliojapan • 営業へのお問い合わせ https://www.twilio.com/japan/help/sales