#!/usr/bin/env ruby # 手动触发 webhook 测试 require_relative 'config/environment' puts "=== 手动触发 Webhook 测试 ===" puts "" # 获取最近的消息 message = Message.where(content_type: 'search_image').order(created_at: :desc).first if message.nil? puts "❌ 没有找到 search_image 消息" puts "请先通过 widget 上传一张图片" exit 1 end puts "📋 消息信息:" puts "ID: #{message.id}" puts "content_type: #{message.content_type}" puts "content: '#{message.content}'" puts "content_attributes: #{message.content_attributes.inspect}" puts "" # 检查 webhook 配置 account = message.account webhooks = account.webhooks if webhooks.count == 0 puts "❌ 没有配置 Webhook!" puts "" puts "💡 创建测试 Webhook:" puts "" puts " account = Account.find(2)" puts " account.webhooks.create!(" puts " webhook_url: 'https://webhook.site/your-uuid'," puts " subscriptions: ['message_created', 'conversation_created']," puts " active: true" puts " )" exit 1 end puts "✅ 找到 #{webhooks.count} 个 Webhook 配置" puts "" webhooks.each do |webhook| puts "━━━━━━━━━━━━━━━━━━━━━━━━━━━━" puts "Webhook ID: #{webhook.id}" puts "URL: #{webhook.webhook_url}" puts "启用: #{webhook.active}" puts "订阅: #{webhook.subscriptions.inspect}" puts "" # 检查是否订阅了 message_created unless webhook.subscriptions.include?('message_created') puts "⚠️ 此 Webhook 没有订阅 message_created 事件" next end puts "✅ 已订阅 message_created 事件" puts "" # 手动构建 payload payload = message.webhook_data.merge(event: 'message_created') puts "📤 即将发送的 Payload:" puts JSON.pretty_generate(payload) puts "" # 手动触发 webhook puts "🚀 手动触发 Webhook..." begin response = Webhooks::Trigger.execute( webhook.webhook_url, payload, :account_webhook, webhook.user_token ) puts "✅ Webhook 发送成功!" puts "响应: #{response.inspect}" rescue => e puts "❌ Webhook 发送失败: #{e.message}" puts e.backtrace.first(5).join("\n") end puts "" end puts "" puts "📊 检查 Webhook 日志:" puts "" logs = account.webhook_logs.where(event_type: 'message_created').order(created_at: :desc).limit(3) if logs.count == 0 puts "⚠️ 没有 message_created 的日志记录" else logs.each do |log| puts "ID: #{log.id}" puts "状态: #{log.status}" puts "响应码: #{log.response_code}" puts "时间: #{log.created_at}" if log.error_message.present? puts "错误: #{log.error_message}" end puts "" end end