history_dialogue_service.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #! /usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # vim:fenc=utf-8
  4. import requests
  5. from logging_service import logger
  6. import time
  7. import configs
  8. from message import MessageType
  9. class HistoryDialogueService:
  10. def __init__(self, base_url: str):
  11. self.base_url = base_url
  12. def get_dialogue_history(self, staff_id: str, user_id: str, recent_minutes: int = 1440):
  13. recent_minutes = min(recent_minutes, 24 * 60)
  14. time_begin = int(time.time() * 1000) - recent_minutes * 60 * 1000
  15. url = f"{self.base_url}?sender={staff_id}&receiver={user_id}&time={time_begin}"
  16. response = requests.post(url, headers={
  17. 'Content-Type': 'application/json'
  18. })
  19. if response.status_code != 200:
  20. raise Exception("Request error [{}]: {}".format(response.status_code, response.text))
  21. data = response.json()
  22. if not data.get('success', False):
  23. raise Exception("Error in response: {}".format(data.get('message', 'no message returned')))
  24. data = data.get('data', [])
  25. ret = []
  26. for record in data:
  27. sender = record.get('sender')
  28. if sender == user_id:
  29. role = 'user'
  30. elif sender == staff_id:
  31. role = 'assistant'
  32. else:
  33. logger.warning("Unknown sender in dialogue history: {}".format(sender))
  34. continue
  35. msg_type = record.get('type', MessageType.TEXT.value)
  36. message = {
  37. 'role': role,
  38. 'content': record.get('content', ''),
  39. 'timestamp': record.get('sendTime', 0),
  40. 'type': MessageType(msg_type)
  41. }
  42. if message['type'] in (MessageType.VOICE_VIDEO_CALL, ):
  43. logger.warning(f"staff[{staff_id}], user[{user_id}]: skip unsupported message type {message['type']}")
  44. continue
  45. ret.append(message)
  46. ret = sorted(ret, key=lambda x: x['timestamp'])
  47. return ret
  48. if __name__ == '__main__':
  49. api_url = configs.get()['storage']['history_dialogue']['api_base_url']
  50. service = HistoryDialogueService(api_url)
  51. resp = service.get_dialogue_history(staff_id='1688854492669990', user_id='7881301263964433')
  52. print(resp)