Попытка создать простую локальную грамматику в приложении Tropo, написанном на Python
Я создаю приложение в Tropo, используя Python, и мне было интересно, смогу ли я создать небольшую грамматику, которая является локальной. Я читал о внешних грамматиках SRGS
а также GRXML
но я могу создать его, используя список Python прямо в коде. Ниже то, что я пытаюсь сделать.
food = ['cheeseburger', 'hot dog', 'salad']
ask("What food would you like?",
#{'choices': "cheeseburger, hot dog, salad",
{'choices': food,
'attempts':3,
'onChoice': fill,
'onBadChoice': nomatch,
'onTimeout': noinput })
Приведенный выше код компилируется, но зависает, когда доходит до этого вопроса.
2 ответа
Если вы хотите, чтобы Tropo спросил вызывающего абонента "Какую пищу вы бы хотели" и дал 3 попытки ответить одной из фраз в "food", попробуйте отправить следующий json-ответ:
{
"tropo": [
{
"ask": {
"choices": {
"value": "cheeseburger, hot dog, salad",
"mode": "speech",
"terminator": "#"
},
"attempts": 3,
"name": "foodchoice",
"recognizer": null,
"required": null,
"say": {
"value": "What food would you like"
}
}
},
{
"on": {
"event": "continue",
"name": null,
"next": "/fill",
"required": true
}
},
{
"on": {
"event": "incomplete",
"name": null,
"next": "/noinput",
"required": true
}
},
{
"on": {
"event": "error",
"name": null,
"next": "/nomatch",
"required": true
}
}
]
}
Чтобы точно ответить на ваш вопрос, вам нужно понять библиотеку Python Tropo. Я не знаком с Python, но библиотеки Tropo Java и NodeJS, кажется, устарели... так что, если Python тоже есть, вам придется проделать еще некоторую работу, чтобы построить и вернуть этот объект JSON.
Согласно примеру в Tropo docs:
result = ask("What's your favorite color? Choose from red, blue or green.", {
"choices":"red, blue, green"})
say("You said " + result.value)
log("They said " + result.value)
choices
это строка, а не список, так что вы бы хотели сделать это:
food = "cheeseburger, hot dog, salad"
ask("What food would you like?",
{'choices': food,
'attempts':3,
'onChoice': fill,
'onBadChoice': nomatch,
'onTimeout': noinput })