Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ПРИМЕНИМО К: пакет SDK версии 4
ПО промежуточного слоя — это просто класс, который находится между адаптером и логикой бота, добавленный в коллекцию ПО промежуточного слоя адаптера во время инициализации. Пакет SDK позволяет писать собственное или добавлять созданное другими пользователями ПО промежуточного слоя. Любые входящие или исходящие действия вашего бота будут передаваться через ПО промежуточного слоя.
Адаптер обрабатывает и направляет входящие действия через конвейер ПО промежуточного слоя бота в логику бота, а затем снова возвращается. Каждый поток действий входа и выхода бота, каждый компонент ПО промежуточного слоя может проверять или выполнять действие до и после запуска логики бота.
Прежде чем перейти к промежуточному программному обеспечению, важно понять ботов в целом и как они обрабатывают активности.
Применение промежуточного программного обеспечения
Часто возникает вопрос: "Когда следует реализовывать действия посредством промежуточного слоя или использовать обычную логику бота?" Промежуточное ПО предоставляет дополнительные возможности для взаимодействия с потоком беседы пользователей до и после обработки каждого этапа беседы. ПО промежуточного слоя также позволяет хранить и извлекать сведения о беседе и вызывать дополнительную логику обработки при необходимости. Ниже приведены некоторые распространенные сценарии, показывающие, где промежуточное программное обеспечение может быть полезным.
Просмотр или выполнение всех действий
Существует множество ситуаций, требующих от бота выполнять что-либо при каждом действии или для каждого действия определенного типа. Например, может потребоваться записать каждое действие, связанное с сообщением, которое бот получает, или, предоставить запасной ответ, если бот не создал ответ в этом ходе. ПО промежуточного слоя — отличное место для таких процессов, с его способностью действовать как до, так и после выполнения остальной части логики бота.
Изменение или повышение контекста поворота
Некоторые беседы могут быть гораздо более плодотворными, если бот обладает больше информации, чем та, что предоставляется в мероприятии. Промежуточное ПО в этом случае может просмотреть информацию о текущем состоянии беседы, запросить данные из внешнего источника и добавить их к объекту контекста хода перед передачей логике бота.
Пакет SDK определяет ПО промежуточного слоя ведения журнала, которое может записывать входящие и исходящие действия, но также можно определить собственное ПО промежуточного слоя.
Конвейер промежуточного программного обеспечения для ботов
Для каждого действия адаптер вызывает ПО промежуточного слоя в том порядке, в котором вы добавили его. Адаптер передает объект контекста для поворота и следующего делегата, а ПО промежуточного слоя вызывает делегат для передачи элемента управления следующему ПО промежуточного слоя в конвейере. ПО промежуточного слоя также имеет возможность выполнять действия после возвращения следующего делегата перед завершением метода. Вы можете подумать об этом, как каждый объект ПО промежуточного слоя имеет первый и последний шанс действовать в отношении объектов ПО промежуточного слоя, которые следуют за ним в конвейере.
Рассмотрим пример.
- Обработчик очередности для первого объекта промежуточного программного обеспечения выполняет код перед вызовом следующего обработчика.
- Обработчик вызова второго объекта промежуточного слоя выполняет код перед вызовом следующего.
- Обработчик очереди бота выполняется и возвращается.
- Обработчик выполнения для второго объекта промежуточного слоя исполняет любой оставшийся код перед возвратом.
- Обработчик вызова второго объекта промежуточного слоя выполняет код перед вызовом следующего.
- Обработчик цикла первого объекта промежуточного программного обеспечения выполняет любой оставшийся код перед возвратом.
Если промежуточное ПО не вызывает следующий делегат, адаптер не вызывает последующие обработчики промежуточного слоя или бота, и цепь конвейера замыкается.
После завершения конвейера ПО промежуточного слоя бота ход завершается, и контекст хода выходит из области видимости.
ПО промежуточного слоя или бот может создавать ответы и регистрировать обработчики событий ответа, но помните, что ответы обрабатываются в отдельных процессах.
Порядок ПО промежуточного слоя
Так как порядок добавления ПО промежуточного слоя определяет порядок, в котором ПО промежуточного слоя обрабатывает действие, важно решить последовательность добавления ПО промежуточного слоя.
Замечание
Это предполагает основу, которая подходит для большинства ботов, но обязательно примите во внимание, как каждый кусок посреднического ПО будет взаимодействовать с другими в вашей ситуации.
Промежуточное программное обеспечение, которое выполняет задачи низкого уровня, должно быть первым добавлено в ваш конвейер промежуточного программного обеспечения для каждого бота. Примеры включают ведение журнала, обработку исключений и перевод. Настройте в зависимости от ваших нужд, например, вы хотите, чтобы входящее сообщение переводилось до того, как будет сохранено, или хранить сообщения до перевода, что может означать, что они останутся непереведенными.
Промежуточное ПО, специфичное для бота, следует добавлять в конвейер последним, это ПО, которое вы реализуете для обработки каждого сообщения, отправленного вашему боту. Если ПО промежуточного слоя использует сведения о состоянии или другие сведения, заданные в контексте бота, добавьте его в конвейер ПО промежуточного слоя после того, как ПО промежуточного слоя изменяет состояние или контекст.
Короткое замыкание
Важной идеей в контексте промежуточного слоя и обработчиков ответа является прерывание процесса. Если выполнение должно продолжаться через слои, которые следуют за слоем, промежуточное ПО (или обработчик ответа) должен передать выполнение, вызвав делегата next. Если следующий делегат не вызывается внутри этого посредника (или обработчика ответа), связанный конвейер прерывается, и последующие слои не выполняются. Это означает, что вся логика бота и любое промежуточное ПО дальше в цепочке обработки пропускаются. Существует небольшая разница между промежуточным слоем и обработчиком отклика, когда короткое замыкание обрабатывается в ходе поворота.
Когда промежуточное программное обеспечение прерывает выполнение очереди, обработчик очереди бота не будет вызван, но весь код промежуточного программного обеспечения, выполняемый до этой точки в конвейере, всё равно будет завершён.
Для обработчиков событий, не вызывая дальше, означает, что событие отменено, что существенно отличается от пропуска логики промежуточного слоя. Не обрабатывая остальное событие, адаптер никогда не отправляет его.
Подсказка
Если вы укорачиваете событие ответа, например SendActivities
, убедитесь, что такое поведение является вашим намерением. В противном случае это может привести к сложному устранению ошибок.
Обработчики событий ответа
Помимо логики приложения и логики промежуточного слоя, обработчики ответов (иногда называемые обработчиками событий или обработчиками событий активности) можно добавить в объект контекста. Эти обработчики вызываются, когда связанный ответ происходит в текущем объекте контекста перед выполнением фактического ответа. Эти обработчики полезны, если вы знаете, что вы хотите сделать что-либо до или после фактического события для каждого действия этого типа для остальной части текущего ответа.
Предупреждение
Будьте осторожны, чтобы не вызывать метод ответа для активности из его соответствующего обработчика событий ответа, например, вызывать метод отправки активности из обработчика события отправки активности. Это может создать бесконечный цикл.
Помните, что каждое новое действие получает новый поток для выполнения. При создании потока для обработки действия список обработчиков для этого действия копируется в новый поток. Обработчики, добавленные после этого момента, не будут выполняться для этого конкретного события действия. Обработчики, зарегистрированные в объекте контекста, обрабатываются так же, как адаптер управляет конвейером промежуточного слоя. А именно, обработчики вызываются в том порядке, в котором они добавляются, и вызов следующего делегата передает управление следующему зарегистрированному обработчику событий. Если обработчик не вызывает следующий делегат, ни один из последующих обработчиков событий не вызывается, событие прерывается, и адаптер не отправляет ответ в канал.
Обработка состояния в промежуточном программном обеспечении
Распространенный метод сохранения состояния заключается в вызове метода сохранения изменений в конце обработчика поворота. Вот схема с фокусом на звонке.
Проблема с этим подходом заключается в том, что любые обновления состояния, сделанные из некоторого пользовательского промежуточного слоя, которые происходят после возврата обработчика сеанса бота, не будут сохранены в устойчивом хранилище. Решение заключается в перемещении вызова метода сохранения изменений после завершения пользовательского промежуточного ПО путем добавления экземпляра автоматического промежуточного ПО в начало стека промежуточного ПО или по крайней мере до любого из промежуточных ПО, которое может изменить состояние. Ниже показано выполнение.
Добавьте объекты управления состоянием, которые потребуют обновления, в объект набора состояний бота, а затем используйте его при создании промежуточного слоя автосохранения изменений.
Дополнительные ресурсы
Вы можете ознакомиться с программным обеспечением промежуточного слоя для регистрации журнала расшифровок, которое реализовано в SDK фреймворка для ботов [C#][JS].