Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
外部サービス連携で学んだこと 〜メール編〜
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
otsuka
November 29, 2023
Technology
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
外部サービス連携で学んだこと 〜メール編〜
otsuka
November 29, 2023
Other Decks in Technology
See All in Technology
音声コミュニティを守るAI監視基盤_ 90%以上の入力削減を支えたServerless設計と運用判断
shuheioka123
0
120
地方移住と都心キャリアの両立は「金・時間・人」のリソースをフル活用すれば実現できる!〜Snowflake女子会 vol.8
snowwmn0824
0
130
認知負荷を吸収し、プロダクトをまたぐPR Preview基盤の設計事例
taiki45
2
540
AIエージェント時代のPlatform as a Product —— テックリードがPdMとして回す発見・導入・計測 / Platform as a Product in the AI Agent Era
toshi0607
1
520
猫でもわかるKiro Web
kentapapa
1
150
なぜAI任せのゲームは面白くならないのか?
hirohasuyoutube
0
300
メルカリにおけるAI時代の高速プロトタイピング基盤「Arca」
ryotarai
18
13k
【Findyテック文化祭ワークショップ】新卒エンジニア&採用担当と作る、 なりたい姿と今やるべき一歩
dip_tech
PRO
0
150
Lambda MicroVMsは常駐サーバーの代わりに なるか? Kiro Crew を動かして検証してみた / Kiro Crew on Lambda MicroVMs
k_adachi_01
2
340
CI/CDではもう遅い - 人とAIが迂回しないDevSecOps Verify基盤の再設計 -
kintotechdev
1
410
20260915deck.gl-raster を使ってみた
rena1208
0
150
Apache Iceberg が拓く AI 時代のオープンレイクハウス
tomtanaka
0
190
Featured
See All Featured
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
Statistics for Hackers
jakevdp
799
230k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.2k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
Skip the Path - Find Your Career Trail
mkilby
1
240
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Mobile First: as difficult as doing things right
swwweet
225
10k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7k
Done Done
chrislema
187
17k
Amusing Abliteration
ianozsvald
1
320
Side Projects
sachag
456
43k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Transcript
© Magic Moment 2021 外部サービス連携で学んだこと ~メール編~ © Magic Moment 2021
Shohei Otsuka 株式会社 Magic Moment
© Magic Moment 2021 © Magic Moment 2021 自己紹介とサービス概要 2
© Magic Moment 2021 自己紹介とサービス概要 3 大塚 将平 (Shohei Otsuka)
株式会社Magic Momentでプロダクトと外部サービ スとの連携部分を主に担当するバックエンドエンジ ニアです。 趣味は飲み歩き(最近は浅草で飲むのが好き)
© Magic Moment 2021 自己紹介とサービス概要 4 営業組織の出力を最大化する Magic Moment Playbook
営業活動量を圧倒的に増やし、 全ての営業活動から優れた顧客体験を生み出す セールスオペレーションクラウド 最適な営業オペレーションを組織に実装し 大量行動が可能になる仕組みを提供する SaaS を提供
© Magic Moment 2021 外部サービスとの連携 5
© Magic Moment 2021 メール連携機能開発の思い出 6 • 返信メールの紐づけ • エラーハンドリング
© Magic Moment 2021 © Magic Moment 2021 返信メールの紐づけ 7
© Magic Moment 2021 思い出 〜返信〜 8 GET /messages それぞれの関連性を知りたい
© Magic Moment 2021 思い出 〜返信〜 9 Mail_A Mail_B Mail_C
Message-ID: <Mail_A> Message-ID: <Mail_B> In-Reply-To: <Mail_A> References: <Mail_A> Message-ID: <Mail_C> In-Reply-To: <Mail_B> References: <Mail_A><Mail_B> 返信 返信
© Magic Moment 2021 思い出 〜返信〜 10 • メールの件名が同じである •
Referencesヘッダーが、スレッド内 の以前のMail IDを参照している、また は同じMail IDを一貫して参照している Gmail公式によると...
© Magic Moment 2021 思い出 〜返信〜 11 仕様どうしよう.... (ダジャレ)
© Magic Moment 2021 思い出 〜返信〜 12 • メールサーバを開発しているわけではない •
Gmail, Outlookと連携しているだけ • API経由で返信情報を取得できるはず
© Magic Moment 2021 思い出 〜返信〜 13 APIで取得できた。
© Magic Moment 2021 学んだこと 〜返信〜 14 • まずはAPIで取得する方法を調べよう •
公式ドキュメントはちゃんと読もう
© Magic Moment 2021 © Magic Moment 2021 エラーハンドリング 15
© Magic Moment 2021 思い出 〜エラーハンドリング〜 16 エラーハンドリング難しい • 一時的なエラーは再試行したい
◦ 429エラー, 5xx系エラー • 回避可能なエラーは回避したい ◦ 返信対象のメールを削除した → 新規メールとして送信 • 回避不可能なエラーは連携解除したい ◦ ユーザーが削除された HTTP Status Codeだけで単純に判断できない
© Magic Moment 2021 思い出 〜エラーハンドリング〜 17 前回の学びからドキュメントをちゃんと読んだ { "error":
{ "code": "badRequest", "message": "Uploaded fragment overlaps with existing data.", "innerError": { "code": "invalidRange", "request-id": "request-id", "date": "date-time" } } }
© Magic Moment 2021 思い出 〜エラーハンドリング〜 18 知らないエラーコードが返ってきた • MailboxNotEnabledForRESTAPI
• SyncStateNotFound • ErrorInvalidIdMalformed • etc… 一個ずつググるとどんなエラーか調べることはできるが、一覧で見れるページがない!
© Magic Moment 2021 思い出 〜エラーハンドリング〜 19 Error情報を永続化した
© Magic Moment 2021 学んだこと 〜エラーハンドリング〜 20 • 公式ドキュメントも完璧ではない! •
実際にAPIを叩くんだ!
© Magic Moment 2021 学んだこと 21 • 公式ドキュメントをちゃんと読もう! • 実際にAPIを叩いて確かめる!
© Magic Moment 2021 THANK YOU © Magic Moment 2021
22
© Magic Moment 2021 We are hiring! © Magic Moment
2021 23 https://www.magicmoment.jp/recruit