在Rails中如何捕获API发送的Webhook响应及状态
在Rails中捕获Webhook回调及状态值
1. 添加Webhook接收路由
首先在config/routes.rb中配置接收Webhook的路由,注意要和你发起API请求时填写的webhookURL对应:
# config/routes.rb post '/webhooks/call_status', to: 'your_controller#handle_call_webhook'
2. 实现Webhook处理逻辑
在对应的控制器中添加处理Webhook回调的方法,解析请求体并提取status和id:
# app/controllers/your_controller.rb def handle_call_webhook # 解析JSON格式的请求体 webhook_data = JSON.parse(request.body.read) # 提取关键数据 call_id = webhook_data['id'] call_status = webhook_data['status'] # 根据业务需求处理状态,比如存入数据库、记录日志 Rails.logger.info "收到呼叫Webhook: 呼叫ID=#{call_id},状态=#{call_status}" # 返回200响应给API,确认已成功接收 head :ok end
3. 修正原请求的Webhook地址
修改你现有的request_api方法,将webhookURL替换为上面创建的接收路由地址:
def request_api(number) url = 'http://localhost:3550/call' @response = HTTParty.post( url, body: { phone: number, webhookURL: "http://localhost:3550/webhooks/call_status" }.to_json, headers: { 'Content-Type' => 'application/json', 'Authorization' => '77d22458349303990334xxxxxxxxxx' } ) render json: @response end
4. 验证接收效果
启动Rails服务器后,当API触发Webhook回调时,你可以在Rails日志中看到类似如下的记录:
收到呼叫Webhook: 呼叫ID=1267,状态=completed
注意事项
- 确保Webhook请求格式为JSON:如果API发送的是表单格式,需改用
params获取数据 - 生产环境必须添加Webhook签名验证,拦截恶意请求
- 若API重复发送相同状态的回调,建议记录已处理的
call_id,避免重复操作
内容的提问来源于stack exchange,提问作者Guoguo
相关产品推荐
相关产品推荐

