ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
ショートカットのパラメータの紹介
パラメータによって、Siriショートカットが次のレベルに引き上げられます。追加の質問をする機能によってSiriでインタラクティブな音声体験ができるようになったほか、ユーザーがショートカットをカスタマイズできるショートカットAppがiOSにビルトインされるようになります。このセッションでは、パラメータを活用するためのショートカットの設定について紹介します。また、ショートカットAppで複数のステップから成るショートカットを作成する際に、ショートカットの出力が他のアクションに渡される仕組みについて説明します。
リソース
- Donating Shortcuts
- SiriKit
- Soup Chef: Accelerating App Interactions with Shortcuts
- プレゼンテーションスライド(PDF)
関連ビデオ
WWDC19
-
ダウンロード
(音楽)
(拍手) こんにちは アリです 本日のテーマは iOS 13のショートカットに対する 最新アップデートです
iOS 12ではショートカットAPIを 導入し SiriKitを拡張したので― AppのアクションをSiriに対し 開放することが可能になりました
このようなショートカットアクションは 3種類の方法で使えます まず“提案”で使えます “音声”からも使えます そして 複数ステップの ショートカットの一部分としてもね
“提案”で使う場合― Siriは検索やロック画面で ユーザへショートカットを提案します 毎日Appで行う操作を加速させます
“音声”でSiriに頼めば Appのどんな機能も使用可能になります
これはとても有力です Appを音声で使用可能にするのが 簡単になり 全く新しい使い方ができます AirPodsを持って外出中でも CarPlayの使用中でも 家でHomePodを使う時や “Hey Siri ”と言う時でもね
それから ユーザはショートカットAppに 自分のショートカットを構築でき― Appからのアクションを含め 複数のアクションを加えられます
今年はショートカットAPIについて さらに踏み込んだ話をします ワクワクするような APIのアップデートが― 音声や複数ステップのショートカットを レベルアップさせます 見ていきましょう
iOS 13では ショートカットAppがリデザインされ iOSにビルトインされます そのため ショートカットを見つけて 使うのが容易になりました
昨年ショートカットを発表した後 最も多かった要望は パラメータの追加です そこでiOS 13に パラメータのサポートを取り入れ 対話型ショートカットを 使用可能にしました これによりユーザはAppと対話でき 皆さんがそれをコントロールできます 必要な情報を提供するよう ユーザに促し 入力や現在のコンテキストを基に 動的に反応できます これは SiriとAppの利用について 新しいユースケースを切り開きます 後ほど詳しくお伝えしますね 今回はユーザがショートカットの アクションをカスタマイズする― 新しい方法を追加しています それは対話型で定義したのと同じ パラメータに基づくUIで動作します
出力や変数のようなシナリオも 有効にできます
それから Add to SiriのUIを アップデートしました App内部のショートカットで始めるのが 容易になります
新機能がSiri内部の音声操作に 何をもたらすか見てみましょう
新しいショートカットです Add to Instacartというもので マイカートにアイテムを追加します 対話型ショートカットで “Add to Instacart”と言えば Instacartは カスタムダイアログで 追加したいものを尋ねます “バナナ”と言ってみましょう
すると 選択肢が表示され Instacartは 具体的にどれが欲しいかと尋ねます “オーガニックのバナナ”と答えてみます
文脈的に適切であれば Appは 私が言ってきたことを基に 追加の質問をします この場合 本数を聞かれるので 私は6本と答えます
Siriは カスタムダイアログと カスタムビジュアルで― タスクが完了したことを知らせます
MLB At Bat Appからの 新しいショートカットもあります “Hey Siri 野球を見せて”と 言うだけで ひいきのチームの試合に導いてくれます
フィリーズは 今プレーしていません しかし対話型ショートカットによって MLB Appがそれを検知し 今プレー中の試合がないことや 代わりのオプションを提示します
Siriの機能を ざっと見たので 次は実装に移ります その前に iOS 13のショートカットAppの アップデートについて話します
ショートカットAppは iOSにビルトインされるため― App Storeから ダウンロードする必要はありません ここでユーザは自分の全ての ショートカットを管理できます 以前は設定画面にあったものが こちらにあります
マイショートカットタブに 設定済みのショートカットが表れるので タップするか その名前を Siriに言うだけで実行できます フレーズの録音は不要です
iOS 13には 新しい “オートメーション”タブが付いていて 一定の基準に従って自動的に実行する ショートカットを設定できます どこかに到着した時 車に乗った時 アラームが鳴った時などです
ショートカットは便利なものですが ゼロから使い始めるのが大変な作業です ギャラリータブで元々組み込まれている ショートカットを探せますし― 今年はギャラリーをアップデートし “Appからのショートカット”という 新しいセクションを設けます そこではサードパーティーのAppから 関係あるアクションをハイライトします 皆さんのAppのアクションを ユーザに見せるチャンスです 使われていないAppであってもです
ショートカットエディタも Natural Languageフォーマットで アップデートしました こちらは Soup Chef Appで ショートカットを 設定する際のエディタです “クラムチャウダーを1つ注文”が どんな風に構成されるか見てください ユーザは ボタンをタップすれば これらのパラメータを調整できます ここでは“1”や“クラムチャウダー”を タップして調整できます
エディタには 新しいアクションのペインもあります サードパティーAppのアクションを ドラッグやタップで ショートカットに追加できます
今やAppのアクションは 出力を与えることができ 他のアクションと連携し 強力なショートカットができます 例えば Soup Chef Appは 予定時刻を共有できます Add New Reminderアクションに それを追加することができ 出来立てのスープを受け取るための ショートカットを作成できます
以上がショートカットAppの新機能です 他にもAdd to Siriの アップデートがあります
従来 ユーザが 音声機能の良さを感じにくかったのは 何と言えば皆さんのAppを使えるか 分からなかったからです Add to Siriは それを簡単にします Add to Siriボタンを 皆さんのAppに加えるとよいでしょう ユーザは 本当は音声でAppを使いたいのです
iOS 13ではAdd to Siriのシートを リデザインしました 新しいUIは フレーズの録音なしで ショートカットを設定できます ユーザはフレーズを入力するか 提案を受け入れます
その後は フレーズを言えば ショートカットが実行されます
“Do”の下のアクションをタップすれば ショートカットの動作を ショートカットAppと同様に調整できます
次は実装のお話です まず ユーザがショートカットの カスタマイズを有効化する方法 次に パラメータ解決と それを優れた音声体験に繋げる方法
さらに お互いに依存関係にある パラメータの処理方法 最後にショートカットエディタにて 動的オプションと出力が― 次のレベルのアクション構築に どう活かせるのかについてです
まず App上でショートカットの カスタマイズの有効化です
私はスープにハマっています なので Soup Chefという Appを開発しています スープを注文できるAppです アクションの中から 種類と 注文数を選ぶショートカットを 有効にしてみます
設定は Intentエディタから始めます
ご存じのとおり IntentはAppでユーザが完了できる 特定のタスクを表します この場合 スープの注文です タスクを完了するために― ユーザから入手すべき情報の全てに パラメータの定義が必須です ここで定義するパラメータセットは 次の両方に使われます 対話型ショートカットで Siriが尋ねる質問のセット ショートカットエディタで 編集可能なパラメータセットです
Intentに加える各パラメータは システムが表示する 一覧から選ぶことができます または ENUMを作成できます あるいはiOS 13では カスタムタイプも作れます
タイプを選ぶと そのタイプに固有のパラメータを カスタマイズできる設定が表示されます 例えば Stringを選ぶと 大文字化や自動修正の 新しいオプションが表れます
このパラメータについては 作成済みのSoup Enum Typeを選択
既存のパラメータを アップデートしているので― User-facingチェックボックスの チェックが必要です SiriとショートカットAppの両方から このパラメータを見えるようにします
追加した新しいパラメータは デフォルトでチェックされます
次に パラメータに対して 新しい情報を入力します Display Nameを追加します ショートカットエディタ内に パラメータを表示するためです
これは既存のIntentですから Intent is user-configurableに チェックが必要です SiriでもショートカットAppでも Intentが利用可能になります
最後に パラメータサマリを 入力する必要があります パラメータサマリに QuantityとSoupというパラメータを含め ショートカットエディタで ユーザが調整しやすくします “Order quantity soup”という Stringを追加し Xcodeで quantityとsoupを変数に変換します
これだけのことで ショートカットエディタで ショートカットが見えるようになります
これでIntentが設定可能になり ショートカットAppに表示されるので すぐに使えるパラメータです 次に必要なことは Intentのパラメータの解決です 方法をお伝えします
iOS 12では Siri経由でショートカットを呼ぶ時 2つのフェーズを経ます 最初はConfirm 次にHandleです
今年は“Resolve”という 3つ目のフェーズを追加しました SiriKit APIの使用経験があれば おなじみでしょう
Resolveフェーズでは Siriは Intentで定義済みの 各パラメータを調べます Intentハンドラに そのパラメータの解決を依頼し ユーザに質問するかどうか決めます
Soup Chefでは Siriはまず SoupパラメータのResolveを呼び出し どのスープがいいか尋ねるでしょう
そしてQuantityのResolveを呼び出し 注文数を尋ねます 最後にStore Locationの Resolveを呼び出し 注文したい店を尋ねます
パラメータが解決されると Siriは iOS 12と同じメソッドの ConfirmとHandleを実行します
これをコードで見てみましょう 定義した全てのIntentに対し Intentハンドリングプロトコルが 自動で生成されます Intentハンドラに そのプロトコルを実装します
iOS 12では Xcodeは ConfirmとHandleを生成します これらはIntentを実行するために 実装するものでした 今年は Xcodeが 設定可能とマークしたパラメータに対し Resolveメソッドも生成します
SiriはResolveメソッドを呼び出し 定義したパラメータの順に 質問していきます パラメータをドラッグ&ドロップし パラメータ解決の順序を変更できます
Resolveメソッドが呼び出されると― IntentはResolveメソッドへの 入力として渡されます 現在解決中のパラメータに対する値も 含まれています 値は幾つかの場所に由来します ショートカットの実行中に初めて Resolveメソッドが呼び出されると ユーザがショートカットに設定した値は 何であれ入力されます この例では Soupフィールドは空です ユーザは 時にはクラムチャウダー 時にはトマト味を注文するからでしょう 毎回どちらが欲しいか問いかける ショートカットを設定したいのです Resolveメソッドが呼び出されると Soupパラメータは空に設定されます ショートカットに 何も入力されていないからです そしてIntentを経由して Resolveに回されます
Resolveメソッドの役割は Siriが次に行うことを決める Resolution Resultを出力することです
繰り返しますが フィールドは空です なので Needs Value Resolution Result を渡すことで Soup Chef Appは ユーザに値を尋ねようとします
Needs Valueを渡すと Siriに パラメータに関する質問をするよう促し ユーザは音声で返答することができます Soup Chefは どのスープが欲しいか尋ね ユーザは“クラムチャウダー”などと 答えられます
“クラムチャウダー”という返答は Intentに入力され 同じResolveメソッドが もう一度実行されます これでAppは次に実行することを 決められます
この場合 クラムチャウダーは有効で 在庫があります そこでResolveメソッドは “Success”を返し Siriはリストの 次のパラメータに進みます
クラムチャウダーを予め設定した ショートカットの場合はどうか? 毎回質問なしでクラムチャウダーを 注文したい人のためのものです すると その値が空の代わりに Resolveに渡されます そうした場合 Resolveメソッドは 直ちにSuccessを返し Siriはそのパラメータについては 質問してきません
Resolveメソッドの実装においては Intent上のパラメータの 現在の値を見ておく必要があります もし値が入っていなければ needsValueと返し ユーザに尋ねます ショートカット設定時に値を入力 またはSiriに話しかけた場合は 既に値が設定されているでしょう 妥当な値か確認し Successとして引き渡したい値です
Resolveメソッドが呼び出されるたびに このResolution Resultを 提供する必要があるのです ここでローマンに引き継ぎます 素晴らしい Resolution Resultを使って Siriでしっかりとした音声体験を 提供する方法をご案内します ローマン (拍手) ありがとう アリ こんにちは 私が音声体験を構築する時は ユーザが言うことを全て想定し それをうまく処理する方法を考えます
在庫数を超える注文なら それを適切に伝えるべきです
遠い店への注文があれば より近い店を選択肢として示します
Resolveステップで― Siriの動作に影響を与え Siriが質問をするか否かを決定し ユーザのあらゆる入力に対して 処理をコントロールします これを実行するために Resolution Resultを渡す必要があります
選択可能なResolution Resultタイプは 6つ存在します needsValueから 1つずつ見ていきましょう
ユーザがショートカットの設定時に 値を指定していない場合― Siriに値が必要だと伝えます 解決できるパラメータには 独自のカスタムプロンプトダイアログを 提供しなければなりません そのために Intentエディタを開きます Siriダイアログを指定したい パラメータを選択し Promptテキストフィールドに カスタムプロンプトを打ち込みます
disambiguationを返せば Siriは値の一覧から選択するように ユーザに問いかけます パラメータの値が曖昧または 選択肢が少ない場合は いい方法です
disambiguationダイアログは Intentエディタでカスタマイズできます
unsupportedを返せば Siriに Appが値に対応していないと伝わります もし注文が多すぎたら “在庫が十分にありません”と 答えられます
Siriは再度ユーザに呼びかけます
Xcodeの Validation Errorセクション配下で ユーザに表示するエラーメッセージを 定義できます
Intentエディタに指定した 中間値と最大値に対して デフォルトの動作が 自動的に提供されます
confirmationRequiredを返せば Siriはパラメータの値を確認するよう ユーザに依頼します これは ユーザの求める値が 不確かな場合や― 想定可能な推測を ユーザに確認したい場合の方法です
Parameter Confirmationプロンプトは Intentエディタでカスタマイズできます
戻り値successは 有効なパラメータ値が指定され― Siriが次のパラメータに 移動することを意味します
戻り値notRequiredは Appが今回は― パラメータの値を必要としないことを 意味します ですから Siriはそれをスキップして 次に移動します
Resultメソッドは SiriとショートカットAppの両方で ショートカットの実行時に 呼び出されます そこで 両方の環境で 実装が正しく動作するか― 確認する必要があります
実行過程を見ていきましょう
新しいショートカットAppです マイショートカットで 作成あるいは追加したショートカットを 全て確認できます 新しいショートカットを作る場合は 作成ボタンをタップします
ショートカットエディタで マイショートカットに― アクションを追加するため 追加ボタンをタップします
毎日Soup Chefで注文するので 既にOrder soupという提案があります
それに名前を付けます
ショートカットに名前を付け マイショートカットに保存します “次へ”ボタンをタップ
“Order Soup”とします
音声とSiriを使って ショートカットを呼び出します “Hey Siri オーダー スープ”
“どのスープを?” “今日は3種類あります” “クラムチャウダー トマトスープ チキンヌードルスープです” “クラムチャウダー”
“近くに2店ありますが どちらにしますか?” “38801 S Sheridan Blvd. に ある店?” “7401 S Lewis Ave. にある店?” “最初の店”
“注文していいですか?” “はい よろしく”
“了解 注文します” “合計 3ドル75セントです” “10分で出来上がります” こんなふうにショートカットとSiriで スープを注文しました (拍手) ショートカットAppから 同じショートカットを作成してみます その前に ショートカットをカスタマイズしますね
Soupフィールドをタップして Soup Chefから いつも注文しているスープを選びます
クラムチャウダーを選びます
完了ボタンをタップして ショートカットを保存します
タップだけで ショートカットAppから ショートカットを呼んでみましょう
Siriの場合と同様に 店舗選択のための disambiguationプロンプトが表示され 最初の選択肢を選びます
また1つ注文しました お腹が空いているようです (笑い声)
ショートカットの利用方法について 更にお話しします
家でスープを受け取れたら 便利ですよね?
そこで Soup Shopに “デリバリ”を加えました
ショートカットエディタで “デリバリ”か“ピックアップ”か ユーザが選べるようにしたいのです
デリバリが選ばれたら 配達先を決めるフィールドを表示します 例えば “現在地”
ピックアップが選ばれたら 店を決めるフィールドを表示します
Intentエディタでパラメータの 関係性を表す必要があります
これに関係のあるパラメータを 全て見ていきましょう orderTypeパラメータは 2つの可能値を有します deliveryとpickupです deliverLocationとstoreLocationも パラメータがあります
Relationshipセクションを 見てみましょう
パラメータ deliverLocationはこれです 親パラメータがorderType パラメータになるように指定します 親パラメータ値がdeliveryであれば deliveryLocationパラメータを 表示します
storeLocationパラメータについても 同様です 親パラメータ値がpickupであれば 表示します
これでユーザは orderTypeを 簡単に切り替えられます
Xcodeで見てみましょう
Soup Chefのプロジェクトを開きます Intents.intentdefnition ファイルを選択 ここで全てのIntentを 定義します
order soupに関するIntentは 既にあります パラメータを見ていきましょう soup quantity topping storeLocationがあります 次にショートカットAppという セクションまでスクロールします 確認できるのは ショートカットAppと 対応するサマリによる― Supportパラメータの組み合わせです App内でどのように見えるかの プレビューも見られます
これまでのところ storeLocationがあります storeLocationには pickupに対して― Order quantity soupという サマリがあります toppingsを マイサマリに入れなかったので More Optionsの配下に表示されます では 上に戻って デリバリをサポートするために パラメータを追加します プラスボタンをクリックして orderTypeという 新しいパラメータを追加します
このパラメータに対して 表示名を指定します
既にMore Optionsセクションの配下に パラメータOrder Typeが表示され Supportパラメータの組み合わせに 追加されています スクロールします orderTypeパラメータに対して 新しいタイプを指定します 新しいENUMを追加します “Order Type”と呼びましょう
このタイプに対して表示名も指定します
デリバリとピックアップという 2つの条件を追加します デリバリから始めます プラスボタンをクリック “delivery”とタイプ
表示名も指定します
ピックアップに対して 別の条件を追加しましょう
表示名も付けます
ユーザはピックアップを “テイクアウト”と呼ぶこともあるので これを追加します プラスボタンをクリックして “takeout”を追加
Intentに戻りましょう
deliveryLocationというパラメータの 追加が必要です
“Delivery Location”という 表示名を付けます
スクロールダウンして 内容を確認しましょう あらゆるパラメータを含む単一の パラメータの組み合わせがありますが storeLocationと deliveryLocationを 同時に持つのはおかしな話です 修正します
パラメータセクションに行きます storeLocationパラメータを選択して Relationshipセクションを展開 親パラメータが orderTypeになるように選択します 親 orderTypeパラメータの値が pickupであれば storeLocationパラメータを 表示したいだけです
deliveryLocationパラメータにも 同じことを行います 親パラメータが orderTypeになるように選択します Show If Parentでhas exact value Valueでdeliveryを選びます ショートカットAppセクションで その内容を見てみましょう さらに2つのパラメータの組み合わせが 作成されています それぞれのサマリを入力します 見ていてください
“Order” “quantity”
“soup”
“for” “orderType” ユーザがショートカットAppの OrderTypeフィールドをタップして― ピックアップを選んだとします ユーザーは storeLocationを含む パラメ-タの組み合わせを見ます
このパラメータの組み合わせに対する サマリが既にありますが pickupについては固定値でした パラメータをorderTypeに 変更しましょう
最後のパラメータの組み合わせを アップデートしなければなりません Delivery Locationパラメータが これには含まれています サマリを追加します “Order quantity” “soup”
“for” “orderType” “to”
“deliveryLocation” これまでの作業を振り返りましょう まず Intentで 親と子のパラメータを識別しました 次に 親と子のパラメータ間の パラメータ関係を構築しました 最後に各パラメータの組み合せごとに サマリをアップデートしたので ショートカットAppの中で 見栄えがします
次はDynamic Optionsです
StringやNumberなどのパラメータは 大半が明白な入力メカニズム― すなわちショートカットAppでの 入力フィールドを持っています
ここにあるいくつかの値を 明確にする質問をします
いくつかのパラメータについては ショートカットの設定時に 固定値のセットから選択し Appで動的に提供させることができます Store Locationパラメータに 対して― 近くの店のリストから 選択できるようにしたかったのです
そのために storeLocationパラメータに対する Dynamic Optionsに チェックを入れます
こうすれば さらに2つのIntentを扱う プロトコルメソッドが生成されます 1つは StoreLocationオプションを提供 もう1つは このパラメータに対し デフォルト値を与えます
Provide Optionsメソッドでは Completionハンドラで 可能な値のセットを返す必要があります
また Dynamic Optionsを有効化して パラメータに対するデフォルト値を 与えるチャンスもあります
Dynamic Optionsのパラメータが ショートカットの実行時間中に解決され ResolveメソッドのCompletionハンドラで needsValueを返した場合 Siriは disambiguationプロンプトの フォームで皆さんが提供した― オプションの一覧を使用します
次は他のアクションと合わせて機能する ショートカットの話です
例えば 注文後に その注文を取りに行く友人に
注文の詳細をメッセージで送る ショートカットを設定できます
Xcode 11ではカスタムタイプを 定義することが可能になりました
IntentでもIntent Responseでも 使えるものです “Order Details”という 新しいカスタムタイプを定義します 他のアクションに回したい 情報のセットを含んでいます この例では 2つのプロパティを定義します “Order Estimated Time”と “Total”です
Intent ResponseはIntent実行の結果を 論理的に表すものです 結果をユーザに伝えるプロパティが 含まれています 出力 追加のため カスタムorderDetailタイプの 新しいプロパティを定義します
このプロパティを出力として 指定する必要があります
ショートカットエディタで Order Details変数をタップする際に カスタムタイプで定義した プロパティの1つを選ぶ選択肢が出ます
Siriのレスポンステンプレートで カスタムタイプのカスタムメンバーを 使うこともできます 出力として渡されたものと 同じデータを 声に出せます
本日は ショートカットAppでの カスタマイズについて学びました Siriで対話型ショートカットを 提供する方法も学びました Intentごとに 正しいパラメータを選択すれば あらゆる段階で ユーザに正しく返答できます ショートカットAppでは 出力を利用しながら― 別のAppと一体となり ショートカットの能力を拡張できます
金曜に ショートカットの設計と 構築についてのセッションがあります 一週間はラボで 私たちを見かけるでしょう ご静聴ありがとうございました この後もお楽しみに (拍手) (喝采)
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。