Inheritance: MessageBase, IOutboundMessage
        public void EnqueueMessage(TelegramOutboundMessage message)
        {
            if (message == null) throw new ArgumentNullException(nameof(message));

            if (!Settings.IsEnabled)
            {
                return;
            }

            _pendingMessages.Add(message);
        }
        private async Task SendMessageAsync(TelegramOutboundMessage message)
        {
            if (message == null) throw new ArgumentNullException(nameof(message));

            using (var httpClient = new HttpClient())
            {
                string uri = $"{BaseUri}{Settings.AuthenticationToken}/sendMessage";
                StringContent body = ConvertOutboundMessageToJsonMessage(message);
                HttpResponseMessage response = await httpClient.PostAsync(uri, body);

                if (!response.IsSuccessStatusCode)
                {
                    Log.Warning(
                        $"Sending Telegram message failed (Message='${message.Text}' StatusCode={response.StatusCode}).");
                }
                else
                {
                    Log.Info($"Sent Telegram message '{message.Text}' to chat {message.ChatId}.");
                }
            }
        }
        private StringContent ConvertOutboundMessageToJsonMessage(TelegramOutboundMessage message)
        {
            if (message.Text.Length > 4096)
            {
                throw new InvalidOperationException("The Telegram outbound message is too long.");
            }

            var json = new JObject
            {
                ["chat_id"] = message.ChatId,
                ["text"] = message.Text
            };

            if (message.Format == TelegramMessageFormat.HTML)
            {
                json["parse_mode"] = "HTML";
            }

            return new StringContent(json.ToString(), Encoding.UTF8, "application/json");
        }