Шаблон: (Включи|Выключи)
использовать как контекс: Да
Выполнить при совпадении:
Код: Выделить всё
saveToCache('VAR:original'.$from_user_id, $original);
say('Что именно '.$original.'ть?');
Код: Выделить всё
say('Попробуем в другой раз');
Шаблон: (свет|освещение)
использовать как контекс: Да
Выполнить при совпадении:
Код: Выделить всё
$ss = trim(checkFromCache('VAR:original'.$from_user_id).' '.mb_strtolower($original));
saveToCache('VAR:original'.$from_user_id, $ss);
say('Где именно?');
Код: Выделить всё
say('Разговор про свет закончен');
Шаблон: кухн
использовать как контекс: Нет
Выполнить при совпадении:
Код: Выделить всё
$ss = trim(checkFromCache('VAR:original'.$from_user_id).' '.mb_strtolower($original));
if (preg_match('/включи/isu',$ss)) {
cm('RelayX.turnOn');
say('Включаю свет на кухне');
} elseif (preg_match('/выключи/isu',$ss)) {
cm('RelayX.turnOff');
say('Выключаю свет на кухне');
} else {
say("Непонятно: $ss");
}
saveToCache('VAR:original'.$from_user_id, '');
Вариант работает с диалогами разных пользователей одновременно. Посмотреть значения временных переменных можно в cached_values по SQL запросу SELECT * FROM `cached_values` WHERE KEYWORD LIKE '%original%'
Единственный момент, если пользователь ведет диалог частями, и долго не продолжает, то срабатывает код "По истечении времени выполнить:". Тут бы неплохо очищать временную переменную этого пользователя, но $from_user_id тут не сработает т.к. на момент выполнения кода, контекст уже сброшен. Поэтому текст не законченного диалога так и будет висеть в переменной. В принципе, это не страшно, т.к. текст будет затерт при новом диалоге на первом уровне. Вторые (и до последнего) уровни должны уже дополнять текст. Последний уровень его стирает.
Очень бы хотелось получить полный текст истории диалога штатными средствами. Но об этом я писал ранее. Дубли в SQL таблице, при переходах сразу на несколько уровней, я нашел как устранить. Об этом писал ранее. Но сделать возврат без исправления кода файлов не получится.
В идеале я вижу это так:
По массиву $matches[] у меня нет предложений
$original содержит последнюю фразу пользователя без изменений
$history - всю историю диалога в контексте.
Возможно, путаница и отсутствие этого сильно понижает внимание народа к Шаблонам поведения. А штука классная. Мне нравится. Все свои голосовые приблуды я использую только для передачи текста в чат МД.