IgorPI
@IgorPI

Изменение диалогов бота по ходу пьесы?

Коллеги, приветствую!

Недавно приспичило написать бота.
У меня это получилось довольно неплохо.

Решил на этом не останавливать и запилить адаптивный диалог.

Да, знаю, есть мощнейший Microsoft Bot Framework там есть все и нет нечего.
Но даже в нём нет этого чего я хочу.

Точнее, я вообще не люблю писать ботов и это не моя идея.

В общем как сделать адаптивный диалог?
Задача заключается в том, что есть некий чат.
5f2a128c9f778901961494.png
Этот чат умеет общаться через канал бота.
Да, это получилось неплохо.

Но как можно сделать так, что бы со стороны нашей системы мы могли заготавливать сценарии и менять поведение бота.

Приведу пример.
Как работает классический бот?

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
Конец сценария.

Даже не знаю что и думать, такой хренью занимаюсь.
  • Вопрос задан
  • 42 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы