Esempio n. 1
0
    def run(self,
            dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: Dict[Text, Any]):
        disease = tracker.get_slot("disease")
        pre_disease = tracker.get_slot("sure")
        print("pre_disease::::" + str(pre_disease))
        
        possible_diseases = retrieve_disease_name(disease)
        """ search_food db action here """
        food = dict()
        if disease == pre_disease or len(possible_diseases) == 1:
            m = [x['m.name'] for x in graph.run("match (a:Disease{name: {disease}})-[:can_eat]->(m:Food) return m.name",
                          disease=disease).data()]
            food['can_eat'] = "、".join(m) if m else "暂无记录"

            m = [x['m.name'] for x in graph.run("match (a:Disease{name: {disease}})-[:not_eat]->(m:Food) return m.name",
                          disease=disease).data()]

            food['not_eat'] = "、".join(m) if m else "暂无记录"

            retmsg = "在患 {0} 期间,可以食用:{1},\n但不推荐食用:{2}".\
                            format(disease, food['can_eat'], food['not_eat'])

            dispatcher.utter_message(retmsg)
        elif len(possible_diseases) > 1:
            buttons = []
            for d in possible_diseases:
                buttons.append(make_button(d, '/search_food{{"disease":"{0}", "sure":"{1}"}}'.format(d, d)))
            dispatcher.utter_button_message("请点击选择想查询的疾病,若没有想要的,请忽略此消息", buttons)
        else:
            dispatcher.utter_message("知识库中暂无与 {0} 相关的饮食记录".format(disease))
        return []
Esempio n. 2
0
    def submit(self, dispatcher: CollectingDispatcher, tracker: Tracker,
               domain: Dict[Text, Any]) -> List[EventType]:

        try:
            ward_no = tracker.get_slot('ward_no')
            df = ward_tax_fetch(ward_no, sub_type='total_tax')
            total_properties = str(df.shape[0])
            total_tax = str(
                sum([val for val in df["tax_amnt"]
                     if val != -1 and val != -2]))
            ward_name = df['ward_nm'][0]
            message1 = 'We have total of {0} properties in this ward({1}) and the total tax paid is {2}' \
            .format(total_properties,ward_name,total_tax)
            message2 = 'Do you like to know more information?'
            buttons = [{
                "title": "Yes",
                "payload": "/ward_yes_b"
            }, {
                "title": "No",
                "payload": "/ward_no_b"
            }]
            message = '{0}\n{1}'.format(message1, message2)
            dispatcher.utter_button_message(message, buttons)

        except:
            message = 'Please enter ward number correctly eg: 23'
            dispatcher.utter_message(text=message)

        return []
Esempio n. 3
0
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
            domain: Dict[Text, Any]):
        disease = tracker.get_slot("disease")
        pre_disease = tracker.get_slot("sure")
        print("pre_disease::::" + str(pre_disease))

        possible_diseases = retrieve_disease_name(disease)
        if disease == pre_disease or len(possible_diseases) == 1:
            a = graph.run("match (a:Disease{name: {disease}}) return a.cause",
                          disease=disease).data()[0]['a.cause']
            if "treat" in a:
                treat = a['treat']
                template = "{0}的治疗方式有:{1}"
                retmsg = template.format(disease, "、".join(treat))
            else:
                retmsg = disease + "暂无该疾病的病因的记录"
            dispatcher.utter_message(retmsg)
        elif len(possible_diseases) > 1:
            buttons = []
            for d in possible_diseases:
                buttons.append(
                    make_button(
                        d, '/search_cause{{"disease":"{0}", "sure":"{1}"}}'.
                        format(d, d)))
            dispatcher.utter_button_message("请点击选择想查询的疾病,若没有想要的,请忽略此消息",
                                            buttons)
        else:
            dispatcher.utter_message("知识库中暂无与 {0} 相关的原因记录".format(disease))
        return []
Esempio n. 4
0
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:

        dispatcher.utter_message(text="Hello! I am <b>COVID-19 Bot</b>")
        myloc = geocoder.ip('me')
        coords = (myloc.latlng)
        lat = coords[0]
        longi = coords[1]
        appid = "ada92477f59a9aabe54d3dde5cd8e0ff"
        request_weather_url = "http://api.openweathermap.org/data/2.5/weather?lat={}&lon={}&appid={}".format(
            lat, longi, appid)
        respose_weather = requests.get(request_weather_url)
        respose_weather = respose_weather.json()
        temp = round(float(respose_weather['main']['temp'] - 273.15), 3)
        pressure = respose_weather['main']['pressure']
        humidity = respose_weather['main']['humidity']
        weather_desc = respose_weather['weather'][0]['description']
        response_message = "Temparature around you is {} °C with Pressure {} hPa and Humidity {}%. The weather looks like {}.<b> How may i help you?</b>".format(
            temp, pressure, humidity, weather_desc)
        dispatcher.utter_message(text=response_message)
        title = [
            "COVID India Cases", "Latest News",
            "Covid Testing Centre's Near Me", "Emergency Number"
        ]
        payload = [
            '/mood_cases', '/mood_news', '/mood_testing_centre',
            '/mood_emergency'
        ]
        buttons_show = []
        for i2 in range(0, len(title)):
            x_2 = {"title": title[i2], "payload": payload[i2]}
            buttons_show.append(x_2)
        dispatcher.utter_button_message(text="", buttons=buttons_show)
        return []
Esempio n. 5
0
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
            domain: Dict[Text, Any]):
        disease = tracker.get_slot("disease")
        pre_disease = tracker.get_slot("sure")
        print("pre_disease::::" + str(pre_disease))

        possible_diseases = retrieve_disease_name(disease)
        if disease == pre_disease or len(possible_diseases) == 1:
            a = graph.run(
                "match (a:Disease{name: {disease}}) return a.prevent",
                disease=disease).data()[0]
            if 'a.prevent' in a:
                prevent = a['a.prevent']
                template = "以下是有关预防 {0} 的知识:{1}"
                retmsg = template.format(disease,
                                         md(prevent.replace('\n', '<br/>')))
            else:
                retmsg = disease + "暂无常见预防方法"
            dispatcher.utter_message(retmsg)
        elif len(possible_diseases) > 1:
            buttons = []
            for d in possible_diseases:
                buttons.append(
                    make_button(
                        d,
                        '/search_prevention{{"disease":"{0}", "sure":"{1}"}}'.
                        format(d, d)))
            dispatcher.utter_button_message("请点击选择想查询的疾病,若没有想要的,请忽略此消息",
                                            buttons)
        else:
            dispatcher.utter_message("知识库中暂无与 {0} 相关的预防记录".format(disease))
        return []
Esempio n. 6
0
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
            domain: Dict[Text, Any]):
        disease = tracker.get_slot("disease")
        pre_disease = tracker.get_slot("sure")
        print("pre_disease::::" + str(pre_disease))

        possible_diseases = retrieve_disease_name(disease)
        if disease == pre_disease or len(possible_diseases) == 1:
            a = [
                x['s.name'] for x in graph.run(
                    "MATCH (p:Disease{name: {disease}})-[r:can_use_drug]->\
                                                (s:Drug) RETURN s.name",
                    disease=disease).data()
            ]
            if a:
                template = "在患 {0} 时,可能会用药:{1}"
                retmsg = template.format(disease, "、".join(a))
            else:
                retmsg = "无 %s 的可能用药记录" % disease
            dispatcher.utter_message(retmsg)
        elif len(possible_diseases) > 1:
            buttons = []
            for d in possible_diseases:
                buttons.append(
                    make_button(
                        d,
                        '/search_drug{{"disease":"{0}", "sure":"{1}"}}'.format(
                            d, d)))
            dispatcher.utter_button_message("请点击选择想查询的疾病,若没有想要的,请忽略此消息",
                                            buttons)
        else:
            dispatcher.utter_message("知识库中暂无与 {0} 相关的用药记录".format(disease))
        return []
Esempio n. 7
0
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
            domain: Dict[Text, Any]):
        disease = tracker.get_slot("disease")
        pre_disease = tracker.get_slot("sure")
        print("pre_disease::::" + str(pre_disease))

        possible_diseases = retrieve_disease_name(disease)
        if disease == pre_disease or len(possible_diseases) == 1:
            a = graph.run(
                "match (a:Disease{name: {disease}})-[:belongs_to]->(s:Department) return s.name",
                disease=disease).data()[0]['s.name']
            template = "{0} 属于 {1}"
            retmsg = template.format(disease, a)
            dispatcher.utter_message(retmsg)
        elif len(possible_diseases) > 1:
            buttons = []
            for d in possible_diseases:
                buttons.append(
                    make_button(
                        d,
                        '/search_disease_dept{{"disease":"{0}", "sure":"{1}"}}'
                        .format(d, d)))
            dispatcher.utter_button_message("请点击选择想查询的疾病,若没有想要的,请忽略此消息",
                                            buttons)
        else:
            dispatcher.utter_message("知识库中暂无与 {0} 疾病相关的科室记录".format(disease))
        return []
Esempio n. 8
0
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
            domain: Dict[Text, Any]):
        disease = tracker.get_slot("disease")
        pre_disease = tracker.get_slot("sure")
        print("pre_disease::::" + str(pre_disease))

        possible_diseases = retrieve_disease_name(disease)
        if disease == pre_disease or len(possible_diseases) == 1:
            a = graph.run("match (a:Disease{name: {disease}}) return a",
                          disease=disease).data()[0]['a']
            easy_get = a['easy_get']
            template = "{0}的易感人群是:{1}"
            retmsg = template.format(disease, easy_get)
            dispatcher.utter_message(retmsg)
        elif len(possible_diseases) > 1:
            buttons = []
            for d in possible_diseases:
                buttons.append(
                    make_button(
                        d, '/search_easy_get{{"disease":"{0}", "sure":"{1}"}}'.
                        format(d, d)))
            dispatcher.utter_button_message("请点击选择想查询的疾病,若没有想要的,请忽略此消息",
                                            buttons)
        else:
            dispatcher.utter_message("知识库中暂无与 {0} 相关的易感人群记录".format(disease))
        return []
Esempio n. 9
0
    def run(self,
            dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: Dict[Text, Any]):

        disease = tracker.get_slot("disease")
        pre_disease = tracker.get_slot("sure")
        if not disease:
            entities = tracker.latest_message['entities']
            for entity in entities:
                if entity['entity'] == "disease":
                    disease = entity['value']
            print("A"*50)
            print(disease, pre_disease)
        possible_diseases = get_disease(disease)
        if disease == pre_disease or len(possible_diseases) == 1:
            print("#"*50)
            print("Stage 2 ", disease,pre_disease)
            final_disease = department(disease)
            if final_disease:
                dispatcher.utter_message(final_disease)
            else:
                dispatcher.utter_message("Nothing in the knowledge base {0}".format(disease))
        elif len(possible_diseases) > 1:
            print("#"*50)
            print("Stage 1 ", disease,pre_disease)
            buttons = []
            for d in possible_diseases:
                buttons.append(make_button(d, '/search_disease_dept{{"disease":"{0}", "sure":"{1}"}}'.format(d, d)))
            dispatcher.utter_button_message("Please click to select the disease you want to inquire, if there is nothing you want, please ignore this message", buttons)
        else:
            dispatcher.utter_message("Nothing in the knowledge base {0}".format(disease))
        return [SlotSet('disease', None), SlotSet('sure', None)]
Esempio n. 10
0
    def run(
        self,
        dispatcher: CollectingDispatcher,
        tracker: Tracker,
        domain: Dict[Text, Any],
    ) -> List[Dict[Text, Any]]:

        import requests
        resp = requests.get(
            "https://www.1secmail.com/api/v1/?action=getMessages&login={}&domain={}"
            .format(tracker.get_slot("login"), tracker.get_slot("domain")))
        resp = resp.json()
        if len(resp) == 0:
            dispatcher.utter_message(
                "No email available in this email-address")
        else:
            for mail in resp:
                # dispatcher.utter_message(", please use id: {} for reading email".format(mail["from"], mail["subject"], mail["id"]))
                dispatcher.utter_button_message(
                    text="You have a mail from: {}, with subject line: {}".
                    format(mail["from"], mail["subject"]),
                    buttons=[{
                        "title": "read",
                        "payload": mail["id"]
                    }])
        return []
Esempio n. 11
0
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:

        global randomnum, myresult, hintlist, hintmaxx, hintcnt, finfo, i, count
        quizentity = next(tracker.get_latest_entity_values("quiz"), None)
        queryy = 'select * from quizes'
        mycursor.execute(queryy)
        myresult = mycursor.fetchall()
        maxx = len(myresult)

        randomnum = random.randint(maxx)
        if i == 4:
            return [FollowupAction("action_send_problem_link")]

        msg = myresult[i][1]
        buttons = [{
            "title": myresult[i][2],
            "payload": myresult[i][2]
        }, {
            "title": myresult[i][3],
            "payload": myresult[i][3]
        }, {
            "title": myresult[i][4],
            "payload": myresult[i][4]
        }, {
            "title": myresult[i][5],
            "payload": myresult[i][5]
        }]
        dispatcher.utter_button_message(msg + str(count), buttons)
        i = i + 1

        return []
Esempio n. 12
0
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
        buttons = []
        with open("data/movieSchedule.json", "r") as MS:
            movieSchedule = json.load(MS)
        with open("data/movieTime.json", "r") as MT:
            movieTime = json.load(MT)
        movieDate = str(tracker.get_slot("movieDate"))
        today_time = datetime.now().strftime("%I %p")
        today_time = datetime.strptime(today_time, "%I %p")
        today = datetime.now().strftime("%d-%m-%Y")
        for i in movieSchedule[movieDate].keys():
            temp_time = datetime.strptime(movieTime[i], "%I %p")
            if (movieDate == today):
                if (temp_time > today_time):
                    payload = "I choose " + i
                    buttons.append({
                        "title":
                        "{}".format(movieSchedule[movieDate][i]),
                        "payload":
                        payload
                    })
            else:
                payload = "I choose " + i
                buttons.append({
                    "title":
                    "{}".format(movieSchedule[movieDate][i]),
                    "payload":
                    payload
                })

        message = "Please select a movie"
        dispatcher.utter_button_message(message, buttons)

        return []
Esempio n. 13
0
    def run(self, dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:

        search_string = tracker.get_slot('fav_breed')
        search_breed_id_url = 'https://api.thedogapi.com/v1/breeds/search?q=' + search_string
        dog = re.get(search_breed_id_url, headers={"x-api-key":ac.dog_key}).json()
        if len(dog) > 1:
            dogs_list = [x['name'] for x in dog]
            buttons = [{'title':dog,'payload':'/fav_breed{"fav_breed":'+dog+"}"} for dog in dogs_list]
            dispatcher.utter_button_message(text='Which breed do you mean?',buttons=buttons)
        elif len(dog) == 1:
            dog = dog[0]
            dog_name = dog['name']
            try:
                dog_temp = dog['temperament'].split(",")
                dog_temp = [x.strip(' ') for x in dog_temp]
            except: 
                dog_temp = []
            search_img_breed_id_url = 'https://api.thedogapi.com/v1/images/search?breed_id=' + str(dog['id'])
            dog_pic_json = re.get(search_img_breed_id_url, headers={"x-api-key":ac.dog_key}).json()
            if dog_pic_json:
                dog_pic_url = dog_pic_json[0]['url']
        else:
            dog = []

        return []
Esempio n. 14
0
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:

        # get the last message sent by user
        message = tracker.latest_message.get('text')

        # Get symptoms slot
        syms = tracker.get_slot("symptom_list")

        if syms is None:
            syms = []

        # Check if symptom in list
        if message not in syms:
            syms.append(message)
        else:
            dispatcher.utter_message("Already noted that you have: " + message)
            return []

        # Update slot
        SlotSet("symptom_list", syms)

        # Get suggested symptom based on input
        suggested_symptom = dObj.suggest_symptoms(syms)

        # Check if symptom not already suggested
        clean_syms = []

        for symp in suggested_symptom:
            if symp not in syms and symp not in suggested_so_far:
                clean_syms.append(symp)
            else:
                suggested_so_far.append(symp)

        if (len(clean_syms) > 0):
            num = random.randrange(0, len(clean_syms))
        else:
            dispatcher.utter_template('utter_alternative')
            return [SlotSet("symptom_list", syms)]

        # Create response buttons
        buttons = [{
            "title": "Yes",
            "payload": clean_syms[num]
        }, {
            "title": "No",
            "payload": "/deny"
        }]

        # Send message
        dispatcher.utter_message("You said you have: " + message)
        dispatcher.utter_button_message(
            "Do you also have " + clean_syms[num] + "?", buttons)

        return [SlotSet("symptom_list", syms)]
Esempio n. 15
0
    def run(
        self,
        dispatcher: CollectingDispatcher,
        tracker: Tracker,
        domain: Dict[Text, Any],
    ) -> List[EventType]:

        intent_ranking = tracker.latest_message.get("intent_ranking", [])
        if len(intent_ranking) > 1:
            diff_intent_confidence = intent_ranking[0].get(
                "confidence"
            ) - intent_ranking[1].get("confidence")
            if diff_intent_confidence < 0.2:
                intent_ranking = intent_ranking[:2]
            else:
                intent_ranking = intent_ranking[:1]
        first_intent_names = [
            intent.get("name", "")
            for intent in intent_ranking
            if intent.get("name", "") != "out_of_scope"
        ]

        message_title = (
            "Sorry, I'm not sure I've understood " "you correctly 🤔 Do you mean..."
        )

        entities = tracker.latest_message.get("entities", [])
        entities = {e["entity"]: e["value"] for e in entities}

        entities_json = json.dumps(entities)

        buttons = []
        for intent in first_intent_names:
            logger.debug(intent)
            logger.debug(entities)
            buttons.append(
                {
                    "title": self.get_button_title(intent, entities),
                    "payload": "/{}{}".format(intent, entities_json),
                }
            )

        # /out_of_scope is a retrieval intent
        # you cannot send rasa the '/out_of_scope' intent
        # instead, you can send one of the sentences that it will map onto the response
        buttons.append(
            {
                "title": "Something else",
                "payload": "I am asking you an out of scope question",
            }
        )

        dispatcher.utter_button_message(message_title, buttons=buttons)

        return []
Esempio n. 16
0
    def run(self, dispatcher: CollectingDispatcher,

            tracker: Tracker,

            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
        product = tracker.get_slot("product")
        print("Product " + product)
        buttons = [{"title": "Weitere Informationen", "payload": "Was ist versichert in " +
                    product}, {"title": "Aktuelle Corona Lage", "payload": "Corona Situation"}]
        dispatcher.utter_button_message("Was möchtest du erfahren ?", buttons)

        return []
    def submit(self,
               dispatcher: CollectingDispatcher,
               tracker: Tracker,
               domain: Dict[Text, Any]
               ) -> List[Dict]:
        """Once required slots are filled, print buttons for found facilities"""

        local = tracker.get_slot('location')
        if type(local) == list:
            location = local[0]
        else:
            location = local
        facility_type = tracker.get_slot('facility_type')

        results = _find_facilities(location, facility_type)
        button_name = _resolve_name_2(FACILITY_TYPES, facility_type)
        if len(results) == 0:
            dispatcher.utter_message(
                "Sorry, we could not find a {} in {}.".format(button_name,
                                                              location.title()))
            return []

        buttons = []
        # limit number of results to 3 for clear presentation purposes
        for r in results[:3]:
            if facility_type == FACILITY_TYPES["hospital"]["resource"]:
                facility_id = r.get("id")
                name = r["hospital_name"]
            elif facility_type == FACILITY_TYPES["clinic"]["resource"]:
                facility_id = r.get("id")
                name = r["clinic_name"]
            elif facility_type == FACILITY_TYPES["pharmacy"]["resource"]:
                facility_id = r.get("id")
                name = r["pharmacy_name"]
            else:
                facility_id = r["id"]
                name = r["facility_name"]

            payload = "/inform{\"facility_id\":\"" + facility_id + "\"}"
            buttons.append(
                {"type": "postback", "title": "{}".format(name.title()), "payload": payload})

        if len(buttons) == 1:
            message = "Here is a {} near you:".format(button_name)
        else:
            if button_name == "pharmacy":
                button_name = "pharmacies"
            message = "Here are {} {}s near you:".format(len(buttons),
                                                         button_name)
                                                         
        dispatcher.utter_button_message(message, buttons)

        return []
Esempio n. 18
0
    def submit(self, dispatcher: CollectingDispatcher, tracker: Tracker,
               domain: Dict[Text, Any]) -> List[Dict]:
        """Once required slots are filled, print buttons for found facilities"""

        location = tracker.get_slot('location')

        facility_type = tracker.get_slot('facility_type')

        #///////////////////////////////////////////////////////////////////
        print(facility_type, "fkjgoiejojeof0044444444444444444444")
        print(_resolve_name(FACILITY_TYPES, facility_type),
              "resolve################3")

        results = _find_facilities(location, facility_type)
        button_name = _resolve_name(FACILITY_TYPES, facility_type)
        if len(results) == 0:
            dispatcher.utter_message(
                "Sorry, we could not find a {} in {}.".format(
                    button_name, location.title()))
            return []

        buttons = []
        # limit number of results to 3 for clear presentation purposes
        for r in results[:3]:
            if facility_type == FACILITY_TYPES["hospital"]["resource"]:
                facility_id = r.get("provider_id")
                name = r["hospital_name"]
            elif facility_type == FACILITY_TYPES["nursing_home"]["resource"]:
                facility_id = r["federal_provider_number"]
                name = r["provider_name"]
            else:
                facility_id = r["provider_number"]
                name = r["provider_name"]

            payload = "/inform{\"facility_id\":\"" + facility_id + "\"}"
            buttons.append({
                "title": "{}".format(name.title()),
                "payload": payload
            })

        if len(buttons) == 1:
            message = "Here is a {} near you:".format(button_name)
        else:
            if button_name == "home health agency":
                button_name = "home health agencie"
            message = "Here are {} {}s near you:".format(
                len(buttons), button_name)

        # TODO: update rasa core version for configurable `button_type`
        dispatcher.utter_button_message(message, buttons)

        return []
    def submit(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict]:
        """Once required slots are filled, print buttons for found hotels"""

        local = tracker.get_slot('location')
        if type(local) == list:
            location = local[0]
        else:
            location = local
        hotel_type = tracker.get_slot('hotel_type')

        results = _find_hotels(location, hotel_type)
        button_name = _resolve_name(HOTEL_TYPES, hotel_type)
        if len(results) == 0:
            dispatcher.utter_message("Sorry, we could not find a {} in {}.".format(button_name, location.title()))
            return []
        
        buttons = []
        # limit number of results to 3 for clear presentation purposes
        for r in results[:3]:
            if hotel_type == HOTEL_TYPES["5_star"]["resource"]:
                hotel_id = r.get("id")
                name = r["hotel_name"]
            elif hotel_type == HOTEL_TYPES["4_star"]["resource"]:
                hotel_id = r.get("id")
                name = r["hotel_name"]
            elif hotel_type == HOTEL_TYPES["3_star"]["resource"]:
                hotel_id = r.get("id")
                name = r["hotel_name"]
            elif hotel_type == HOTEL_TYPES["tourist_standard_hotels"]["resource"]:
                hotel_id = r.get("id")
                name = r["hotel_name"]
            elif hotel_type == HOTEL_TYPES["resorts"]["resource"]:
                hotel_id = r.get("id")
                name = r["hotel_name"]
            else:
                hotel_id = r["id"]
                name = r["hotel_name"]
            
            payload = "/inform{\"hotel_id\":\"" + hotel_id + "\"}"
            buttons.append({"type": "postback", "title": "{}".format(name.title()), "payload": payload})

        if len(buttons) == 1:
            message = "Here is a {} near you:".format(button_name)
        else:
            if button_name == "tourist standard hotel":
                button_name == "standard hotels"
            message = "Here are {} {}s near you:".format(len(buttons), button_name)
        
        dispatcher.utter_button_message(message, buttons)

        return []
Esempio n. 20
0
 def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
         domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
     buttons = []
     for blob in tracker.latest_message['entities']:
         # print(tracker.latest_message)
         if blob['entity'] == 'topic':
             name = blob['value']
             path = "data/faqs/" + name + ".txt"
             knowledge = Path(path).read_text().split("\n")
             for i in knowledge:
                 title = i
                 payload = i
                 buttons.append({"title": title, "payload": payload})
     dispatcher.utter_button_message("Please find the below FAQ List",
                                     buttons)
     return []
Esempio n. 21
0
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
            domain: Dict[Text, Any]):
        disease = tracker.get_slot("disease")
        pre_disease = tracker.get_slot("sure")

        possible_diseases = ['查部门', '查药物', '查症状', '查食物']

        buttons = []
        for d in possible_diseases:
            buttons.append(
                make_button(
                    d,
                    '/search_disease{{"disease":"{0}", "sure":"{1}"}}'.format(
                        d, d)))
        dispatcher.utter_button_message("请点击选择想查询的疾病,若没有想要的,请忽略此消息", buttons)
        return []
Esempio n. 22
0
    def run(
        self,
        dispatcher: CollectingDispatcher,
        tracker: Tracker,
        domain: Dict[Text, Any],
    ) -> List["Event"]:

        intent_ranking = tracker.latest_message.get("intent_ranking", [])
        if len(intent_ranking) > 1:
            diff_intent_confidence = intent_ranking[0].get(
                "confidence"
            ) - intent_ranking[1].get("confidence")
            if diff_intent_confidence < 0.2:
                intent_ranking = intent_ranking[:2]
            else:
                intent_ranking = intent_ranking[:1]
        first_intent_names = [
            intent.get("name", "")
            for intent in intent_ranking
            if intent.get("name", "") != "out_of_scope"
        ]

        message_title = (
            "Sorry, I'm not sure I've understood " "you correctly 🤔 Do you mean..."
        )

        entities = tracker.latest_message.get("entities", [])
        entities = {e["entity"]: e["value"] for e in entities}

        entities_json = json.dumps(entities)

        buttons = []
        for intent in first_intent_names:
            logger.debug(intent)
            logger.debug(entities)
            buttons.append(
                {
                    "title": self.get_button_title(intent, entities),
                    "payload": "/{}{}".format(intent, entities_json),
                }
            )

        buttons.append({"title": "Something else", "payload": "/out_of_scope"})

        dispatcher.utter_button_message(message_title, buttons=buttons)

        return []
Esempio n. 23
0
 def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
         domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
     buttons = [{
         "title": "Song",
         "payload": "song"
     }, {
         "title": "Image",
         "payload": "image"
     }, {
         "title": "Joke",
         "payload": "joke"
     }, {
         "title": "Quote",
         "payload": "quote"
     }]
     dispatcher.utter_button_message("Would you like any of these? :)",
                                     buttons)
Esempio n. 24
0
    def submit(self, dispatcher: CollectingDispatcher, tracker: Tracker,
               domain: Dict[Text, Any]) -> List[Dict]:

        buttons = []

        city = tracker.get_slot("city")
        #state = tracker.get_slot("state")
        facility = tracker.get_slot('facility_type')
        print(facility)
        url = 'https://indian-hospital.herokuapp.com/api/v1/hospitals/?'
        # if state != None:
        #     url = url +'state=' + state + '&'
        url = url + 'city=' + city.title(
        ) + '&' + "category=" + facility.title()
        print(url)
        payload = {}
        headers = {}

        response = requests.request("GET", url, headers=headers, data=payload)
        data = response.json()
        print(data)
        if len(data) == 0:
            dispatcher.utter_message(
                "Sorry😔, I could not find a {} Hospital in {}. But Soon I will update my database.😊"
                .format(facility, city.title()))

            return []

        for d in data[:3]:
            facility_id = d['id']
            payload = "/inform{\"facility_id\":\"" + str(facility_id) + "\"}"

            buttons.append({
                'title': "{}".format(d['name'].title()),
                "payload": payload
            })

        if len(buttons) == 1:
            message = "Here is a {} Hospital near you.".format(facility)

        else:
            message = "Here are {} {}s Hospitals near you:".format(
                len(buttons), facility)
        dispatcher.utter_button_message(message, buttons)

        return []
Esempio n. 25
0
    def submit(self, dispatcher: CollectingDispatcher, tracker: Tracker,
               domain: Dict[Text, Any]) -> List[Dict]:
        """Once required slots are filled, print buttons for found facilities"""

        location = tracker.get_slot('location')
        company = tracker.get_slot('company')

        results = _find_company(location, company)
        button_name = _resolve_name(COMPANIES, company)
        if len(results) == 0:
            dispatcher.utter_message(
                "Sorry, we could not find a {} in {}.".format(
                    button_name, location.title()))
            return []

        buttons = []
        # limit number of results to 3 for clear presentation purposes
        for r in results[:3]:
            if company == COMPANIES["Siemens"]["resource"]:
                company_id = r.get("id")
                name = r["name"]
            elif company == COMPANIES["Datev"]["resource"]:
                company_id = r["id"]
                name = r["name"]
            else:
                company_id = r["id"]
                name = r["name"]

            payload = "/inform{\"company_id\":\"" + company_id + "\"}"
            buttons.append({
                "title": "{}".format(name.title()),
                "payload": payload
            })

        if len(buttons) == 1:
            message = "Here is a {} near you:".format(button_name)
        else:
            if button_name == "test":
                button_name = "tests"
            message = "Here are {} {}s near you:".format(
                len(buttons), button_name)

        # TODO: update rasa core version for configurable `button_type`
        dispatcher.utter_button_message(message, buttons)

        return []
Esempio n. 26
0
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:

        text = "Sample Button Replies"
        buttons = [{
            'title': 'Test Sample Text',
            'payload': 'Sample Text',
            'content_type': 'text'
        }, {
            'title': 'Test Sample Image',
            'payload': 'Sample Image',
            'content_type': 'text'
        }, {
            'title': 'Test Sample Carousel',
            'payload': 'Sample Carousel',
            'content_type': 'text'
        }]
        dispatcher.utter_button_message(text, buttons)
        return []
Esempio n. 27
0
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:

        last_intent_name = tracker.latest_message['intent']['name']

        # get the prompt for the intent
        intent_prompt = self.intent_mappings[last_intent_name]
        # Create the affirmation message and add two buttons to it.
        # Use '/<intent_name>' as payload to directly trigger '<intent_name>'
        # when the button is clicked.
        message = "Did you mean '{}'?".format(intent_prompt)
        buttons = [{
            'title': 'Yes',
            'payload': '/{}'.format(last_intent_name)
        }, {
            'title': 'No',
            'payload': '/out_of_scope'
        }]
        dispatcher.utter_button_message(message, buttons=buttons)

        return [UserUtteranceReverted()]
Esempio n. 28
0
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:

        with open("data/movieSchedule.json", "r") as MS:
            movieSchedule = json.load(MS)
        dateList = []
        buttons = []
        dateList = movieSchedule.keys()
        today = datetime.now().strftime("%d-%m-%Y")
        today = datetime.strptime(today, "%d-%m-%Y")
        for i in dateList:
            temp_date = datetime.strptime(i, "%d-%m-%Y")
            if (temp_date < today):
                continue
            else:
                payload = str(i)
                buttons.append({"title": "{}".format(i), "payload": payload})

        message = "Please select a date"
        dispatcher.utter_button_message(message, buttons)

        return []
Esempio n. 29
0
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker,
            domain: Dict[Text, Any]):

        buttons = [
            {
                "title": "Current Weather",
                "payload": "/ask_weather{\"date\": \"today\"}"
            },
            {
                "title": "Tomorrow's Forecast",
                "payload": "/ask_weather{\"date\": \"tomorrow\"}"
            },
        ]
        name = tracker.slots.get('name')
        if name:
            dispatcher.utter_button_message(
                f"Hi {name}! I'm Wenny can tell you weather information. What are you looking for?",
                buttons)
        else:
            # TODO: update rasa core version for configurable `button_type`
            dispatcher.utter_button_template("utter_greet", buttons, tracker)
        return []
Esempio n. 30
0
    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain):
        conn = sqlite3.connect('job_data.db')     
        cuisine = tracker.get_slot('skills')
        cuisine = cuisine.replace(' ',',')
        
        if ',' in cuisine:
               result = [x.strip() for x in cuisine.split(',')]
      
        if 'and' in result:
            result.remove('and')
        
        if len(result)>2:       
                q = conn.execute("SELECT DISTINCT company,position from joblistings \
                          WHERE skills_req like '%{}%' or  skills_req like '%{}%' or  skills_req like '%{}%' LIMIT 5\
                          ".format(result[0].lower(),result[1].lower(),result[2].lower()))
        elif len(result)==2:
                q = conn.execute("SELECT DISTINCT company,position from joblistings \
                          WHERE skills_req like '%{}%' or  skills_req like '%{}%' LIMIT 5 \
                          ".format(result[0].lower(),result[1].lower()))
        else:
            q = conn.execute("SELECT DISTINCT company,position from joblistings \
                          WHERE skills_req like '%{}%' LIMIT 5 \
                          ".format(result[0].lower()))


        r=(q.fetchall())
        dispatcher.utter_message("select the position for which you want to enquire")
        buttons = []
        
        for row in r:
            
            title = ("company {} position {}".format(row[0],row[1]))
            payload = ('company {} position {}'.format(row[0],row[1]))
            buttons.append({ "title": title, "payload": payload })
            
        dispatcher.utter_button_message("",buttons)