羽田
iOS10からSiriKitが開発者に開放され、開発者がSiriを利用できるようになりました。
”Hey Siri”から始まって、アプリに直接させたい作業を自由に指定して起動するなど出来るようになると期待しましたが、開放された機能は限定的で自由のないものでした。
出来る事は大きく分けて2つです。
・Siriからのアプリ呼び出し
・音声認識による文章起こし
今回は、Siriからのアプリ呼び出しについて解説します。
■Siriからのアプリ呼び出し
・Intents Domains
SiriKit Programming Guide: Intents Domains
- VoIP Calling
- Messaging
- Photos
- Payments
- Workouts
- Ride Booking
- CarPlay
- Restaurant Reservations
以上がSiriから使える”Intents Domains”です。
”Intents Domains”はSiriを使ってできるサービスのカテゴリのようなものでしょうか。
”Intents Domains”は初公開時は6種類でしたが、随時追加されているようで現在8種類まで増えています。
上から、電話・メッセージ送信・写真・支払い・ワークアウト・乗車予約・車載用・レストラン予約に向けたUIが用意され、音声解析から必要な情報を抽出します。
と言われてもさっぱりなので、一番わかりやすい”Messaging”のメッセージ送信の例文を見てみます。
INSendMessageIntent - Intents | Apple Developer Documentation
"Send a message to Roy on <MyApp> and say I hope you’re having a great tour.”
日本語だと、”ロイに<MyApp>で、「素晴らしいツアーを願っています」と送信”といった感じです。
“誰に<アプリ>で○○と送信”といった文章になります。
<MyApp>に合致するアプリがあると、Messagingでこの文章を解釈してパラメータに情報が設定された状態で受け取れます。
この受け取れるパラメータというのに自由がなく、Messagingでは既に規定された、recipients(送信先),groupName(グループ名),content(内容),serviceName(サービス名),sender(送信者)に対して解析結果から取得できた情報が設定されてアプリ側へ通知されます。
- Send a message
- Search for messages
- Set attributes on a message
"Messaging"では、上のメッセージ送信を含む3種類の機能があり、"Messaging"の"User intention"にリスト化されています。
"User intention"がSiriの目的別の出来る事の最小単位になるので、Siriで何が出来るのか調べるなら、"Intents Domain"毎に"User intention"を調べる必要があります。
・Unicorn Chat
UnicornChat: Extending Your Apps with SiriKit
Apple公式のチャットアプリのサンプルです。
Siriで呼び出して、Messagingの”Intents Domain”で情報を取得し、メッセージ送信までを実行します。
実際の送信はしないのですが、送信先とメッセージの設定が可能です。
2番目の画像では送信とキャンセルのボタン付きの画面が表示されています。
ボタンと外枠についてはMessagingの定型で変更できず、アプリ側からは中身の部分だけが変更できます。
"テスト"は送信先で、"こんにちは"がメッセージです。
送信先は、UCAddressBookManagerのソース内に定義されています。
サンプルには英語名しかないので、日本語の送信先を追加して認識されるのを試しました。
"テスト"さんを追加して一致したら選ばれるのですが、結構スルーされてしまうようです。
"UnicornChatでテストにこんにちはを送信"で一括して送信先とメッセージが設定できると良かったのですが、音声認識の変換ミスなのか文脈から判定できないのか成功しませんでした。
2番目の画像作成では送信までの作業を、アプリ起動と送信先設定とメッセージ設定の3回に分け、10回以上トライして成功した画面をキャプチャしているので、アプリとして便利には思えませんでした。
・独自の”Intents Domain”による拡張の可能性
INIntent - Intents | Apple Developer Documentation
指定された”Intents Domain”しかないなら継承して何か追加情報を取得できればいいじゃない。
と探すも、以下の基底クラスで最初に独自のサブクラス拡張は禁じられています。
少なくとも継承クラスがある状態で審査に出したら自動的に弾かれそうです。
今は大人しくあるもので我慢しなくてはならないようですね。
・まとめ
Siriからアプリを呼び出して、決まったパラメータを音声から取得出来る。
UIも外枠については定型でアプリ側から手を出せない。
"Intents Domains"をアプリから拡張できない。
以上の制限があっても有効に運用できるアプリとなると幅が狭くなってしまいます。
次の拡張が来るまで、本格的なSiriからのアプリ操作については待つしかないといった状態です。
関連:iOS10のSiriKitで出来る事(2) - 音声認識による文章起こし
ハダ
iOS/Android/Windows/Macなど各プラットフォームを手がけています。
前職は家庭用ゲームのプログラマでしたが、最近はスマホとPCでばかりゲームしています。