Как управлять в RASA уникальным user_id для многих каналов параллельно? - PullRequest
1 голос
/ 03 мая 2020

Мне нужно спроектировать учебного робота для электронного обучения, который имеет несколько возможных каналов, работающих параллельно:

  1. A чат (чтобы помочь учащимся с помощью FAQ при просмотре электронной веб-сайт обучающего приложения)
  2. A IM-чат как Telegram (для асинхронных уведомлений)
  3. электронная почта (для чего-либо еще)
  4. ...

Примите участие в соединителях шлюза связи логики.

Моя проблема / вопрос заключается главным образом в том, как управлять идентификацией пользователя. Я хочу, чтобы пользователь идентифицировался по уникальному идентификатору (назовите его conversation_id) независимо от канала.

В указанном сценарии у пользователя есть отдельный идентификатор для каждого канала:

  1. account_id на веб-сайте (например, solyarisoftware)
  2. A chat_id в Telegram (например, 1234567890)
  3. An email_address (например, giorgio.robino@blabla.com)

Итак, как позволить чатоботу RASA принимать запросы от того же пользователя (но с разных каналов)? Другими словами, как я могу отобразить несколько идентификаторов каналов в уникальный идентификатор RASA, скажем, conversation_id?

В конце дня мне нужно сгенерировать таблицу поиска, которая сопоставляет UUID со всеми идентификаторами каналов , Правильно?

Но мне непонятно, что такое хороший (простой) пользовательский опыт. На первый взгляд мне кажется, что мне нужен своего рода поток входа / регистрации: каждый раз, когда пользователь отправив запрос на канал X, только в первый раз пользователь должен где-то идентифицировать себя (со своим email / account_id?). Так, например, через Telegram, когда сервер соединителя Telegram получает команду /start, бот должен запросить электронную почту пользователя (или account_id), чтобы иметь возможность ассоциировать 1-к-1 TG chat_id с этим письмом. Я признаю, что не идеален с точки зрения безопасности.

Есть ли у вас опыт / идея / предложение?

Спасибо / Джорджио

1 Ответ

1 голос
/ 06 мая 2020

У меня нет практического опыта по этому вопросу, но я сам об этом некоторое время думал.

Действительно, «слияние» различных учетных записей (по каналам) - это то, что нам нужно. чтобы поддерживать себя, следя за тем, чтобы каждый идентификатор пользователя канала в конечном итоге соответствовал универсальному идентификатору пользователя (для меня имеет смысл таблица поиска).

Поскольку у вас есть веб-сайт, адрес электронной почты и несколько каналов, я бы сказал, что предположение является то, что пользователей, впервые зарегистрированных на веб-сайте . Каждый пользователь имеет уникальный адрес электронной почты и получает учетную запись, защищенную именем пользователя / паролем, а также уникальный секретный токен.

При общении в браузере (ie Rasa WebChat) вы можете инициализировать плагин с пользовательскими параметрами (ie userId = 1 или token = X), в этом случае сеанс чата назначается данному идентификатору пользователя.

При использовании Telegram (или другого приложения для обмена сообщениями) я бы (при самом первом доступе) ) спросите пользователя, зарегистрирован ли он / она.
Если да, то я бы попросил токен: это можно использовать для создания карты и связать этого пользователя Telegram с идентификатором универсального пользователя.
Тот же подход для других каналы.

В зависимости от ваших потребностей вам может потребоваться анонимный доступ (пользователи не предоставляют токен) или, возможно, вы хотите предоставить другой токен для каждого канала (более безопасный, но требующий больше работы и простой способ объяснить это пользователям).

Наконец-то посмотреть (я не пробовал себя) это возможность предоставить мне На веб-сайте можно открыть Telegram (или другие), передавая дополнительный параметр, который позволит вам выполнить сопоставление. Я не знаю, возможно ли это, но это упростит этот процесс для ваших конечных пользователей.
Или наоборот: пользователям Telegram может быть предоставлена ​​ссылка, которая открывает веб-сайт, где они могут войти в систему и быть распознанным. .

Надеюсь, это поможет, удачи.

Беппе

...