123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- class Sessions::Event::ChatStatusCustomer < Sessions::Event::ChatBase
- =begin
- a customer requests the current state of a chat
- payload
- {
- event: 'chat_status_agent',
- data: {
- session_id: 'the id of the current chat session',
- url: 'optional url', # will trigger a chat_session_notice to agent
- },
- }
- return is sent as message back to peer
- =end
- def run
- return super if super
- return if !check_chat_exists
- return if blocked_ip?
- return if blocked_country?
- return if blocked_origin?
- # check if it's a chat sessin reconnect
- session_id = nil
- if @payload['data']['session_id']
- session_id = @payload['data']['session_id']
- # update recipients of existing sessions
- chat_session = Chat::Session.find_by(session_id: session_id)
- if chat_session
- chat_session.add_recipient(@client_id, true)
- # sent url update to agent
- if @payload['data']['url']
- message = {
- event: 'chat_session_notice',
- data: {
- session_id: chat_session.session_id,
- message: @payload['data']['url'],
- },
- }
- chat_session.send_to_recipients(message, @client_id)
- end
- end
- end
- {
- event: 'chat_status_customer',
- data: current_chat.customer_state(session_id),
- }
- end
- def blocked_ip?
- return false if !current_chat.blocked_ip?(remote_ip)
- send_unavailable
- true
- end
- def blocked_country?
- return false if !current_chat.blocked_country?(remote_ip)
- send_unavailable
- true
- end
- def blocked_origin?
- return false if current_chat.website_allowed?(origin)
- send_unavailable
- true
- end
- def send_unavailable
- error = {
- event: 'chat_error',
- data: {
- state: 'chat_unavailable',
- },
- }
- Sessions.send(@client_id, error)
- end
- end
|