Domain
version: '2.0'
config:
store_entities_as_slots: true
session_config:
session_expiration_time: 60
carry_over_slots_to_new_session: true
intents:
- greet:
use_entities: true
- goodbye:
use_entities: true
- affirm:
use_entities: true
- deny:
use_entities: true
- faq:
use_entities: true
- give_webinar_date:
use_entities: true
- outofscope:
use_entities: true
- provide_email:
use_entities: true
- send_email:
use_entities: true
entities:
- place
- email
slots:
email:
type: rasa.shared.core.slots.TextSlot
initial_value: null
auto_fill: true
influence_conversation: false
message:
type: rasa.shared.core.slots.TextSlot
initial_value: null
auto_fill: true
influence_conversation: false
confirm_details:
type: rasa.shared.core.slots.AnySlot
initial_value: null
auto_fill: true
influence_conversation: false
requested_slot:
type: rasa.shared.core.slots.UnfeaturizedSlot
initial_value: null
auto_fill: true
influence_conversation: false
responses:
utter_greet:
- text: Hallo, hoe kan ik je helpen?
utter_faq/solar_interesting:
- text: |-
Ook in 2021 blijft het interessant om te investeren in zonnepanelen voor je eigen groene stroom. We weten dat er wat verandert in 2021, maar hier zijn ook voordelen aan verbonden.
Iedereen die zonnepanelen installeert in 2021 valt onder de nieuwe tariefstructuur. Je hebt geen recht meer op een terugdraaiende meter, maar je betaalt ook geen prosumententarief meer. Je betaalt enkel de nettarieven voor wat je nog van het net afhaalt.
Bovendien geeft de Vlaamse Overheid premies uit voor installaties vanaf 2021. Lees hier meer over deze premie.
utter_outofscope:
- text: Sorry, ik kon het niet begrijpen. Zou je het alsjeblieft kunnen herformuleren?
utter_goodbye:
- text: dazag
utter_ask_email:
- text: Wat is je email adress?
utter_ask_message:
- text: Wat zijn je vragen?
utter_ask_confirm_details:
- buttons:
- payload: Yes
title: Yes
- payload: No
title: No
text: |-
Dit zijn de details die ik heb vastgelegd. Bevestig ze hieronder a.u.b.:
Email: {email}
Message: {message}
utter_mail_success:
- text: Ik heb alle details naar ons team gemaild.
utter_mail_canceled:
- text: Ik heb de mail geannuleerd. Wil je nog ergens hulp bij?
actions:
- action_show_webinar_date
- action_submit_email_form
- validate_email_form
forms:
email_form:
required_slots:
email:
- entity: email
type: from_entity
message:
- type: from_text
confirm_details:
- intent: affirm
type: from_intent
value: yes
- intent: deny
type: from_intent
value: no
e2e_actions: []
language: nl
pipeline:
- name: WhitespaceTokenizer
- name: RegexFeaturizer
- name: LexicalSyntacticFeaturizer
- name: CountVectorsFeaturizer
- name: CountVectorsFeaturizer
analyzer: char_wb
min_ngram: 1
max_ngram: 4
- name: DIETClassifier
epochs: 100
- name: EntitySynonymMapper
- name: ResponseSelector
epochs: 100
- name: ResponseSelector
epochs: 100
retrieval_intent: faq
- name: ResponseSelector
epochs: 100
retrieval_intent: chitchat
- name: DucklingEntityExtractor
dimensions: ["email", "number"]
url: "http://localhost:8000"
- name: FallbackClassifier
threshold: 0.3
ambiguity_threshold: 0.1
policies:
- name: MemoizationPolicy
- name: TEDPolicy
max_history: 5
epochs: 100
- name: RulePolicy
version: “2.0”
version: "2.0"
nlu:
- intent: give_webinar_date
examples: |
- Wanneer word de volgende webinar georganiseerd
- wanneer is de volgende webinar
- wanneer is de volgende webinar in [Antwerpen](place)
- wanneer is de volgende webinar in [Limburg](place)
- wanneer is de volgende webinar in [Brussel](place)
- wanneer is de volgende webinar in [brussel](place)
- wanneer is de volgende webinar in [antwerpen](place)
- [limburg](place)
- wanneer is de volgende webinar in [limburg](place)
- [antwerpen](place)
- in [antwerpen](place)
- ik wou eigenlijk weten wanneer de volgende webinar plaatsvindt?
- intent: send_email
examples: |
- I want to to send email
- Send an email
- Send email
- email
- ik wil iemand van de helpdesk spreken
- send email
- send mail
- intent: greet
examples: |
- Hallo
- hallo
- hey ik heb hulp nodig
- hello
- intent: goodbye
examples: |
- good afternoon
- cu
- good by
- cee you later
- good night
- bye
- goodbye
- have a nice day
- see you around
- bye bye
- see you later
- intent: affirm
examples: |
- yes
- y
- indeed
- of course
- that sounds good
- correct
- intent: deny
examples: |
- no
- n
- never
- I don't think so
- don't like that
- no way
- lookup: place
examples: |
- antwerpen
- brussel
- limburg
version: "2.0"
rules:
- rule: respond to FAQs
steps:
- intent: faq
- action: utter_faq
- rule: Give the webinar date
steps:
- intent: give_webinar_date
- action: action_show_webinar_date
- rule: out of scope
steps:
- intent: outofscope
- action: utter_outofscope
- rule: Say goodbye anytime the user says goodbye
steps:
- intent: goodbye
- action: utter_goodbye
- rule: Activate Form
steps:
- intent: send_email
- action: email_form
- active_loop: email_form
- rule: Submit form
condition:
# Condition that form is active.
- active_loop: email_form
steps:
# Form is deactivated
- action: email_form
- active_loop: null
- slot_was_set:
- requested_slot: null
# The actions we want to run when the form is submitted.
- action: action_submit_email_form
from typing import Any, Text, Dict, List
from rasa_sdk import Action, Tracker, FormValidationAction
from rasa_sdk.executor import CollectingDispatcher
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail
from rasa_sdk.types import DomainDict
from typing import Any, Text, Dict, List
import re
regex = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
region_db = {
'brussels': '17 januari 2022 om 9:50',
'antwerpen': '17 februari 2022 om 9:50',
'limburg': '13 december 2021 om 9:50',
}
#Get Webinar Date
class ActionGetWebinarDate(Action):
def name(self) -> Text:
return "action_show_webinar_date"
def run(self, dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
current_place = next(tracker.get_latest_entity_values("place"), None)
if not current_place:
msg = f"In welke regio?"
buttons = []
buttons = [{"title": "brussels", "payload": "brussels"}, {"title": "antwerpen", "payload": "antwerpen"}, {"title": "limburg", "payload": "limburg"}]
dispatcher.utter_message(text=msg, buttons=buttons)
return []
tz_string = region_db.get(current_place, None)
if not tz_string:
msg = f"I didn't recognize {current_place}. Is it spelled correctly?"
dispatcher.utter_message(text=msg)
return []
msg = f"De volgende webinar in {current_place} is op {region_db[current_place]}"
dispatcher.utter_message(text=msg)
return []
class ValidateEmailForm(FormValidationAction):
def name(self) -> Text:
return "validate_email_form"
@staticmethod
def required_slots(tracker: Tracker) -> List[EventType]: return ["email"]
def slot_mapping(self):
return {"email": self.from_entity( entity="email", intent=["email"])}
def validate_email(
self,
value: Text,
dispatcher: "CollectingDispatcher",
tracker: "Tracker",
domain: "DomainDict",
) -> Dict[Text, Any]:
value = tracker.get_slot('email')
if re.match(r"[a-zA-Z0-9_.±]+@[a-zA-Z]+.[^@]+", str(value)):
dispatcher.utter_message(text=f"Geldig email")
return {"email": value}
else:
dispatcher.utter_message(text=f"Ongeldig email")
return {"email": None}
def validate_confirm_details(
self,
value: Text,
dispatcher: "CollectingDispatcher",
tracker: "Tracker",
domain: "DomainDict",
) -> Dict[str, str]:
intent_name = tracker.get_intent_of_latest_message()
if value is not None:
if intent_name in ["affirm", "deny"]:
return {"confirm_details": intent_name}
else:
return {"requested_slot": "confirm_details"}
class ActionSubmitEmailForm(Action):
def name(self) -> Text:
return "action_submit_email_form"
def run(
self,
dispatcher: "CollectingDispatcher",
tracker: Tracker,
domain: "DomainDict",
) -> List[Dict[Text, Any]]:
confirm_details = tracker.get_slot("confirm_details")
email = tracker.get_slot("email")
message = tracker.get_slot("message")
if confirm_details == "affirm":
sendmessage = Mail(
from_email='aymane.abdellah@ichoosr.com',
to_emails='aymane.abdellah@ichoosr.com',
subject='[Handoff Helpdesk] Vraag van potentiele klant',
html_content=message)
try:
sg = SendGridAPIClient('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')
response = sg.send(sendmessage)
print(response.status_code)
print(response.body)
print(response.headers)
dispatcher.utter_message("je bericht werd verstuurd")
except Exception as e:
print("An Error occured while sending email.",e)
else:
dispatcher.utter_message(response="utter_mail_canceled")
return []