chat_agent_state.rb 882 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. class Sessions::Event::ChatAgentState < Sessions::Event::ChatBase
  2. =begin
  3. a agent triggers its own chat availability state
  4. payload
  5. {
  6. event: 'chat_agent_state',
  7. data: {
  8. active: true, # true|false
  9. },
  10. }
  11. return is sent as message back to peer
  12. =end
  13. def run
  14. return super if super
  15. # check if user has permissions
  16. return if !permission_check('chat.agent', 'chat')
  17. update_state
  18. {
  19. event: 'chat_agent_state',
  20. data: {
  21. state: 'ok',
  22. active: @payload['data']['active'],
  23. },
  24. }
  25. end
  26. private
  27. def update_state
  28. chat_user = User.lookup(id: @session['id'])
  29. return if !Chat::Agent.state(@session['id'], @payload['data']['active'])
  30. chat_ids = Chat.agent_active_chat_ids(chat_user)
  31. # broadcast new state to agents
  32. Chat.broadcast_agent_state_update(chat_ids, @session['id'])
  33. end
  34. end