89 lines
3.0 KiB
Python
89 lines
3.0 KiB
Python
|
|
import logging
|
||
|
|
import os
|
||
|
|
import requests
|
||
|
|
|
||
|
|
from flask import Flask, json, render_template
|
||
|
|
from flask_ask import Ask, request, session, question, statement, context, buy, upsell, refund, logger
|
||
|
|
from model import Product
|
||
|
|
|
||
|
|
app = Flask(__name__)
|
||
|
|
ask = Ask(app, "/")
|
||
|
|
logging.getLogger('flask_ask').setLevel(logging.DEBUG)
|
||
|
|
|
||
|
|
|
||
|
|
PRODUCT_KEY = "PRODUCT"
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
@ask.on_purchase_completed( mapping={'payload': 'payload','name':'name','status':'status','token':'token'})
|
||
|
|
def completed(payload, name, status, token):
|
||
|
|
products = Product(context.System.apiAccessToken)
|
||
|
|
logger.info('on-purchase-completed {}'.format( request))
|
||
|
|
logger.info('payload: {} {}'.format(payload.purchaseResult, payload.productId))
|
||
|
|
logger.info('name: {}'.format(name))
|
||
|
|
logger.info('token: {}'.format(token))
|
||
|
|
logger.info('status: {}'.format( status.code == 200))
|
||
|
|
product_name = products.productName(payload.productId)
|
||
|
|
logger.info('Product name'.format(product_name))
|
||
|
|
if status.code == '200' and ('ACCEPTED' in payload.purchaseResult):
|
||
|
|
return question('To listen it just say - play {} '.format(product_name))
|
||
|
|
else:
|
||
|
|
return question('Do you want to buy another product?')
|
||
|
|
|
||
|
|
@ask.launch
|
||
|
|
def launch():
|
||
|
|
products = Product(context.System.apiAccessToken)
|
||
|
|
question_text = render_template('welcome', products=products.list())
|
||
|
|
reprompt_text = render_template('welcome_reprompt')
|
||
|
|
return question(question_text).reprompt(reprompt_text).simple_card('Welcome', question_text)
|
||
|
|
|
||
|
|
|
||
|
|
@ask.intent('BuySkillItemIntent', mapping={'product_name': 'ProductName'})
|
||
|
|
def buy_intent(product_name):
|
||
|
|
products = Product(context.System.apiAccessToken)
|
||
|
|
logger.info("PRODUCT: {}".format(product_name))
|
||
|
|
buy_card = render_template('buy_card', product=product_name)
|
||
|
|
productId = products.productId(product_name)
|
||
|
|
if productId is not None:
|
||
|
|
session.attributes[PRODUCT_KEY] = productId
|
||
|
|
else:
|
||
|
|
return statement("I didn't find a product {}".format(product_name))
|
||
|
|
raise NotImplementedError()
|
||
|
|
return buy(productId).simple_card('Welcome', question_text)
|
||
|
|
|
||
|
|
#return upsell(product,'get this great product')
|
||
|
|
|
||
|
|
|
||
|
|
@ask.intent('RefundSkillItemIntent', mapping={'product_name': 'ProductName'})
|
||
|
|
def refund_intent(product_name):
|
||
|
|
refund_card = render_template('refund_card')
|
||
|
|
logger.info("PRODUCT: {}".format(product_name))
|
||
|
|
|
||
|
|
products = Product(context.System.apiAccessToken)
|
||
|
|
productId = products.productId(product_name)
|
||
|
|
|
||
|
|
if productId is not None:
|
||
|
|
session.attributes[PRODUCT_KEY] = productId
|
||
|
|
else:
|
||
|
|
raise NotImplementedError()
|
||
|
|
return refund(productId)
|
||
|
|
|
||
|
|
|
||
|
|
@ask.intent('AMAZON.FallbackIntent')
|
||
|
|
def fallback_intent():
|
||
|
|
return statement("FallbackIntent")
|
||
|
|
|
||
|
|
|
||
|
|
@ask.session_ended
|
||
|
|
def session_ended():
|
||
|
|
return "{}", 200
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == '__main__':
|
||
|
|
if 'ASK_VERIFY_REQUESTS' in os.environ:
|
||
|
|
verify = str(os.environ.get('ASK_VERIFY_REQUESTS', '')).lower()
|
||
|
|
if verify == 'false':
|
||
|
|
app.config['ASK_VERIFY_REQUESTS'] = False
|
||
|
|
app.run(debug=True)
|
||
|
|
|