chat_status_customer.rb 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. class Sessions::Event::ChatStatusCustomer < Sessions::Event::ChatBase
  2. def run
  3. return super if super
  4. return if !check_chat_exists
  5. return if !check_chat_block_by_ip
  6. return if !check_chat_block_by_country
  7. # check if it's a chat sessin reconnect
  8. session_id = nil
  9. if @payload['data']['session_id']
  10. session_id = @payload['data']['session_id']
  11. # update recipients of existing sessions
  12. chat_session = Chat::Session.find_by(session_id: session_id)
  13. if chat_session
  14. chat_session.add_recipient(@client_id, true)
  15. # sent url update to agent
  16. if @payload['data']['url']
  17. message = {
  18. event: 'chat_session_notice',
  19. data: {
  20. session_id: chat_session.session_id,
  21. message: @payload['data']['url'],
  22. },
  23. }
  24. chat_session.send_to_recipients(message, @client_id)
  25. end
  26. end
  27. end
  28. {
  29. event: 'chat_status_customer',
  30. data: current_chat.customer_state(session_id),
  31. }
  32. end
  33. def check_chat_block_by_ip
  34. chat = current_chat
  35. return true if !chat.blocked_ip?(@remote_ip)
  36. error = {
  37. event: 'chat_error',
  38. data: {
  39. state: 'chat_unavailable',
  40. },
  41. }
  42. Sessions.send(@client_id, error)
  43. false
  44. end
  45. def check_chat_block_by_country
  46. chat = current_chat
  47. return true if !chat.blocked_country?(@remote_ip)
  48. error = {
  49. event: 'chat_error',
  50. data: {
  51. state: 'chat_unavailable',
  52. },
  53. }
  54. Sessions.send(@client_id, error)
  55. false
  56. end
  57. end