Это может быть неочевидно, но ответ на оба ваших вопроса можно найти, помня, что Intents фиксирует то, что пользователь говорит , а не , что вы делаете с тем, что онисказать.Вы можете иметь несколько Intents, чтобы захватить различные фразы, и обрабатывать их в основном одинаково в вашем исполнении.(И для этого требуется, чтобы у вас был какой-то закулисный веб-крючок за кулисами.)
Как я могу принять по умолчанию 1 билет?
Есть параподходов.
Во-первых, вы можете настроить Intent для захвата фраз, предлагающих один тикет, и другого Intent, для которого явно требуется число.Так что, возможно, одно намерение (возможно book.single) с
- Я бы хотел получить билет на Star Wars в IMax
- Как насчет показа IMax для Star Wars
- Дайте мне посмотреть «Звездные войны» для IMax
и так далее.Хотя у вас также будет другое намерение (возможно, book.multiple) с
- , я бы хотел 2 билета на Star Wars в IMax
- 2 билета, пожалуйста, на IMax Star Wars
и т. Д.
В вашем исполнении вы можете иметь некоторую функцию, которая принимает три параметра
bookTickets( num, movie, cinema );
В обработчике Intent для book.single, вы 'вызовите это с помощью
bookTickets( 1, movieParameter, cinemaParameter );
, находясь в обработчике Intent для book.multiple, это будет сделано с помощью
bookTickets( countParameter, movieParameter, cinemaParameter );
В каждом случае выполнение все равно заканчивается вызовом одной и той же функциичтобы выполнить реальную работу, но обработчик устанавливает соответствующие значения.
Как я могу ограничить количество заказанных билетов?
Это относится к тому, что вы не сделалине обращайтесь - что вы хотите, чтобы произошло, если они пытаются заказать больше?Вы хотите направить их на групповой заказ?Отклонить это прямо?Что бы вы ни хотели - убедитесь, что вы спланировали этот путь разговора, прежде чем пытаться его реализовать.
В этом случае это не то, что вы хотите применить в намерении диалогового потока.Обращаться с этим в вашем исполнении проще всего.Там вы примените любую логику для различных параметров и вернете сообщение, запрашивающее их об их следующем ответе.
Логика лучше всего обрабатывается при выполнении.
На самом деле есть пара местэто важно в вашем примере.Во-первых, как бы вы обработали более 5 запрошенных билетов?В вашем обработчике для book.multiple вы бы проверили, сколько запрашивается.Если между 1 и 5 включительно, вы бы вызвали функцию книги выше.Но если нет, вы можете просто отправить ответное сообщение «Извините, вы можете зарезервировать максимум 5 билетов. Сколько билетов вы хотите?»
Вам также понадобится новое намерение, чтобызахватить ответ.Это может быть так же просто, как просто взять число, но чтобы убедиться, что оно применяется только при отправке этого приглашения, вы можете установить Выходной контекст , указывающий, что вы запрашиваете количество билетови затем установите его в качестве входного контекста для намерения, которое собирает число.
Есть ли другие случаи, когда вы могли бы применить логику перед бронированием билетов?Много - и в каждом случае вы, вероятно, захотите убедиться, что есть новое намерение, которое может захватить то, что они хотят.Например, что если фильм, который они хотят заказать, не показывается в этом кинотеатре?Что, если вы уже знаете, что фильм распродан?
Но как насчет Followup Intents?
Followup Intents, как правило, лучше вообще избегать по той же причине - Intentsпредставлять то, что говорит пользователь, и не следует пытаться смоделировать логику вашего кода.В Followup Intent нет ничего особенного - вы можете создать Intent на верхнем уровне, который будет работать точно так же, но будет действителен, только если вы запрашиваете определенные вещи.Как?Снова контекст!
Так что, если вы предлагаете с возможными сеансами («Хотите ли вы шоу 2:00, 4:00 или 6:00?»), Вы также можете включить контекст (например, «promptTime») и затем иметьНамерение, которое ожидает это как входной контекст и соответствует времени.
Заключение
- Содержимое представляет то, что говорит пользователь
- Ваше выполнениекод что-то делает с тем, что они сказали
- Вы можете запросить у них больше или другую информацию в вашем исполнении
- Контексты могут формировать то, что вы ожидаете ответов
- Несколько обработчиков намерений могутвызвать те же функции, чтобы сделать работу