Hi team, I have a use case wherein when the user selects that he is the affected employee, his employee_id should be stored in slot request_employee_dsid (which is also the part of sender if) else rasa should as for the id through dispatcher.
I am currently not able to set the value for the slot inside the form action.
I looked for the workaround got the solution to implement the code in validate function but it isn’t working there too.
Is there any way to update slot in FormsAction??
Code for reference:- def validate_request_employee_dsid(self,value,dispatcher,tracker,domain):
current_dsid = sender_id_parser(str(tracker.sender_id))["dsid"]
logger.info(f'The value of current dsid : {current_dsid}')
#print('current dsid : {current_dsid}')
request_form = next(tracker.get_latest_entity_values("request_form"), None)
request_affected_employee = next(tracker.get_latest_entity_values("request_affected_employee"), None)
requester_dsid = next(tracker.get_latest_entity_values("requester_dsid"), None)
user_input = next(tracker.get_latest_entity_values("request_employee_dsid"), None)
if request_form=="General Request - English - NA":
if request_affected_employee == "Yes":
logger.info(f'The values of request_affected_employee: {request_affected_employee}')
logger.info("Setting the current ds_id")
return {"request_employee_dsid": current_dsid}
elif request_affected_employee == "No":
logger.info(f'The values of request_affected_employee: {request_affected_employee}')
#print('request_affected_employee : {request_affected_employee}')
if user_input.isdigit():
return {"request_employee_dsid": user_input}
else:
dispatcher.utter_message(template="utter_wrong_employee_dsid")
return {"request_employee_dsid": None}
else:
return {"request_employee_dsid":None}
else:
if user_input.isdigit():
return {"request_employee_dsid": user_input}
else:
dispatcher.utter_message(template="utter_wrong_employee_dsid")
return {"request_employee_dsid": None}
##request_next_slot
if tracker.get_slot(“request_affected_employee”)==“No”:
emp_dsid_playload = get_basic_payload(
LANG.get(requester_language).get("EMPLOYEE_DSID_DISCIPLINE_TEXT"),
lang = requester_language,
slot = slot,
intent=True,
redact = ["user"]
)
emp_dsid_playload.update( {'faq_response' : False} )
dispatcher.utter_message(json_message=emp_dsid_playload, **tracker.slots)
else:
SlotSet("request_employee_dsid",current_dsid)
return ["request_employee_dsid"]
Thanks Everyone