def teams_notify_user(activity: Activity): if not activity: return if not activity.channel_data: activity.channel_data = {} channel_data = TeamsChannelData().deserialize(activity.channel_data) channel_data.notification = NotificationInfo(alert=True) activity.channel_data = channel_data
def teams_notify_user(activity: Activity, alert_in_meeting: bool = None, external_resource_url: str = None): if not activity: return if not activity.channel_data: activity.channel_data = {} channel_data = TeamsChannelData().deserialize(activity.channel_data) channel_data.notification = NotificationInfo(alert=True) channel_data.notification.alert_in_meeting = alert_in_meeting channel_data.notification.external_resource_url = external_resource_url activity.channel_data = channel_data
async def end_dialog( self, context: TurnContext, instance: DialogInstance, reason: DialogReason ): # Send of of conversation to the skill if the dialog has been cancelled. if reason in (DialogReason.CancelCalled, DialogReason.ReplaceCalled): await context.send_trace_activity( f"{SkillDialog.__name__}.end_dialog()", label=f"ActivityType: {context.activity.type}", ) activity = Activity(type=ActivityTypes.end_of_conversation) # Apply conversation reference and common properties from incoming activity before sending. TurnContext.apply_conversation_reference( activity, TurnContext.get_conversation_reference(context.activity), is_incoming=True, ) activity.channel_data = context.activity.channel_data activity.additional_properties = context.activity.additional_properties # connection Name is not applicable for an EndDialog, as we don't expect as OAuthCard in response. skill_conversation_id = instance.state[ SkillDialog.SKILLCONVERSATIONIDSTATEKEY ] await self._send_to_skill(context, activity, skill_conversation_id) await super().end_dialog(context, instance, reason)
def _create_dialog_skill_bot_activity( self, selected_option: str, turn_context: TurnContext) -> Activity: """ Helper method to create the activity to be sent to the DialogSkillBot using selected type and values. """ selected_option = selected_option.lower() # Note: in a real bot, the dialogArgs will be created dynamically based on the conversation # and what each action requires; here we hardcode the values to make things simpler. # Just forward the message activity to the skill with whatever the user said. if selected_option == self._skill_action_message.lower(): # Note message activities also support input parameters but we are not using them in this example. return turn_context.activity activity = None # Send an event activity to the skill with "BookFlight" in the name. if selected_option == self._skill_action_book_flight.lower(): activity = Activity(type=ActivityTypes.event) activity.name = self._skill_action_book_flight # Send an event activity to the skill with "BookFlight" in the name and some testing values. if (selected_option == self._skill_action_book_flight_with_input_parameters.lower()): activity = Activity(type=ActivityTypes.event) activity.name = self._skill_action_book_flight activity.value = {"origin": "New York", "destination": "Seattle"} # Send an event activity to the skill with "GetWeather" in the name and some testing values. if selected_option == self._skill_action_get_weather.lower(): activity = Activity(type=ActivityTypes.event) activity.name = self._skill_action_get_weather activity.value = {"latitude": 47.614891, "longitude": -122.195801} return activity if not activity: raise Exception( f"Unable to create dialogArgs for {selected_option}.") # We are manually creating the activity to send to the skill; ensure we add the ChannelData and Properties # from the original activity so the skill gets them. # Note: this is not necessary if we are just forwarding the current activity from context. activity.channel_data = turn_context.activity.channel_data activity.additional_properties = turn_context.activity.additional_properties return activity
async def end_dialog(self, context: TurnContext, instance: DialogInstance, reason: DialogReason): # Send of of conversation to the skill if the dialog has been cancelled. if reason in (DialogReason.CancelCalled, DialogReason.ReplaceCalled): await context.send_trace_activity( f"{SkillDialog.__name__}.end_dialog()", label=f"ActivityType: {context.activity.type}", ) activity = Activity(type=ActivityTypes.end_of_conversation) # Apply conversation reference and common properties from incoming activity before sending. TurnContext.apply_conversation_reference( activity, TurnContext.get_conversation_reference(context.activity), is_incoming=True, ) activity.channel_data = context.activity.channel_data activity.additional_properties = context.activity.additional_properties await self._send_to_skill(context, activity) await super().end_dialog(context, instance, reason)