chore: Add message_echo listener for Facebook (#1192)
Co-authored-by: Sojan Jose <sojan@pepalo.com>
This commit is contained in:
parent
715bd368f4
commit
d18c8fc08a
12 changed files with 51 additions and 11 deletions
|
@ -19,4 +19,10 @@ class FacebookBot
|
||||||
updater.perform
|
updater.perform
|
||||||
Rails.logger.info "Human was online at #{delivery.at}"
|
Rails.logger.info "Human was online at #{delivery.at}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Bot.on :message_echo do |message|
|
||||||
|
Rails.logger.info "MESSAGE_ECHO #{message}"
|
||||||
|
response = ::Integrations::Facebook::MessageParser.new(message)
|
||||||
|
::Integrations::Facebook::MessageCreator.new(response).perform
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -10,8 +10,9 @@ class Messages::Facebook::MessageBuilder
|
||||||
def initialize(response, inbox, outgoing_echo = false)
|
def initialize(response, inbox, outgoing_echo = false)
|
||||||
@response = response
|
@response = response
|
||||||
@inbox = inbox
|
@inbox = inbox
|
||||||
@sender_id = (outgoing_echo ? @response.recipient_id : @response.sender_id)
|
@outgoing_echo = outgoing_echo
|
||||||
@message_type = (outgoing_echo ? :outgoing : :incoming)
|
@sender_id = (@outgoing_echo ? @response.recipient_id : @response.sender_id)
|
||||||
|
@message_type = (@outgoing_echo ? :outgoing : :incoming)
|
||||||
end
|
end
|
||||||
|
|
||||||
def perform
|
def perform
|
||||||
|
@ -120,7 +121,7 @@ class Messages::Facebook::MessageBuilder
|
||||||
message_type: @message_type,
|
message_type: @message_type,
|
||||||
content: response.content,
|
content: response.content,
|
||||||
source_id: response.identifier,
|
source_id: response.identifier,
|
||||||
sender: contact
|
sender: @outgoing_echo ? nil : contact
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,10 @@ class Channel::Api < ApplicationRecord
|
||||||
|
|
||||||
has_one :inbox, as: :channel, dependent: :destroy
|
has_one :inbox, as: :channel, dependent: :destroy
|
||||||
|
|
||||||
|
def name
|
||||||
|
'API'
|
||||||
|
end
|
||||||
|
|
||||||
def has_24_hour_messaging_window?
|
def has_24_hour_messaging_window?
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
|
@ -26,6 +26,10 @@ class Channel::Email < ApplicationRecord
|
||||||
has_one :inbox, as: :channel, dependent: :destroy
|
has_one :inbox, as: :channel, dependent: :destroy
|
||||||
before_validation :ensure_forward_to_address, on: :create
|
before_validation :ensure_forward_to_address, on: :create
|
||||||
|
|
||||||
|
def name
|
||||||
|
'Email'
|
||||||
|
end
|
||||||
|
|
||||||
def has_24_hour_messaging_window?
|
def has_24_hour_messaging_window?
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
|
@ -28,6 +28,10 @@ class Channel::FacebookPage < ApplicationRecord
|
||||||
after_create_commit :subscribe
|
after_create_commit :subscribe
|
||||||
before_destroy :unsubscribe
|
before_destroy :unsubscribe
|
||||||
|
|
||||||
|
def name
|
||||||
|
'Facebook'
|
||||||
|
end
|
||||||
|
|
||||||
def has_24_hour_messaging_window?
|
def has_24_hour_messaging_window?
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
|
@ -30,11 +30,11 @@ class Channel::TwilioSms < ApplicationRecord
|
||||||
|
|
||||||
has_one :inbox, as: :channel, dependent: :destroy
|
has_one :inbox, as: :channel, dependent: :destroy
|
||||||
|
|
||||||
|
def name
|
||||||
|
medium == :sms ? 'Twilio SMS' : 'Whatsapp'
|
||||||
|
end
|
||||||
|
|
||||||
def has_24_hour_messaging_window?
|
def has_24_hour_messaging_window?
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
def name
|
|
||||||
'Twilio SMS'
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -26,6 +26,10 @@ class Channel::TwitterProfile < ApplicationRecord
|
||||||
|
|
||||||
before_destroy :unsubscribe
|
before_destroy :unsubscribe
|
||||||
|
|
||||||
|
def name
|
||||||
|
'Twitter'
|
||||||
|
end
|
||||||
|
|
||||||
def has_24_hour_messaging_window?
|
def has_24_hour_messaging_window?
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
|
@ -33,6 +33,10 @@ class Channel::WebWidget < ApplicationRecord
|
||||||
2 => :emoji_picker,
|
2 => :emoji_picker,
|
||||||
:column => 'feature_flags'
|
:column => 'feature_flags'
|
||||||
|
|
||||||
|
def name
|
||||||
|
'Website'
|
||||||
|
end
|
||||||
|
|
||||||
def has_24_hour_messaging_window?
|
def has_24_hour_messaging_window?
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
|
@ -66,6 +66,10 @@ class Inbox < ApplicationRecord
|
||||||
channel.class.name.to_s == 'Channel::WebWidget'
|
channel.class.name.to_s == 'Channel::WebWidget'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def inbox_type
|
||||||
|
channel.name
|
||||||
|
end
|
||||||
|
|
||||||
def webhook_data
|
def webhook_data
|
||||||
{
|
{
|
||||||
id: id,
|
id: id,
|
||||||
|
|
|
@ -32,7 +32,7 @@ class Integrations::Slack::SendOnSlackService < Base::SendOnChannelService
|
||||||
if conversation.identifier.present?
|
if conversation.identifier.present?
|
||||||
"#{private_indicator}#{message.content}"
|
"#{private_indicator}#{message.content}"
|
||||||
else
|
else
|
||||||
"*Inbox: #{message.inbox.name}* \n\n #{message.content}"
|
"*Inbox: #{message.inbox.name} [#{message.inbox.inbox_type}]* \n\n #{message.content}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -43,11 +43,12 @@ class Integrations::Slack::SendOnSlackService < Base::SendOnChannelService
|
||||||
def send_message
|
def send_message
|
||||||
sender = message.sender
|
sender = message.sender
|
||||||
sender_type = sender.class == Contact ? 'Contact' : 'Agent'
|
sender_type = sender.class == Contact ? 'Contact' : 'Agent'
|
||||||
|
sender_name = sender.try(:name) ? "#{sender_type}: #{sender.try(:name)}" : sender_type
|
||||||
|
|
||||||
@slack_message = slack_client.chat_postMessage(
|
@slack_message = slack_client.chat_postMessage(
|
||||||
channel: hook.reference_id,
|
channel: hook.reference_id,
|
||||||
text: message_content,
|
text: message_content,
|
||||||
username: "#{sender_type}: #{sender.try(:name)}",
|
username: sender_name,
|
||||||
thread_ts: conversation.identifier,
|
thread_ts: conversation.identifier,
|
||||||
icon_url: avatar_url(sender)
|
icon_url: avatar_url(sender)
|
||||||
)
|
)
|
||||||
|
|
|
@ -3,10 +3,14 @@
|
||||||
require 'rails_helper'
|
require 'rails_helper'
|
||||||
|
|
||||||
RSpec.describe Channel::FacebookPage do
|
RSpec.describe Channel::FacebookPage do
|
||||||
before { create(:channel_facebook_page) }
|
let(:channel) { create(:channel_facebook_page) }
|
||||||
|
|
||||||
it { is_expected.to validate_presence_of(:account_id) }
|
it { is_expected.to validate_presence_of(:account_id) }
|
||||||
# it { is_expected.to validate_uniqueness_of(:page_id).scoped_to(:account_id) }
|
# it { is_expected.to validate_uniqueness_of(:page_id).scoped_to(:account_id) }
|
||||||
it { is_expected.to belong_to(:account) }
|
it { is_expected.to belong_to(:account) }
|
||||||
it { is_expected.to have_one(:inbox).dependent(:destroy) }
|
it { is_expected.to have_one(:inbox).dependent(:destroy) }
|
||||||
|
|
||||||
|
it 'has a valid name' do
|
||||||
|
expect(channel.name).to eq('Facebook')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -69,13 +69,17 @@ RSpec.describe Inbox do
|
||||||
|
|
||||||
it do
|
it do
|
||||||
expect(inbox.facebook?).to eq(true)
|
expect(inbox.facebook?).to eq(true)
|
||||||
|
expect(inbox.inbox_type).to eq('Facebook')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when the channel type is not Channel::FacebookPage' do
|
context 'when the channel type is not Channel::FacebookPage' do
|
||||||
let(:channel_val) { Channel::WebWidget.new }
|
let(:channel_val) { Channel::WebWidget.new }
|
||||||
|
|
||||||
it { expect(inbox.facebook?).to eq(false) }
|
it do
|
||||||
|
expect(inbox.facebook?).to eq(false)
|
||||||
|
expect(inbox.inbox_type).to eq('Website')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue