В панели управления имеется раздел "Шаблоны поведения". Если в кратце о разделе, то он позволяет настроить реакцию системы на последовательность сообщений в чате -- от пользователя либо собственных уведомлений. В самом простом случае, это реакция на заданную фразу, указанную в шаблоне.
Так вот, я немного расширил этот модуль, введя такое конятие как "контекст" и древовидную структуру шаблонов.
Проще объяснить на примерах. Итак, возьмём вот такой пример набора шаблонов:
Если ввести в окно команд "поговорим о погоде", то в ответ получим "В каком городе хотите узнать погоду?", потому как сработал первый шаблон. Кроме того, в настройках шаблона указано, что этот шаблон является котнекстом, т.е. в дальнейшем система будет ожидать команд из тех, которые являются дочерними по отношению к данному.
Вот как настроен этот шаблон:
Время ожидание указывает на то, что будет происходить, если не получено ни одной команды из доступных в контексте. А именно, будет выбран другой контекст (либо сброшен на пустой как в данном случае), выполнен какой-то код.
Если взять настройку дочерней команды "в минске", то она выглядит так:
Указано, что данный шаблон доступен в родительском контексте, а так же то, что при совпадении текущий контекст будет снова установлен в "поговорим о погоде".
Вторая команда "в москве" действует точно так же, кроме того, что в ней задано, что при совпадении контекст будет установлен пустым:
Вот пример диалога:
В последнем случае неизвестная команда была из-за того, что шаблон "в москве" сбросил контекст на начальный и "в минске" уже не могло быть распознано.- поговорим о погоде?
- В каком городе хотите узнать погоду?
- в минске
- О погоде в Минске
- в москве
- О погоде в Москве
- в минске
- Неизвестная команда...
Таким образом, с помощью системы шаблонов и контекста можно строить диалоги с пользователем. Если в системе несколько пользователей, то активный контекст распостраняется только на того, от лица которого был начат диалог.
P.S. Если обратили внимание, то теперь поле "шаблон" является не обязательным и он берётся из названия, если не задан