как использовать ShowTypingMiddleware в python боте - PullRequest
1 голос
/ 29 февраля 2020

Я бы хотел использовать промежуточное ПО ShowTypingMiddleware в боте python, но не могу найти, как правильно подключить это промежуточное ПО.
botbuilder-core 4.7.1
botbuilder-schema 4.7.1

#app.py 
ADAPTER = BotFrameworkAdapter(SETTINGS)
# show typing indicator on long activities
ADAPTER.use(ShowTypingMiddleware(delay=0.5, period=2.0))
#bot.py 
...

    async def on_message_activity(self, turn_context: TurnContext):
        if turn_context.activity.text == "middleware":
            await asyncio.sleep(10) # mock getting some data 
            await turn_context.send_activity("done")

...

Я ожидаю, что при вызове промежуточного программного обеспечения - показывает TI для операций, занимающих более 0,5 секунд - повторять отправку TI клиенту каждые 2 секунды

фактические результаты:

  • TI отправляется только один раз
  • нет повторных TI отправляются
  • отображается предупреждение во время выполнения:
 c:\develop\x\pybot1\.venv\lib\site-packages\botbuilder\core\show_typing_middleware.py:79: 
RuntimeWarning: coroutine 'ShowTypingMiddleware.on_turn.<locals>.start_interval' was never awaited
  start_interval(context, period, period)
RuntimeWarning: Enable tracemalloc to get the object allocation traceback

В журнале эмулятора ясно что отправляется только один индикатор TI, и повторений не видно

[16:55:12]<- messageYou said 'middleware'
[16:55:12]POST200conversations.:conversationId.activities.:activityId
[16:55:12]POST201directline.conversations.:conversationId.activities
[16:55:43]-> messagemiddleware
[16:55:44]<- typing
[16:55:44]POST200conversations.:conversationId.activities.:activityId
[16:55:54]<- messagedone
[16:55:54]POST200conversations.:conversationId.activities.:activityId
[16:55:54]POST201directline.conversations.:conversationId.activities

1 Ответ

1 голос
/ 03 марта 2020

Поскольку я могу воспроизвести эту проблему в Python, а не в NET, похоже, вы нашли ошибку в Python SDK. Пожалуйста, сообщите об этом здесь и обязательно укажите ссылку на этот пост.

Также обратите внимание, что хотя эмулятор подходит для тестирования, индикаторы ввода являются функцией канала * c, и вам следует не ожидайте, что все каналы будут обрабатывать индикаторы ввода одинаково Даже если вы настроите индикаторы для работы в эмуляторе так, как вам нужно, канал, на который вы нацеливаетесь, может вести себя по-другому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...