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
Transactions API
Search
Daisuke Kobayashi
September 01, 2018
Programming
3k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Transactions API
Daisuke Kobayashi
September 01, 2018
More Decks by Daisuke Kobayashi
See All by Daisuke Kobayashi
Actions Builderによるアクションのビジュアルプログラミング
covayashi
0
180
Google アシスタント アクション運用の知見あれこれ
covayashi
1
810
Other Decks in Programming
See All in Programming
Spec-Driven Development - Why Vaadin Is the Perfect Fit
simas
PRO
0
230
AIがコードを書いてくれる時代、我々は何を確かめるのか
yosuke_furukawa
PRO
13
5.8k
Modernizing iOS Apps
seyfoyun
0
150
Moscow Python Meetup №112. Как поселить ИИ агентов в event driven архитектуре
moscowdjango
PRO
0
110
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
600
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
2
290
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
150
AI時代のFlutter品質設計 — アプリ品質を守るQuality Layers
omatty198
0
360
baseline으로 마이그레이션, 리팩토링 안전하게 맡기기
fornewid
1
920
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
4
1.5k
Seven New Principles of Software Engineering
yegor256
0
460
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
1
2k
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.7k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
600
The untapped power of vector embeddings
frankvandijk
2
2k
Heart Work Chapter 1 - Part 1
lfama
PRO
10
37k
Raft: Consensus for Rubyists
vanstee
143
7.9k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
570
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.2k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
930
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.7k
Transcript
Transactions API Daisuke Kobayashi
自己紹介 小林 大介 / @0rga(オーじゃなくてゼロ) 株式会社ぐるなび 8月に子供が産まれて育休中のエンジニア。
今まで作ったもの
目次 • Transactions APIの使い方 • ぐるなびで飲食店を予約できるアクションを作った時の話
Transactions APIの使い方
Transactions APIとは 通常は利用規約で制限されている、 Google Assistant向けアクションでの 購入、注文、予約 といった行動を実装できる機能。
Transactions APIとは Transactions API使わなくても自前のAPI使えば購入 注文予約のアクションを実装はできると思うけど、そ れじゃリリースレビュー通しませんよ、という事。
Transactions APIを使用した 一連の流れの例(飲食店の予約の場合)
取引可能判定チェック ⇣ 住所取得 ⇣ ユーザ情報取得 ⇣ 取引確認&作成 ⇣ 取引状態更新
取引可能判定チェック TransactionRequirements class 任意項目のひとつ。ユーザがTransaction可能な状態かどうかを チェックできます。 ユーザが取引不可の状態(決済情報を未登録など)でも取引確定 の手前まで進めますが、最後の最後でダメって言うのはUXが著し く良くないのでおすすめできません。 コード例は決済なしのTransaction(予約)ですが、決済ありの場合 は、paymentOptionsのパラメータを指定する必要があります。
取引可能判定チェック
取引可能判定チェック ⇣ 住所取得 ⇣ ユーザ情報取得 ⇣ 取引確認&作成 ⇣ 取引状態更新
住所取得 DeliveryAddress class 任意項目のひとつ。作ろうとしているTransactionに住所情報が必 要ない場合は実行しなくて良いです。 ユーザが住所を登録しておりかつユーザの許可が降りた場合住 所情報が取得できます。 取得できる内容は下記の通り。 電話番号も住所の一部です。
住所取得 パラメータのreasonに住所を必要とする理由が書けますが、【, 配 送先をGoogle…】 以下は固定文言になっています。 固定文言なしのフリーフォーマットが欲しい所です。 予約は配送しませんので。
住所取得
取引可能判定チェック ⇣ 住所取得 ⇣ ユーザ情報取得 ⇣ 取引確認&作成 ⇣ 取引状態更新
ユーザ情報取得 Permission class 任意項目のひとつ。こちらもユーザ情報が不要な場合は実行しな くて良いです。 名前 と 位置情報 が取得できます。 住所取得でも名前が取得できますが、あちらはフルネーム(フリー
フォーマット)で返ってくる為、姓名分割は正規表現の限界に挑む ことになります。 こちらは最初から姓名別で取得できますので、ベストな方を使い ましょう。
ユーザ情報取得 位置情報には2つの種類がありますのでご注意下さい。 • DEVICE_PRECISE_LOCATION スマートフォン用。正確な緯度経度などが返ってきます。 • DEVICE_COARSE_LOCATION Googleホームデバイス用。郵便番号、市および国コードなどが 返ってきます。
ユーザ情報取得 住所取得と同様にパラメータのcontextにユーザ情報を取得する 理由を書けますが、【名前と現在地が…】 以降は固定文言です。 [はい / いいえ]のサジェストも出す事ができません。
ユーザ情報取得
取引可能判定チェック ⇣ 住所取得 ⇣ ユーザ情報取得 ⇣ 取引確認&作成 ⇣ 取引状態更新
取引確認&作成 TransactionDecision class 必須項目。これこそがTransaction。 組み立てたカート情報(order)を元にユーザに決済するかどうかを 尋ねる事が出来ます。 コード例のようにorderOptionsでEMAILを指定する事で、通常はア カウントリンキング(OAuth認証)をしないと取得できないユーザの EMAILアドレスを取得できます。 取引完了後にメールを送る場合は取得しておきましょう。
※ orderの中身はGoogleActionsV2OrdersProposedOrderを参照して下さい。 取引確認&作成
取引確認&作成 ※キャプチャはサンプルコードのもの
取引可能判定チェック ⇣ 住所取得 ⇣ ユーザ情報取得 ⇣ 取引確認&作成 ⇣ 取引状態更新
取引状態更新 OrderUpdate class 必須項目。取引の状態を更新する事ができます。 取引の状態は随時更新する必要があり、 • CREATED:取引作成 • REJECTED:取引キャンセル •
CONFIRMED:取引受注済 • FULFILLED:取引完了 などの状態があります。
取引状態更新 更新する度にユーザのGoogle Assistantの購入履歴にある該当 の取引情報が更新されていきます。 基本的にリアルタイム更新が求められますので、商品を発送した り、予約の時間になったら状態更新をしましょう。 なお、別途APIを叩くことでも状態は更新可能ですので、バッチな どで更新するのが便利かもしれません。
取引状態更新 なお、 • TransactionDecision関数を実行 • 自前の購入注文予約APIを実行 は同時には出来ません。 どうしたってタイムラグが発生します。 TransactionDecision関数を実行した後に自前のAPIを実行し、自 前のAPIがコケた場合は、取引情報をREJECTEDに更新するなど
の工夫が必要です。
取引状態更新 ※ OrderUpdateの引数はGoogleActionsV2OrdersOrderUpdateを参照して下さい。
取引状態更新 ※ FULFILLEDの状態の一例
以上が一連の流れの例になります
実は… 予約アクション(0円取引)はTransactions APIでは非推奨になりま した。 悲しい事やで。 ですので、皆さんがこれからTransactions APIを使用して取引アク ションを作る場合は、決済が実際にある購入注文で作る事をオス スメします。
もしも時間が余ってたら、 ぐるなびで飲食店を予約できる アクションを作った時の話を少し。
どんな予約アクションを作ろうかな
人数指定 お店の予約 コースの予約 席のタイプ NoShow 対策 日付指定 エリア指定 料理ジャン ルの指定
全部言わせる…?
コースの予約 をしますか? 何日に予約 をしますか? 何時に予約 をしますか? お席のタイプ はカウンター ですか?テー ブル?それと
も掘りごたつ ですか? 何人です か? 場所はどこに しますか? 料理のジャン ルは何にしま すか?
None
VUIで詳細検索はダメ
何人ですか?
何人ですか? つくったもの • 飲食店を探すエリアはユーザの端末の位置情報を取得し、徒 歩圏内に収める。 • 予約できる時間は現在の時刻から30分後に固定。 • コース予約は無くし、空席予約のみにする。 予約に必要な情報は人数だけに絞る事によりシンプルなVUIにし
ました。 行きたいお店をじっくり探すのは不向きだけど、近くで2次会を探 すなどのユースケースでは抜群の便利さを実現しています。
ありがとう ございました