如何将短信转发到webhook API端点?
快速解答: Forward SMS可以将您的短信作为JSON webhook发送到任何HTTP端点。在应用中创建Webhook目的地,输入您的端点URL,并设置快捷指令自动化。您的端点将收到包含消息内容、发送者和时间戳的POST请求。
什么是Webhook短信转发?
Webhook短信转发可自动将您的短信发送到您控制的任何HTTP端点。与平台特定的集成(Slack、Discord、Teams)不同,webhook让您完全控制消息的处理方式。这对于构建自定义集成、日志系统或自动化工作流程的开发人员来说是理想的选择。
当消息到达时,Forward SMS会向您的端点发送包含结构化JSON负载的POST请求,其中包含消息内容、发送者信息和元数据。
为什么使用Webhook
Webhook提供了预建集成无法匹敌的灵活性:
- 自定义自动化:收到短信时触发任何工作流程 - 更新数据库、发送通知、运行脚本或与任何服务集成
- 数据日志:将所有收到的消息存储在您自己的数据库中,用于合规性、分析或备份目的
- 多服务路由:使用您自己的逻辑处理消息,根据内容或发送者将其路由到不同的目的地
- 内部工具:在您的内部仪表板和工具中构建短信功能
- IoT集成:将短信警报连接到您的IoT系统、家庭自动化或监控基础设施
Webhook负载格式
当消息被转发时,您的端点会收到包含以下JSON负载的POST请求:
{
"timestamp": "2025-01-31T14:30:00Z",
"content": "Your verification code is 123456",
"sender": "+1234567890",
"contact": "Bank of Example"
}
负载字段
| 字段 | 类型 | 描述 |
|-------|------|-------------|
| timestamp | string | 消息转发时的ISO 8601格式时间戳 |
| content | string | 短信内容 |
| sender | string | 发送者电话号码(如果可用) |
| contact | string | 通讯录中的联系人名称(如果匹配) |
设置Webhook转发
第1步:下载Forward SMS
从App Store下载Forward SMS。
第2步:创建Webhook目的地
打开应用,点击"添加目的地",然后选择"Webhook"。输入您的端点URL。出于安全考虑,URL必须是HTTPS。
第3步:测试您的端点
使用"发送测试消息"按钮验证您的端点是否正确接收webhook。检查服务器日志以确认负载已到达。
第4步:设置快捷指令自动化
按照我们的快捷指令设置指南创建触发消息转发的自动化。
实现示例
以下是各种语言处理webhook的示例:
Node.js (Express)
const express = require('express');
const app = express();
app.use(express.json());
app.post('/webhook/sms', (req, res) => {
const { timestamp, content, sender, contact } = req.body;
console.log(`Received SMS from ${sender}: ${content}`);
// Process the message (save to database, trigger automation, etc.)
res.status(200).json({ received: true });
});
app.listen(3000);
Python (Flask)
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/webhook/sms', methods=['POST'])
def handle_sms():
data = request.json
sender = data['sender']
content = data['content']
print(f"Received SMS from {sender}: {content}")
# Process the message
return jsonify({'received': True}), 200
if __name__ == '__main__':
app.run(port=3000)
PHP
<?php
$payload = json_decode(file_get_contents('php://input'), true);
$sender = $payload['sender'];
$content = $payload['content'];
$timestamp = $payload['timestamp'];
error_log("Received SMS from $sender: $content");
// Process the message
http_response_code(200);
echo json_encode(['received' => true]);
?>
Ruby (Sinatra)
require 'sinatra'
require 'json'
post '/webhook/sms' do
payload = JSON.parse(request.body.read)
sender = payload['sender']
content = payload['content']
puts "Received SMS from #{sender}: #{content}"
# Process the message
content_type :json
{ received: true }.to_json
end
安全注意事项
使用HTTPS
始终使用HTTPS端点来加密传输中的webhook负载。Forward SMS要求webhook URL使用HTTPS。
优雅地处理错误
您的端点应返回2xx状态码以确认收到。如果Forward SMS收到错误响应,它将记录失败。
故障排除
Webhook未收到消息
- 检查URL:确保端点URL正确且可从互联网访问
- 验证HTTPS:URL必须使用HTTPS,而不是HTTP
- 检查防火墙规则:您的服务器必须接受传入的POST请求
- 测试端点:使用应用中的测试按钮验证连接
消息到达缓慢
- 检查快捷指令自动化:确保自动化无需确认即可运行
- 后台应用刷新:在iOS设置中为Forward SMS启用此功能
- 网络问题:您的iPhone和服务器都需要稳定的互联网连接
负载无法解析
- Content-Type:请求使用
Content-Type: application/json - JSON解析:确保服务器正确解析JSON正文
- 字符编码:消息采用UTF-8编码
常见问题
我可以转发到多个webhook端点吗?
可以,在Forward SMS中创建多个Webhook目的地。每个目的地可以有不同的端点URL,所有目的地都会收到转发的消息。
如果我的端点宕机会怎样?
如果您的端点返回错误或无法访问,消息转发将失败。应用会记录这些失败以便调试。考虑实现备用方案或监控系统。
Webhook有速率限制吗?
Forward SMS没有人为的速率限制。消息会尽快转发,您的端点可以按到达速度处理它们。
我可以过滤转发哪些消息吗?
目前,触发快捷指令自动化的所有消息都会被转发。您可以在webhook端点中实现过滤逻辑来忽略不需要的消息。
我可以使用HTTP而不是HTTPS吗?
不可以,出于安全原因,Forward SMS要求使用HTTPS端点。这确保您的消息数据在传输过程中被加密。