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.6k
TwilioとStripeを使った従量課金サービスの裏側
「1分100円からビジネス相談可能な」通話課金機能の開発のお話。
tetsuco9
May 20, 2019
Tweet
Share
Other Decks in Programming
See All in Programming
コードレビューをしない選択 #でぃーぷらすトウキョウ
kajitack
3
940
AIとペアプロして処理時間を97%削減した話 #pyconshizu
kashewnuts
1
230
SourceGeneratorのマーカー属性問題について
htkym
0
190
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
320
Unity6.3 AudioUpdate
cova8bitdots
0
130
Swift ConcurrencyでよりSwiftyに
yuukiw00w
0
260
AWS Infrastructure as Code の新機能 2025 総まとめ 〜SA 4人による怒涛のデモ祭り〜
konokenj
10
3.3k
CDIの誤解しがちな仕様とその対処TIPS
futokiyo
0
210
grapheme_strrev関数が採択されました(あと雑感)
youkidearitai
PRO
1
220
CSC307 Lecture 14
javiergs
PRO
0
470
DevinとClaude Code、SREの現場で使い倒してみた件
karia
1
1k
20260313 - Grafana & Friends Taipei #1 - Kubernetes v1.36 的開發雜記:那些困在 Alpha 加護病房太久的 Metrics
tico88612
0
180
Featured
See All Featured
Paper Plane (Part 1)
katiecoart
PRO
0
5.5k
The Language of Interfaces
destraynor
162
26k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
14k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.2k
Building an army of robots
kneath
306
46k
Exploring anti-patterns in Rails
aemeredith
2
290
KATA
mclloyd
PRO
35
15k
My Coaching Mixtape
mlcsv
0
71
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
280
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