#coding : utf-8"""This sample demonstrates a simple skill built with the Amazon Alexa Skills Kit.The Intent Schema, Custom Slots, and Sample Utterances for this skill, as wellas testing instructions are located at http://amzn.to/1LzFrj6For additional samples, visit the Alexa Skills Kit Getting Started guide athttp://amzn.to/1LGWsLG"""from __future__ import print_function
import urllib.parse
import urllib.request
# --------------- Helpers that build all of the responses ----------------------defbuild_speechlet_response(title, output, reprompt_text, should_end_session):
return {
'outputSpeech': {
'type': 'PlainText',
'text': output
},
'card': {
'type': 'Simple',
'title': "SessionSpeechlet - " + title,
'content': "SessionSpeechlet - " + output
},
'reprompt': {
'outputSpeech': {
'type': 'PlainText',
'text': reprompt_text
}
},
'shouldEndSession': should_end_session
}
defbuild_response(session_attributes, speechlet_response):
return {
'version': '1.0',
'sessionAttributes': session_attributes,
'response': speechlet_response
}
# --------------- Functions that control the skill's behavior ------------------defget_welcome_response():
""" If we wanted to initialize the session to have some attributes we could add those here """
session_attributes = {}
card_title = "Welcome"
speech_output = "メモをしたい内容を教えてください"
reprompt_text = "もう一度。"
should_end_session = Falsereturn build_response(session_attributes, build_speechlet_response(
card_title, speech_output, reprompt_text, should_end_session))
defhandle_session_end_request():
card_title = "Session Ended"
speech_output = "Thank you for trying the Alexa Skills Kit sample. "\"Have a nice day! "# Setting this to true ends the session and exits the skill.
should_end_session = Truereturn build_response({}, build_speechlet_response(
card_title, speech_output, None, should_end_session))
deftake_memo(intent, session):
try:
memo = intent["slots"]["contents"].get("value")
url = 'URL for webhook'
params = urllib.parse.urlencode({"payload": {"text":":memo:"+memo}}).encode("utf-8")
f = urllib.request.urlopen(url, params)
speech_output = "Slackにメモをしました"except:
speech_output = "失敗しました"
session_attributes = {}
reprompt_text = None
should_end_session = Truereturn build_response(session_attributes, build_speechlet_response(
intent['name'], speech_output, reprompt_text, should_end_session))
# --------------- Events ------------------defon_session_started(session_started_request, session):
""" Called when the session starts """print("on_session_started requestId=" + session_started_request['requestId']
+ ", sessionId=" + session['sessionId'])
defon_launch(launch_request, session):
""" Called when the user launches the skill without specifying what they want """print("on_launch requestId=" + launch_request['requestId'] +
", sessionId=" + session['sessionId'])
# Dispatch to your skill's launchreturn get_welcome_response()
defon_intent(intent_request, session):
""" Called when the user specifies an intent for this skill """print("on_intent requestId=" + intent_request['requestId'] +
", sessionId=" + session['sessionId'])
intent = intent_request['intent']
intent_name = intent_request['intent']['name']
# Dispatch to your skill's intent handlersif intent_name == "MemoIntent":
return take_memo(intent, session)
elif intent_name == "AMAZON.HelpIntent":
return get_welcome_response()
elif intent_name == "AMAZON.CancelIntent"or intent_name == "AMAZON.StopIntent":
return handle_session_end_request()
else:
raiseValueError("Invalid intent")
defon_session_ended(session_ended_request, session):
""" Called when the user ends the session. Is not called when the skill returns should_end_session=true """print("on_session_ended requestId=" + session_ended_request['requestId'] +
", sessionId=" + session['sessionId'])
# add cleanup logic here# --------------- Main handler ------------------deflambda_handler(event, context):
""" Route the incoming request based on type (LaunchRequest, IntentRequest, etc.) The JSON body of the request is provided in the event parameter. """print("event.session.application.applicationId=" +
event['session']['application']['applicationId'])
""" Uncomment this if statement and populate with your skill's application ID to prevent someone else from configuring a skill that sends requests to this function. """# if (event['session']['application']['applicationId'] !=# "amzn1.echo-sdk-ams.app.[unique-value-here]"):# raise ValueError("Invalid Application ID")if event['session']['new']:
on_session_started({'requestId': event['request']['requestId']},
event['session'])
if event['request']['type'] == "LaunchRequest":
return on_launch(event['request'], event['session'])
elif event['request']['type'] == "IntentRequest":
return on_intent(event['request'], event['session'])
elif event['request']['type'] == "SessionEndedRequest":
return on_session_ended(event['request'], event['session'])