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
外部サービス連携で学んだこと 〜メール編〜
Search
otsuka
November 29, 2023
Technology
120
0
Share
外部サービス連携で学んだこと 〜メール編〜
otsuka
November 29, 2023
Other Decks in Technology
See All in Technology
20260528_生成AIを専属DSに_Howの次にすべきことを考える
doradora09
PRO
0
220
大規模災害時でも高い信頼性を維持するアプリケーション基盤の実現/nikkei-tech-talk46
nikkei_engineer_recruiting
0
110
layerx-fde-practices
cipepser
6
2.8k
責任あるソフトウェアエンジニアリングの紹介4章・5章 / RSE_Ch4-5
ido_kara_deru
0
350
DI コンテナ自動生成ツールを実装してみた / intro-autodi
uhzz
0
870
Strands Agents超入門
kintotechdev
1
130
大規模環境でどのように監視を実現する?
yuobayashi
1
260
インフラが苦手でも大丈夫! 紙芝居 Kubernetes -WWGT 10周年編-
aoi1
1
280
権限管理設計を完全に理解した
rsugi
2
220
データ基盤構築・運用の現場から 〜 Snowflake Intelligence 導入で変わった、データ活用の未来 〜
wonohe
0
210
類似画像検索モデルの開発ノウハウ
lycorptech_jp
PRO
4
990
NFLコンペ2026 解法
lycorptech_jp
PRO
0
120
Featured
See All Featured
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
240
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
120
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
310
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Agile that works and the tools we love
rasmusluckow
331
21k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
350
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
230
Color Theory Basics | Prateek | Gurzu
gurzu
0
320
A Soul's Torment
seathinner
6
2.8k
The agentic SEO stack - context over prompts
schlessera
0
790
Are puppies a ranking factor?
jonoalderson
1
3.4k
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