Попытка создать простую локальную грамматику в приложении 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 })
Другие вопросы по тегам