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 Flexで通話録音を実装した話
Search
Katsumi Takahashi
June 30, 2022
Technology
0
140
Twilio Flexで通話録音を実装した話
2020/6/30に開催された Twilio UG JPイベントで使用した資料となります。
Katsumi Takahashi
June 30, 2022
Tweet
Share
More Decks by Katsumi Takahashi
See All by Katsumi Takahashi
kintone × CPaaS でDXを実現しよう
mobilebiz
0
25
「赤い芸人」養成講座
mobilebiz
0
950
CCAI + TwilioFlexを日本語で実装した話
mobilebiz
0
100
LINE RevUp 2022 - TwilioVideo
mobilebiz
0
630
昭和な上司に承認なう
mobilebiz
0
130
「赤い芸人」養成講座
mobilebiz
0
710
Twilio Super SIMを使ってみた
mobilebiz
0
1.2k
Twilio紹介資料(NRIハッカソン2021)
mobilebiz
0
110
ニューノーマルなコミュニケーション
mobilebiz
1
310
Other Decks in Technology
See All in Technology
コードを書く隙間を見つけて生きていく技術/Findy 思考の現在地
fujiwara3
27
5.8k
KubeCon EU 2024 Recap “Kubernetes Policy Time Machine: Where to Next?”
ryysud
0
200
ゼロから始めるVue.jsコミュニティ貢献 / first-vuejs-community-contribution-link-and-motivation
lmi
0
110
LLM とプロンプトエンジニアリング/チューターをビルドする / LLM and Prompt Engineering and Building Tutors
ks91
PRO
0
250
NgRx Signal Store
rainerhahnekamp
0
140
ワールドカフェI /チューターを改良する / World Café I and Improving the Tutors
ks91
PRO
0
120
VS CodeでAWSを操作しよう
smt7174
7
1.6k
ChatGPT for IT Service Management (IT Pro)
dahatake
7
1.5k
On Your Data を超えていく!
hirotomotaguchi
2
650
Meta Quest 3 で動く桜マシマシ WebXR アプリを IBM Cloud Code Engine と Babylon.js で作った話
1ftseabass
PRO
0
120
GraphQL 成熟度モデルの紹介と、プロダクトに当てはめた事例 / GraphQL maturity model
mh4gf
7
1.3k
Postman v10リリース後を振り返る
nagix
0
170
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
42
12k
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3k
KATA
mclloyd
15
12k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
322
20k
Fantastic passwords and where to find them - at NoRuKo
philnash
37
2.5k
A Philosophy of Restraint
colly
197
16k
Facilitating Awesome Meetings
lara
42
5.6k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
9
8.3k
Become a Pro
speakerdeck
PRO
11
4.5k
Principles of Awesome APIs and How to Build Them.
keavy
121
16k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
357
22k
Transcript
גࣜձࣾ,%%*Σϒίϛϡχέʔγϣϯζ 5XJMJPΤόϯδΣϦετߴڮࠀݾ 5XJMJP'MFYͰ௨ԻΛ࣮ͨ͠ ൃ৴࣌ͷ௨ҙ֎ͱϋʔυϧߴ͠
גࣜձࣾ,%%*Σϒίϛϡχέʔγϣϯζ ϚʔέςΟϯάຊ෦ ΤόϯδΣϦετ Katsumi Takahashi facebook: katsumi.takahashi Twitter: _katsumi github:
mobilebiz qiita: mobilebiz #赤い芸人 ⾃⼰紹介 6(ΠϕϯτͰͷొஃͻ͞͠ͿΓʔὑ
5XJMJP'MFYͱ
5XJMJP'MFY ϑϧΧελϚΠζ͕ՄೳͳίϯλΫτηϯλʔιϦϡʔγϣϯ 5XJMJPͷ֤छαʔϏεΛΈ߹Θͤͨίϯ λΫτηϯλʔͷ౷߹ιϦϡʔγϣϯɻ طଘͷ֤छ"1*ʹՃ͑ͯɺ'MFY6*͕όϯ υϧ͞Εɺ͙͢ʹ͍࢝ΊΔ͜ͱ͕Ͱ͖ Δ͚ͩͰͳ͘ɺϑϧΧελϚΠζ͕Մೳ Ͱ͢ɻ ֤छσʔλΛੳ͢ΔͨΊͷ'MFY*OTJHIU แؚ͞Ε͍ͯ·͢ɻ
5XJMJP'MFYͱ Ϋϥυ
5XJMJP'MFYͷར ϑϧΧελϚΠζՄೳͳΫϥυίϯλΫτηϯλʔιϦϡʔγϣϯ • 1席から5万席まで対応できるスケーラビリティ • ビデオだけでなく、電話やチャット、SMS、メールなどにも対応 • 電話やSMSを使わなければ、ほぼFlexの利⽤料⾦だけで運⽤可能 • ACDの設定変更やUIの改良など、常に進化させていくことができる
• 業務をシステムに合わせるのではなく、システムを業務に合わせよう 5XJMJP'MFYͱ
'MFYͷར༻ྉ ੮PS࣌ؒʹΑΔ՝ۚϞσϧ τϥΠΞϧΞΧϯτͰɺԁͷϙΠϯτ͕༩͞Ε·͢ɻ ΞΧϯτΛΞοϓάϨʔυ͢Δ͜ͱͰɺ ࣌ؒͷ'MFYར༻Λར༻Ͱ͖ΔΑ͏ʹͳΓ·͢ɻ ༗ྉϓϥϯʢԼهࢀরʣʹΓସ͑Δͱɺ'MFY*OTJHIU͕ར༻Ͱ͖·͢ɻ·ͨɺΓସ͑ޙ ࣌ؒҾ͖ܧ͕ Ε·ͤΜɻ 'MFYͷྉۚʹɺి൪߸ར༻ྉɺൃண৴ྉɺ4.4ૹड৴ྉҎ֎ͷඅ༻ؚ͕·Ε·͢ʢҰ෦ؚ·Εͳ͍ͷ͍͟͝ ·͢ʣɻి൪߸ར༻ྉͳͲҎԼͷͱ͓ΓͰ͢ɻ
5XJMJP'MFYͱ ݄ʙ
%&.0 4BMFTGPSDF 5XJMJP'MFY 5XJMJP'MFYͱ
5XJMJP'MFYʹ͓͚Δ௨Ի
ண৴ʹର͢Δ௨Ի 4JOHMFνϟωϧͰͷԻ w ཧίϯιʔϧ্Ͱઃఆ͢Δ ͜ͱ͕Մೳɻ w 'MFY*OTJHIUTͰͷԻ֬ೝ Ͱ͖·͢ɻ w Ի4JOHMFνϟωϧʢϞϊ
ϥϧʣʹͳΓ·͢ɻ ண৴࣌ͷ௨
ண৴ʹର͢Δ௨Ի %VBMνϟωϧͰͷԻ w 4UVEJPϑϩʔͰ$BMM3FDPSEJOH %VBM Λ։࢝ w 4FOE$BMM5P"HFOUͰ"UUSJCVUFTʹΛઃఆ ͢Δ͜ͱͰ'MFY*OTJHIUTʹදࣔՄೳ ৄ͘͠ɺIUUQTXXXUXJMJPDPNEPDT
fl FYEFWFMPQFSJOTJHIUTFOBCMFEVBMDIBOOFMSFDPSEJOHT ண৴࣌ͷ௨
ൃ৴ͷ௨Ͳ͏͢Δʁ μΠϠϧύουͰൃ৴࣌ɺ4UVEJPϑϩʔܦ༝͠ͳ͍ ཧίϯιʔϧ͔Β'MFY%JBMQBEΛ༗ޮԽ͢Δ͜ͱ͕Ͱ͖·͢ %JBMQBE͕༗ޮʹͳ͍ͬͯΔͱɺը໘্෦ʹΞΠίϯ͕දࣔ͞Ε·͢ ൃ৴࣌ͷ௨
1MVHJOͰରԠͰ͖ͦ͏ʂ 5XJMJPͷαϙʔτϖʔδʹͦΕΒ͖͠هࡌ w "DUJPO'SBNFXPSLͰɺ "DDFQU5BTLΠϕϯτΛ)PPL w QBZMPBEҾʹ͋Δ DPOGFSFODF0QUJPOTSFDPSE ΛUSVFʹ͢ΔͱԻͰ͖Δ w
$POGFSFODFͷԻػೳΛͬ ͯԻ͢Δख๏ͳͷͰɺ%VBM ʹରԠͰ͖ͳ͍͠ɺ*OTJHIUTʹ ग़ͯ͜ͳ͍ʢٽʣ IUUQTTVQQPSUUXJMJPDPNIDFOVTBSUJDMFT$BMM3FDPSEJOHXJUI5XJMJP'MFY ൃ৴࣌ͷ௨
࣌ؒΛඅ͠ɺ ৺͕ંΕͦ͏ʹͳΔ ൃ৴࣌ͷ௨
ͦ͏ͩʂ3FDPSEJOH"1*Λ͓͏ 3FDPSEJOH"1*Ͱɺ௨தͷίʔϧʹରͯ͠%VBMԻ͕Ͱ͖Δʂ ඞཁͳͷ$BMM4JE ͖͞΄Ͳͷϔϧϓهࣄʹ͋ͬͨɺ"DUJPO'SBNFXPSLΛ͑5BTLͷใ͕ͱΕΔ͔ Βɺ͔ͦ͜ΒDPOGFSFODF͕औΕͯɺඞવతʹ$BMM4JEऔΕΜ͡ΌͶʁ ൃ৴࣌ͷ௨
"DUJPO'SBNFXPSLͱ 'MFY6*Λߏ͢ΔҰͭͷ෦ ൃ৴࣌ͷ௨
"DUJPO'SBNFXPSL 'MFY্ͷಈ࡞Λఆ͍ٛͯ͠ΔϑϨʔϜϫʔΫ 'MFY6*ৗʹΠϕϯτσʔλΛൃ৴͠ɺϢʔβ ʔ͕'MFY6*ͱͲͷΑ͏ʹ૬ޓ࡞༻͍ͯ͠Δ͔Λ هड़͍ͯ͠·͢ɻϓϥάΠϯΛ࡞͢Δࡍɺ "DUJPOT'SBNFXPSLΛ༻͢Δͱɺ͜ΕΒͷ ΠϕϯτΛར༻͠ɺ'MFY6*$3.σʔλɺ· ͨͦͷଞͷσʔλΛͲͷΑ͏ʹมߋ͍͔ͨ͠ Λهड़͢ΔಠࣗͷϩδοΫΛఆٛ͢Δ͜ͱ͕Ͱ ͖·͢ɻΞΫγϣϯ͕ىಈ͢ΔલޙʹΠϕϯ
τΛొͨ͠ΓɺΞΫγϣϯͷಈ࡞Λஔ͖͑ ͨΓ͢Δ͜ͱՄೳͰ͢ɻ ൃ৴࣌ͷ௨ ͦ͏͔ʂ"DUJPOT'SBNFXPSLΛ͏ͱΠϕϯτΛ)PPLͰ͖ΔΜͩ
ͲΜͳ"DUJPO͕͋Δͷʁ υΩϡϝϯτ͕༏͘͠ڭ͑ͯ͘ΕΔ IUUQTBTTFUT fl FYUXJMJPDPNEPDTSFMFBTFT fl FYVJ"DUJPOTIUNM ͜ͷϖʔδʹɺ"DUJPO'SBNFXPSLͷ .FNCFS͕هࡌ͞Ε͍ͯΔɻ͜ΕΛΠ ϕϯτͱͯ͠ϑοΫ͢Δʹɺ
fl FY"DUJPOTBEE-JTUFOFS lCFGPSF"DDFQU5BTLz QBZMPBE \ ॲཧΛهࡌ^ .FNCFSͷ಄ʹBGUFSͱ͔CFGPSFΛͭ ͚ͯϦεφʔΛొ͢ΔͷͶɾɾ ൃ৴࣌ͷ௨
ͳΜͯΘ͔Γʹ͍͘Μͩʂ ൃ৴࣌ͷ௨
'MFY&WFOUͬͯͷ͋Δ ͬͪ͜ͷ΄͏͕ײతͩΑͶ ൃ৴࣌ͷ௨ w 'MFY&WFOUɺ'MFY.BOBHFSΛͬ ͯΠϕϯτΛ)PPL͢Δ͜ͱ͕Ͱ͖Δ ΈΒ͍͠ w ͔͠͠ɺ5BTLʹؔ͢ΔΠϕϯτఆ ٛ͞Ε͍ͯͳ͍
w ݁ہ"DUJPOT'SBNFXPSLΛ͏͠ ͔ͳ͍
'MFY6*7FS͍͍̎ͧʔ 'MFY&WFOUT͕֦ு͞Εͯɺ5BTLपΓͷΠϕϯτऔΕΔʂ IUUQTBTTFUT fl FYUXJMJPDPNEPDTSFMFBTFT fl FYVJCFUB ൃ৴࣌ͷ௨
ؾΛऔΓͯ͠ɺ"DDFQU5BTL ͦͦΠϕϯτϦεφʔͲ͜ʹॻ͘ʁ ൃ৴࣌ͷ௨ ϓϥάΠϯͷҰ൪࠷ॳʹ࣮ߦ͞ΕΔ JOJUϝιουͰఆٛͪ͠Ό͓͏
QBZMPBEͷதʁ υΩϡϝϯτʹ͜͏ॻ͔Ε͍ͯΔ w DPOGFSFODF0QUJPOTɺલड़ͷ௨Γ%VBMͰͷ ௨ʹ͔ͭ͑ͳͦ͞͏ɻ w ٯʹUBTL͕औಘͰ͖Εɺண৴࣌ͷॲཧͱಉ༷ ʹɺԻ༻ͷ"UUSJCVUFTՃͰ͖Δ͠ɺ৭ʑ ͱͰ͖ͦ͏ɻ w
ͦͦUBTLʹԿ͕ೖ͍ͬͯΔͷ͔ௐΔඞ ཁ͕͋Δɻ ൃ৴࣌ͷ௨
QBZMPBEUBTLDPOGFSFODFΛऔಘ DPOGFSFODF͕Ͱ͖ΔλΠϛϯάগ͍͠ͷͰҙ ൃ৴͔Ͳ͏͔ɺBUUSJCVUFTEJSFDUJPOΛఆ DPOGFSFODF͕Ͱ͖Δ·ͰΣΠςΟϯά ൃ৴࣌ͷ௨
DPOGFSFODFͷϝϯόʔΛऔಘ ૬ख͕Ԡ͔ͯ͠Βϝϯόʔ͕֬ఆ͢ΔͷͰɺ͜͜ͰΠϕϯτϑοΫ JUFN"EEFEΠϕϯτΛϑοΫ JUFNEFTDSJQUPSLFZ͕DBMM4JE 'VODUJPOTΛݺͼग़ͯ͠௨։࢝ ൃ৴࣌ͷ௨ !TTU@C͞Μͷ2JJUBͷهࣄΛࢀߟʹ͠·ͨ͠ʂ IUUQTRJJUBDPNTTU@CJUFNTFFGBCE
ͳͥ'VODUJPOTʁ 'MFY6*͔Β3FDPSEJOH"1*Λݺͳ͍ཧ༝ • Flex Plugins のコードはブラウザ上で実⾏される • Flex Plugins で
Twilio API を呼ぼうとすると、認証情報をソースに書かなく てはならない • ソースを解析されると、API Keyなどが漏洩してしまう(これはマズい) • 認証情報を含む API アクセスは Functions に任せて、Plugins からは Functions を呼ぶようにする IUUQTXXXUXJMJPDPNEPDT fl FYEFWFMPQFSQMVHJOTDBMMGVODUJPOT ൃ৴࣌ͷ௨
'MFY*OTJHIUTͰ֬ೝ͍ͨ͠ ண৴࣌ͱಉ༷ʹɺUBTLBUUSJCVUFTʹΛઃఆ͢Δ ͜ͷลՃ͠ͳ͍ͱग़ͯ͘Εͳ͍ ൃ৴࣌ͷ௨
Ͱ͖ͨʂ ൃ৴࣌ͷ௨ Ͱ4BMFTGPSDF*OUFHSBUJPOͰಈ͔ͳ͍ɾɾɾ
$MJDLUP%JBMΛΞοϓάϨʔυ 'MFYͷ*OUFHSBUJPOϖʔδʹϚΠάϨʔγϣϯϘλϯ͕͋Δ ͜ΕͰ4BMFTGPSDF*OUFHSBUJPOͰ ൃ৴௨͕Ͱ͖ΔΑ͏ʹͳΓ·ͨ͠ʂ ൃ৴࣌ͷ௨
(JU)VCʹ͋͛ͯ͋Γ·͢ IUUQTHJUIVCDPNNPCJMFCJ[QMVHJOPVUCPVOESFDPSEJOH ൃ৴࣌ͷ௨
%&.0 4BMFTGPSDF 5XJMJP'MFY ൃ৴࣌ͷ௨
I can’t wait to see what you build a flex
plugin! 5IBOLZPV