Ошибка onTurn для бота Teams при определенных системных сообщениях Teams - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть бот (на основе старого образца core-bot), который развернут в Microsoft Teams. Иногда, когда в командах происходит событие уведомления, такое как добавление нового канала или удаление канала (или возможного добавления / удаления пользователя), я получаю следующую ошибку onTurn: "error":"Cannot read property 'length' of undefined". Глядя на код, кажется, виноват код Welcome Message. Единственное свойство length находится в context.activity.membersAdded, поэтому оно должно быть причиной проблемы. Но я не совсем понимаю, что происходит. Основываясь на приведенном ниже утверждении, событие должно инициировать действие ConversationUpdate, но без свойства membersAdded. Может ли кто-нибудь пролить свет на то, что вызывает эта деятельность, которую инициируют Команды, и что я должен добавить в это приветствие, чтобы предотвратить появление сообщения об ошибке? Чтобы уточнить, сообщение об ошибке поступает в канал сообщений команды / канала, куда поступает событие, такое как сообщение об удалении канала.

Раздел кода, в котором, как мне кажется, происходит ошибка:

        } else if (context.activity.type === ActivityTypes.ConversationUpdate) {
            // Handle ConversationUpdate activity type, which is used to indicates new members add to
            // the conversation.
            // see https://aka.ms/about-bot-activity-message to learn more about the message and other activity types

            // Do we have any new members added to the conversation?
            if (context.activity.membersAdded.length !== 0) {

                // Iterate over all new members added to the conversation
                for (var idx in context.activity.membersAdded) {
                    // Greet anyone that was not the target (recipient) of this message
                    // the 'bot' is the recipient for events from the channel,
                    // context.activity.membersAdded == context.activity.recipient.Id indicates the
                    // bot was added to the conversation.
                    if (context.activity.membersAdded[idx].id === context.activity.recipient.id) {
                        // Welcome user.
                        await context.sendActivity('Hi! I\'m the IT Innovation Bot. I can answer questions about the innovation team and capture your innovation ideas. Let me know how I can help!')
                    }
                }
            }
        }

1 Ответ

3 голосов
/ 22 февраля 2020

Похоже, что это не удастся для любого действия, где тип был ConversationUpdate, но полезная нагрузка JSON не содержит объекта membersAdded. Список этих событий можно найти здесь:

https://docs.microsoft.com/en-us/microsoftteams/platform/bots/how-to/conversations/subscribe-to-conversation-events?tabs=json

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

...