位置情報を活用したアレクサスキルを作成します。
スキルを起動すると、ユーザの位置情報をアレクサが話してくれます。
この記事では、下記動画のスキルを作成しながら、位置情報を活用したアレクサスキルの開発方法をご紹介します。
概要
- 記事を読んで身につくこと:上記動画のスキルが作成できる
- 対象の読者:アレクサスキル開発初心者
- 所要時間:約1時間
手順
- スキルの作成
- AWS Lambda 関数の作成
- エンドポイントの設定
- 対話モデルの設定
- 呼び出し名の設定
- インテントの設定
- サンプルスキルで位置情報を使う準備
- スキルのベータテストに自分を招待
- ベータテストを利用可能にする
スキルの作成
新しいスキルを作成します。
Alexa Developper Consoleにログインし、
Alexaスキル 一覧に移動します。
「スキルを作成」を押して、必要事項を入力していきます。

スキル名:位置情報のサンプル
デフォルトの言語:日本語(日本)
スキルに選択するモデル:カスタム
スキルのホスティング:セルフホスト
入力が完了したら、「スキルの作成」を選択します。
これでスキルの準備ができました。

左のタブから「エンドポイント」を選択し、スキルIDを控えておきます。(AWS Lamndaの準備で使用します。)
AWS Lambda関数の作成
次にスキルをホスティングするAWS Lambdaを準備しましょう。
AWS Lambdaはサーバレスのコード実行環境です。

まずは、AWS のコンソールにログインします。
AWSマネジメントコンソールの「サービスを検索する」に’lamnda’と入力します。

Lambdaを選択し、「関数の作成」を押します。

「一から作成」を選択し、下記のとおり設定します。
名前:location_sample
ランタイム:Python3.7
ロール:既存のロールを選択
既存のロール:lambda_basic_execution

Designerウィンドウの左トリガーから「Alexa Skill Kit」を選択します。

トリガーの設定ウィンドウで、スキルID検証を「有効」、
スキルIDに先ほど作成したスキルのIDを入力し、「追加」を選択します。
関数コードに下記をコピペします。
# -*- coding: utf-8 -*-
from __future__ import print_function
import json
import urllib.request
import datetime
def describe_device_address(api_host, device_id, access_token):
req = urllib.request.Request("{}/v1/devices/{}/settings/address".format(api_host, device_id))
req.add_header("Authorization", "Bearer {}".format(access_token))
response = urllib.request.urlopen(req)
if response.getcode() == 200:
return json.loads(response.read())
elif response.getcode() == 204:
print("Successfully requested from the device address API, but no address was returned.")
raise Exception(response.msg)
elif response.getcode() == 403:
print("The consent token we had wasn't authorized to access the user's address.")
raise Exception(response.msg)
else:
print(response.getcode())
raise Exception(response.msg)
def lambda_handler(event, context):
api_host = event["context"]["System"]["apiEndpoint"]
device_id = event["context"]["System"]["device"]["deviceId"]
token = event["context"]["System"]["apiAccessToken"]
address = describe_device_address(api_host, device_id, token)
speech_output = "国コードは {0}。 郵便番号は {1}。住所は {2} {3} {4} {5} 。".format(
address["countryCode"],
address["postalCode"],
address["stateOrRegion"],
address["city"],
address["addressLine1"],
address["addressLine2"],
)
response = build_response(build_speechlet_response(speech_output))
return response
def build_speechlet_response(output):
title = 'Address Demo'
return {
'outputSpeech': {
'type': 'SSML',
'ssml': '<speak>' + output + '</speak>'
},
'card': {
'type': 'Standard',
"text": output
},
'reprompt': {
'outputSpeech': {
'type': 'SSML',
'text': title
}
},
'shouldEndSession': True
}
def build_response(speechlet_response):
return {
'version': '1.0',
'response': speechlet_response
}
エンドポイントの設定
アレクサスキルがこの関数を参照するように、スキルのエンドポイントを設定します。
Alexa Developer Consoleの左のタブからエンドポイントを選択し、「デフォルトの地域(必須)」にAWS Lambdaの関数のARNを記載します。
ARNはコンソールの右上に記載されている下記形式の文字列です。
arn:aws:lambda:<リージョン名>:xxxxxxxxxxxx:function:<関数名>
対話モデルの設定
呼び出し名の設定
「呼び出し名」タブにスキルの呼び出し名を設定します。
今回は「位置情報のサンプル」を設定しました。
インテントの設定
「インテント」タブに下記のように設定します。
インテント名:lambda_handler
サンプル発話:はじめて,スタート,開始
サンプルスキルで位置情報を使う準備
スキルが位置情報を使うためにはアクセス権限を付与し、ユーザが許可をする必要があります。
- スキルのベータテストに自分を登録
- アクセス権限の追加(Alexa Skill Console)
- アクセスの許可(Alexaモバイルアプリ)
スキルのベータテストに自分を登録
作成したスキルを実機でテストするため、アレクサスキルのベータテストに自分を招待します。
位置情報を使用するスキルはアクセストークンの関係で、Alexa Developer ConsoleのAlexaシミュレータからは正常に動作しないので注意してください。
1.スキルをベータテスト可能な状態にする
Alexa Skill Consoleの「公開」タブを開き、項目を入力します。

必須項目のほかに、位置情報を利用する場合には「プライバシーポリシーのURL」の記載が必要です。自分しか使わないサンプルスキルの場合は適当に設定して構いません。
「保存して続行」を選択し、「プライバシーとコンプライアンス」の項目も入力します。
さらに「保存して続行」を選択し、公開範囲を下記の通り設定します。
このスキルにアクセスできるユーザー :公開
ベータテスト管理者用Eメールアドレス 、スキルのベータテスト:自身のメールアドレス
このスキルを利用できる国を選択してください :Amazonがスキルを配布するすべての国と地域
入力したら「保存して続行」を選択すると、「認定」タブに移動し、スキルの検査が行われます。
「検証」タブで「エラーは見つかりませんでした」と表示されたら、スキルのベータテストが利用可能になります。
ベータテストを利用可能にする
先ほど設定したスキルのベータテストのメールアドレスにメールが届くので、リンクをAmazonAlexaのアプリがインストールされているスマートフォン等で開きます。
試してみる
これでスキルを使用する準備ができました。
アレクサに「位置情報のサンプルをはじめて」と言ってみましょう。
設定している所在地情報をアレクサが話します。
今回サンプルで設定した所在地情報は架空のものです。
位置情報を利用するスキルを作成する場合は、所在地情報の権限がない場合に設定を促すカードを表示するなどの処理が必要となります。

