使用C#開發LineBot(13) – 使用Date Time Picker讓用戶輸入日期資訊

這個月(還是上個月?忘了),Line Bot增加了DateTimePicker功能,可以在Template Message當中加入了DateTimePicker Action,當用戶點選之後,即可用手機預設的UI選擇時間日期,並讓開發人員以postback參數的方式取得用戶選擇的日期。

這功能非常有價值,因為自然語言對談的過程中,如果要讓用戶輸入日期,用戶難免自行發揮,格式千奇百怪,對於開發人員來說會是一個困擾。有了這個功能,當Line bot需要用戶輸入日期時,不僅格式統一,且使用者輸入時也可以少按一些,更為方便。

使用此功能不難,您只需要建立一個Template Message,並指定Action的類型為DateTimePicker即可:

上面程式碼當中(A)的位置,就是建立所需要的DateTimePickerAction,而(B)所指定的參數mode,則是跳出時間日期選擇器的類型,可以是date/time/datetime其中之一。

範例中其他的程式碼都跟一般的TemplateMessage建立沒兩樣,完成後發送出訊息,就會看到類似底下這樣的畫面:

一旦用戶選定值並按下『傳送』之後,我們就可以透過WebAPI(WebHook)取得的postback參數來收到這個值,程式碼如下:

請留意上圖中(A)的部分,您可以在收取到的訊息的postback物件中,取得Params底下的datetime/date/time屬性,這個屬性會依照先前你在Action中指定的類型,被填入相對應的值。

例如,剛才我們建立Action時,第一個action是mode=time這個類型,因此,當用戶點選該action,Line會跳出時間選擇框讓用戶選擇時間,用戶選定後,Line bot就會產生一個postback,因此我們的後端WebAPI被觸發,同時間ReceivedMessage.events[0].postback.Params.time會被賦予用戶選擇的值:

整個操作的順序大致如上圖所示。

透過這個功能,當Line bot需要用戶輸入日期時,就更加的方便了,可以預期的,未來不管是GPS座標位置、或是更複雜的選擇項目,都可以透過類似的機制來完成,非常讓人期待。

別忘了 LineBotSDK請升級到 0.6.0-beta

完整程式碼請參考:
https://github.com/isdaviddong/LineBot_DateTimePicker

------------------
相關課程: http://www.studyhost.tw/NewCourses/LineBot
LineBotSDK : https://www.nuget.org/packages/LineBotSDK
如果需要即時取得更多相關訊息,可按這裡加入FB專頁。若這篇文章對您有所幫助,請幫我們分享出去,謝謝您的支持。

留言

匿名表示…
請問您發佈的LinebotSDK License屬於那種類型?在Nuget和Readme文書上沒有想過說明。
阿豪寫道…
在使用這個功能,發現使用date和time時會出現"error CS1061: 'Params' 未包含 'date' 的定義,也找不到擴充方法 'date' 可接受類型 'Params' 的第一個引數 (是否遺漏 using 指示詞或組件參考?)"的錯誤,只有datetime是正常的
isDavid寫道…
@阿豪, 請升級到最新版的SDK,如果還是有問題可直接與我聯繫。

聯絡方式:
https://www.facebook.com/DotNetWalker
選擇『發送訊息』
carlshen寫道…
老師好
請問如果回答的內容要改為由資料庫中找答要何串接比較適合,例好:
public class LeaveRequest : ConversationEntity
{
//是這段改為由資料庫取回答案嗎
[Question("請問您的代理人是誰?")]
[Order(2)]
public string 代理人 { get; set; }
}
是否可以給一些方向,因為寫死在程式內,無法達到客戶自定腳本需求,謝謝。

這個網誌中的熱門文章

使用 Airtable 在小型需求上取代傳統資料庫

使用Semantic Kernel 建立自然語言請假系統

精彩(且驚人)的Semantic Kernel入門範例

在 LINE Bot 開發中使用Semantic Kernel建立自然語言請假系統

專業的價值...