Таким образом, функция, которую вы передаете .use
, представляет собой часть промежуточного программного обеспечения, которое может выполнять до и после обработки входящего действия. Вы получаете доступ к "текущему" действию из контекста поворота через свойство turnContext.Activity
. Эти действия могут быть отправлены пользователем или какой-либо другой системой, которая отправляет их через API DirectLine боту (при условии, что вы используете Bot Framework Service).
Исходящие действия, то есть действия, которые отправляются ботом в ответ на входящие действия, также могут быть перехвачены промежуточным программным обеспечением, но промежуточное программное обеспечение должно участвовать в отправке этих действий более явно. , Это делается путем регистрации обработчика в контексте поворота с использованием onSendActivities
API.
Все это выглядит примерно так:
botAdapter.use(async (turnContext, next) => {
// pre-processing of the current incoming activity
console.log(`Processing activity ${turnContext.activity.id} starting... `);
// hook up a handler to process any outgoing activities sent during this turn
turnContext.onSendActivities(async (sendContext, activities, nextSend) => {
// pre-processing of outgoing activities
await nextSend();
// post-processing outgoing activities
});
await next();
// post-processing of the current incoming activity
console.log(`Processing activity ${turnContext.activity.id} finishing. `);
});
Следует отметить, что обработчики исходящих действий могут вызываться 0..*
раз, так как они в основном инициируются нисходящей логикой, вызывающей turnContext.sendActivit[y|ies]
. Поэтому, если во время хода отправлено несколько действий, ваш обработчик будет вызываться для каждого пакета.