/// <summary> /// Standard BotBuilder adapter method to send a message from the bot to the messaging API. /// </summary> /// <param name="turnContext">A TurnContext representing the current incoming message and environment.</param> /// <param name="activities">An array of outgoing activities to be sent back to the messaging API.</param> /// <param name="cancellationToken">A cancellation token for the task.</param> /// <returns>An array of <see cref="ResourceResponse"/> objects containing the IDs that Slack assigned to the sent messages.</returns> public override async Task <ResourceResponse[]> SendActivitiesAsync(ITurnContext turnContext, Activity[] activities, CancellationToken cancellationToken) { if (turnContext == null) { throw new ArgumentNullException(nameof(turnContext)); } if (activities == null) { throw new ArgumentNullException(nameof(activities)); } var responses = new List <ResourceResponse>(); foreach (var activity in activities) { if (activity.Type != ActivityTypes.Message) { _logger.LogTrace($"Unsupported Activity Type: '{activity.Type}'. Only Activities of type 'Message' are supported."); } else { var message = SlackHelper.ActivityToSlack(activity); var slackResponse = await _slackClient.PostMessageAsync(message, cancellationToken) .ConfigureAwait(false); if (slackResponse != null && slackResponse.Ok) { var resourceResponse = new ActivityResourceResponse() { Id = slackResponse.Ts, ActivityId = slackResponse.Ts, Conversation = new ConversationAccount() { Id = slackResponse.Channel, }, }; responses.Add(resourceResponse); } } } return(responses.ToArray()); }
/// <summary> /// Standard BotBuilder adapter method to update a previous message with new content. /// </summary> /// <param name="turnContext">A TurnContext representing the current incoming message and environment.</param> /// <param name="activity">The updated activity in the form '{id: `id of activity to update`, ...}'.</param> /// <param name="cancellationToken">A cancellation token for the task.</param> /// <returns>A resource response with the Id of the updated activity.</returns> public override async Task <ResourceResponse> UpdateActivityAsync(ITurnContext turnContext, Activity activity, CancellationToken cancellationToken) { if (turnContext == null) { throw new ArgumentNullException(nameof(turnContext)); } if (activity == null) { throw new ArgumentNullException(nameof(activity)); } if (activity.Id == null) { throw new ArgumentException(nameof(activity.Timestamp)); } if (activity.Conversation == null) { throw new ArgumentException(nameof(activity.ChannelId)); } var message = SlackHelper.ActivityToSlack(activity); var results = await _slackClient.UpdateAsync(message.Ts, message.Channel, message.Text, cancellationToken : cancellationToken).ConfigureAwait(false); if (!results.ok) { throw new Exception($"Error updating activity on Slack:{results}"); } return(new ResourceResponse() { Id = activity.Id, }); }