改変自由です。
バグを見つけたら、いい感じにして使ってください。
#!/usr/local/bin/python2.7
# -*- coding: utf-8 -*-
import json
import sys
reqJson = json.load(sys.stdin)
try:
intentName = reqJson["queryResult"]["intent"]["displayName"]
sessionID = reqJson["session"]
except KeyError:
intentName = ""
contextsPrm={}
orders =[]
try:
for con in reqJson["queryResult"]["outputContexts"]:
if con["name"] == sessionID+"/contexts/counter_business":
contextsPrm = con["parameters"]
orders = contextsPrm["ORDER"]
except KeyError:
pass
if intentName == "IsEatInIntent":
inParm = reqJson["queryResult"]["parameters"]
place = inParm["PLACE"]
contextsPrm.setdefault("PLACE", place)
resJson ={
"fulfillmentText": place+u"でお召し上がりですね。ご注文をお伺いします。",
"fulfillmentMessages": [
{
"text": {
"text": [
place,
u"でお召し上がりですね。ご注文をお伺いします。"
]
}
}
],
"outputContexts": [
{
"name": sessionID+"/contexts/counter_business",
"lifespanCount": 10,
"parameters": contextsPrm
}
]
}
elif intentName == "MenuIntent":
resJson ={
"fulfillmentText": u"フードメニューは、ハンバーガー、ナゲット、ポテトがあります。ドリンクメニューはコーラ、オレンジジュース、コーヒーがあります。何になさいますか?",
"fulfillmentMessages": [
{
"text": {
"text": [
u"フードメニューは、ハンバーガー、ナゲット、ポテトがあります。",
u"ドリンクメニューはコーラ、オレンジジュース、コーヒーがあります。",
u"何になさいますか?"
]
}
}
]
}
elif intentName == "RecommendIntent":
resJson ={
"fulfillmentText": u"お勧めはハンバーガーですね。何になさいますか?",
"fulfillmentMessages": [
{
"text": {
"text": [
u"お勧めはハンバーガーですね",
u"何になさいますか?"
]
}
}
]
}
elif intentName == "MoreRecommendIntent":
hasFoodOrder = False
hasDrinkOrder = False
if len(orders) > 0:
for orderDetail in orders:
if orderDetail["class"] =="Drink":
hasDrinkOrder=True
elif orderDetail["class"] == "Food":
hasFoodOrder=True
if not hasDrinkOrder:
resTxt = u"ではコーラはいかがでしょうか?"
contextsPrm.setdefault("REC_ORDER", {"class":"Drink","name":u"コーラ","number":"1"})
elif not hasFoodOrder :
resTxt = u"ではナゲットはいかがでしょうか?"
contextsPrm.setdefault("REC_ORDER", {"class":"Food","name":u"ナゲット","number":"1"})
else:
resTxt = u"ではポテトはいかがでしょうか?"
contextsPrm.setdefault("REC_ORDER", {"class":"Food","name":u"ポテト","number":"1"})
resJson ={
"fulfillmentText": resTxt,
"fulfillmentMessages": [
{
"text": {
"text": [
resTxt
]
}
}
],
"outputContexts": [
{
"name": sessionID+"/contexts/counter_business",
"lifespanCount": 10,
"parameters": contextsPrm
}
]
}
elif intentName == "MoreRecommendIntent - yes":
order=contextsPrm["REC_ORDER"]["name"]
number=contextsPrm["REC_ORDER"]["number"]
orders.append(contextsPrm.pop("REC_ORDER"))
contextsPrm.setdefault("ORDER", orders)
resJson ={
"fulfillmentText": order + u"を" + number + u"ですね。他にご注文はありますか?",
"fulfillmentMessages": [
{
"text": {
"text": [
order + u"を" + number + u"ですね。",
u"他にご注文はありますか?"
]
}
}
],
"outputContexts": [
{
"name": sessionID+"/contexts/counter_business",
"lifespanCount": 10,
"parameters": contextsPrm
}
]
}
elif intentName == "OrderIntent":
inParm = reqJson["queryResult"]["parameters"]
food = inParm["Food"]
number = inParm["number"]
drink = inParm["Drink"]
if food != "":
order = food
orderClass = "Food"
else:
order = drink
orderClass = "Drink"
if number != "":
order_number = str(int(number))
else:
order_number = "1"
orders.append({"class":orderClass,"name":order,"number":order_number})
contextsPrm.setdefault("ORDER", orders)
resJson ={
"fulfillmentText": order+u"を" + order_number + u"ですね。他にご注文はありますか?",
"fulfillmentMessages": [
{
"text": {
"text": [
order+u"を" + order_number + u"ですね。",
u"他にご注文はありますか?"
]
}
}
],
"outputContexts": [
{
"name": sessionID+"/contexts/counter_business",
"lifespanCount": 10,
"parameters": contextsPrm
}
]
}
elif intentName == "ResetIntent":
contextsPrm.setdefault("ORDER", [])
resJson ={
"fulfillmentText": u"わかりました。注文をすべてキャンセルします。ご注文はありますか?",
"fulfillmentMessages": [
{
"text": {
"text": [
u"わかりました。",
u"注文をすべてキャンセルします。ご注文はありますか?"
]
}
}
],
"outputContexts": [
{
"name": sessionID+"/contexts/counter_business",
"lifespanCount": 0,
"parameters": contextsPrm
}
]
}
elif intentName == "ConcludeIntent":
if len(orders) > 0:
if contextsPrm["PLACE"] != "":
orderTxt = contextsPrm["PLACE"]+u"で"
else:
orderTxt = u"店内で"
for orderDetail in orders:
orderTxt = orderTxt + orderDetail["name"] + u"を" + orderDetail["number"] + u"、"
with open("order.txt","w") as odrFile:
json.dump(contextsPrm["ORDER"],odrFile,indent=4)
resJson ={
"fulfillmentText": orderTxt+u"ですね。少々お待ちください。",
"fulfillmentMessages": [
{
"text": {
"text": [
orderTxt,
u"ですね。少々お待ちください。"
]
}
}
],
"outputContexts": [
{
"name": sessionID+"/contexts/counter_business",
"lifespanCount": 1,
"parameters": {
}
}
]
}
else:
resJson ={
"fulfillmentText": u"注文の内容が分かりませんでした。最初からやり直してください。ご注文はありますか?",
"fulfillmentMessages": [
{
"text": {
"text": [
u"注文の内容が分かりませんでした。最初からやり直してください。",
u"ご注文はありますか?"
]
}
}
],
"outputContexts": [
{
"name": sessionID+"/contexts/counter_business",
"lifespanCount": 1,
"parameters": {
}
}
]
}
else:
pass
print('Content-type: application/json\n\n')
json.dump(resJson,sys.stdout)