|  | @@ -21,6 +21,7 @@ from configs import apollo_config
 | 
	
		
			
				|  |  |  from logging_service import logger
 | 
	
		
			
				|  |  |  from chat_service import CozeChat, ChatServiceType
 | 
	
		
			
				|  |  |  from dialogue_manager import DialogueManager, DialogueState, DialogueStateCache
 | 
	
		
			
				|  |  | +from rate_limiter import MessageSenderRateLimiter
 | 
	
		
			
				|  |  |  from response_type_detector import ResponseTypeDetector
 | 
	
		
			
				|  |  |  from user_manager import UserManager, LocalUserManager, MySQLUserManager, MySQLUserRelationManager, UserRelationManager, \
 | 
	
		
			
				|  |  |      LocalUserRelationManager
 | 
	
	
		
			
				|  | @@ -81,6 +82,8 @@ class AgentService:
 | 
	
		
			
				|  |  |          self.process_thread = None
 | 
	
		
			
				|  |  |          self._sigint_cnt = 0
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        self.send_rate_limiter = MessageSenderRateLimiter()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      def setup_initiative_conversations(self, schedule_params: Optional[Dict] = None):
 | 
	
		
			
				|  |  |          if not schedule_params:
 | 
	
		
			
				|  |  |              schedule_params = {'hour': '8,16,20'}
 | 
	
	
		
			
				|  | @@ -264,6 +267,7 @@ class AgentService:
 | 
	
		
			
				|  |  |          if not (staff_id in staff_white_lists or hit_white_list_tags or skip_check):
 | 
	
		
			
				|  |  |              logger.warning(f"staff[{staff_id}] user[{user_id}]: skip reply")
 | 
	
		
			
				|  |  |              return
 | 
	
		
			
				|  |  | +        self.send_rate_limiter.wait_for_sending(staff_id, response)
 | 
	
		
			
				|  |  |          self.send_queue.produce(
 | 
	
		
			
				|  |  |              Message.build(message_type, MessageChannel.CORP_WECHAT,
 | 
	
		
			
				|  |  |                            staff_id, user_id, response, current_ts)
 |