You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 15:45:34