遂にGAとなった Amazon Lex をiOS SDKから使用してみました。
1 はじめに
2017/04/20に一般公開となったAmazon Lex(以下、Lex)は、既に、ここDevelopers.IOでもいくつか紹介されています。
一般公開されたAmazonのAIサービスLexでFacebook MessengerのBotをつくってみた
【新機能】Amazon LexがGA(一般利用開始)に!Slackに入れて使ってみた
Amazon Lexのプレビューが通ったので使ってみた
Botの作成方法などは、先の記事を参考にさせて頂くとして、私は、同時に公開されたSDKで、iPhoneからLexのBotを使ってみたので、これを紹介させて下さい。
最初に動作しているようすです。音声入力に対して音声で返答するBotです。SDKは、非常に良く出来ており、このようなものが、ほんの数行で書けてしまいます。
2 Botの作成
Botの方は、最初から用意されているサンプルの一つである、「OrderFlowers」をそのまま利用させて頂きました。
特に、提供されたテンプレートから変更することなく、テストを行うところまで進めますが、ここで指定した Bot name (今回は、BotSampleとしました)は、後ほどiPhoneアプリの作成時に必要となるので記憶しておきます。
テストで動作が確認出来たら、Publishボタンで公開しますが、ここで指定する alias(今回は、BotSampleAliasとしました)も、iPhoneアプリ作成で必要ですので、記録しておいて下さい。
今回のサンプルでは、最終的なアクションは構築しませんので、Botの作成作業は、ここで終了とします。
3 Identity poolの作成
iPhoneからAWSのリソースであるLexを使用するためには、権限が必要ですが、ここでは、CognitoからIdentity poolを発行し、Roleで権限を付与します。
今回は、匿名でのログイン(ゲストユーザ)で使用しますので、Enable access to unauthenticated identitiesにチェックを入れておきます。
その他の設定は、デフォルトのまま進めて作成を完了し、 Sample codeのところで表示されるIdentity Pool IDをコピーしておきます。これも、iPhoneアプリの作成で必要となります。
なお、ここまでの操作で作成されたIdentity poolのRoleには、特に権限が付与されていませんので、Dashboardから編集画面を開いて、Unauthenticated roleの名前を確認します。(ここでは、Cognito_BotSampleIdentityUnauth_Roleとなっていました)
続いて、IMAのRolesで、当該Roleを編集し、PermissionsにAmazonLexFullAccessを追加します。
4 iPhoneアプリの作成
準備が揃ったので、いよいよiPhoneアプリの作成です。
SDKは、CocoaPodsで簡単に導入できます。AWSLex及び、AWSCognitoだけが記載されていますが、AWSCoreは依存関係で自動的に入ります。
source 'https://github.com/CocoaPods/Specs.git' target 'BotSampleApp' do platform :ios, '9.0' use_frameworks! pod 'AWSLex' pod 'AWSCognito' end
iOS 10以降では、マイクの利用に許可が必要ですので、info.plistに以下の行を追加します。
<key>NSMicrophoneUsageDescription</key> <string>For interaction with Amazon Lex</string>
CognitoによるIdentity発行と権限取得、そして、Lexの初期化は下記のとおりです。ここで、先の作業で取得した、Bot name 、Bot Alias 、pool IDが、それぞれ使用されることになります。
import AWSCore import AWSLex class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let poolId = "us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx" let credentialsProvider = AWSCognitoCredentialsProvider(regionType:.USEast1,identityPoolId:poolId) let configuration = AWSServiceConfiguration(region:.USEast1, credentialsProvider:credentialsProvider) AWSServiceManager.default().defaultServiceConfiguration = configuration let BotName = "BotSample" let BotAlias = "BotSampleAlias" let chatConfig = AWSLexInteractionKitConfig.defaultInteractionKitConfig(withBotName: BotName, botAlias: BotAlias) AWSLexInteractionKit.register(with: configuration!, interactionKitConfiguration: chatConfig, forKey: "AWSLexVoiceButton") chatConfig.autoPlayback = false AWSLexInteractionKit.register(with: configuration!, interactionKitConfiguration: chatConfig, forKey: "chatConfig") } }
最後に、Botを開始するボタンの配置ですが、こちらも、予め機能を実装したものが提供されています。
ストーリーボードでUIViewを配置し、Custom ClassをAWSLexVoiceBottnに設定するだけです。
5 最後に
提供されているSDKは、非常に良く出来ており、簡単な作業でLexのボットを試すことが出来ました。
これで、気楽にBotを楽しめそうです。
6 参考リンク
Amazon Lex: Use Natural Language to Trigger Business Workflows
Amazon Lex > Developer Guide > What Is Amazon Lex
aws/aws-sdk-ios