При публикации на канале MS Teams имя чат-бота включается в высказывание пользователя, таким образом предоставляя LUIS неверное высказывание - PullRequest
2 голосов
/ 08 октября 2019

введите описание изображения здесь мы столкнулись с проблемой при разработке чат-бота с использованием Microsoft Botframework V4, размещенного в Azure. Проблемы с чатом возникают при публикации на канале MS Teams, но тот же чатбот отлично работает в приватном чате MS Teams и даже в веб-чате, т. Е. Все они указывают на один и тот же идентификатор приложения Microsoft Azure.

из канала MS Teams. :

ChatBot получает неправильное пользовательское высказывание, когда пользователь общается в ChatBot из канала MS Teams.

Ошибка: ###

 Как видно на скриншоте,Пользователь вводит «привет», и чат-бот возвращает текст «VA Check ID Bothi» из контекста шага чата (stepContext.Context.Activity.Text). Это неверно, поскольку имя бота "VA Check ID Bot" включается в высказывание пользователя. • Таким образом, LUIS распознает неверное намерение, т. Е. Намерение «помощи».

Bot У простого эхо-бота также возникает та же проблема при публикации в канале команд, но он отлично работает в командах MSПриватный чат.

Из внутренних команд Приватный чат

o Чат-бот получает правильное высказывание Пользователя, когда пользователь общается с тем же ботом из чата из личного чата в MS-командах. o Как вы можете видеть на снимке экрана, пользователь вводит «привет», и бот-бот возвращает тот же текст «привет» из контекста шага чата (stepContext.Context.Activity.Text). Это правильно.

 Таким образом, LUIS распознает правильное намерение, то есть «приветствующее» намерение.

Поскольку это тот же чат-бот с тем же идентификатором приложения MS APP, размещенный в MS Azure,Chatbot должен вести себя одинаково при использовании из частного чата MS Teams или канала команд MS.

Chatbot также отлично работает в веб-чате на портале Azure

Ответы [ 2 ]

4 голосов
/ 08 октября 2019

Да, это долгое время в Microsoft Teams.

Мы добавили MicrosoftTeamsMiddleware, которая в основном проверяет activity.ChannelId и, если это msteams, заменяет имя бота вactivity.Text.

Вы можете получить доступ к действию, поскольку промежуточное ПО получает ITurnContext. Изменения этого действия видны остальной части конвейера, поэтому все работает без сбоев, а остальная часть бота не знает об этой проблеме.

Я рекомендую вам проверить / записать текст действия, потому что в нашем случае это будетбыть чем-то вроде <at>Bot Name</at>. Поэтому вам нужно заменить все это пустой строкой.

Если вы также используете промежуточное программное обеспечение для запросов к LUIS, убедитесь, что это новое промежуточное программное обеспечение зарегистрировано до промежуточного программного обеспечения LUIS, чтобы активность. Промежуточное ПО LUIS действует.

0 голосов
/ 09 октября 2019

Вы могли бы использовать промежуточное программное обеспечение, как предложил Андре, но я просто сделал замену регулярных выражений для activity.text для каждого действия. Вы увидите теги команд, но я также рассмотрел @ на всякий случай. Вот сценарии, которые я рассмотрел:

  • Упоминание начинается с @ или (и необязательная проверка на трейлинг)
  • Упоминание использует короткое имя бота (например, YourBot)
  • Упоминаниеиспользует длинное имя бота (например, длинное имя вашего бота)
  • Упоминание может сопровождаться пробелом (возможно, этого не будет)

Вот мойкод. Я использую nodejs, и этот бот использовал более старый шаблон 4.3 для core_bot, но аналогичный метод должен работать для C # и других версий SDK.

async onTurn(context) {
    if (context.activity.type === ActivityTypes.Message) {
        context._activity.text = context._activity.text.replace(/(@|<at>)((YourBot)|(Your Bot Long Name))(<\/at>)? ?/g, '');

        const results = await this.luisRecognizer.recognize(context);

Это охватывает все вышеописанные сценарии. Поскольку я делаю это в начале хода, прежде чем вызвать LUIS-распознаватель и / или QnA Maker, текст, отправленный этим службам, не содержит упоминания.

...