サンプルスキル
このページでは、ASK SDK for Pythonを使って魅力的なAlexaスキルを開発する方法を説明するスキルサンプルを紹介します。
- Hello World(クラス使用)
- Hello World(デコレーター使用)
- カラーピッカー
- ファクト
- クイズゲーム
- デバイスのアドレス
- スキル内課金を使用した豆知識
- シティガイド
- ペットマッチ
- ハイ&ローゲーム
- AudioPlayer SingleStreamおよびMultiStream
- Pager Karaoke
- Hello Worldサンプルスキルのソースコード
Hello World(クラス使用)
このコードサンプルでは、サンプルがトリガーされたときのAlexaの応答を聞くことができます。Alexa Skills KitやAWS Lambdaに慣れるための最小限のサンプルです。このサンプルでは、リクエストハンドラーのクラスを使用してスキルを作成する方法を説明します。詳細については、リクエスト処理を参照してください。
Hello World(デコレーター使用)
このコードサンプルでは、サンプルがトリガーされたときのAlexaの応答を聞くことができます。Alexa Skills KitやAWS Lambdaに慣れるための最小限のサンプルです。このサンプルでは、リクエストハンドラーのデコレーターを使用してスキルを作成する方法を説明します。詳細については、リクエスト処理を参照してください。
カラーピッカー
Hello Worldから機能を一歩進めて、ユーザーが好きな色を指定したら、Alexaが覚えてユーザーに知らせるようにします。ユーザーからの入力をキャプチャーできるようにします。スロットの使い方についても説明します。さらに、セッションアトリビュートと、リクエスト、応答のインターセプターの使い方も説明します。
ファクト
基本的な豆知識スキルのテンプレートです。トピックについての豆知識のリストを提供すると、ユーザーがスキルを呼び出したときに、Alexaがリストから豆知識をランダムに選んでユーザーに伝えます。スキルで複数のロケールを使用し国際化する方法を説明します。
クイズゲーム
基本的なクイズゲームスキルのテンプレートです。あらかじめ提供しておいた豆知識のリストの中から、Alexaがユーザーにクイズを出します。画面付きのAlexa搭載デバイスでの表示をサポートする、テンプレートレンダリングディレクティブの使い方について説明します。
デバイスのアドレス
ユーザーのデバイス設定で設定したアドレスをリクエストし、設定されたアドレスにアクセスするサンプルスキルです。SDKを使用したAlexa APIの使い方について説明します。詳細については、Alexaサービスクライアントを参照してください。
スキル内課金を使用した豆知識
スキル内課金機能を使用した豆知識スキルのサンプルです。購入を促進するさまざまなパックや、パックを一括でロック解除するサブスクリプションを提供します。収益化Alexaサービスの呼び出し方とASK CLIを使ってスキル内課金を有効にする方法を説明します。
シティガイド
周辺地域のお勧め情報スキルのテンプレートです。Alexaはユーザーのリクエストに従って、開発者が提供したデータからお勧め情報をユーザーに知らせます。スキルから外部APIを呼び出す方法を説明します。
ペットマッチ
ユーザーとペットをマッチングするサンプルスキルです。Alexaは一致するペットを見つけるのに必要な情報をユーザーにたずねます。必要な情報をすべて収集できたら、スキルはデータを外部のウェブサービスに送信し、そこでデータが処理されてマッチングデータが返されます。ダイアログ管理とエンティティ解決を使って、プロンプトを出してユーザーから複数の値を受け取り解析する方法を説明します。
ハイ&ローゲーム
基本的なハイ&ローゲームスキルのテンプレートです。ユーザーが数字を推測し、Alexaがその数字が正解より大きいか小さいかを答えます。SDKの永続アトリビュートと永続アダプターの使い方について説明します。
AudioPlayer SingleStreamおよびMultiStream
AlexaのAudioPlayerインターフェースとPlaybackControllerインターフェースを使ってオーディオプレイヤースキルを開発する方法を説明するスキルサンプルです。SingleStreamスキルサンプルでは、ローカリゼーションのサポート付きでライブラジオスキルを作成する方法を説明します。MultiStreamスキルサンプルでは、録音済みの複数のオーディオストリームを再生できる基本的なポッドキャストスキルを作成する方法を説明します。
Pager Karaoke
このサンプルでは、Alexa Presentation Language(APL)の3つの機能であるPagerコンポーネント、SpeakItemコマンド、スキルコードのデバイスの特性へのアクセスについて説明します。
Hello Worldサンプルスキルのソースコード
初めてのスキル開発セクションで述べたように、次にHello World
スキルのソースコード全文を示します(クラスとデコレーターを使用しています)。
# -*- coding: utf-8 -*-
# これは、スキルビルダーのハンドラークラスを使用した実装の
# アプローチにより作成された単純なHello WorldのAlexaスキルです。
import logging
from ask_sdk_core.skill_builder import SkillBuilder
from ask_sdk_core.dispatch_components import AbstractRequestHandler
from ask_sdk_core.dispatch_components import AbstractExceptionHandler
from ask_sdk_core.utils import is_request_type, is_intent_name
from ask_sdk_core.handler_input import HandlerInput
from ask_sdk_model.ui import SimpleCard
from ask_sdk_model import Response
sb = SkillBuilder()
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
class LaunchRequestHandler(AbstractRequestHandler):
"""スキルを起動するハンドラーです。"""
def can_handle(self, handler_input):
# type: (HandlerInput) -> bool
return is_request_type("LaunchRequest")(handler_input)
def handle(self, handler_input):
# type: (HandlerInput) -> Response
speech_text = "ようこそ、アレクサスキルキットへ。こんにちは、と言ってみてください。"
handler_input.response_builder.speak(speech_text).set_card(
SimpleCard("ハローワールド", speech_text)).set_should_end_session(
False)
return handler_input.response_builder.response
class HelloWorldIntentHandler(AbstractRequestHandler):
"""ハローワールドインテント用ハンドラー。"""
def can_handle(self, handler_input):
# type: (HandlerInput) -> bool
return is_intent_name("HelloWorldIntent")(handler_input)
def handle(self, handler_input):
# type: (HandlerInput) -> Response
speech_text = "クラスを使ったPythonの世界へようこそ。"
handler_input.response_builder.speak(speech_text).set_card(
SimpleCard("ハローワールド", speech_text)).set_should_end_session(
True)
return handler_input.response_builder.response
class HelpIntentHandler(AbstractRequestHandler):
"""Helpインテントのハンドラー。"""
def can_handle(self, handler_input):
# type: (HandlerInput) -> bool
return is_intent_name("AMAZON.HelpIntent")(handler_input)
def handle(self, handler_input):
# type: (HandlerInput) -> Response
speech_text = "こんにちは。と言ってみてください。"
handler_input.response_builder.speak(speech_text).ask(
speech_text).set_card(SimpleCard(
"ハローワールド", speech_text))
return handler_input.response_builder.response
class CancelOrStopIntentHandler(AbstractRequestHandler):
"""CancelおよびStopインテントの単一ハンドラー。"""
def can_handle(self, handler_input):
# type: (HandlerInput) -> bool
return (is_intent_name("AMAZON.CancelIntent")(handler_input) or
is_intent_name("AMAZON.StopIntent")(handler_input))
def handle(self, handler_input):
# type: (HandlerInput) -> Response
speech_text = "さようなら"
handler_input.response_builder.speak(speech_text).set_card(
SimpleCard("ハローワールド", speech_text))
return handler_input.response_builder.response
class FallbackIntentHandler(AbstractRequestHandler):
"""
このハンドラーは、サポートされていないロケールではトリガーされません。
そのため、どのロケールでも安全にデプロイできます。
"""
def can_handle(self, handler_input):
# type: (HandlerInput) -> bool
return is_intent_name("AMAZON.FallbackIntent")(handler_input)
def handle(self, handler_input):
# type: (HandlerInput) -> Response
speech_text = (
"ハローワールドスキルは、お手伝いできません。"
"こんにちは。と言ってみてください。")
reprompt = "こんにちは。と言ってみてください。"
handler_input.response_builder.speak(speech_text).ask(reprompt)
return handler_input.response_builder.response
class SessionEndedRequestHandler(AbstractRequestHandler):
"""セッション終了のハンドラー。"""
def can_handle(self, handler_input):
# type: (HandlerInput) -> bool
return is_request_type("SessionEndedRequest")(handler_input)
def handle(self, handler_input):
# type: (HandlerInput) -> Response
return handler_input.response_builder.response
class CatchAllExceptionHandler(AbstractExceptionHandler):
"""すべての例外ハンドラーを取得し、例外をログに記録して、
カスタムメッセージで応答します。
"""
def can_handle(self, handler_input, exception):
# type: (HandlerInput, Exception) -> bool
return True
def handle(self, handler_input, exception):
# type: (HandlerInput, Exception) -> Response
logger.error(exception, exc_info=True)
speech = "申し訳ありません。問題が発生しました。後でもう一度試してください。"
handler_input.response_builder.speak(speech).ask(speech)
return handler_input.response_builder.response
sb.add_request_handler(LaunchRequestHandler())
sb.add_request_handler(HelloWorldIntentHandler())
sb.add_request_handler(HelpIntentHandler())
sb.add_request_handler(CancelOrStopIntentHandler())
sb.add_request_handler(FallbackIntentHandler())
sb.add_request_handler(SessionEndedRequestHandler())
sb.add_exception_handler(CatchAllExceptionHandler())
handler = sb.lambda_handler()
# -*- coding: utf-8 -*-
# これは、スキルビルダーのハンドラークラスを使用した実装の
# アプローチにより作成された単純なHello WorldのAlexaスキルです。
import logging
from ask_sdk_core.skill_builder import SkillBuilder
from ask_sdk_core.utils import is_request_type, is_intent_name
from ask_sdk_core.handler_input import HandlerInput
from ask_sdk_model.ui import SimpleCard
from ask_sdk_model import Response
sb = SkillBuilder()
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
@sb.request_handler(can_handle_func=is_request_type("LaunchRequest"))
def launch_request_handler(handler_input):
"""スキルを起動するハンドラーです。"""
# type: (HandlerInput) -> Response
speech_text = "ようこそ、アレクサスキルキットへ。こんにちは、と言ってみてください。"
return handler_input.response_builder.speak(speech_text).set_card(
SimpleCard("ハローワールド", speech_text)).set_should_end_session(
False).response
@sb.request_handler(can_handle_func=is_intent_name("HelloWorldIntent"))
def hello_world_intent_handler(handler_input):
"""ハローワールドインテント用ハンドラー。"""
# type: (HandlerInput) -> Response
speech_text = "デコレーターを使ったPythonの世界へようこそ。"
return handler_input.response_builder.speak(speech_text).set_card(
SimpleCard("ハローワールド", speech_text)).set_should_end_session(
True).response
@sb.request_handler(can_handle_func=is_intent_name("AMAZON.HelpIntent"))
def help_intent_handler(handler_input):
"""Helpインテントのハンドラー。"""
# type: (HandlerInput) -> Response
speech_text = "こんにちは。と言ってみてください。"
return handler_input.response_builder.speak(speech_text).ask(
speech_text).set_card(SimpleCard(
"ハローワールド", speech_text)).response
@sb.request_handler(
can_handle_func=lambda handler_input:
is_intent_name("AMAZON.CancelIntent")(handler_input) or
is_intent_name("AMAZON.StopIntent")(handler_input))
def cancel_and_stop_intent_handler(handler_input):
"""CancelおよびStopインテントの単一ハンドラー。"""
# type: (HandlerInput) -> Response
speech_text = "さようなら"
return handler_input.response_builder.speak(speech_text).set_card(
SimpleCard("ハローワールド", speech_text)).response
@sb.request_handler(can_handle_func=is_intent_name("AMAZON.FallbackIntent"))
def fallback_handler(handler_input):
"""
このハンドラーは、サポートされていないロケールではトリガーされません。
そのため、どのロケールでも安全にデプロイできます。
"""
# type: (HandlerInput) -> Response
speech = (
"ハローワールドスキルは、お手伝いできません。"
"こんにちは。と言ってみてください。")
reprompt = "こんにちは。と言ってみてください。"
handler_input.response_builder.speak(speech).ask(reprompt)
return handler_input.response_builder.response
@sb.request_handler(can_handle_func=is_request_type("SessionEndedRequest"))
def session_ended_request_handler(handler_input):
"""セッション終了のハンドラー。"""
# type: (HandlerInput) -> Response
return handler_input.response_builder.response
@sb.exception_handler(can_handle_func=lambda i, e: True)
def all_exception_handler(handler_input, exception):
"""すべての例外ハンドラーを取得し、例外をログに記録して、
カスタムメッセージで応答します。
"""
# type: (HandlerInput, Exception) -> Response
logger.error(exception, exc_info=True)
speech = "申し訳ありません。問題が発生しました。後でもう一度試してください。"
handler_input.response_builder.speak(speech).ask(speech)
return handler_input.response_builder.response
handler = sb.lambda_handler()
最終更新日: 2023 年 05 月 15 日