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
:
您现在可以安全地忽略这个问题。以后,请始终记住在您的目标频道上进行测试,因为您不能假设模拟器会以同样的方式运行。
我正在尝试在 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
:
您现在可以安全地忽略这个问题。以后,请始终记住在您的目标频道上进行测试,因为您不能假设模拟器会以同样的方式运行。