ウェブチャネルと直通電話でチャットボットを作成しました。
ボットエミュレーターでテストすると正しい応答が得られ、ローカルホスト (webchat) で同じ意図をテストしようとすると異なる応答が得られました。
私はあなたと例を示します:
- エージェントに電話する
- お客様番号を教えてください
- (顧客番号が送信された後)よろしいですか?
- [はい] をクリックすると、データはデータベース (SQL サーバー) に保存されます
localhostで保存すると、次のようになります:フォームをキャンセルしました(実際、フォームをキャンセルしていません
これがluisdialogです。ここでフォームと呼びます:
[LuisIntent("human")]
public async Task human(IDialogContext context, LuisResult result)
{
var form = new FormDialog<Human>(
new Human(),
Human.BuildForm,
FormOptions.PromptInStart,
result.Entities);
context.Call<Human>(form, LossFormCompleted)
}
private async Task LossFormCompleted(IDialogContext context,
IAwaitable<Human> result)
{
HumanCall form = null;
try
{
form = await result;
}
catch (OperationCanceledException)
{
}
if (form == null)
{
await context.PostAsync("You cancelled the form.");
}
else
{
//call the LossForm service to complete the form fill
var message = $"Your data are stored in database";
await context.PostAsync(message);
}
context.Wait(this.MessageReceived);
}
フォーム モデルは次のとおりです。
[Serializable]
public class Human
{
[Prompt("What is your contract number?")]
public string contract;
public static IForm<Human> BuildForm()
{
OnCompletionAsyncDelegate<HumanCall> wrapUpRequest = async (context, state) =>
{
using (BotModelDataContext BotDb = new BotModelDataContext())
{
tblBot bot = new tblBot();
bot = BotDb.tblBots.SingleOrDefault(q => q.Reference == state.contract);
if (bot != null)
{
using (bbbserviceSoapClient cws = new bbbserviceSoapClient())
{
viewc a= new viewc();
a.Lastname = bot.Lastname;
}
}
}
};
return new FormBuilder<Human>().Message
("can you send us some info ?")
.Field(nameof(contract))
.OnCompletion(wrapUpRequest)
.Confirm("Are you sure: Yes or No. ")
.Build();
}
}
}
誰かが私が間違っているところを助けてくれますか? 同じ応答を取得するにはどうすればよいですか? それはタイムアウトの問題ですか、それとも何ですか?