-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBasicQnAMakerDialog.cs
156 lines (126 loc) · 6.16 KB
/
BasicQnAMakerDialog.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Configuration;
using System.Net.Http;
using Microsoft.Bot.Builder.Azure;
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Builder.CognitiveServices.QnAMaker;
using Microsoft.Bot.Connector;
namespace Microsoft.Bot.Sample.QnABot
{
[Serializable]
public class RootDialog : IDialog<object>
{
private List<string> menuList = new List<string>() { "社内手続きに関する問い合わせ", "終了" };
private List<string> feedbackList = new List<string>() { "はい", "いいえ" };
public Task StartAsync(IDialogContext context)
{
context.Wait(HelloMessage);
return Task.CompletedTask;
}
private async Task HelloMessage(IDialogContext context, IAwaitable<object> result)
{
await context.PostAsync("こんにちは!私はPoC Botです。どのようなご用件でしょうか? ");
MenuMessage(context);
}
private async Task InputMessage(IDialogContext context, IAwaitable<IMessageActivity> result)
{
await context.PostAsync("フィードバックありがとうございます。今後の精度改善の参考にさせて頂きます。");
MenuMessage(context);
}
private void MenuMessage(IDialogContext context)
{
PromptDialog.Choice(context, SelectDialog, menuList, " 以下から選択してください。 ");
}
private async Task SelectDialog(IDialogContext context, IAwaitable<object> result)
{
var selectedMenu = await result;
if((string)selectedMenu == "社内手続きに関する問い合わせ")
{
await context.PostAsync("どのようなことでお困りでしょうか?文章で質問を入力してください。");
context.Call(new BasicQnAMakerDialog(), QnaResumeAfterDialog);
}
else if((string)selectedMenu == "終了")
{
await context.PostAsync("ご利用ありがとうございました。最後にアンケートをお願いできますか?");
context.Call(new EnqueteDialog(), EnqueteResumeAfterDialog);
}
}
private async Task QnaResumeAfterDialog(IDialogContext context, IAwaitable<object> result)
{
FeedbackMessage(context);
}
private void FeedbackMessage(IDialogContext context)
{
PromptDialog.Choice(context, FeedbackDialog, feedbackList, "解決しましたか?");
}
private async Task FeedbackDialog(IDialogContext context, IAwaitable<object> result)
{
var feedbackMenu = await result;
if((string)feedbackMenu == "はい")
{
await context.PostAsync("ご利用ありがとうございました。");
MenuMessage(context);
}
else if((string)feedbackMenu == "いいえ")
{
await context.PostAsync("どのような回答をご希望でしたか?");
context.Wait(InputMessage);
}
}
private async Task EnqueteResumeAfterDialog(IDialogContext context, IAwaitable<string> result)
{
await context.PostAsync($"ご協力、ありがとうございました。");
MenuMessage(context);
}
public static string GetSetting(string key)
{
var value = Utils.GetAppSetting(key);
if (String.IsNullOrEmpty(value) && key == "QnAAuthKey")
{
value = Utils.GetAppSetting("QnASubscriptionKey"); // QnASubscriptionKey for backward compatibility with QnAMaker (Preview)
}
return value;
}
}
/**********************************************************************************/
// Dialog for QnAMaker GA service
[Serializable]
public class BasicQnAMakerDialog : QnAMakerDialog
{
// Go to https://qnamaker.ai and feed data, train & publish your QnA Knowledgebase.
// Parameters to QnAMakerService are:
// Required: qnaAuthKey, knowledgebaseId, endpointHostName
// Optional: defaultMessage, scoreThreshold[Range 0.0 – 1.0]
public BasicQnAMakerDialog() : base(new QnAMakerService(new QnAMakerAttribute(RootDialog.GetSetting("QnAAuthKey"), Utils.GetAppSetting("QnAKnowledgebaseId"), "No good match in FAQ.", 0, 5, Utils.GetAppSetting("QnAEndpointHostName"))))
{ }
//Question from user => message.Text Answer from bot => result.Answers.FirstOrDefault().Answer
protected override async Task DefaultWaitNextMessageAsync(IDialogContext context, IMessageActivity message, QnAMakerResults result)
{
if (message.Text.Equals("上記のどれでもない。"))
{
await context.PostAsync("お力になれず、申し訳ありませんでした。");
}
await base.DefaultWaitNextMessageAsync(context, message, result);
}
}
/**********************************************************************************/
[Serializable]
public class EnqueteDialog : IDialog<string>
{
private List<string> menuList = new List<string>() { "1.大満足", "2.満足", "3.普通", "4.不満", "5.とても不満" };
public Task StartAsync(IDialogContext context)
{
PromptDialog.Choice(context, this.SelectDialog, this.menuList, "このサービスはいかがでしたか?");
return Task.CompletedTask;
}
private async Task SelectDialog(IDialogContext context, IAwaitable<object> result)
{
var selectedMenu = await result;
context.Done(selectedMenu);
}
}
/**********************************************************************************/
}