@@ -172,14 +172,12 @@ async def _update_tracker_session(
172
172
f"Starting a new session for conversation ID '{ tracker .sender_id } '."
173
173
)
174
174
175
- if metadata :
176
- tracker .events .append (SessionStarted (metadata = metadata ))
177
-
178
175
await self ._run_action (
179
176
action = self ._get_action (ACTION_SESSION_START_NAME ),
180
177
tracker = tracker ,
181
178
output_channel = output_channel ,
182
179
nlg = self .nlg ,
180
+ metadata = metadata ,
183
181
)
184
182
185
183
async def get_tracker_with_session_start (
@@ -636,11 +634,22 @@ async def _cancel_reminders(
636
634
scheduler .remove_job (scheduled_job .id )
637
635
638
636
async def _run_action (
639
- self , action , tracker , output_channel , nlg , policy = None , confidence = None
637
+ self ,
638
+ action ,
639
+ tracker ,
640
+ output_channel ,
641
+ nlg ,
642
+ policy = None ,
643
+ confidence = None ,
644
+ metadata : Optional [Dict [Text , Any ]] = None ,
640
645
) -> bool :
641
646
# events and return values are used to update
642
647
# the tracker state after an action has been taken
643
648
try :
649
+ # Here we set optional metadata to the ActionSessionStart, which will then
650
+ # be passed to the SessionStart event. Otherwise the metadata will be lost.
651
+ if action .name () == ACTION_SESSION_START_NAME :
652
+ action .metadata = metadata
644
653
events = await action .run (output_channel , nlg , tracker , self .domain )
645
654
except ActionExecutionRejection :
646
655
events = [ActionExecutionRejected (action .name (), policy , confidence )]
0 commit comments