feat: implement CSAT message handling in WhatsApp services (#161)
This commit is contained in:
parent
c73ef7f1a2
commit
797bde6566
@ -59,12 +59,12 @@ class Whatsapp::Providers::WhatsappBaileysService < Whatsapp::Providers::BaseSer
|
|||||||
@message = message
|
@message = message
|
||||||
@recipient_id = recipient_id
|
@recipient_id = recipient_id
|
||||||
|
|
||||||
if message.content_attributes[:is_reaction]
|
if @message.content_attributes[:is_reaction]
|
||||||
@message_content = reaction_message_content
|
@message_content = reaction_message_content
|
||||||
elsif message.attachments.present?
|
elsif @message.attachments.present?
|
||||||
@message_content = attachment_message_content
|
@message_content = attachment_message_content
|
||||||
elsif message.content.present?
|
elsif @message.outgoing_content.present?
|
||||||
@message_content = { text: @message.content }
|
@message_content = { text: @message.outgoing_content }
|
||||||
else
|
else
|
||||||
@message.update!(is_unsupported: true)
|
@message.update!(is_unsupported: true)
|
||||||
return
|
return
|
||||||
@ -252,7 +252,7 @@ class Whatsapp::Providers::WhatsappBaileysService < Whatsapp::Providers::BaseSer
|
|||||||
react: { key: { id: reply_to.source_id,
|
react: { key: { id: reply_to.source_id,
|
||||||
remoteJid: remote_jid,
|
remoteJid: remote_jid,
|
||||||
fromMe: reply_to.message_type == 'outgoing' },
|
fromMe: reply_to.message_type == 'outgoing' },
|
||||||
text: @message.content }
|
text: @message.outgoing_content }
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -262,7 +262,7 @@ class Whatsapp::Providers::WhatsappBaileysService < Whatsapp::Providers::BaseSer
|
|||||||
|
|
||||||
content = {
|
content = {
|
||||||
fileName: attachment.file.filename,
|
fileName: attachment.file.filename,
|
||||||
caption: @message.content
|
caption: @message.outgoing_content
|
||||||
}
|
}
|
||||||
case attachment.file_type
|
case attachment.file_type
|
||||||
when 'image'
|
when 'image'
|
||||||
|
|||||||
@ -17,7 +17,7 @@ class Whatsapp::Providers::WhatsappZapiService < Whatsapp::Providers::BaseServic
|
|||||||
send_reaction_message(phone, message, **params)
|
send_reaction_message(phone, message, **params)
|
||||||
elsif message.attachments.present?
|
elsif message.attachments.present?
|
||||||
handle_message_with_attachment(message, phone, **params)
|
handle_message_with_attachment(message, phone, **params)
|
||||||
elsif message.content.present?
|
elsif message.outgoing_content.present?
|
||||||
send_text_message(phone, message, **params)
|
send_text_message(phone, message, **params)
|
||||||
else
|
else
|
||||||
message.update!(is_unsupported: true)
|
message.update!(is_unsupported: true)
|
||||||
@ -134,7 +134,7 @@ class Whatsapp::Providers::WhatsappZapiService < Whatsapp::Providers::BaseServic
|
|||||||
headers: api_headers,
|
headers: api_headers,
|
||||||
body: {
|
body: {
|
||||||
phone: phone,
|
phone: phone,
|
||||||
message: message.content,
|
message: message.outgoing_content,
|
||||||
**params
|
**params
|
||||||
}.compact.to_json
|
}.compact.to_json
|
||||||
)
|
)
|
||||||
@ -188,7 +188,7 @@ class Whatsapp::Providers::WhatsappZapiService < Whatsapp::Providers::BaseServic
|
|||||||
body: {
|
body: {
|
||||||
phone: phone,
|
phone: phone,
|
||||||
image: buffer,
|
image: buffer,
|
||||||
caption: message.content,
|
caption: message.outgoing_content,
|
||||||
**params
|
**params
|
||||||
}.compact.to_json
|
}.compact.to_json
|
||||||
)
|
)
|
||||||
@ -229,7 +229,7 @@ class Whatsapp::Providers::WhatsappZapiService < Whatsapp::Providers::BaseServic
|
|||||||
phone: phone,
|
phone: phone,
|
||||||
document: buffer,
|
document: buffer,
|
||||||
fileName: attachment.file.filename.to_s,
|
fileName: attachment.file.filename.to_s,
|
||||||
caption: message.content,
|
caption: message.outgoing_content,
|
||||||
**params
|
**params
|
||||||
}.compact.to_json
|
}.compact.to_json
|
||||||
)
|
)
|
||||||
@ -246,7 +246,7 @@ class Whatsapp::Providers::WhatsappZapiService < Whatsapp::Providers::BaseServic
|
|||||||
body: {
|
body: {
|
||||||
phone: phone,
|
phone: phone,
|
||||||
video: buffer,
|
video: buffer,
|
||||||
caption: message.content,
|
caption: message.outgoing_content,
|
||||||
**params
|
**params
|
||||||
}.compact.to_json
|
}.compact.to_json
|
||||||
)
|
)
|
||||||
@ -262,7 +262,7 @@ class Whatsapp::Providers::WhatsappZapiService < Whatsapp::Providers::BaseServic
|
|||||||
headers: api_headers,
|
headers: api_headers,
|
||||||
body: {
|
body: {
|
||||||
phone: phone,
|
phone: phone,
|
||||||
reaction: message.content,
|
reaction: message.outgoing_content,
|
||||||
messageId: message.in_reply_to_external_id,
|
messageId: message.in_reply_to_external_id,
|
||||||
**params
|
**params
|
||||||
}.compact.to_json
|
}.compact.to_json
|
||||||
|
|||||||
@ -193,6 +193,33 @@ describe Whatsapp::Providers::WhatsappBaileysService do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when message is input_csat' do
|
||||||
|
before do
|
||||||
|
allow(message).to receive(:outgoing_content).and_return('Please rate us http://example.com/survey')
|
||||||
|
message.content_type = :input_csat
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'sends the message with survey url' do
|
||||||
|
stub_request(:post, request_path)
|
||||||
|
.with(
|
||||||
|
headers: stub_headers(whatsapp_channel),
|
||||||
|
body: {
|
||||||
|
jid: test_send_jid,
|
||||||
|
messageContent: { text: 'Please rate us http://example.com/survey' }
|
||||||
|
}.to_json
|
||||||
|
)
|
||||||
|
.to_return(
|
||||||
|
status: 200,
|
||||||
|
headers: { 'Content-Type' => 'application/json' },
|
||||||
|
body: result_body.to_json
|
||||||
|
)
|
||||||
|
|
||||||
|
result = service.send_message(test_send_phone_number, message)
|
||||||
|
|
||||||
|
expect(result).to eq('msg_123')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'when message has attachment' do
|
context 'when message has attachment' do
|
||||||
let(:base64_image) { 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=' }
|
let(:base64_image) { 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=' }
|
||||||
|
|
||||||
|
|||||||
@ -285,6 +285,29 @@ describe Whatsapp::Providers::WhatsappZapiService do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when message is input_csat' do
|
||||||
|
before do
|
||||||
|
allow(message).to receive(:outgoing_content).and_return('Please rate us http://example.com/survey')
|
||||||
|
message.content_type = :input_csat
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'sends the message with survey url' do
|
||||||
|
stub_request(:post, request_path)
|
||||||
|
.with(
|
||||||
|
headers: stub_headers,
|
||||||
|
body: {
|
||||||
|
phone: test_send_phone_number,
|
||||||
|
message: 'Please rate us http://example.com/survey'
|
||||||
|
}.to_json
|
||||||
|
)
|
||||||
|
.to_return(status: 200, body: result_body.to_json, headers: { 'Content-Type' => 'application/json' })
|
||||||
|
|
||||||
|
result = service.send_message("+#{test_send_phone_number}", message)
|
||||||
|
|
||||||
|
expect(result).to eq('msg_123')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'when message is a text' do
|
context 'when message is a text' do
|
||||||
it 'sends the text message' do
|
it 'sends the text message' do
|
||||||
stub_request(:post, request_path)
|
stub_request(:post, request_path)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user