[iOS 10] Siri及びMapに対応するインテントを一覧してみた
1 はじめに
WWDC16の発表で、SiriKitが公開されましたが、これが対応しているインテント(対応ドメイン)が限られたものだったということで、少しがっかりだったと言うメッセージを幾つか見ました。
確かに、限られたものであることは間違い有りませんが、実際何が出来るのかが、ちょっとハッキリしなかったので、インテントを一覧してみることにしました。
2 Handlingプロトコル
Siriは、そのライフサイクルに、Resolve、Confirm、Handleがありますが、このうちResolve用のメソッドだけが、各インテントごと多岐になっています。
Resolveでは、そのインテントに必要な値のバリデーションを行いますが、必要な値が、インテントごと異なるため違いが出ているのです。
例えば、サンプルコードのUnicornChat(Siriでメッセージ送信を行うサンプルアプリ)では、INSendMessageIntent(メッセージの送信)を扱っていますが、INSendMessageIntentに対応するためには、INSendMessageIntentHandlingプロトコルを実装したハンドラが必要になります。
そして、INSendMessageIntentHandlingプロトコルのResolve関連のメソッドは、次の3種類です。
func resolveRecipients(forSendMessage intent: INSendMessageIntent, with completion: @escaping ([INPersonResolutionResult]) -> Void) func resolveContent(forSendMessage intent: INSendMessageIntent, with completion: @escaping (INStringResolutionResult) -> Void) func resolveGroupName(forSendMessage intent: INSendMessageIntent, with completion: @escaping (INStringResolutionResult) -> Void)
上から順に、Recipients (宛先)、Content (本文)、GroupName (宛先グループ)のバリデーションを行います。
この事から、Handlerのバリデーションメソッドを見れば、Siriから受け取れるデータの種類が分かると共に、何が出来るのかも少しイメージできるのでは考えました。
3 インテントの一覧
次は、Siri及びMapに対応するIntentと、それぞれのハンドラでバリデーションされる値を一覧したものです。
ドメイン | インテント/Handlingプロトコル | 対応 | 用途 | バリデーションメソッド |
VoIP Calling | INStartAudioCallIntent INStartAudioCallIntentHandling |
Siri | 1人以上の音声通信の要求 | Contacts |
INStartVideoCallIntentt INStartVideoCallIntentHandling |
Siri | 1人以上のビデオ通信を要求 | Contacts | |
INSearchCallHistoryIntent INSearchCallHistoryIntentHandling |
Siri | 条件に一致するコールのリストを要求 | CallType Recipient DateCreated |
|
Messaging | INSendMessageIntent INSendMessageIntentHandling |
Siri | クループまたは宛先を指定してメッセージを送信 | Recipients Content GroupName |
INSearchForMessagesIntent INSearchForMessagesIntentHandling |
Siri | 条件に一致するメッセージのリストを要求 | Recipients Senders Attributes DateTimeRange GroupNames |
|
INSetMessageAttributeIntent INSetMessageAttributeIntentHandling |
Siri | メッセージの属性変更 | Attribute | |
Photos | INSearchForPhotosIntent INSearchForPhotosIntentHandling |
Siri | 条件に一致する写真の検索 | DateCreated LocationCreated PeopleInPhoto AlbumName |
INStartPhotoPlaybackIntent INStartPhotoPlaybackIntentHandling |
Siri | 写真のセットを検索してスライドショーを開始する | DateCreated LocationCreated PeopleInPhoto AlbumName |
|
Payments | INSendPaymentIntent INSendPaymentIntentHandling |
Siri | 現在のアカウントから別アカウントへの送金 | Payee CurrencyAmount Note |
INRequestPaymentIntent INRequestPaymentIntentHandling |
Siri | 別アカウントへの送金要求 | Payer CurrencyAmount Note |
|
Workouts | INStartWorkoutIntent |
Siri | ワークアウトの開始 | |
INPauseWorkoutIntent INPauseWorkoutIntentHandling |
Siri | ワークアウトの一時停止 | WorkoutName | |
INResumeWorkoutIntent INResumeWorkoutIntentHandling |
Siri | 一時停止中のワークアウトの再開 | WorkoutName | |
INEndWorkoutIntent INEndWorkoutIntentHandling |
Siri | 現在のワークアウトを終了し、結果を保存する | WorkoutName | |
INCancelWorkoutIntent INCancelWorkoutIntentHandling |
Siri | アクティブなワークアウトを取り消す | WorkoutName | |
Ride Booking | INListRideOptionsIntent INListRideOptionsIntentHandling |
Maps | 乗車予約サービスから利用可能な乗り物の種類を要求 | PickupLocation DropOffLocation |
INRequestRideIntent INRequestRideIntentHandling |
Siri,Maps | 乗車要求に対してシステムが作成するインテント | PickupLocation DropOffLocation PartySize RideOptionName |
|
INGetRideStatusIntent INGetRideStatusIntentHandling |
Siri,Maps | 以前に予約した乗車の現在の状態を要求 | startSendingUpdates stopSendingUpdates |
|
CarPlay | INSetAudioSourceInCarIntent INSetAudioSourceInCarIntentHandling |
CarPlay (*1) | CarPlay対応システムでのオーディオ再生のソースを変更 | AudioSource RelativeAudioSourceReference |
INSetClimateSettingsInCarIntent INSetClimateSettingsInCarIntentHandling |
CarPlay (*1) | CarPlay対応車のエアコン設定の変更 | EnableFan EnableAirConditioner EnableClimateControl EnableAutoMode AirCirculationMode FanSpeedIndex FanSpeedPercentage RelativeFanSpeedSetting Temperature RelativeTemperatureSetting ClimateZone |
|
INSetDefrosterSettingsInCarIntent INSetDefrosterSettingsInCarIntentHandling |
CarPlay (*1) | CarPlay対応車で霜取り設定の変更 | Enable Defroster |
|
INSaveProfileInCarIntent INSaveProfileInCarIntentHandling |
CarPlay (*1) | CarPlay対応の車両に自車両の環境設定を保存 | ProfileNumber | |
INSetProfileInCarIntent INSetProfileInCarIntentHandling |
CarPlay (*1) | プロファイルから車両環境設定を変更 | ProfileNumber DefaultProfile |
|
INSetSeatSettingsInCarIntent INSetSeatSettingsInCarIntentHandling |
CarPlay (*1) | CarPlay対応車の座席関連の設定を変更 | EnableCooling EnableHeating EnableMassage Seat Level RelativeLevelSetting |
|
INSetRadioStationIntent INSetRadioStationIntentHandling |
Siri | 現在のラジオ局を変更 | RadioType Frequency StationName Channel PresetNumber |
|
Restaurant Reservations | INBookRestaurantReservationIntent | Maps | 指定レストランでの予約の作成を要求 | Restaurant BookingDateComponents PartySize Guest GuestProvidedSpecialRequestText |
INGetUserCurrentRestaurantReservation BookingsIntent | Maps | ユーザーの現在の予約のリストを要求 | Restaurant BookingDateComponents PartySize Guest GuestProvidedSpecialRequestText |
|
INGetAvailableRestaurantReservation BookingDefaultsIntent INGetAvailableRestaurantReservation | Maps | 潜在的な予約オプションをフェッチするときに使用するデフォルト値を要求 | Restaurant | |
INGetAvailableRestaurantReservation BookingsIntent | Maps | 予約可能なタイムスロットを要求 | RestaurantForGetAvailable RestaurantReservationBookings PartySizeForGetAvailable PreferredBookingDateComponents |
|
INGetRestaurantGuestIntent INGetRestaurantGuestIntentHandling | Maps | 予約を行っているゲストについての情報を要求 |
※1 CarPlayとは、車に搭載されたiPhone用のデバイスで、iPhoneでしたいことを、車載ディスプレイから操作するこのです。上記の表のCarPlayとなっているものは、このデバイスで使用できるSiriの事です。
参考:Apple CarPlay
4 最後に
一覧しても、出来ることが限られている事には、なんら変わりは無いのですが、なんとなく漠然と「限られている」というよりは、少し理解が進んだように感じました。
5 参考にさせて頂いたリンク
Introducing SiriKit - WWDC 2016
Extending Your Apps with SiriKit - WWDC 2016
SiriKit Programming Guide
Intents Domains
UnicornChat: Extending Your Apps with SiriKit