При публикации в канале MS Teams имя чат-бота включается в высказывание пользователя, что обеспечивает неверное высказывание LUIS.

введите здесь описание изображения, мы столкнулись с проблемой при разработке чат-бота с использованием 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, то есть намерение «Помощь».

 Простой эхо-бот также имеет ту же проблему при публикации в канале Teams, но отлично работает в частном чате MS Teams.

Из приватного чата внутри команд

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

 Следовательно, правильное намерение распознается LUIS, то есть «приветствующее» намерение.

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

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


person Gaurav Anand    schedule 08.10.2019    source источник


Ответы (2)


Да, это давно работает в Microsoft Teams.

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

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

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

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

person André Mantas    schedule 08.10.2019
comment
Исправление не сработало, Луис продолжает отправлять неверное намерение, хотя мы успешно заменяем имя бота в пользовательском uttrance: открытый класс TeamsUttranceObserver: IMiddleware {общедоступная асинхронная задача OnTurnAsync (ITurnContext turnContext, NextDelegate next, CancellationToken cancellationToken) {if ( turnContext.Activity.ChannelId.Equals (msteams)) turnContext.Activity.Text = turnContext.Activity.Text.Replace (чат-бот RPA,); }} - person Gaurav Anand; 12.11.2019
comment
решение, предоставленное Андре, частично выполнило свою работу: оно удалило имя бота из высказывания, но каким-то образом ‹› ‹/› осталось в тексте. Поэтому мне пришлось добавить высказывания LUIS с угловыми скобками - person Gaurav Anand; 07.01.2020

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

  • Упоминание начинается с @ или <at> (и необязательная проверка на завершение </at>)
  • В упоминании используется короткое имя бота (например, 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, текст, отправленный этим службам, не содержит упоминания.

person billoverton    schedule 09.10.2019
comment
Я изменил stepContext.Context.Activity.Text = stepContext.Context.Activity.Text.Replace (чат-бот RPA), но LUIS каким-то образом все еще возвращает неверное намерение ... Означает ли это, что просто заменив stepContext.Context. Activity.Text не работает, и что нам нужно заменить значение какого-либо другого атрибута в объекте Context? Прилагаю снимок экрана к коду .. - person Gaurav Anand; 12.11.2019
comment
Можете ли вы проверить в LUIS, произнеся привет, и посмотреть, что возвращается? Уверенность в намерении на вашем скриншоте очень низка, поэтому вполне возможно, что это намерение с наивысшей оценкой. Чтобы иметь дело с намерениями с низкой степенью достоверности, я заменяю topIntent на «None», если степень достоверности ниже 0,5. Вы делаете это сразу после того, как будет возвращен результат распознавателя, и перед тем, как переключить регистр на topIntent (или, как бы то ни было, вы действуете на основе информации о намерениях из результата). - person billoverton; 12.11.2019
comment
решение, предоставленное Андре, частично выполнило свою работу: оно удалило имя бота из высказывания, но каким-то образом ‹› ‹/› осталось в тексте. Поэтому мне пришлось добавить высказывания LUIS с угловыми скобками - person Gaurav Anand; 07.01.2020
comment
Регулярное выражение, о котором я упоминал выше, заботится о скобках, если вы хотите попробовать. - person billoverton; 08.01.2020