BotBuilder 在等待阻止功能时显示消息

BotBuilder display message while waiting for blocking function

我正在尝试在 this guide 之后的 Python 中使用 Microsoft 的 Bot 框架构建一个机器人。在等待 return 的阻塞函数时,我不知道如何显示消息。我已经阅读了一般的异步和等待,但没有找到任何特定于 Bot Framework 的示例。这是一个简单的例子。使用此代码,它会在显示两条消息之前等待 2 秒。我想立即确认用户输入,然后等待长时间的阻塞函数和 return 结果。

class MyBot(ActivityHandler):
    async def on_message_activity(self, turn_context: TurnContext):
        start = time.time()

        elapsed = time.time() - start
        await turn_context.send_activity(f"Message received after {elapsed:.1f} seconds")

        await self._blocker()

        elapsed = time.time() - start
        await turn_context.send_activity(f"Finished after {elapsed:.1f} seconds!")
        
    
    async def _blocker(self):
        time.sleep(2)

完整的源代码可通过上面的指南或直接从 here 获得。我只更改了 MyBot class.

事实证明,这毕竟是Emulator的问题,与Bot Builder Python SDK无关。我已在此处报告错误:https://github.com/microsoft/BotFramework-Emulator/issues/2262

起初我以为问题出在您使用 time.sleep 而不是 asyncio.sleep。虽然事实证明这不是你的问题,但在编写异步代码时你仍然应该更喜欢 asyncio.sleep

您现在可以安全地忽略这个问题。以后,请始终记住在您的目标频道上进行测试,因为您不能假设模拟器会以同样的方式运行。