Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
TwilioとStripeを使った従量課金サービスの裏側
Search
tetsuco9
May 20, 2019
Programming
0
1.5k
TwilioとStripeを使った従量課金サービスの裏側
「1分100円からビジネス相談可能な」通話課金機能の開発のお話。
tetsuco9
May 20, 2019
Tweet
Share
Other Decks in Programming
See All in Programming
Azure SRE Agentで運用は楽になるのか?
kkamegawa
0
2.2k
print("Hello, World")
eddie
2
530
Laravel Boost 超入門
fire_arlo
3
210
複雑なドメインに挑む.pdf
yukisakai1225
5
1.2k
250830 IaCの選定~AWS SAMのLambdaをECSに乗り換えたときの備忘録~
east_takumi
0
390
旅行プランAIエージェント開発の裏側
ippo012
2
910
Deep Dive into Kotlin Flow
jmatsu
1
340
もうちょっといいRubyプロファイラを作りたい (2025)
osyoyu
1
430
Putting The Genie in the Bottle - A Crash Course on running LLMs on Android
iurysza
0
140
モバイルアプリからWebへの横展開を加速した話_Claude_Code_実践術.pdf
kazuyasakamoto
0
330
AIでLINEスタンプを作ってみた
eycjur
1
230
概念モデル→論理モデルで気をつけていること
sunnyone
2
170
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.9k
GraphQLの誤解/rethinking-graphql
sonatard
72
11k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
112
20k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Six Lessons from altMBA
skipperchong
28
4k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Agile that works and the tools we love
rasmusluckow
330
21k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Transcript
TwilioとStripeを使っ た従量課金サービス の裏側
昨年8月に出したサービスの開 発秘話をお届けします。 2
村上哲平@tetsuco9 □ 年 株式会社ビザスク ▪ 新卒入社 □ 年 千葉大学 卒業
□ 年 株式会社ビザスク ▪ インターン 3
4 □ 通話課金機能の概要 □ Twilio・Stripeを使った実装 □ まとめ アジェンダ
1. 通話課金機能の概要 5
6 □ 電話相談の一部が対象で、謝礼金額は1分 あたり100~1,000円で設定 □ 現状の1時間単位から小刻みにし、短時間 の利用や時間を気にせずに相談したい人の 需要に答える 通話課金機能とは プレスリリースより抜粋
https://service.visasq.co m/issues/new から使えます!
7 通話課金機能とは 着想 従来のスポットコンサルは、 事前に所要時間と金額を決める必要がある → 柔軟に決められるようにしたい → 従量課金にすればよいのでは?
8 □ 相談した時間を計測する必要がある ▪ ストップウォッチで測るわけにもいかない。。 □ 事前決済から事後決済になる ▪ ちゃんと払ってもらえなかったらどうしよう。。 従量課金にするためには何
が必要?
9 □ 相談した時間を計測する必要がある ▪ ストップウォッチで測るわけにもいかない。。 ▪ => 電話API Twilioを活用 □
事前決済から事後決済になる ▪ ちゃんと払ってもらえなかったらどうしよう。。 ▪ => 仮売上の仕組みを活用 従量課金にするためには何 が必要?
10 □ エンジニア主導で企画~実装まで担当 ▪ ディレクターとエンジニアの2名体制 ▪ 企画・技術選定からローンチまで約3ヶ月 このプロジェクトについて
2. Twilio・Stripeを使った実装 11
12 □ 050の番号一つで複数の電話転送が可能 □ twimlをかくことで、通話を強制的に切ったり、音声メッセー ジを流したりすることができる Twilio Voiceの仕組み
13 予約から請求までの流れ 正常系 通話予約 通話完了
14 キャンセル料分の確保 □ stripe.Charge.creat e(capture=False) で 与信だけ通す ▪ キャンセル 料分を確保
□ 確保期間が7日
15 予約から請求までの流れ 通話予約 通話完了
16 通話開始から終了までの流れ
17 TwiMLで転送
18 TwiMl 転送 (Pythonコード)
19 Callログの保存 リクエストパラメーター CallSid AccountSid From To CallStatus CallDuration ApiVersion
Direction ForwardedFrom CallerName ParentCallSid queued ringing in-progress completed busy failed no-answer canceled □ ログは基本的に 受け取ったもの をそのままDBに 保存 □ 実際、使ってい るのは赤字のも の
20 重複請求の回避 □ Cronで5分おきにステータスを確認 □ stripe.Charge.create(idempotency_key={案件 ごとにユニークな文字列}) ▪ ベキ等性の保証 □
[別件で発見]失敗レスポンスを受け取った場合 に、カードや金額を変えて再度決済しようとすると 「keyは同じだがリクエスト内容が異なる」エラーが 発生する ▪ Stripe側のkey保持期限は24時間
21 通話を強制終了する □ 1回の通話には2種類(inbound, outbound)のcallオブジェク トが存在する □ 両者に聞こえるように音声メッセージを出そうとすると別機能 (Twilio conference)が必要
□ リダイレクトして依頼者のみに音声メッセージが流れるように 実装 redirect
3. まとめ 22
23 □ Twilio便利! ▪ 電話をWeb技術でハックする感覚が新鮮 □ 録音は別料金がかかる ▪ いずれオプション機能をつくりたい □
[リリース後のトラブル]skypeで取得した050の番号で かけても転送できない □ 決済まわりは、一見シンプルな要件にみえても考えるこ とがたくさん ▪ 経理チームなど部署間の連携も必要になって くる ポイント まとめ
24 □ (組織にとって)、新しい技術を触ることは大きな学 び □ 何よりエンジニアにとって楽しい □ 時には、好奇心ドリブンで新しいプロジェクトを始 めてみては? 最後に
メッセージ
25 □ Twilio Docs ▪ https://jp.twilio.com/docs/voice/twiml#request-parameters □ 『仮売上の仕組みを使って予約フローを改善した 話』 ▪
https://blog.spacemarket.com/code/improve-reservation-flow-using-un captured-charge/ 参照
Credits Special thanks to all the people who made and
released these awesome resources for free: □ Presentation template by SlidesCarnival □ Photographs by Unsplash 26