如何将状态为Undelivered的Twilio SMS日志推送至Slack频道?
实现Twilio未送达SMS日志自动推送至Slack频道的方案
针对你在Twilio A2P 10DLC注册等待期需要监控Undelivered状态SMS并自动推送至Slack的需求,以下是可行的解决方案:
一、Twilio原生能力说明
Twilio没有直接推送SMS状态日志到Slack的原生集成,但可以通过两种原生能力结合轻量代码实现需求:
- SMS状态回调:当SMS状态发生变更(如变为
Undelivered)时,Twilio会主动将状态数据POST到你指定的URL - Twilio Monitor告警:可以针对SMS投递失败事件设置告警规则,触发时通过Webhook发送通知
二、推荐实现方案:Twilio Functions + Slack Incoming Webhook
这是最贴合你需求的无服务器实现方式,无需额外服务器,直接在Twilio平台内处理:
1. 准备Slack Incoming Webhook
在Slack工作区创建一个Incoming Webhook,获取对应的URL(此URL用于接收Twilio推送的消息)。
2. 创建并配置Twilio Function
- 登录Twilio控制台,进入「Functions」服务,创建空白Function
- 将以下代码粘贴到编辑器中:
exports.handler = async function(context, event, callback) { // 仅处理未送达状态的消息 if (event.MessageStatus !== 'undelivered') { return callback(null, '跳过非未送达消息'); } // 构造Slack消息格式 const slackNotification = { text: '🚨 新的未送达SMS通知', attachments: [ { fields: [ { title: '消息SID', value: event.MessageSid, short: false }, { title: '收件人号码', value: event.To, short: true }, { title: '发送时间', value: event.DateSent, short: true }, { title: '错误原因', value: event.ErrorMessage || '无详细错误信息', short: false } ] } ] }; // 发送到Slack const axios = require('axios'); try { await axios.post(context.SLACK_WEBHOOK_URL, slackNotification); callback(null, '通知已发送至Slack'); } catch (err) { console.error('Slack推送失败:', err); callback(err); } };
- 在Function的「环境变量」中添加
SLACK_WEBHOOK_URL,值为你获取的Slack Incoming Webhook地址 - 保存并部署Function,记录生成的Function URL
3. 配置Twilio状态触发源
方式一:针对单个号码配置
在Twilio控制台找到用于发送SMS的号码,进入设置页面,将「Status Callback」设置为你的Twilio Function URL,这样该号码发送的所有SMS状态变更都会触发回调。
方式二:全局监控(通过Twilio Monitor)
如果需要监控所有号码的未送达SMS:
- 进入Twilio「Monitor」→「Alerts」→「Create Alert」
- 设置触发条件为「Message Delivery Failure」,通知方式选择「Webhook」,并填入你的Twilio Function URL
- 保存规则后,所有SMS投递失败事件都会触发通知并推送到Slack
三、替代方案(无代码)
如果不想编写代码,可以使用Zapier、Make等自动化工具,将Twilio的SMS状态回调直接连接到Slack,通过可视化配置完成消息转发,无需编写代码。
内容的提问来源于stack exchange,提问作者qroberts
相关产品推荐
相关产品推荐

