TeamsActivityHandler 和 ActivityHandler 有什么区别?
What is the difference between TeamsActivityHandler and ActivityHandler?
在大多数文档中,您会看到:
class BotHandler(ActivityHandler):
async def on_message_activity(self, turn_context: TurnContext):
await turn_context.send_activity("Hello!")
但是,some Python examples 将使用 TeamsActivityHandler
代替:
class BotHandler(TeamsActivityHandler):
async def on_message_activity(self, turn_context: TurnContext):
message = MessageFactory.text("first message")
channel_id = teams_get_channel_id(turn_context.activity)
我注意到
- 从
TeamsActivityHandler
继承时,我可以重载创建新频道时调用的 on_teams_channel_created()
。
- 从
ActivityHandler
继承时,我可以重载on_members_added_activity()
来问候新用户(欢迎信息)。
如何同时使用两者?
使用 Microsoft Bot Framework 创建的机器人可用于多种用途(它是一个通用的机器人框架),例如用于网络聊天、闲聊等 - Teams 只是其中一种可能的“渠道”,正如它们所称的那样。因此,发挥作用的 'main' class 是 ActivityHandler
,但对于 Teams 开发,有一个派生的 class (TeamsActivityHandler
),它有一些额外的 Teams 特定包装纸。
我找到了解决方案。如果您继承自 TeamsActivityHandler
,您可以改写 on_teams_members_added()
。
这是相当违反直觉的,因为当您从 TeamsActivityHandler
继承(它又从 TeamsActivity
继承)时,您假设获得了相同的功能(即:能够重写相同的功能) )).由于 super() used here.
,情况似乎并非如此
如果您继承自 TeamsActivity
,您可以照常覆盖 on_members_added_activity()
。
不确定这是错误还是奇怪的设计。
在大多数文档中,您会看到:
class BotHandler(ActivityHandler):
async def on_message_activity(self, turn_context: TurnContext):
await turn_context.send_activity("Hello!")
但是,some Python examples 将使用 TeamsActivityHandler
代替:
class BotHandler(TeamsActivityHandler):
async def on_message_activity(self, turn_context: TurnContext):
message = MessageFactory.text("first message")
channel_id = teams_get_channel_id(turn_context.activity)
我注意到
- 从
TeamsActivityHandler
继承时,我可以重载创建新频道时调用的on_teams_channel_created()
。 - 从
ActivityHandler
继承时,我可以重载on_members_added_activity()
来问候新用户(欢迎信息)。
如何同时使用两者?
使用 Microsoft Bot Framework 创建的机器人可用于多种用途(它是一个通用的机器人框架),例如用于网络聊天、闲聊等 - Teams 只是其中一种可能的“渠道”,正如它们所称的那样。因此,发挥作用的 'main' class 是 ActivityHandler
,但对于 Teams 开发,有一个派生的 class (TeamsActivityHandler
),它有一些额外的 Teams 特定包装纸。
我找到了解决方案。如果您继承自 TeamsActivityHandler
,您可以改写 on_teams_members_added()
。
这是相当违反直觉的,因为当您从 TeamsActivityHandler
继承(它又从 TeamsActivity
继承)时,您假设获得了相同的功能(即:能够重写相同的功能) )).由于 super() used here.
如果您继承自 TeamsActivity
,您可以照常覆盖 on_members_added_activity()
。
不确定这是错误还是奇怪的设计。