async def _send_bot_messages( events: List[Event], tracker: DialogueStateTracker, output_channel: OutputChannel, ) -> None: """Send all the bot messages that are logged in the events array.""" for e in events: if not isinstance(e, BotUttered): continue logger.debug("output_channel.name()") logger.debug(output_channel.name()) logger.debug(e) logger.debug(e.message()) await output_channel.send_response(tracker.sender_id, e.message())
async def trigger_external_user_uttered( self, intent_name: Text, entities: Optional[Union[List[Dict[Text, Any]], Dict[Text, Text]]], tracker: DialogueStateTracker, output_channel: OutputChannel, ) -> None: """Triggers an external message. Triggers an external message (like a user message, but invisible; used, e.g., by a reminder or the trigger_intent endpoint). Args: intent_name: Name of the intent to be triggered. entities: Entities to be passed on. tracker: The tracker to which the event should be added. output_channel: The output channel. """ if isinstance(entities, list): entity_list = entities elif isinstance(entities, dict): # Allow for a short-hand notation {"ent1": "val1", "ent2": "val2", ...}. # Useful if properties like 'start', 'end', or 'extractor' are not given, # e.g. for external events. entity_list = [{ "entity": ent, "value": val } for ent, val in entities.items()] elif not entities: entity_list = [] else: raise_warning( f"Invalid entity specification: {entities}. Assuming no entities." ) entity_list = [] tracker.update( UserUttered.create_external(intent_name, entity_list, output_channel.name())) await self._predict_and_execute_next_action(output_channel, tracker) # save tracker state to continue conversation from this state self._save_tracker(tracker)