chat_session_start.rb 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. class Sessions::Event::ChatSessionStart < Sessions::Event::ChatBase
  2. def run
  3. agent_permission_check
  4. # find first in waiting list
  5. chat_session = Chat::Session.where(state: 'waiting').order('created_at ASC').first
  6. if !chat_session
  7. return {
  8. event: 'chat_session_start',
  9. data: {
  10. state: 'failed',
  11. message: 'No session available.',
  12. },
  13. }
  14. end
  15. chat_session.user_id = @session['id']
  16. chat_session.state = 'running'
  17. chat_session.preferences[:participants] = chat_session.add_recipient(@client_id)
  18. chat_session.save
  19. # send chat_session_init to client
  20. chat_user = User.find(chat_session.user_id)
  21. url = nil
  22. if chat_user.image && chat_user.image != 'none'
  23. url = "#{Setting.get('http_type')}://#{Setting.get('fqdn')}/api/v1/users/image/#{chat_user.image}"
  24. end
  25. user = {
  26. name: chat_user.fullname,
  27. avatar: url,
  28. }
  29. data = {
  30. event: 'chat_session_start',
  31. data: {
  32. state: 'ok',
  33. agent: user,
  34. session_id: chat_session.session_id,
  35. chat_id: chat_session.chat_id,
  36. },
  37. }
  38. chat_session.send_to_recipients(data)
  39. # send position update to other waiting sessions
  40. broadcast_customer_state_update
  41. # send state update to agents
  42. broadcast_agent_state_update
  43. nil
  44. end
  45. end