CSAT templates for WhatsApp are submitted as Utility, but Meta may reclassify them as Marketing based on content, which can significantly increase messaging costs. This PR introduces a Captain-powered CSAT template analyzer for WhatsApp/Twilio WhatsApp that predicts utility fit, explains likely risks, and suggests safer rewrites before submission. The flow is manual (button-triggered), Captain-gated, and applies rewrites only on explicit user action. It also updates UX copy to clearly set expectations: the system submits as Utility, Meta makes the final categorization decision. Fixes https://linear.app/chatwoot/issue/CW-6424/ai-powered-whatsapp-template-classifier-for-csat-submissions https://github.com/user-attachments/assets/8fd1d6db-2f91-447c-9771-3de271b16fd9
25 lines
1.1 KiB
Ruby
25 lines
1.1 KiB
Ruby
require 'rails_helper'
|
|
|
|
RSpec.describe Captain::CsatUtilityAnalysisService do
|
|
let(:account) { create(:account) }
|
|
let(:service) { described_class.new(account: account, message: 'Test message', language: 'en', baseline: {}) }
|
|
|
|
describe '#perform' do
|
|
before do
|
|
allow(account).to receive(:feature_enabled?).and_call_original
|
|
allow(account).to receive(:feature_enabled?).with('captain_tasks').and_return(true)
|
|
allow(service).to receive(:make_api_call).and_return({
|
|
message: '{"classification":"LIKELY_UTILITY","optimized_message":"Utility-safe message"}'
|
|
})
|
|
end
|
|
|
|
it 'returns parsed payload and preserves raw message for usage metering' do
|
|
result = service.perform
|
|
|
|
expect(result[:classification]).to eq('LIKELY_UTILITY')
|
|
expect(result[:optimized_message]).to eq('Utility-safe message')
|
|
expect(result[:message]).to eq('{"classification":"LIKELY_UTILITY","optimized_message":"Utility-safe message"}')
|
|
end
|
|
end
|
|
end
|