Esempio n. 1
0
        /// <summary>
        /// Sends the given message to the given recipient.
        /// </summary>
        /// <param name="recipient">The conversation reference of the recipient.</param>
        /// <param name="message">The message to send.</param>
        /// <returns>A valid resource response instance, if successful. Null in case of an error.</returns>
        public virtual async Task <ResourceResponse> SendMessageAsync(
            ConversationReference recipient, string message)
        {
            IMessageActivity messageActivity =
                ConnectorClientMessageBundle.CreateMessageActivity(null, recipient, message);

            // The sender to the message activity above is resolved in the method here:
            return(await SendMessageAsync(recipient, messageActivity));
        }
Esempio n. 2
0
        /// <summary>
        /// Sends the given message to the given recipient.
        /// </summary>
        /// <param name="recipient">The conversation reference of the recipient.</param>
        /// <param name="messageActivity">The message activity to send.</param>
        /// <returns>A valid resource response instance, if successful. Null in case of an error.</returns>
        public virtual async Task <ResourceResponse> SendMessageAsync(
            ConversationReference recipient, IMessageActivity messageActivity)
        {
            if (recipient == null)
            {
                Logger.Log("The conversation reference is null");
                return(null);
            }

            // We need the bot identity in the SAME CHANNEL/CONVERSATION as the RECIPIENT -
            // Otherwise, the platform (e.g. Slack) will reject the incoming message as it does not
            // recognize the sender
            ConversationReference botInstance =
                RoutingDataManager.FindBotInstanceForRecipient(recipient);

            if (botInstance == null || botInstance.Bot == null)
            {
                Logger.Log("Failed to find the bot instance");
                return(null);
            }

            messageActivity.From      = botInstance.Bot;
            messageActivity.Recipient = RoutingDataManager.GetChannelAccount(recipient);

            // Make sure the message activity contains a valid conversation ID
            if (messageActivity.Conversation == null)
            {
                messageActivity.Conversation = recipient.Conversation;
            }

            ConnectorClientMessageBundle bundle = new ConnectorClientMessageBundle(
                recipient.ServiceUrl, messageActivity, _microsoftAppCredentials);

            ResourceResponse resourceResponse = null;

            try
            {
                resourceResponse =
                    await bundle.ConnectorClient.Conversations.SendToConversationAsync(
                        (Activity)bundle.MessageActivity);
            }
            catch (UnauthorizedAccessException e)
            {
                Logger.Log($"Failed to send message: {e.Message}");
            }
            catch (Exception e)
            {
                Logger.Log($"Failed to send message: {e.Message}");
            }

            return(resourceResponse);
        }