private List <LineModel.SendMessage> procMessage(LineModel.ReceiveMessage m) { List <LineModel.SendMessage> objMessageList = new List <LineModel.SendMessage>(); // 呼叫QnA Maker API,確認問的問題有沒有答案 LineModel.SendMessage objMessage = new LineModel.SendMessage() { type = LineModel.LineMessage.MessageType.text.ToString(), text = QnAMaker.GetAnswer(m.text), }; //switch (m.type) //{ // case LineModel.LineMessage.MessageType.sticker: // sm.packageId = m.packageId; // sm.stickerId = m.stickerId; // break; // case LineModel.LineMessage.MessageType.text: // sm.text = m.text; // break; // default: // sm.type = Enum.GetName(typeof(LineModel.LineMessage.MessageType), LineModel.LineMessage.MessageType.text); // sm.text = "很抱歉,我只是一隻回音機器人,目前只能回覆基本貼圖與文字訊息喔!"; // break; //} objMessageList.Add(objMessage); return(objMessageList); }
public virtual async Task <HttpResponseMessage> Post([FromBody] Activity activity) { ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl)); Activity reply = null; List <CardAction> cards = new List <CardAction>(); try { this.HandleSystemMessage(activity); // 設定語系的快取 if (activity.Text == "English" || activity.Text == "繁體中文") { memoryCache.Set(activity.Conversation.Id + "_LANG", activity.Text, DateTimeOffset.UtcNow.AddDays(1)); } // 判斷是否為直接連絡真人的清單 var strIsConnect = memoryCache.Get(activity.Conversation.Id); // 如果不在真人聯絡清單中,就找出問題的內容 if (strIsConnect == null) { if (activity.GetActivityType() == ActivityTypes.Message) { QuestionObj Question = new QuestionObj(); // 找出是否有答案 QuestionFile answer = Question.GetQuestionAnswer(activity.Text); if (answer == null) { // 找不到問題,也找不到答案,後送QnA // await Conversation.SendAsync(activity, () => new BasicQnAMakerDialog()); string strAnswer = QnAMaker.GetAnswer(activity.Text); reply = this.ReplyOptions(activity, strAnswer, Question.GetQuestionCards(0)); } else { // 如果是回到主選單,就取出根目錄的內容 if (activity.Text == "<-回主選單" || activity.Text == "<-Back to Menu") { cards = Question.GetQuestionCards(0); } else { cards = Question.GetNextQuestionCards(activity.Text); } // 找到問題,判斷是否有下一層,有下一層就產生選單 if (cards.Count > 0) { reply = this.ReplyOptions(activity, null, cards); } else { // 沒有下一層的話,就判斷回覆的內容是否往QnA送,並顯示相同層級的問題清單 // 一般問題就直接回覆 if (answer.AnswerType == "QnA") { await Conversation.SendAsync(activity, () => new BasicQnAMakerDialog()); // 我想聯絡小編就不發回覆 if (activity.Text != "我想連絡小編" || activity.Text != "I want contact editor") { reply = this.ReplyOptions(activity, null, Question.GetSameLevelQuestion(activity.Text)); } } else { reply = this.ReplyOptions(activity, answer.Answer, Question.GetSameLevelQuestion(activity.Text)); } } } } await connector.Conversations.ReplyToActivityAsync(reply); } } catch (Exception e) { reply = this.ReplyOptions(activity, e.Message, null); await connector.Conversations.ReplyToActivityAsync(reply); } return(new HttpResponseMessage(System.Net.HttpStatusCode.Accepted)); }