如何捕获Microsoft Teams消息上的用户emoji表情反应
关于Microsoft Teams消息表情反应捕获的实现方案
现有Webhook是否可行
你当前使用的Teams入站Webhook仅支持单向向频道推送消息,无法直接捕获用户对消息的表情反应,这类Webhook没有提供事件回调的能力,无法用现有Webhook直接完成需求。
可行实现方案
方案1:基于Microsoft Graph实现(适配Python技术栈,灵活度最高)
这是和你现有开发场景匹配度最高的方案,实现步骤如下:
- 首先调整消息推送逻辑,获取推送消息的唯一ID:你当前使用
pymsteams库通过入站Webhook发消息无法获取返回的消息ID,建议改为直接调用Microsoft Graph的发送频道消息接口推送消息,调用成功后会直接返回消息ID,你可以提前把消息ID和对应业务信息存储到数据库,方便后续关联反应数据。如果你不想调整现有推送逻辑,也可以定期调用Graph的频道消息列表接口,通过消息内容、发送时间戳匹配的方式获取你推送的消息ID。 - 捕获反应事件:调用Microsoft Graph的变更通知接口,订阅目标频道消息的
reactions资源创建事件,你需要自行提供一个可公网访问的回调接口,当用户对目标消息添加表情反应时,Graph会自动向你的回调地址推送事件数据,包含反应类型、操作用户ID、关联消息ID等字段,你可以直接解析后存入数据库。如果不需要高实时性,也可以选择定期调用指定消息的反应列表接口拉取全量反应数据,省去搭建回调服务的步骤。 - 权限准备:你需要在Azure AD中注册应用,为应用分配
ChannelMessage.Read.All等必要的应用权限,经租户管理员同意后即可调用相关接口。
方案2:基于Power Automate实现(低代码方案,无需自行搭建回调服务)
如果不想编写太多服务端代码,可以用Power Automate快速实现:
- 选择「当Teams中收到对消息的反应时」作为流程触发条件
- 添加筛选条件,仅匹配你推送的目标消息
- 后续添加数据库写入动作,直接将反应数据存入你的目标数据库即可
Power Apps主要用于搭建低代码前端交互页面,不适合做后台事件捕获,不属于该场景的最优选择
现有推送代码优化提示
你目前的推送代码仅适用于单纯的消息推送场景,如果要对接反应捕获逻辑,建议调整为基于Graph API的实现,示例代码简化如下:
import requests def send_message_to_teams_via_graph(team_id: str, channel_id: str, msg: str, access_token: str): try: # 转义下划线避免斜体格式化 msg = msg.replace('_', '\_') url = f"https://graph.microsoft.com/v1.0/teams/{team_id}/channels/{channel_id}/messages" headers = { "Authorization": f"Bearer {access_token}", "Content-Type": "application/json" } payload = { "body": { "content": msg } } resp = requests.post(url, headers=headers, json=payload) resp.raise_for_status() # 拿到消息ID,存入数据库用于后续关联反应数据 message_id = resp.json()['id'] return message_id except Exception as e: print(f'failed to send alert: {str(e)}')
内容的提问来源于stack exchange,提问作者Shahin Shirazi
相关产品推荐
相关产品推荐

