/// <summary>
        /// Creates Twilio SMS message options object from a Bot Framework <see cref="Activity"/>.
        /// </summary>
        /// <param name="activity">The activity.</param>
        /// <param name="twilioNumber">Optional. The Twilio phone number assigned to the bot. If not provided, defaults to Activity.From.Id to allow WhatsApp and other future integrations.</param>
        /// <returns>The Twilio message options object.</returns>
        /// <seealso cref="TwilioAdapter.SendActivitiesAsync(ITurnContext, Activity[], System.Threading.CancellationToken)"/>
        public static TwilioMessageOptions ActivityToTwilio(Activity activity, string twilioNumber = null)
        {
            if (activity == null)
            {
                throw new ArgumentNullException(nameof(activity));
            }

            if (string.IsNullOrWhiteSpace(twilioNumber) && string.IsNullOrWhiteSpace(activity.From?.Id))
            {
                throw new ArgumentException($"Either {nameof(twilioNumber)} or {nameof(activity.From.Id)} must be provided.");
            }

            var mediaUrls = new List <Uri>();

            if (activity.Attachments != null)
            {
                mediaUrls.AddRange(activity.Attachments.Select(attachment => new Uri(attachment.ContentUrl)));
            }

            var messageOptions = new TwilioMessageOptions()
            {
                To             = activity.Conversation.Id,
                ApplicationSid = activity.Conversation.Id,
                From           = twilioNumber ?? activity.From.Id,
                Body           = activity.Text
            };

            messageOptions.MediaUrl.AddRange(mediaUrls);

            return(messageOptions);
        }
        /// <summary>
        /// Sends a Twilio SMS message.
        /// </summary>
        /// <param name="messageOptions">An object containing the parameters for the message to send.</param>
        /// <param name="cancellationToken">A cancellation token for the task.</param>
        /// <returns>The SID of the Twilio message sent.</returns>
        public virtual async Task <string> SendMessageAsync(TwilioMessageOptions messageOptions, CancellationToken cancellationToken)
        {
            var createMessageOptions = new CreateMessageOptions(messageOptions.To)
            {
                ApplicationSid = messageOptions.ApplicationSid,
                MediaUrl       = messageOptions.MediaUrl,
                Body           = messageOptions.Body,
                From           = messageOptions.From
            };

            var messageResource = await MessageResource.CreateAsync(createMessageOptions).ConfigureAwait(false);

            return(messageResource.Sid);
        }