Коллеги, приветствую!
Недавно приспичило написать бота.
У меня это получилось довольно неплохо.
Решил на этом не останавливать и запилить адаптивный диалог.
Да, знаю, есть мощнейший
Microsoft Bot Framework там есть все и нет нечего.
Но даже в нём нет этого чего я хочу.
Точнее, я вообще не люблю писать ботов и это не моя идея.
В общем как сделать адаптивный диалог?
Задача заключается в том, что есть некий чат.
Этот чат умеет общаться через канал бота.
Да, это получилось неплохо.
Но как можно сделать так, что бы со стороны нашей системы мы могли заготавливать сценарии и менять поведение бота.
Приведу пример.
Как работает классический бот?
main.use(async ({message, session, di}: BotContextInterface, next) => {
const redis: Tedis = di.get('redis');
const tgl = main.adapter.getApi()
const msg = new MessageTelegram(message.getRawData())
// Если нет маркера доступа, предлагаем пройти авторизацию или регистрацию.
if (await redis.exists(message.getSessionKey('token_'))) {
session.setState({
token: await redis.hgetall(message.getSessionKey('token_'))
})
} else {
if (session.isNew) {
const m = []
m.push('Привет, я о тебе ничего не знаю.')
// Gender
switch (getGender({first: msg.getUser().first_name, last: msg.getUser().last_name})) {
case 'male': {
m.push('Ты уже бывал здесь?')
break
}
case 'female': {
m.push('Ты уже бывала здесь?')
break
}
default: {
m.push('Ты уже бывал здесь?')
}
}
await session.send(new Message({
user_id: message.getUserId(),
text: m.join('\n')
}))
// setTimeout(async () => {
// const m = []
// m.push('Что бы продолжить нажми /start')
// await session.send(new Message({
// user_id: message.getUserId(),
// text: m.join('\n')
// }))
// }, 3000)
}
}
next()
});
Всё это скучно.
Но есть интересная часть кода в чате.
if (typeof sse.onMessage !== 'function') {
sse.onMessage = function (eventData: EventDataInterface) {
if (eventData.type === 'json') {
main.emitter.emit('chat-broker', {message, session, di, data: JSON.parse(eventData.data)})
}
}
}
Которая переводит все диалоги бота в чат, который я привел на скриншоте.
Что можно придумать что бы через эту дырку подсовывать разные сценарии общения?
Сценарии заготавливаются заранее.
Пример сценария
===============
Юзер: Привет
Бот: Привет
Бот: Введите цифру 1
Юзер: 1
Конец сценария.
Даже не знаю что и думать, такой хренью занимаюсь.