diff --git a/app/jobs/webhooks/whatsapp_events_job.rb b/app/jobs/webhooks/whatsapp_events_job.rb index c0d967634..55c0969a2 100644 --- a/app/jobs/webhooks/whatsapp_events_job.rb +++ b/app/jobs/webhooks/whatsapp_events_job.rb @@ -5,6 +5,7 @@ class Webhooks::WhatsappEventsJob < ApplicationJob channel = find_channel_from_whatsapp_business_payload(params) if channel_is_inactive?(channel) + Rails.logger.info("Channel is inactive: #{channel.inspect}") Rails.logger.warn("Inactive WhatsApp channel: #{channel&.phone_number || "unknown - #{params[:phone_number]}"}") return end @@ -48,8 +49,5 @@ class Webhooks::WhatsappEventsJob < ApplicationJob channel = Channel::Whatsapp.find_by(phone_number: phone_number) # validate to ensure the phone number id matches the whatsapp channel return channel if channel && channel.provider_config['phone_number_id'] == phone_number_id - - phone_number = wb_params[:phone_number] - Channel::Whatsapp.find_by(phone_number: phone_number) end end diff --git a/app/models/inbox.rb b/app/models/inbox.rb index 05caa2ed9..f1343a352 100644 --- a/app/models/inbox.rb +++ b/app/models/inbox.rb @@ -8,7 +8,6 @@ # allow_messages_after_resolved :boolean default(TRUE) # auto_assignment_config :jsonb # business_name :string -# channel_attributes :jsonb # channel_type :string # csat_config :jsonb not null # csat_survey_enabled :boolean default(FALSE) diff --git a/app/services/whatsapp/embedded_signup_service.rb b/app/services/whatsapp/embedded_signup_service.rb index 5a481a6be..1fe9092c2 100644 --- a/app/services/whatsapp/embedded_signup_service.rb +++ b/app/services/whatsapp/embedded_signup_service.rb @@ -73,7 +73,7 @@ class Whatsapp::EmbeddedSignupService { phone_number_id: phone_data['id'], - phone_number: phone_data['display_phone_number'], + phone_number: "+#{phone_data['display_phone_number']}", verified: phone_data['code_verification_status'] == 'VERIFIED', business_name: phone_data['verified_name'] || phone_data['display_phone_number'] } @@ -86,8 +86,10 @@ class Whatsapp::EmbeddedSignupService if existing_channel update_existing_channel(existing_channel, channel_attributes, waba_info, phone_info) else - create_new_channel(channel_attributes, waba_info, phone_info) + channel = create_new_channel(channel_attributes, waba_info, phone_info) register_phone_number(phone_info[:phone_number_id], access_token) + override_waba_webhook(waba_info[:waba_id], channel, access_token) + channel end end @@ -214,4 +216,28 @@ class Whatsapp::EmbeddedSignupService app_secret = GlobalConfigService.load('WHATSAPP_APP_SECRET', '') "#{app_id}|#{app_secret}" end + + def override_waba_webhook(waba_id, channel, access_token) + callback_url = "https://tanmay-local.chatwoot.dev/webhooks/whatsapp/#{channel.phone_number}" + verify_token = channel.provider_config['webhook_verify_token'] + + response = HTTParty.post( + "https://graph.facebook.com/v21.0/#{waba_id}/subscribed_apps", + { + headers: { + 'Authorization' => "Bearer #{access_token}", + 'Content-Type' => 'application/json' + }, + body: { + override_callback_uri: callback_url, + verify_token: verify_token + }.to_json + } + ) + + return if response.success? + + Rails.logger.error("[WHATSAPP] Webhook override failed: #{response.body}") + raise "Webhook override failed: #{response.body}" + end end