i am trying to let the user to fill the form but it keep deleting the slots input
’ nlu file
version: "3.0"
nlu:
- regex: phone_number
examples: |
- \d{10,14}
- intent: greet
examples: |
- hey
- hello
- hi
- hello there
- good morning
- good evening
- moin
- hey there
- let's go
- hey dude
- goodmorning
- goodevening
- good afternoon
- 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
- not really
- intent: mood_great
examples: |
- perfect
- great
- amazing
- feeling like a king
- wonderful
- I am feeling very good
- I am great
- I am amazing
- I am going to save the world
- super stoked
- extremely good
- so so perfect
- so good
- so perfect
- intent: transfer_package
examples: |
- i would like to make transfer
- i would like to make transctions
- can i send something to another phone
- want transfer package
- intent: inform
examples: |
- send [50](number) [mega byte](kind) to this number [01299334512](phone_number)
- want transfer package
- send [messages](kind) to another phone
- package transform
- want to give [10](number) [messages](kind) to another phone
- give to this [01299334512](phone_number) [500](number) [cerdits](kind)
- put [100](number) [messages](kind) to [01597845143](phone_number)
- make [512](number) transction of [messages](kind)
- [300](number) [megabyte](kind)
- [01100099038](phone_number)
- [message](kind)
- [credits](kind)
- [megabyte](kind)
- [50](number)
- [67](number)
- [400](number)
- [21](number)
- [12](number)
- [14](number)
- [31](number)
- [500](number)
- [33](number)
- [5](number)
- [1](number)
- [688](number)
- [9999](number)
- [213](number)
- intent: messages
examples: |
- messages
- intent: local
examples: |
- local
- intent: international
examples: |
- international
’
'Domain file
version: '3.0'
session_config:
session_expiration_time: 60
carry_over_slots_to_new_session: true
intents:
- greet
- goodbye
- affirm
- deny
- mood_great
- mood_unhappy
- bot_challenge
- local
- number
- messages
- transfer_package
- inform
- international
entities:
- number
- phone_number
- kind
slots:
number:
type: float
influence_conversation: true
mappings:
- type: from_entity
entity: number
max_value: 10000000.0
min_value: 1.0
phone_number:
type: float
influence_conversation: true
mappings:
- type: from_entity
entity: phone_number
kind:
type: text
influence_conversation: true
mappings:
- type: from_entity
entity: kind
forms:
transfer_package_form:
required_slots:
- number
- kind
- phone_number
responses:
utter_greet:
- text: Hey! how i can help you?
utter_goodbye:
- text: Bye
utter_iamabot:
- text: I am a bot, powered by Rasa.
utter_finish:
- text: Okay we got all things.
utter_kind_of_transfer_package:
- text: what do you want to transfer messages,credits or mega byte?
utter_international_or_local:
- text: international_or_local?
utter_value:
- text: how much you want to send?
utter_ask_kind:
- text: what kind of things you want to send credits,messages or mega byte?
utter_ask_number:
- text: how much the value?
utter_ask_phone_number:
- text: what is the phone number you want to send to him?
utter_package_transform_slot:
- text: The phone number is {phone_number} and the value you want to send is {number} from kind {kind}.
actions:
- validate_transfer_package_form
’
Rules
"version: "3.0"
rules:
- rule: Say goodbye anytime the user says goodbye
steps:
- intent: goodbye
- action: utter_goodbye
- rule: Activate form
steps:
- intent: transfer_package
- action: transfer_package_form
- active_loop: transfer_package_form
- rule: submit form
condition:
- active_loop: transfer_package_form
steps:
- action: transfer_package_form
- active_loop: null
- slot_was_set:
- requested_slot: null
- action: utter_finish
- action: utter_package_transform_slot
" Actions "
from typing import Any, Text, Dict, List
from rasa_sdk import FormValidationAction , Action, Tracker
from rasa_sdk.events import EventType
from rasa_sdk.types import DomainDict
from rasa_sdk.executor import CollectingDispatcher
class ValidatePackageTransferForm(FormValidationAction):
def name(self) -> Text:
return "validate_transfer_package_form"
def validate_number(self,slot_value:any, dispatcher: CollectingDispatcher,tracker: Tracker, domain: DomainDict) -> List[Dict[Text, Any]]:
if slot_value is None:
dispatcher.utter_message(text="you need to put value")
return {"number": None}
else:
dispatcher.utter_message(text=f"okay the value is {slot_value}")
return {"number": slot_value}
def validate_phone_number(self,slot_value:Any, dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
if slot_value is None:
dispatcher.utter_message(text="you need to put phone_number")
return {'phone_number': None}
else:
dispatcher.utter_message(text=f"okay the the phone_number is {slot_value}")
return {'phone_number': slot_value}
def validate_kind(self,slot_value:any, dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
if slot_value is None:
dispatcher.utter_message(text="you need to put kind")
return {'kind': None}
else:
dispatcher.utter_message(text=f"okay the kind is {slot_value}")
return {'kind': slot_value}
return []
"