public async Task <HttpResponseMessage> Post([FromBody] Activity activity)
        {
            string cashOrgMent = "";

            //DbConnect db = new DbConnect();
            //DButil dbutil = new DButil();
            DButil.HistoryLog("db connect !! ");
            //HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK);
            HttpResponseMessage response;

            Activity reply1 = activity.CreateReply();
            Activity reply2 = activity.CreateReply();
            Activity reply3 = activity.CreateReply();
            Activity reply4 = activity.CreateReply();

            // Activity 값 유무 확인하는 익명 메소드
            Action <Activity> SetActivity = (act) =>
            {
                if (!(reply1.Attachments.Count != 0 || reply1.Text != ""))
                {
                    reply1 = act;
                }
                else if (!(reply2.Attachments.Count != 0 || reply2.Text != ""))
                {
                    reply2 = act;
                }
                else if (!(reply3.Attachments.Count != 0 || reply3.Text != ""))
                {
                    reply3 = act;
                }
                else if (!(reply4.Attachments.Count != 0 || reply4.Text != ""))
                {
                    reply4 = act;
                }
                else
                {
                }
            };

            if (activity.Type == ActivityTypes.ConversationUpdate && activity.MembersAdded.Any(m => m.Id == activity.Recipient.Id))
            {
                startTime = DateTime.Now;
                //activity.ChannelId = "facebook";
                //파라메터 호출
                if (LUIS_NM.Count(s => s != null) > 0)
                {
                    //string[] LUIS_NM = new string[10];
                    Array.Clear(LUIS_NM, 0, LUIS_NM.Length);
                }

                if (LUIS_APP_ID.Count(s => s != null) > 0)
                {
                    //string[] LUIS_APP_ID = new string[10];
                    Array.Clear(LUIS_APP_ID, 0, LUIS_APP_ID.Length);
                }
                //Array.Clear(LUIS_APP_ID, 0, 10);
                DButil.HistoryLog("db SelectConfig start !! ");
                List <ConfList> confList = db.SelectConfig();
                DButil.HistoryLog("db SelectConfig end!! ");

                for (int i = 0; i < confList.Count; i++)
                {
                    switch (confList[i].cnfType)
                    {
                    case "LUIS_APP_ID":
                        LUIS_APP_ID[LUIS_APP_ID.Count(s => s != null)] = confList[i].cnfValue;
                        LUIS_NM[LUIS_NM.Count(s => s != null)]         = confList[i].cnfNm;
                        break;

                    case "LUIS_SUBSCRIPTION":
                        LUIS_SUBSCRIPTION = confList[i].cnfValue;
                        break;

                    case "BOT_ID":
                        BOT_ID = confList[i].cnfValue;
                        break;

                    case "MicrosoftAppId":
                        MicrosoftAppId = confList[i].cnfValue;
                        break;

                    case "MicrosoftAppPassword":
                        MicrosoftAppPassword = confList[i].cnfValue;
                        break;

                    case "QUOTE":
                        QUOTE = confList[i].cnfValue;
                        break;

                    case "TESTDRIVE":
                        TESTDRIVE = confList[i].cnfValue;
                        break;

                    case "LUIS_SCORE_LIMIT":
                        LUIS_SCORE_LIMIT = confList[i].cnfValue;
                        break;

                    case "LUIS_TIME_LIMIT":
                        LUIS_TIME_LIMIT = Convert.ToInt32(confList[i].cnfValue);
                        break;

                    default:     //미 정의 레코드
                        Debug.WriteLine("*conf type : " + confList[i].cnfType + "* conf value : " + confList[i].cnfValue);
                        DButil.HistoryLog("*conf type : " + confList[i].cnfType + "* conf value : " + confList[i].cnfValue);
                        break;
                    }
                }

                Debug.WriteLine("* DB conn : " + activity.Type);
                DButil.HistoryLog("* DB conn : " + activity.Type);

                //초기 다이얼로그 호출
                List <DialogList> dlg = db.SelectInitDialog(activity.ChannelId);

                ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));

                foreach (DialogList dialogs in dlg)
                {
                    Activity initReply = activity.CreateReply();
                    initReply.Recipient   = activity.From;
                    initReply.Type        = "message";
                    initReply.Attachments = new List <Attachment>();
                    //initReply.AttachmentLayout = AttachmentLayoutTypes.Carousel;

                    Attachment tempAttachment;

                    if (dialogs.dlgType.Equals(CARDDLG))
                    {
                        foreach (CardList tempcard in dialogs.dialogCard)
                        {
                            tempAttachment = dbutil.getAttachmentFromDialog(tempcard, activity);
                            initReply.Attachments.Add(tempAttachment);
                        }
                    }
                    else
                    {
                        if (activity.ChannelId.Equals("facebook") && string.IsNullOrEmpty(dialogs.cardTitle) && dialogs.dlgType.Equals(TEXTDLG))
                        {
                            Activity reply_facebook = activity.CreateReply();
                            reply_facebook.Recipient = activity.From;
                            reply_facebook.Type      = "message";
                            DButil.HistoryLog("facebook  card Text : " + dialogs.cardText);
                            reply_facebook.Text = dialogs.cardText;
                            var reply_ment_facebook = connector.Conversations.SendToConversationAsync(reply_facebook);
                            //SetActivity(reply_facebook);
                        }
                        else
                        {
                            tempAttachment = dbutil.getAttachmentFromDialog(dialogs, activity);
                            initReply.Attachments.Add(tempAttachment);
                        }
                    }
                    await connector.Conversations.SendToConversationAsync(initReply);
                }

                DateTime endTime = DateTime.Now;
                Debug.WriteLine("프로그램 수행시간 : {0}/ms", ((endTime - startTime).Milliseconds));
                Debug.WriteLine("* activity.Type : " + activity.Type);
                Debug.WriteLine("* activity.Recipient.Id : " + activity.Recipient.Id);
                Debug.WriteLine("* activity.ServiceUrl : " + activity.ServiceUrl);

                DButil.HistoryLog("* activity.Type : " + activity.ChannelData);
                DButil.HistoryLog("* activity.Recipient.Id : " + activity.Recipient.Id);
                DButil.HistoryLog("* activity.ServiceUrl : " + activity.ServiceUrl);
            }
            else if (activity.Type == ActivityTypes.Message)
            {
                //activity.ChannelId = "facebook";
                ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));
                try
                {
                    Debug.WriteLine("* activity.Type == ActivityTypes.Message ");
                    channelID = activity.ChannelId;
                    string orgMent  = activity.Text;
                    string tranText = "";

                    //캐시 체크
                    cashOrgMent = Regex.Replace(orgMent, @"[^a-zA-Z0-9ㄱ-힣]", "", RegexOptions.Singleline);


                    Debug.WriteLine("* activity.Type == cashOrgMent " + cashOrgMent);

                    if (cashOrgMent == "DoosanInfracore工程机械事业部门构筑了挖掘机轮式装载机铰接式翻斗车等产品系列在全球各地确保着生产销售及流通网络成为名符其实的全球综合工程机械公司")
                    {
                        tranText = "두산인프라코어 건설기계 사업부문은 굴삭기와 휠로더, 굴절식 덤프트럭까지 라인업을 구축하고 전 세계 각지에 생산, 판매 및 유통망을 확보함으로써 명실상부한 글로벌 종합 건설기계 회사로 자리매김했습니다";
                    }
                    else if (cashOrgMent == "DoosanBobcat具备小型铲车迷你挖掘机增益装备utilityequipment伸缩臂叉装车等业内最高级的小型设备与移动动力配件等多种业务项目")
                    {
                        tranText = "두산밥캣은 소형 로더, 미니 굴삭기, 유틸리티 장비, 텔레스코픽핸들러 등 업계 최고의 소형 장비와 포터블파워, 어태치먼트 등 다양한 사업 포트폴리오를 갖추고 있습니다.";
                    }
                    else if (cashOrgMent == "工程机械DoosanInfracore工程机械事业部门构筑了挖掘机轮式装载机铰接式翻斗车等产品系列在全球各地确保着生产销售及流通网络成为名符其实的全球综合工程机械公司")
                    {
                        tranText = "건설기계 두산인프라코어 건설기계 사업부문은 굴삭기와 휠로더, 굴절식 덤프트럭까지 라인업을 구축하고 전 세계 각지에 생산, 판매 및 유통망을 확보함으로써 명실상부한 글로벌 종합 건설기계 회사로 자리매김했습니다";
                    }
                    else if (cashOrgMent == "工程机械事业部门构筑了挖掘机轮式装载机铰接式翻斗车等产品系列在全球各地确保着生产销售及流通网络成为名符其实的全球综合工程机械公司")
                    {
                        tranText = "건설기계 사업부문은 굴삭기와 휠로더, 굴절식 덤프트럭까지 라인업을 구축하고 전 세계 각지에 생산, 판매 및 유통망을 확보함으로써 명실상부한 글로벌 종합 건설기계 회사로 자리매김했습니다";
                    }
                    else if (cashOrgMent == "具备小型铲车迷你挖掘机增益装备utilityequipment伸缩臂叉装车等业内最高级的小型设备与移动动力配件等多种业务项目")
                    {
                        tranText = "소형 로더, 미니 굴삭기, 유틸리티 장비, 텔레스코픽핸들러 등 업계 최고의 소형 장비와 포터블파워, 어태치먼트 등 다양한 사업 포트폴리오를 갖추고 있습니다.";
                    }
                    else
                    {
                        Debug.WriteLine("* activity.Type ==>" + activity.Text);
                        Translator textZhKoTranslate = new Translator();
                        textZhKoTranslate = await DButil.getTranslate(activity.Text);

                        tranText = textZhKoTranslate.data.translations[0].translatedText;
                        DButil.HistoryLog("taanText 11 ====>" + tranText);
                    }


                    //오타 수정 API
                    string tranText2 = DButil.getEditTypo(tranText);
                    DButil.HistoryLog("taanText 22 ====>" + tranText);
                    Debug.WriteLine("* taanText ==>" + tranText);

                    apiFlag = "COMMON";

                    //대화 시작 시간
                    startTime = DateTime.Now;
                    long unixTime = ((DateTimeOffset)startTime).ToUnixTimeSeconds();

                    DButil.HistoryLog("orgMent : " + orgMent);

                    queryStr = orgMent;

                    string newUserID = activity.Conversation.Id;

                    Activity sorryReply = activity.CreateReply();

                    HeroCard plCard = new HeroCard()
                    {
                        Title = "",
                        Text  = tranText
                    };

                    Attachment plAttachment = plCard.ToAttachment();
                    sorryReply.Attachments.Add(plAttachment);

                    SetActivity(sorryReply);
                    replyresult = "D";

                    DateTime endTime = DateTime.Now;

                    int dbResult = db.insertUserQuery();

                    db.insertHistory(activity.Conversation.Id, activity.ChannelId, ((endTime - MessagesController.startTime).Milliseconds));
                    replyresult     = "";
                    recommendResult = "";
                    tranText        = "";
                }
                catch (Exception e)
                {
                    Debug.Print(e.StackTrace);
                    int sorryMessageCheck = db.SelectUserQueryErrorMessageCheck(activity.Conversation.Id, MessagesController.chatBotID);

                    ++MessagesController.sorryMessageCnt;

                    Activity sorryReply = activity.CreateReply();

                    sorryReply.Recipient   = activity.From;
                    sorryReply.Type        = "message";
                    sorryReply.Attachments = new List <Attachment>();
                    //sorryReply.AttachmentLayout = AttachmentLayoutTypes.Carousel;

                    List <TextList> text = new List <TextList>();
                    if (sorryMessageCheck == 0)
                    {
                        text = db.SelectSorryDialogText("5");
                    }
                    else
                    {
                        text = db.SelectSorryDialogText("6");
                    }

                    for (int i = 0; i < text.Count; i++)
                    {
                        HeroCard plCard = new HeroCard()
                        {
                            Title = text[i].cardTitle,
                            Text  = text[i].cardText
                        };

                        Attachment plAttachment = plCard.ToAttachment();
                        sorryReply.Attachments.Add(plAttachment);
                    }

                    SetActivity(sorryReply);

                    DateTime endTime  = DateTime.Now;
                    int      dbResult = db.insertUserQuery();
                    db.insertHistory(activity.Conversation.Id, activity.ChannelId, ((endTime - MessagesController.startTime).Milliseconds));
                    replyresult     = "";
                    recommendResult = "";
                }
                finally
                {
                    if (reply1.Attachments.Count != 0 || reply1.Text != "")
                    {
                        await connector.Conversations.SendToConversationAsync(reply1);
                    }
                }
            }
            else
            {
                HandleSystemMessage(activity);
            }
            response = Request.CreateResponse(HttpStatusCode.OK);
            return(response);
        }