Bez popisu
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

actions.py 5.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. # This files contains your custom actions which can be used to run
  2. # custom Python code.
  3. #
  4. # See this guide on how to implement these action:
  5. # https://rasa.com/docs/rasa/custom-actions
  6. # This is a simple example for a custom action which utters "Hello World!"
  7. from typing import Any, Text, Dict, List
  8. from rasa_sdk import Action, Tracker
  9. from rasa_sdk.executor import CollectingDispatcher
  10. from flask import request
  11. import json
  12. class ActionService(Action):
  13. def name(self) -> Text:
  14. return "action_service"
  15. def run(self, dispatcher: CollectingDispatcher,
  16. tracker: Tracker,
  17. domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
  18. buttons=[
  19. {"payload":'/docs{"content_type":"blogs"}',"title":"yes"},
  20. {"payload":'/video{"content_type":"video"}',"title":"no"},
  21. ]
  22. dispatcher.utter_message(text="Are you satisfied with above solution",buttons=buttons)
  23. return []
  24. class ActionService(Action):
  25. def name(self) -> Text:
  26. return "action_suport_service"
  27. def run(self, dispatcher: CollectingDispatcher,
  28. tracker: Tracker,
  29. domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
  30. buttons=[
  31. {"payload":'/connect_support{"content_type":"text"}',"title":"yes"},
  32. {"payload":'/noconnect_support{"content_type":"text"}',"title":"no"},
  33. ]
  34. dispatcher.utter_message(text="do you want me to connect to support team",buttons=buttons)
  35. return []
  36. question=[]
  37. answer=[]
  38. class ActionSaveConversation(Action):
  39. def name(self) -> Text:
  40. return "action_save_conersation"
  41. def run(self,
  42. dispatcher: CollectingDispatcher,
  43. tracker: Tracker,
  44. domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
  45. sender_id = tracker.sender_id
  46. #print(tracker.events)
  47. conversation=tracker.events
  48. import os
  49. if not os. path.isfile('chats.txt'):
  50. with open('chats.txt ','w') as file:
  51. file.write("user_input $$$$ bot_reply\n")
  52. chat_data=''
  53. for i in conversation:
  54. if i['event'] == 'user':
  55. chat_data+=i['parse_data']['intent']['name']
  56. print('user: {}'.format(i['text']))
  57. a='user{}: {}'.format(sender_id,i['text'])
  58. question.append(a)
  59. if len(i['parse_data']['entities']) > 0:
  60. chat_data+=i['parse_data']['entities'][0]['entity']+', '+i['parse_data']['entities' ][0]['value']+','
  61. print('extra data:', i['parse_data']['entities'][0]['entity'], '=',
  62. i['parse_data']['entities'][0]['value'])
  63. elif i['event'] == 'bot':
  64. print('{}'.format(i['text']))
  65. b='Bot{}: {}'.format(sender_id,i['text'])
  66. question.append(b)
  67. # try:
  68. # chat_data+=i['metadata']['utter_action']+','+i['text']+'\n'
  69. # except KeyError:
  70. # pass
  71. chat_data+=i['text']+'\n'
  72. else:
  73. with open('chats.txt','a') as file:
  74. file.write(chat_data)
  75. #print(question)
  76. import pandas as pd
  77. df=pd.DataFrame(question)
  78. print(df)
  79. conversation=None
  80. question.clear()
  81. print(conversation)
  82. print(question)
  83. print(sender_id)
  84. # print(answer)
  85. # a=question
  86. # b=answer
  87. # import numpy as np
  88. # import pandas as pd
  89. # if len(a) > len(b):
  90. # b = np.pad(b, (0, len(a) - len(b)), 'constant')
  91. # else:
  92. # a = np.pad(a, (0, len(b) - len(a)), 'constant')
  93. # df=pd.DataFrame({'question':a,"answer":b})
  94. # print(df)
  95. dispatcher.utter_message(text="All Chats saved")
  96. return []
  97. class ActionSaveConversation(Action):
  98. def name(self) -> Text:
  99. return "action_save_conersation"
  100. def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
  101. # Get sender_id
  102. sender_id = tracker.sender_id
  103. conversation = tracker.events
  104. chat_data = []
  105. for i in conversation:
  106. if i['event'] == 'user':
  107. text = i['text'].replace('/connect_support{"content_type":"text"}', 'yes').replace('/noconnect_support{"content_type":"text"}','No').replace('/docs{"content_type":"blogs"}','yes').replace('/video{"content_type":"video"}','No')
  108. chat_data.append({'sender': f'user_{sender_id}', 'message': text})
  109. print(f'user_{sender_id}: {i["text"]}')
  110. if len(i['parse_data']['entities']) > 0:
  111. print('extra data:', i['parse_data']['entities'][0]['entity'], '=',
  112. i['parse_data']['entities'][0]['value'])
  113. elif i['event'] == 'bot':
  114. print(f'bot_{sender_id}: {i["text"]}')
  115. chat_data.append({'sender': f'bot_{sender_id}', 'message': i['text']})
  116. with open('chats.json', 'w') as file:
  117. json.dump({'conversation': chat_data, 'sender_id': sender_id}, file)
  118. file.write('\n')
  119. file.close()
  120. print(json.dumps({'conversation': chat_data, 'sender_id': sender_id}, indent=4))
  121. conversation = None
  122. return []
  123. class ActionClearConversation(Action):
  124. def name(self) -> Text:
  125. return "action_clear_conversation"
  126. def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
  127. sender_id = tracker.sender_id
  128. tracker.events = []
  129. return []