Ejemplo n.º 1
0
    async def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
                  domain: Dict) -> List[EventType]:
        bind_logger(tracker)

        extracted_slots: Dict[Text, Any] = tracker.form_slots_to_validate()

        validation_events: List[EventType] = []
        for slot_name, slot_value in extracted_slots.items():
            slot_events = [SlotSet(slot_name, slot_value)]

            if slot_name == HAS_FEVER_SLOT:
                slot_events += _validate_has_fever(slot_value, dispatcher)
            elif slot_name == HAS_COUGH_SLOT:
                slot_events += _validate_has_cough(slot_value, dispatcher)
                if (tracker.get_slot(LAST_SYMPTOMS_SLOT) != Symptoms.MODERATE
                    ):  # Next slot is only asked when symptoms are moderate
                    slot_events.append(
                        SlotSet(HAS_DIFF_BREATHING_SLOT,
                                SKIP_SLOT_PLACEHOLDER))
            elif slot_name == HAS_DIFF_BREATHING_SLOT:
                slot_events += _validate_has_diff_breathing(
                    slot_value, dispatcher)
            elif slot_name == HAS_OTHER_MILD_SYMPTOMS_SLOT:
                slot_events += _validate_has_other_mild_symptoms(
                    slot_value, dispatcher, tracker)
            elif slot_name == IS_SYMPTOM_FREE_SLOT:
                slot_events += _validate_is_symptom_free(
                    slot_value, dispatcher)

            validation_events.extend(slot_events)

        return validation_events
Ejemplo n.º 2
0
    async def run(
        self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict
    ) -> List[EventType]:
        bind_logger(tracker)

        extracted_slots: Dict[Text, Any] = tracker.form_slots_to_validate()

        validation_events: List[EventType] = []

        for slot_name, slot_value in extracted_slots.items():
            slot_events = [SlotSet(slot_name, slot_value)]

            if slot_name == POSTAL_CODE_SLOT:
                slot_events = await validate_test_navigation_form_postal_code(
                    slot_value, self.geocoding_client, dispatcher, tracker, domain
                )
            elif slot_name == TRY_DIFFERENT_ADDRESS_SLOT:
                if slot_value is True:
                    slot_events = [
                        SlotSet(TRY_DIFFERENT_ADDRESS_SLOT, None),
                        SlotSet(POSTAL_CODE_SLOT, None),
                    ]
                else:
                    dispatcher.utter_message(
                        template="utter_test_navigation_acknowledge"
                    )

            validation_events.extend(slot_events)

        return validation_events
Ejemplo n.º 3
0
    async def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
                  domain: Dict) -> List[EventType]:
        bind_logger(tracker)

        extracted_slots: Dict[Text, Any] = tracker.form_slots_to_validate()

        validation_events: List[EventType] = []
        for slot_name, slot_value in extracted_slots.items():
            slot_events = [SlotSet(slot_name, slot_value)]

            if slot_name == HAS_FEVER_SLOT:
                slot_events += _validate_has_fever(slot_value, dispatcher)
            elif slot_name == HAS_COUGH_SLOT:
                slot_events += _validate_has_cough(slot_value, dispatcher)
                if (
                        tracker.get_slot(LAST_SYMPTOMS_SLOT) !=
                        Symptoms.MODERATE
                ):  # Do not ask for diff breathing if symptoms were not moderate
                    slot_events.extend([
                        SlotSet(REQUESTED_SLOT, None),
                        SlotSet(HAS_DIFF_BREATHING_SLOT,
                                SKIP_SLOT_PLACEHOLDER),
                    ])
                    dispatcher.utter_message(
                        template=
                        "utter_daily_ci_feel_no_change_form_mild_last_symptoms_recommendation"
                    )
            elif slot_name == HAS_DIFF_BREATHING_SLOT:
                slot_events += _validate_has_diff_breathing(
                    slot_value, dispatcher, tracker)

            validation_events.extend(slot_events)

        return validation_events
Ejemplo n.º 4
0
    async def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
                  domain: Dict) -> List[EventType]:
        bind_logger(tracker)

        extracted_slots: Dict[Text, Any] = tracker.form_slots_to_validate()

        validation_events: List[EventType] = []
        for slot_name, slot_value in extracted_slots.items():
            slot_events = [SlotSet(slot_name, slot_value)]

            if slot_name == SEVERE_SYMPTOMS_SLOT:
                slot_events += _validate_severe_symptoms(
                    slot_value, dispatcher)
            elif slot_name == HAS_FEVER_SLOT:
                slot_events += _validate_has_fever(slot_value, dispatcher)
            elif slot_name == HAS_DIFF_BREATHING_SLOT:
                slot_events += _validate_has_diff_breathing(
                    slot_value, dispatcher)
            elif slot_name == HAS_DIFF_BREATHING_WORSENED_SLOT:
                slot_events += _validate_has_diff_breathing_worsened(
                    slot_value, dispatcher)
            elif slot_name == HAS_COUGH_SLOT:
                slot_events += _validate_has_cough(slot_value, dispatcher)

            validation_events.extend(slot_events)

        return validation_events
Ejemplo n.º 5
0
    async def run(
        self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict
    ) -> List[EventType]:
        bind_logger(tracker)

        extracted_slots: Dict[Text, Any] = tracker.form_slots_to_validate()

        if extracted_slots == {}:  # On activation
            return []

        if extracted_slots[LIVES_ALONE_SLOT] is True:
            dispatcher.utter_message(
                template="utter_self_isolation_form_lives_alone_true"
            )
        else:
            dispatcher.utter_message(
                template="utter_self_isolation_form_lives_alone_false_1"
            )
            dispatcher.utter_message(
                template="utter_self_isolation_form_lives_alone_false_2"
            )
            dispatcher.utter_message(
                template="utter_self_isolation_form_lives_alone_false_3"
            )

        dispatcher.utter_message(template="utter_self_isolation_final")

        return [SlotSet(LIVES_ALONE_SLOT, extracted_slots[LIVES_ALONE_SLOT])]
Ejemplo n.º 6
0
    async def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
                  domain: Dict) -> List[EventType]:
        bind_logger(tracker)

        extracted_slots: Dict[Text, Any] = tracker.form_slots_to_validate()

        validation_events: List[EventType] = []
        for slot_name, slot_value in extracted_slots.items():
            slot_events = [SlotSet(slot_name, slot_value)]

            if slot_name == FIRST_NAME_SLOT:
                slot_events = _validate_first_name(slot_value, dispatcher)
            elif slot_name == PHONE_NUMBER_SLOT:
                slot_events = await _validate_phone_number(
                    slot_value, dispatcher, tracker)
            elif slot_name == VALIDATION_CODE_SLOT:
                slot_events = await _validate_validation_code(
                    slot_value, dispatcher, tracker)
            elif slot_name == NO_CODE_SOLUTION_SLOT:
                slot_events = await _validate_no_code_solution(
                    slot_value, dispatcher, tracker)
            elif slot_name == PRECONDITIONS_SLOT:
                slot_events = _validate_preconditions(slot_value, dispatcher,
                                                      tracker)
            elif slot_name == HAS_DIALOGUE_SLOT:  # last slot, enrollment completed
                try:
                    ci_enroll(tracker.current_slot_values())

                    dispatcher.utter_message(
                        template="utter_daily_ci_enroll_form_done_1")
                    dispatcher.utter_message(
                        template="utter_daily_ci_enroll_form_done_2")
                    dispatcher.utter_message(
                        template="utter_daily_ci_enroll_form_done_3")
                except:
                    dispatcher.utter_message(
                        template="utter_daily_ci_enroll_form_fail_1")
                    dispatcher.utter_message(
                        template="utter_daily_ci_enroll_form_fail_2")
                    dispatcher.utter_message(
                        template="utter_daily_ci_enroll_form_fail_3")

            validation_events.extend(slot_events)

        return validation_events
Ejemplo n.º 7
0
    async def run(
        self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict
    ) -> List[EventType]:
        bind_logger(tracker)

        extracted_slots: Dict[Text, Any] = tracker.form_slots_to_validate()

        validation_events: List[EventType] = []
        for slot_name, slot_value in extracted_slots.items():
            slot_events = [SlotSet(slot_name, slot_value)]

            if slot_name == CONTACT_SLOT and slot_value is True:
                slot_events += [
                    SlotSet(HAS_CONTACT_RISK_SLOT, True),
                    SlotSet(REQUESTED_SLOT, None),
                    SlotSet(TRAVEL_SLOT, SKIP_SLOT_PLACEHOLDER),
                ]
            if slot_name == TRAVEL_SLOT:
                slot_events += [SlotSet(HAS_CONTACT_RISK_SLOT, slot_value)]

            validation_events.extend(slot_events)

        return validation_events