如何通过Slack API触发自定义表情使用时的事件?
如何在Slack应用中监听自定义表情触发事件
要实现监听自定义表情(比如:custom_coffee:)并触发后端操作,你需要利用Slack的消息监听事件,结合后端解析逻辑来完成,具体步骤如下:
1. 配置Slack应用的事件订阅
- 打开Slack应用管理后台,进入Event Subscriptions页面,开启事件订阅功能。
- 设置你的后端服务地址作为请求URL,确保服务能返回
200 OK完成Slack的验证。 - 在Bot User Events下添加需要监听的消息事件,根据需求选择:
message.channels:监听公开频道消息message.groups:监听私有群组消息message.im:监听一对一私聊消息message.mpim:监听多人私聊消息
- 保存设置后,重新安装应用到Slack工作区,确保权限生效。
2. 解析消息中的表情
Slack推送的消息事件payload里,用户发送的内容会存放在text字段,自定义表情会以:custom_coffee:这样的短代码形式存在;如果是用Block Kit构造的消息,还要同步检查blocks字段里的文本内容。
后端接收到事件后,直接校验消息内容是否包含目标表情的短代码即可。
3. 过滤无关事件
Slack会推送系统消息(比如用户加入频道通知)或机器人自身发送的消息,需要过滤这些无关内容:
- 通过
subtype字段判断:只有subtype为空或不存在的消息是用户主动发送的内容。 - 通过
bot_id字段判断:如果存在该字段,说明是机器人发送的消息,直接跳过。
4. 示例代码(Node.js + Bolt框架)
const { App } = require('@slack/bolt'); const app = new App({ token: process.env.SLACK_BOT_TOKEN, signingSecret: process.env.SLACK_SIGNING_SECRET }); // 监听所有类型的用户消息 app.message(async ({ message }) => { // 过滤系统消息和机器人消息 if (message.subtype || message.bot_id) return; // 检查是否包含目标自定义表情 if (message.text?.includes(':custom_coffee:')) { // 执行你的后端逻辑:记录日志、触发业务操作等 console.log(`用户${message.user}在${message.channel}发送了自定义咖啡表情`); // 可选:回复消息 // await say('感谢你的咖啡招待!'); } }); (async () => { await app.start(process.env.PORT || 3000); console.log('Slack应用已启动'); })();
5. 关键注意事项
- 权限配置:确保你的Bot拥有对应的历史消息权限,比如
channels:history、groups:history等,需要在OAuth & Permissions页面添加这些权限后重新安装应用。 - 表情匹配准确性:自定义表情的短代码要和工作区中设置的完全一致,注意大小写和特殊字符。
- 原生emoji兼容:如果要监听原生emoji(比如☕️),可以直接检查
message.text中是否包含该emoji字符,或者对应的官方短代码:coffee:。
内容的提问来源于stack exchange,提问作者M.K. Kim
相关产品推荐
相关产品推荐

