private static async Task PostToConversation(IncomingSms incomingSms, BotConversation conversation, ILogger log)
        {
            log.LogInformation($"Posting message to conversationId {conversation.ConversationId}");

            dynamic from = new ExpandoObject();

            from.id   = incomingSms.SourceNumber;
            from.name = incomingSms.SourceNumber;
            from.role = null;

            dynamic channelData = new ExpandoObject();

            channelData.UniqueLearnerNumber     = conversation.UniqueLearnerNumber;
            channelData.StandardCode            = conversation.StandardCode;
            channelData.ApprenticeshipStartDate = conversation.ApprenticeshipStartDate;
            channelData.NotifyMessage           = new NotifyMessage
            {
                Id                = incomingSms.Id,
                DateReceived      = incomingSms.DateReceived.ToString(CultureInfo.InvariantCulture),
                DestinationNumber = incomingSms.DestinationNumber,
                SourceNumber      = incomingSms.SourceNumber,
                Message           = incomingSms.Message,
                Type              = "callback",
            };

            var messageContent = new BotConversationMessage
            {
                Type        = "message",
                From        = from,
                Text        = incomingSms.Message,
                ChannelData = channelData
            };

            var         json    = JsonConvert.SerializeObject(messageContent);
            HttpContent content = new StringContent(json);

            content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

            HttpResponseMessage postMessageTask = await DirectLineClient.PostAsync($"/v3/directline/conversations/{conversation.ConversationId}/activities", content);

            if (postMessageTask.IsSuccessStatusCode)
            {
                string response = await postMessageTask.Content.ReadAsStringAsync();

                dynamic jsonResponse = JsonConvert.DeserializeObject(response);
                log.LogInformation($"Received response from Bot Client: {jsonResponse.id}");
            }
            else
            {
                var message = $"Could not post conversation to DirectLineClient. {postMessageTask.StatusCode}: {postMessageTask.ReasonPhrase}";
                throw new BotConnectorException(message);
            }
        }
Exemplo n.º 2
0
        private static async Task PostToConversation(dynamic incomingSms, BotConversation conversation, TraceWriter log)
        {
            log.Info($"Received response from {incomingSms?.Value?.source_number}");

            dynamic from = new ExpandoObject();

            from.id   = incomingSms?.Value?.source_number;
            from.name = incomingSms?.Value?.source_number;
            from.role = null;

            dynamic channelData = new ExpandoObject();

            channelData.NotifyMessage = new NotifyMessage()
            {
                Id                = incomingSms?.Value?.id,
                DateReceived      = incomingSms?.Value?.date_received,
                DestinationNumber =
                    incomingSms?.Value?.destination_number,
                SourceNumber = incomingSms?.Value?.source_number,
                Message      = incomingSms?.Value?.message,
                Type         = "callback",
            };

            var messageContent = new BotConversationMessage()
            {
                Type        = "message",
                From        = from,
                Text        = incomingSms?.Value?.message,
                ChannelData = channelData
            };

            var         json    = JsonConvert.SerializeObject(messageContent);
            HttpContent content = new StringContent(json);

            content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

            HttpResponseMessage postMessageTask = await DirectLineClient.PostAsync($"/v3/directline/conversations/{conversation.ConversationId}/activities", content);

            if (postMessageTask.IsSuccessStatusCode)
            {
                string response = await postMessageTask.Content.ReadAsStringAsync();

                dynamic jsonResponse = JsonConvert.DeserializeObject(response);
                log.Info($"Received response from Bot Client: {jsonResponse.id}");
            }
            else
            {
                log.Info($"Could not post conversation. {postMessageTask.StatusCode}: {postMessageTask.ReasonPhrase}");
                log.Info($"{JsonConvert.SerializeObject(postMessageTask)}");
            }
        }