35 lines
944 B
Ruby
35 lines
944 B
Ruby
|
class ChatLeaveJob < ApplicationJob
|
||
|
def perform(chat_session_id, client_id, session)
|
||
|
|
||
|
# check if customer has permanently left the conversation
|
||
|
chat_session = Chat::Session.find_by(id: chat_session_id)
|
||
|
return if !chat_session
|
||
|
return if chat_session.recipients_active?
|
||
|
|
||
|
chat_session.state = 'closed'
|
||
|
chat_session.save
|
||
|
|
||
|
realname = 'Anonymous'
|
||
|
|
||
|
# if it is a agent session, use the realname if the agent for close message
|
||
|
if session && session['id'] && chat_session.user_id
|
||
|
agent_user = chat_session.agent_user
|
||
|
if agent_user[:name]
|
||
|
realname = agent_user[:name]
|
||
|
end
|
||
|
end
|
||
|
|
||
|
# notify participants
|
||
|
message = {
|
||
|
event: 'chat_session_left',
|
||
|
data: {
|
||
|
realname: realname,
|
||
|
session_id: chat_session.session_id,
|
||
|
},
|
||
|
}
|
||
|
chat_session.send_to_recipients(message, client_id)
|
||
|
|
||
|
Chat.broadcast_agent_state_update([chat_session.chat_id])
|
||
|
end
|
||
|
end
|