123456789101112131415161718192021222324252627282930313233343536373839 |
- class Sessions::Event::ChatTransfer < Sessions::Event::ChatBase
- def run
- return super if super
- return if !permission_check('chat.agent', 'chat')
- # find chat session
- chat_session = Chat::Session.find_by(id: @payload['session_id'])
- if !chat_session
- return {
- event: 'chat_session_start',
- data: {
- state: 'failed',
- message: 'No session available.',
- },
- }
- end
- chat_ids_to_notify = [chat_session.chat_id, @payload['chat_id']]
- chat_session.chat_id = @payload['chat_id']
- chat_session.state = 'waiting'
- chat_session.save
- # send state update with sessions to agents
- Chat.broadcast_agent_state_update(chat_ids_to_notify)
- # send transfer message to client
- message = {
- event: 'chat_session_notice',
- data: {
- session_id: chat_session.session_id,
- message: 'Conversation transfered into other chat. Please stay tuned.',
- },
- }
- chat_session.send_to_recipients(message, @client_id)
- nil
- end
- end
|