こんにちは、VASILYで主にAndroid開発を担当している @Horie1024 です。先日 potatotips #48 で「Alexa、APKを配布して」というタイトルでLTさせて頂きました。 資料は以下になりますが、本投稿では、Alexaスキルの仕組みから最終的にAPKが配布されるまでを出来る限り詳細に解説していきます。 目次 目次 AlexaでAPKを配布する流れ Alexaスキル開発事始め Alexaスキルの仕組み 対話モデル インテントとスロット サンプル発話 インテントスキーマ APKを配布するスキルの作成 Amazon developerへの登録 Alexaメニューの表示 スキルの作成 対話モデルの作成 設定(AWS Lambdaエンドポイントの指定) Serverlessを利用したAWS Lambdaエンドポイントの開発 Serverlessのインストール テンプレートから雛形プロジェクト作成 必要なライブラリの追加 serverless.ymlの更新 Alexaに対応したLambda functionの実装方法 Bitriseの設定 セットアップ Workflows DeployGateへのAPKのアップロード AWS LambdaからのBitriseのビルドのトリガー AWS Lambdaへのデプロイ IAMの作成 認証情報の登録 デプロイ シミュレータでのテスト 実機でのテスト 公開情報の入力 プライバシーコンプライアンスの入力 テスターへの追加とベータテストの開始 まとめ 最後に AlexaでAPKを配布する流れ 最初にAPKを配布するまでの全体の流れについて概要を示します。 ユーザーがAlexa対応デバイス(Amazon echoなど)に対して音声でAPKの配布指示を出し実際に配布されるまでの流れは以下のようになります。 ユーザーが「Alexa、BitriseでAPKを配布して」と発話 Alexaサービスでの発話の処理とAWS Lambdaエンドポイントへのリクエスト Lambda FunctionでBitriseのビルドをトリガー APKのビルドとDeployGateへのアップロード DeployGateを経由したAPKの配布 ユーザーの音声をAlexaが理解し、AWS Lambdaエンドポイントを経由してBitriseでのビルドを動かす事でAPKを配布します。 Alexaスキル開発事始め Alexaに開発者によって追加された機能を スキル と呼びます。Alexaスキルには以下のような種類があります。 カスタムスキル : 汎用のスキル スマートホームスキル : 家電製品などを制御するスキル フラッシュブリーフィングスキル : ニュースなどを読み上げるスキル APKを配布するスキルはカスタムスキルにあたり、スマートホームスキルやフラッシュブリーフィングスキルは使用しません。 Alexaスキルの仕組み Alexaがユーザーの発話を受けてレスポンスを返すまでの流れは以下のようになります。 引用: Alexaスキル開発トレーニングシリーズ 第1回 初めてのスキル開発 ユーザーが発話し、Alexa対応デバイスからレスポンスを受け取るまでを順番に見ていきましょう。 ユーザーがAlexa対応デバイスに発話 デバイスはマイクで集音した音声データをAlexaサービスに送信 Alexaサービスは音声データを解析し、AWS Lambdaを呼び出して解析結果を伝達 Lambdaはスキルの処理を実行し、結果をAlexaサービスにレスポンスとして返却 Alexaサービスはレスポンスに応じた音声データを生成、デバイスに返信 デバイスは音声データを再生し、ユーザーに結果を伝達 この流れを実現するために開発者が行うことは以下の2点です。 対話モデル と呼ばれるユーザーの音声をAlexaサービスに理解させるためのルールの設定 対話モデルによる解析結果に応じて実行する AWS Lambdaエンドポイント の開発 対話モデル 以下の画像は対話モデルとAWS Lambdaエンドポイントの関係を表す図です。 引用: Alexaスキル開発トレーニングシリーズ 第2回 対話モデルとAlexa SDK Alexaサービスは、対話モデルによってユーザーの発する音声データを理解しAWS Lambdaエンドポイントを呼び出します。 対話モデルは、 インテントとスロット および サンプル発話 から構成されます。 インテントとスロット AlexaサービスがAWS Lambdaエンドポイントを呼び出す際のリクエストは、 インテント と スロット からなります。スロットはユーザーの音声データのうち特定の型(日付や都市名)に当てはまるものを値として受け取れる変数のようなものです。APKを配布するスキルでは使用しません。 インテント(Androidエンジニアには親しみやすい名前ですね!)はユーザーの要望や意図を表し、スキルはインテントに応じた振る舞いを行うようにします。インテントは1つのスキルで複数定義することが可能です。 引用: Alexaスキル開発トレーニングシリーズ 第2回 対話モデルとAlexa SDK また、インテントには標準の組み込みインテントがあり、それらも利用できます。以下は主な組み込みインテントです。 インテント名 概要 AMAZON.HelpIntent スキルの使い方を尋ねるインテント AMAZON.StopIntent 処理やスキルを終了させるインテント その他の組み込みインテントについては Built-in Intent Library を参照してください。 さて、ではAPKを配布するスキルはどのようなインテント名が良いでしょうか。APKを配布するという要望を表した DistributeApk とします。 サンプル発話 サンプル発話は、ユーザーの発話を適切なインテントとスロットに紐付けるための例文です。APKを配布する例文として以下を想定します。例文を増やすほど様々な言い回しに対応できますが、この3通りで恐らく問題ないでしょう。 apk を 配布して apk を 配布 apk を 配って 実際にユーザーがスキルを使用する場合、アレクサ + 呼び出し名 + サンプル発話 の形で発話することになります。呼び出し名はスキルを識別するためのprefixで必ず必要になります。 インテントスキーマ インテントとスロット、サンプル発話はインテントスキーマというJSON形式でスキルに設定されます。これによって、ユーザーの発話がサンプル発話の例文に当てはまる場合、インテント名がDistributeApkとしてリクエストがAWS Lambdaエンドポイントに送られます。 { " intents ": [ { " name ": " DistributeApk ", " slots ": [] , " samples ": [ " apk を 配布して ", " apk を 配布 ", " apk を 配って " ] } ] , " types ": [] } APKを配布するスキルの作成 ここからは、Amazon developerのAlexaコンソールにアクセスし、実際にスキルを作成する流れを紹介します。 Amazon developerへの登録 Amazon developerポータル へアクセスし、アカウントを作成します。この時ハマりやすいポイントがあるので注意してください。 Alexa 開発者アカウント作成時のハマりどころ を読んでからアカウントを作成することをオススメします。 Alexaメニューの表示 ログイン後ALEXAタブをクリックし以下のような画面を表示し、「Alexa Skills Kit」の始めるをクリックします。 スキルの作成 「新しいスキルを追加する」をクリックするとスキルの情報を入力する画面が表示されるので埋めていきます。 以下のように入力しています。呼び出し名がカタカナの方が認識されやすいです。 項目 値 スキルの種類 カスタム対話モデル 言語 Japanese スキル名 Distribute Apk 呼び出し名 ビットライズ 呼び出し名にビットライズを指定することで、ユーザーは「アレクサ、ビットライズで○○」という発話でスキルを使用します。呼び出し名をビットライズにしているのは、APKのビルドと配布に Bitrise を利用するためです。これについては後ほど解説します。また、 呼び出し名を省略することはできません。 対話モデルの作成 対話モデルの作成は、2018年3月現在でベータ版ですがSkill Builderを使用した方が簡単です。「スキルビルダーを起動する」をクリックすると起動します。 左メニューのIntentsのADDをクリックすることでインテントを追加できます。 Create a new custom intentの入力フォームに「DistributeApk」を入力しCreate Intentをクリックします。 「Sample Utterances」のフォームにサンプル発話を入力します。サンプル発話の節で想定したサンプル発話を入力します。 apk を 配布して apk を 配布 apk を 配って 入力が完了したら「SaveModel」をクリックし対話モデルを保存します。保存が完了したら「Build Model」をクリックし対話モデルをビルドします。 これで対話モデルの作成は完了です。ここまでGUIで対話モデルを作成しましたが、Code Editorを選択するとJSONで表現された対話モデルを確認でき編集も可能です。 設定(AWS Lambdaエンドポイントの指定) サービスエンドポイントのタイプにAWS LambdaのARN(Amazonリソースネーム)を選択し、デフォルトにデプロイ済みのLambda FunctionのARNを指定します。Lambda Functionの実装はまだ行っておらず、ARNはわからないので一旦入力せずに保存しておきます。 Serverlessを利用したAWS Lambdaエンドポイントの開発 AlexaスキルはAlexaサービスのリクエスト先としてエンドポイントを用意する必要があり、AWS Lambdaで実装することが推奨されています。 今回、Lambda functionの実装には言語としてTypeScript、AWSへのデプロイにはServerlessを使用しています。 Serverlessは、サーバーレスアーキテクチャへのデプロイや管理を行うためのツールです。AWS Lambda、Google Cloud Functions、Azure Functions、IBM OpenWhiskといったFaaS(Function as a Service)に対応しています。 serverless.com Serverlessを使用するとLambda functionのデプロイおよび管理を簡単に行えます。 Serverlessのインストール Node.jsのインストールが必要になります。 nvm や nodebrew を使うと簡単です。本記事ではNode.js v8.9.4 を使用しています。 Serverlessは、npmを使用する場合は以下のようにインストールします。 $ npm install -g serverless また、 yarn を使用する場合以下のようになります。 $ yarn global add serverless 本記事で使用するserverlessのバージョンは1.26.1になります。 $ serverless -v 1.26.1 テンプレートから雛形プロジェクト作成 aws-nodejs-typescriptをtemplateに指定してserverless createを実行します。 $ serverless create --template aws-nodejs-typescript Serverless: Generating boilerplate... _______ __ | _ .-----.----.--.--.-----.----| .-----.-----.-----. | |___| -__ | _| | | -__ | _| | -__ |__ -- |__ -- | |____ |_____|__| \___/|_____|__| |__|_____|_____|_____| | | | The Serverless Application Framework | | serverless.com, v1. 26 . 1 ------- ' Serverless: Successfully generated boilerplate for template: "aws-nodejs-typescript" Serverless: NOTE: Please update the "service" property in serverless.yml with your service name 以下のように生成されます。 $ tree . ├── handler.ts ├── package.json ├── serverless.yml ├── tsconfig.json └── webpack.config.js 必要なライブラリの追加 開発に必要なライブラリや型定義の依存を追加します。 $ npm install alexa-sdk @types/alexa-sdk @types/request --save-dev requestモジュール については通常のdependenciesで追加します。型定義のみdevdependenciesとしました。 $ npm install request--save yarnを使用する場合以下の通りです。 $ yarn add alexa-sdk @types/alexa-sdk @types/request --dev $ yarn add request serverless.ymlの更新 serverless.ymlをAlexaサービスからのリクエストを受けられるよう変更します。具体的には events に alexaSkill を指定します。serverlessのドキュメントは こちら です。 これでAlexaサービスからのリクエストを handler.bitriseSkill で受けられるようになりました。 service : name : alexa-bitrise-distribute-apk # Add the serverless-webpack plugin plugins : - serverless-webpack provider : name : aws runtime : nodejs6.10 functions : bitriseSkill : handler : handler.bitriseSkill events : - alexaSkill Alexaに対応したLambda functionの実装方法 Alexaスキルのエンドポイントに対応したLambda functionの書き方はシンプルで、 alexa.registerHandlers によって対話モデルで定義したインテント名に対応した処理を登録し、 alexa.execute() を実行するのみです。 AlexaサービスからDistributeApkインテントが送られてくると、対応するプロパティ DistributeApk が実行されます。 Unhandled 、 LaunchRequest 、 AMAZON.StopIntent はそれぞれ標準で用意されている組み込みインテントに対応しています。 import * as Alexa from 'alexa-sdk' import * as request from 'request' export const bitriseSkill = ( event : Alexa.RequestBody < any > , context : Alexa.Context ) => { const appSlug = process .env.APP_SLUG const apiToken = process .env.API_TOKEN const appId = process .env.APP_ID const alexa = Alexa.handler(event, context) alexa.appId = appId alexa.registerHandlers( { 'Unhandled' : function () { this .emit( ':tell' , 'よく分かりません。' ) } , 'LaunchRequest' : function () { this .emit( ':tell' , 'こんにちは。このスキルはビットライズのビルドをスタートさせエーピーケーを配布します。' ) } , 'AMAZON.StopIntent' : function () { this .emit( ':tell' , 'またご利用ください。' ) } , 'DistributeApk' : function () { // TODO ここにDistributeApkインテントがリクエストされた際の処理を書く } } ) alexa.execute() } DistributeApkインテントがリクエストされた場合に行う処理は、Bitriseの Build Trigger API を使用したビルドのトリガーです。具体的な実装を行う前にBitriseの設定を行いましょう。 Bitriseの設定 Bitrise はモバイルアプリにフォーカスしたCI/CDのPlatform as a Service(PaaS)です。セットアップが非常に簡単で数クリックするだけでAndroidアプリのCI/CD環境を構築することができます。また、Worlflowの概念を取り入れていてビルドステップのカスタマイズも容易です。 今回BitriseをAPKのビルドとDeployGateへのアップロードを行うCIサービスに選んだ理由は以下の3点です。 Androidプロジェクトのセットアップが容易である Build Trigger APIが用意されている Workflowを利用できる 以下のサンプルアプリプロジェクトについてセットアップします。 github.com セットアップ Bitriseにログインし、「Add first app」をクリックします。 セットアップ画面が表示されるので画面の指示に従って設定していきます。「Connect your repository」で接続するリポジトリを選択します。 「Setup repository access」では特に必要がなければ「AUTOMATIC」を選択し、「No, auto-add SSH key」をクリックします。 「VALIDATING REPOSITORY」と表示されるのでしばらく待ちます。Bitriseが対象のリポジトリに含まれるプロジェクトがどのプラットフォームに属するかを判別します。 Validationが完了するとプロジェクトの判別結果に基づいてビルドの設定を自動的に行なってくれます。問題があれば「MANUAL」をクリックし手動で設定できます。 特に問題が無ければ「Confirm」をクリックします。 「Register a Webhook for me!」をクリックするとGitHubやBitbucketからのWebhookを自動的にセットアップし、コードをリポジトリにpushした際、Bitriseが自動的にビルドを開始してくれるようになります。 これでセットアップは完了です。 Workflows BitriseのビルドフローはStepと呼ばれる単一のタスクを実行する部品のコレクションとして表され、 Workflows と呼ばれています。アプリケーションのトップページで「Workflow」タブをクリックすることでWorkflow Editorが起動し、Workflowsを編集可能です。 Workflowsはデフォルトで「primary」と「deploy」が用意されています。新たなWorkflowを作る事も出来ますし、複数のWorkflowを繋げる事も可能です。 DeployGateへのAPKのアップロード DeployGateへのAPKのアップロードは、StepをWorkflowに追加する事で実現します。今回、deploy workflowが実行された場合のみAPKがDeployGateへアップロードされるようにします。「deploy workflow」を選択し、Gradle Runner stepの直後に新たにScript stepを追加します。 DeployGateへのAPKのアップロードはcurlコマンドで実行可能です。詳しくは DeployGate APIリファレンス を参照してください。 以下のコマンドを追加したScript stepで実行するよう設定します。 curl \ -F " token= ${DEPLOY_GATE_API_TOKEN} " \ -F " file=@ ${BITRISE_APK_PATH} " \ -F " message=distribute from alexa " \ https://deploygate.com/api/users/horie1024/apps DEPLOY_GATE_API_TOKEN は環境変数としてBitriseに登録します。Workflow Editorからdeploy workflowでのみ有効な環境変数を登録可能です。 BITRISE_APK_PATH はデフォルトでBitriseが用意する環境変数になります。 最終的なScript stepは以下のようになります。これでdeploy workflowが実行された場合にAPKがDeployGateへアップロードされるようになりました。 AWS LambdaからのBitriseのビルドのトリガー 先程deploy workflowが実行された場合にAPKがDeployGateへアップロードされるようBitriseを設定しました。次にBitriseの Build Trigger API を利用してAWS Lambdaからdeploy workflowを実行します。 Alexaに対応したLambda functionの実装方法 で紹介したコードに処理を追加しましょう。 Build Trigger APIでは、branchやworkflowを指定する事が可能で、deploy workflowでmasterブランチについてビルドし「triggered from alexa」というメッセージをビルドに付加するリクエストBodyは以下のようになります。このリクエストBodyをBuild Trigger APIのエントリーポイントへPOSTリクエストで送信します。 { " hook_info ": { " type ": " bitrise ", " api_token ": " ... " } , " build_params ": { " branch ": " master ", " workflow_id ": " deploy ", " commit_message ": " triggered from alexa " } } requestモジュール を利用したPOSTリクエストは以下のように書く事ができます。コード中のappSlugとapiTokenはAWS Lambdaの環境変数に予め登録しておき実行時に取得します。appSlugおよびapiTokenは、BitriseのアプリケーショントップのCodeタブから確認可能です。 Build Trigger APIへのリクエストが完了後、 this.emit(':tell', '') を使用してユーザーへレスポンスを返します。レスポンスからworkflow idを取得してユーザーへ返すメッセージを動的に変更しています。 request( { method : 'post' , url : `https://www.bitrise.io/app/ ${ appSlug } /build/start.json` , headers : { "Content-Type" : "application/json; charset=utf-8" } , json : true , body : { 'hook_info' : { 'type' : 'bitrise' , 'api_token' : apiToken } , 'build_params' : { 'branch' : 'master' , 'workflow_id' : 'deploy' , 'commit_message' : 'triggered from alexa' } } } , ( error , response , body ) => { let workflowId = body.triggered_workflow this .emit( ':tell' , `ワークフローアイディー ${ workflowId } で、ビットライズでのビルドを開始しました。ビルドが完了後、エーピーケーを配布します。` ) } ) 最終的なコードは以下のようになります。 import * as Alexa from 'alexa-sdk' import * as request from 'request' export const bitriseSkill = ( event : Alexa.RequestBody < any > , context : Alexa.Context ) => { const appSlug = process .env.APP_SLUG const apiToken = process .env.API_TOKEN const appId = process .env.APP_ID const alexa = Alexa.handler(event, context) alexa.appId = appId alexa.registerHandlers( { 'Unhandled' : function () { this .emit( ':tell' , 'よく分かりません。' ) } , 'LaunchRequest' : function () { this .emit( ':tell' , 'こんにちは。このスキルはビットライズのビルドをスタートさせエーピーケーを配布します。' ) } , 'AMAZON.StopIntent' : function () { this .emit( ':tell' , 'またご利用ください。' ) } , 'DistributeApk' : function () { request( { method : 'post' , url : `https://www.bitrise.io/app/ ${ appSlug } /build/start.json` , headers : { "Content-Type" : "application/json; charset=utf-8" } , json : true , body : { 'hook_info' : { 'type' : 'bitrise' , 'api_token' : apiToken } , 'build_params' : { 'branch' : 'master' , 'workflow_id' : 'deploy' , 'commit_message' : 'triggered from alexa' } } } , ( error , response , body ) => { let workflowId = body.triggered_workflow this .emit( ':tell' , `ワークフローアイディー ${ workflowId } で、ビットライズでのビルドを開始しました。ビルドが完了後、エーピーケーを配布します。` ) } ) } } ) alexa.execute() } サンプルコードはこちらです。 github.com AWS Lambdaへのデプロイ IAMの作成 Serverlessが使用するIAMを作成します。Serverlessの AWS - Credentials を参考に作成しましょう。 AWSにログイン後サービスからIAMを選択しユーザーメニューから「ユーザーを追加」をクリックしてください。または こちら をクリックするとユーザーを追加画面が表示されます。 ユーザ名に「serverless-admin」アクセスの種類は「プログラムによるアクセス」にチェックを付けます。 次のステップでは、アクセス権限を設定を設定します。「既存のポリシーを直接アタッチ」からAdministratorAccessにチェックを付けます。 最後に選択内容を確認し「ユーザーの作成」をクリックします。ユーザーの追加が成功すると「アクセスキーID」と「シークレットアクセスキー」が表示されるのでこちらをメモしておきます。 アクセス情報の取扱いには十分注意してください 。 認証情報の登録 作成後 serverless config でAWSの認証情報を登録します。 $ serverless config credentials --provider aws --key YOUR_KEY --secret YOUR_SECRET デプロイ 登録が完了後、 serverless deploy を実行するとTypeScriptのコンパイルからAWS Lambdaへのデプロイまで自動的に行われます。 $ serverless deploy Serverless: Bundling with Webpack... ts-loader: Using typescript@ 2 . 7 . 2 and tsconfig.json Time: 3875ms Asset Size Chunks Chunk Names handler.js 4 . 46 MB 0 [ emitted ] [ big ] handler handler.js.map 5 . 99 MB 0 [ emitted ] handler [ 30 ] ./node_modules/alexa-sdk/lib/utils/textUtils.js 1 . 48 kB { 0 } [ built ] [ 82 ] ./node_modules/extend/index.js 2 . 27 kB { 0 } [ built ] [ 144 ] ./node_modules/request/lib/cookies.js 974 bytes { 0 } [ built ] [ 182 ] ./handler.ts 1 . 96 kB { 0 } [ built ] [ 183 ] ./node_modules/alexa-sdk/index.js 1 . 62 kB { 0 } [ built ] [ 184 ] ./node_modules/alexa-sdk/lib/alexa.js 8 . 83 kB { 0 } [ built ] [ 807 ] ./node_modules/alexa-sdk/lib/templateBuilders/bodyTemplate1Builder.js 923 bytes { 0 } [ built ] [ 808 ] ./node_modules/alexa-sdk/lib/templateBuilders/bodyTemplate2Builder.js 1 . 16 kB { 0 } [ built ] [ 809 ] ./node_modules/alexa-sdk/lib/templateBuilders/bodyTemplate3Builder.js 1 . 16 kB { 0 } [ built ] [ 810 ] ./node_modules/alexa-sdk/lib/templateBuilders/bodyTemplate6Builder.js 1 . 16 kB { 0 } [ built ] [ 817 ] ./node_modules/alexa-sdk/lib/services/directiveService.js 2 . 27 kB { 0 } [ built ] [ 818 ] ./node_modules/alexa-sdk/lib/directives/voicePlayerSpeakDirective.js 604 bytes { 0 } [ built ] [ 819 ] ./node_modules/alexa-sdk/lib/utils/imageUtils.js 3 . 33 kB { 0 } [ built ] [ 820 ] ./node_modules/request/index.js 3 . 97 kB { 0 } [ built ] [ 825 ] ./node_modules/request/request.js 44 . 7 kB { 0 } [ built ] + 920 hidden modules Serverless: Packaging service... Serverless: Uploading CloudFormation file to S3... Serverless: Uploading artifacts... Serverless: Validating template... Serverless: Updating Stack... Serverless: Checking Stack update progress... ......... Serverless: Stack update finished... Service Information service: alexa-bitrise-distribute-apk stage: dev region: us-east-1 stack: alexa-bitrise-distribute-apk-dev api keys: None endpoints: None functions: bitriseSkill: alexa-bitrise-distribute-apk-dev-bitriseSkill Serverless: Removing old service versions... AWSコンソールを開きサービスからLambdaを選択すると「alexa-bitrise-distribute-apk-dev-bitriseSkill」という関数が作成されています。関数名をクリックし関数の詳細画面に遷移後 ARN を確認してください。 Alexaスキルメニューの設定でARNを入力し保存しましょう。 シミュレータでのテスト スキルのテストは、Alexaスキルメニューの「テスト」から簡単に行うことができます。2018年3月現在でベータ版ですが、実際に発話して動作を確認できるためテストシミュレータを使用することをオススメします。 「テストシミュレータに進む」をクリックする事でテストシミュレータに切り替える事が可能です。 また、「このスキルをテストするには対話モデルのタブを完成させてください。」を有効に切り替えてください。 Alexa Simulatorタブの入力フォーム横マイクアイコンをクリックしホールドしている間、テストシミュレータは音声入力を受け付けます。シミュレータでテストする場合最初に「Alexa」と話しかける必要はありません。 実機でのテスト Amazon echoなどのAlexa対応デバイス実機でスキルを動かすには、スキルのベータテストを開始する必要があります。 ベータテストを開始するには、「スキル」「対話モデル」「テスト」「公開情報」「プライバシーコンプライアンス」の全ての項目が完了している必要があります。 ここまでで未入力な項目は「公開情報」「プライバシーコンプライアンス」の2項目のはずなので完了させましょう。 公開情報の入力 公開情報の入力を完了するためには全ての項目を埋める必要があります。スキルのアイコン画像2種類(108×108、512×512)を登録する必要があるので用意してください。 今回はスキルを公開しないので仮で入力してしまって問題ありません。公開する場合全ての情報を入力後に審査を受ける必要があります。 以下のように設定しました。 項目 値 カテゴリー Productivity サブカテゴリー Organizers & Assistants テストの手順 test 国と地域 Japan スキルの簡単な説明 AlexaにAPKの配布を依頼します。 スキルの詳細な説明 Alexaに「ビットライズでAPKを配布して」と話しかけることでAPKをDeployGate経由で配布します。 サンプルフレーズ ビットライズでAPKを配布して キーワード 未入力 プライバシーコンプライアンスの入力 プライバシーコンプライアンスは以下のように設定しました。 項目 値 このスキルを使って何かを購入をしたり、実際にお金を支払うことができますか? いいえ このスキルはユーザーの個人情報を収集しますか? いいえ このスキルは13歳未満の子供をターゲットにしていますか? いいえ 輸出コンプライアンス チェック このスキルは広告を含みますか? いいえ テスターへの追加とベータテストの開始 入力が完了し「申請する」ボタンを押せるようになりますが押さず、Skills Beta Testingの「☆ スキルのベータテスト」をクリックします。 次に、Amazon echoのセットアップに利用したメールアドレスをテスターに追加し「テストの開始」をクリックします。 これでベータテストが開始され、テスターに追加したメールアドレスに招待メールが送信されます。 JP customersのリンクをクリックしてください 。 https://alexa.amazon.co.jp/spa/index.html#skills/your-skills に遷移しますのでログイン後、表示されるダイアログで「スキルテスト」をクリックしてください。 そして「有効にする」をクリックする事でAmazon echo実機でスキルをテストすることができます。 まとめ Alexa対応デバイスに話しかける事でAPKを配布することができました。実際に実機で試してみると声だけで配布を実行できるのが新鮮でとても楽しかったですし、思っていた以上に便利です。今後Slack botで行っていた作業をAlexaスキルで実装してみるなどして、日々の業務効率の改善に生かせるか実験してみようと思います。 最後に VASILYでは、Androidエンジニアを募集しています。少しでも興味がある方のご応募をお待ちしています。