Exemplo n.º 1
0
        private static async Task StartNewConversation(dynamic incomingSms, TraceWriter log)
        {
            log.Info($"Starting new conversation with {incomingSms?.Value?.source_number}");

            var content = new StringContent(string.Empty);

            var startConversationTask = await DirectLineClient.PostAsync("/v3/directline/conversations", content);

            var conversation = new BotConversation();

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

                dynamic jsonResponse = JsonConvert.DeserializeObject(response);
                log.Info($"Started new conversation with id {jsonResponse.conversationId}");

                // TODO: write the conversation ID to a session log with the mobile phone number
                conversation.MobileNumber   = incomingSms?.Value.source_number;
                conversation.ConversationId = jsonResponse.conversationId;

                BotConversation newSession = await DocumentClient.UpsertItemAsync(conversation);

                if (newSession.IsNull())
                {
                    throw new BotConnectorException($"Could not create session object for conversation id {conversation.ConversationId}");
                }

                if (incomingSms != null)
                {
                    await PostToConversation(incomingSms, conversation, log);
                }
            }
            else
            {
                log.Info($"Could not start new conversation. {startConversationTask.StatusCode}: {startConversationTask.ReasonPhrase}");
                log.Info($"{JsonConvert.SerializeObject(startConversationTask)}");
            }
        }