Chatbot的設計中,如何讓新用戶首次與你的Chatbot互動可以更方便,是非常重要的,通常我們會加入主動式的歡迎句,例如
這樣的歡迎句並非每次對話都要,當面對的是老朋友舊用戶時,若每次對話都顯示就顯的有些煩人了,因此通常這類的歡迎句,我們會設計在當有新的成員加入對話時才起作用,那麼要怎麼做呢?
首先在Chatbot的Activity物件,除了對話狀態的ActivityTypes.Message之外,另一個常見的就是ActivityTypes.ConversationUpdate了,ActivityTypes.ConversationUpdate會在以下2種情境出現
(1) 當使用者加入對話時
(2) 當使用者連線到Chatbot時
所以我們可以在Activity狀態等於ActivityTypes.ConversationUpdate時並且使用者是屬於新使用者時,送出歡迎句子,請考慮以下程式碼片段
if (turnContext.Activity.Type == ActivityTypes.ConversationUpdate)
{
foreach (var member in turnContext.Activity.MembersAdded)
{
if (member.Id != turnContext.Activity.Recipient.Id)
{
await turnContext.SendActivityAsync($"Hi {member.Name}. 你好,需要什麼服務嗎?", cancellationToken: cancellationToken);
}
}
}
在上述程式碼裡,turnContext.Activity.MembersAdded屬性可以取得被加入對話的使用者清單,接著 member.Id != turnContext.Activity.Recipient.Id 比較特別一點,由於在init 一個對話時,bot 本身會被加入當成是對話的接收者,而這個動作也會觸發ActivityTypes.ConversationUpdate,所以當 member.Id != turnContext.Activity.Recipient.Id 時,則可以準確判斷出是新使者加入對話,這時候就可以送出歡迎句了。
然而這樣的歡迎句雖然某程度上,讓Chatbot與使用者有了對話的起頭,但是還不夠友善,試想一個新使用者要如何能知道你的Chatbot能提供什麼服務呢?而就目前的Chatbot實務現況來看,距離要達到像真人對話無所不能是還有一段不小的距離,所以如果要更佳友善的話,最好一開始Chatbot除了歡迎句問候之外,還能主動提供功能選項,讓使用者一目了然,請考量以下程式碼片段
if (turnContext.Activity.Type == ActivityTypes.ConversationUpdate)
{
foreach (var member in turnContext.Activity.MembersAdded)
{
if (member.Id != turnContext.Activity.Recipient.Id)
{
var response = turnContext.Activity.CreateReply();
var card = new HeroCard
{
Text = "Hi " + member.Name + " 你好,請問您需要什麼幫助嗎?",
Buttons = new List<CardAction>
{
new CardAction(ActionTypes.PostBack,"我想辦信用卡",value: "1"),
new CardAction(ActionTypes.PostBack,"我想開戶",value: "2"),
new CardAction(ActionTypes.PostBack,"查服務據點",value: "3")
}
};
response.Attachments = new List<Attachment>() { card.ToAttachment() };
await turnContext.SendActivityAsync(response, cancellationToken);
}
}
}
呈現效果
這樣的方式會比只有單純一句歡迎句來的友善些,初次的使用者也可以很快速就知道Chatbot能提供什麼服務。下一篇我們將介紹在bot framework裡各種不同類型的資訊卡。
By No.18