Chatbot 開發使用Bot Framework V4 - 歡迎句與功能選項設計

Chatb​ot的設計中,如何讓新用戶首次與你的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