iT邦幫忙

2022 iThome 鐵人賽

DAY 11
1
Software Development

讓 C# 也可以很 Social - 在 .NET 6 用 C# 串接 LINE Services API 的取經之路系列 第 11

[Day 11] .NET 6 C# 與 Line Services API 開發 - Line Action Objects 介紹 & 實作

  • 分享至 

  • xImage
  •  
tags: .NET6 C#, LineBot, Line Messaging API, C#, dotnet core

[Day 11] 讓 C# 也可以很 Social - .NET 6 C# 與 Line Services API 開發 - Line Action Objects 介紹 & 實作

前言

Hello 各位好,今天要在訊息介紹的中間插播 Line Action Objects,會在這邊插播的原因是因為剩下的 Template、Flex Message 也都是互動式的訊息,必須先將 Action Objects 介紹完後才能製作這些訊息呢~不過這一篇的實作不會進行測試,這些 actions 的測試留到下一篇一起進行,那就開始吧!

今天要介紹的 Action Object 有 :

  • Postback Action
  • Message Action
  • Uri Action
  • Datetime Picker Action
  • Camera Action
  • Camera Roll Action
  • Location Action

Postback Action 文件連結

Postback action 觸發後,Line 會將 action 內的 data 內容透過 postback webhook event 送至伺服器,則可以根據 Data 內容作出回應。

官方文件

屬性介紹

  • Data : Data 設定好的內容會由 Line 透過 postback webhook event 傳送回我們伺服器,即可做出對應的回應。
  • DisplayText : 若設定了 DisplayText 會使 postback aciton 執行後會將設定的文字以使用者傳送的樣式顯示在聊天室,但是後台並不會收到這個文字訊息傳送的 webhook event
  • InputOption : InputOption 共有四種選項,帶入後便能執行對應動作。
    • Open rich menu : 開啟 rich menu。
    • Close rich menu : 關閉 rich menu。
    • Open Keyboard : 開啟手機鍵盤。
    • Open Voice : 開啟錄音功能。
  • FillInText : 當 InputOption 帶入 OpenKeyboard 時,可以在這邊預先填好開啟鍵盤後的文字內容。

Class 宣告

  • 在 Dtos/Actions 資料夾新增 ActionDto.cs
namespace LineBotMessage.Dtos
{
    public class ActionDto
    {
        public string Type { get; set; } 
        public string? Label { get; set; }

        //Postback action.
        public string? Data { get; set; } 
        public string? DisplayText { get; set; } 
        public string? InputOption { get; set; } 
        public string? FillInText { get; set; }
    }
}

Message Action 文件連結

Message action 跟上一篇的 Imagemap message action 一樣是讓使用者傳送設定好的文字訊息到 line bot 聊天室,這樣就可以透過 Webhook 接收事件用收到的關鍵字對使用者作出回應。

官方文件

屬性介紹

  • Text : 使用者會將 text 內的文字傳送給 Line Bot。

Class宣告

在 ActionDto 中新增屬性

//Message action.
public string? Text { get; set; }

Uri Action 文件連結

Uri Action 顧名思義就是開啟設定好的連結,跟上一篇 Imagemap 一樣可以使用 Line 提供的一系列 url schema

官方文件

屬性介紹

  • Uri : 此動作執行後會根據此連結的內容開啟對應視窗。
  • AltUri.Desktop : 如果此屬性有設置時,在電腦版的 Line 上執行此動作則會用這一個連結內容取代 uri property。

Class宣告

在 ActionDto 中新增屬性

//Uri action.
public string? Uri { get; set; }
public UriActionAltUriDto? AltUri { get; set; }

在 ActionDto.cs 下方新增 Class

public class UriActionAltUriDto
{
    public string Desktop { get; set; }
}

Datetime Picker Action 文件連結

Datetime picker 動作執行後會開啟一個時間選擇器,使用者選好時間送出後 Line 會透過 Postback webhook event 將使用者選擇的時間傳送到我們伺服器。

官方文件

屬性介紹

  • Data : 與 postback action 用途一樣,會由 postback webhook event 接收此屬性內容,用於判斷該事件的類型。
  • Mode : 設定時間選擇器的模式,可分為 選擇時間、日期、日期時間
  • Initial 選擇器初始值。
  • Max : 選擇器可選最大值。
  • Min : 選擇器可選最小值。

在設定 Initial、Max、Min 值時有格式需要遵守

Class宣告

在 ActionDto 中新增屬性

    // datetime picker action
    public string? Mode { get; set; }
    public string? Initial { get; set; }
    public string? Max { get; set; }
    public string? Min { get; set; }

Camera Action 文件連結

此動作執行後能夠開器使用者的 Line 相機,使用者拍照後即可將照片直接傳進 Line bot 聊天室。

官方文件

** 因沒有多餘屬性則不需宣告。 **

Camera Roll Action 文件連結

此動作執行後能夠開啟使用者的 Line 相簿,使用者可直接選擇照片傳送至 Line bot 聊天室。

官方文件

** 因沒有多餘屬性則不需宣告。 **

Location Action 文件連結

動作執行後使用者會開啟位置視窗,使用者能夠傳送位置訊息至 Line bot 聊天室。

官方文件

** 因沒有多餘屬性則不需宣告。 **

Enum 宣告

  • 將原本 Enum/MessageTypeEnum.cs 改為 MessageEnum.cs
  • 在 MessageEnum.cs 中新增以下 Enum
public static class ActionTypeEnum
{
    public const string Postback = "postback";
    public const string Message = "message";
    public const string Uri = "uri";
    public const string DatetimePicker = "datetimepicker";
    public const string Camera = "camera";
    public const string CameraRoll = "cameraRoll";
    public const string Location = "location";
    public const string RichMenuSwitch = "richmenuswitch";
}

public static class PostbackInputOptionEnum
{
    public const string CloseRichMenu = "closeRichMenu";
    public const string OpenRichMenu = "openRichMenu";
    public const string OpenKeyboard = "openKeyboard";
    public const string OpenVoice = "openVoice";
}

public static class DatetimePickerModeEnum
{
    public const string Date = "date";
    public const string Time = "time";
    public const string Datetime = "datetime";
}

Action Label 屬性

Label 屬性的用途是在某些訊息中會將 Label 的文字內容作為按鈕文字顯示出來,不過如各位所見,每個訊息格式都有不同要求與效果,所以這部分就留到介紹訊息時再一起測試。

結語

Line Action Objects 的介紹就到這邊了,本系列 Line Bot 接下來會介紹的Template Message、Flex Message、Rich Menu 等類型,也都會搭配這篇介紹的 action objects 來處理事件及回應的動作。另外,action objects 還有一個 rich menu switch action,不過 rich menu switch action 只能在 rich menu 裡面觸發執行,放在訊息內沒有作用,所以就等到介紹 rich menu 時再說明囉!

接著,要介紹的內容就是之前在說明 messages 型態時沒有完整宣告的 BaseMessage
其中缺少了 LINE Messages 常見的 common property,所以下一篇就來回頭補充說明什麼是 Message common Property以及該如何的運用 !!

範例程式碼

如果想要參考今天範例程式碼的部份,下面是 Git Repo 連結,方便大家參考。

Day11_Line Actions


上一篇
[Day 10] 讓 C# 也可以很 Social - .NET 6 C# 與 Line Services API 開發 - Imagemap message 介紹 & 實作
下一篇
[Day 12] .NET 6 C# 與 Line Services API 開發 - Message Common Property - Quick Reply & Sender
系列文
讓 C# 也可以很 Social - 在 .NET 6 用 C# 串接 LINE Services API 的取經之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
gaindran
iT邦新手 5 級 ‧ 2022-12-18 22:19:10

時間選擇"棄" <-- "器"

APPX Jim iT邦新手 5 級 ‧ 2023-02-16 11:05:48 檢舉

/images/emoticon/emoticon37.gif
已修正~感謝糾正錯字

0
applefi87
iT邦新手 5 級 ‧ 2023-02-15 13:51:33

好開心好開心 照著做就有一個完整且區分好class的line機器人~

另外Datetime Picker Action 可以補上

    // datetime picker action
    public string? Mode { get; set; }
    public string? Initial { get; set; }
    public string? Max { get; set; }
    public string? Min { get; set; }
APPX Jim iT邦新手 5 級 ‧ 2023-02-16 11:07:18 檢舉

/images/emoticon/emoticon41.gif
收到~我也將內容補充進文章中!

我要留言

立即登入留言