目次
- きっかけ
- 事前準備
- コード
1. きっかけ
Alexa-hostedは独自のAWS環境を用意することなく、スキル開発を進めることが可能です。
また、テンプレートやVScodeの拡張機能も用意されているみたいです。
エンドポイント等も設定せずとも使えるため、複雑なスキル作成には向いていませんが、
簡単なスキル作成にはもってこいですね!!!
lambdaだけでなく、S3,Dynamodbも利用できるみたいです。
AlexaSkillsKitで用意されたS3環境にlambdaがアップロードするやり方が全然乗っていなかったので、
lambdaからS3に対してアップロードする 方法、コードを提供します。
今回は、Alexaと会話終了と共にS3に会話内容を保存するコードを共有します。
2. 事前準備
以下のS3 Storageを押します。
そうすると、用意されているバケットがありますので、コピーしておきます。
3. コード
いろいろなやり方があると思いますが、私は以下の方法で実現できました。
boto3を使っています。
requirements.txtにはboto3を記載しておきましょう。
また、インテントにEndSessionIntentを追加しています。
※以下はプログラムの一部です。
import boto3
import ask_sdk_core.utils as ask_utils
from ask_sdk_core.handler_input import HandlerInput
# Alexa-hosted skillのためのS3クライアント初期化
s3_client = boto3.client('s3')
# Alexa-hosted skillのバケット名を環境変数から取得
bucket_name = "YOUR_BUCKET_NAME"
class EndSessionHandler(AbstractRequestHandler):
def can_handle(self, handler_input):
return ask_utils.is_intent_name("EndSessionIntent")(handler_input)
def handle(self, handler_input):
# セッション属性から会話履歴を取得
session_attr = handler_input.attributes_manager.session_attributes
conversations = session_attr.get("conversations", [])
# 現在の日付と時間をファイル名にする
now = datetime.now()
file_name = f"Media/トーク履歴/{now.strftime('%Y-%m-%d_%H-%M-%S')}.txt"
# 会話履歴を整形して保存
formatted_conversations = "\n".join([f"{c['role']}: {c['content']}" for c in conversations])
# S3に会話履歴を保存
try:
s3_client.put_object(
Bucket=bucket_name,
Key=file_name,
Body=formatted_conversations.encode("utf-8")
)
speak_output = "スキルを終了します。さようなら。会話履歴は保存されました。"
except Exception as e:
speak_output = f"保存に失敗しました: {e}"
# 会話終了の応答
return (
handler_input.response_builder
.speak(speak_output)
.response
)
うん、ちゃんとAlexaとの会話内容がS3にアップロードされていますね!^^
ご参考までに!!
お読みいただき、ありがとうございました!