如何在 python 机器人中使用 ShowTypingMiddleware

how to use the ShowTypingMiddleware in a python bot

我想在 python 机器人中使用 ShowTypingMiddleware 中间件,但我找不到如何正确连接到该中间件。
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")

...

我希望调用中间件 - 显示时间超过 0.5 秒的活动的 TI - 每 2 秒向客户端重复发送一个 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

由于我可以在 Python 而不是 .NET 中重现此问题,看来您在 Python SDK 中发现了错误。请报告 here 并确保 link 到此 post。

另请注意,虽然模拟器可以很好地进行测试,但输入指示符是频道特定的功能,您不应期望所有频道都以相同的方式处理输入指示符。即使您让键入指示器按照您希望的方式在 Emulator 中工作,您所定位的渠道可能会有不同的表现。