此專案為 LINE Messaging API 的 C# SDK,並以開源專案結構進行整理,方便維護與擴充。
dotnet add package Libro.LineMessageAPI若要使用 DI/Options 方便註冊,請加裝擴充套件:
dotnet add package Libro.LineMessageAPI.Extensionsusing Libro.LineMessageApi;
var channelAccessToken = Environment.GetEnvironmentVariable("LINE_CHANNEL_ACCESS_TOKEN");
if (string.IsNullOrWhiteSpace(channelAccessToken))
{
throw new InvalidOperationException("缺少 LINE_CHANNEL_ACCESS_TOKEN");
}
var sdk = new LineSdkBuilder(channelAccessToken)
.UseBot()
.UseMessages()
.Build();using Libro.LineMessageApi;
using Libro.LineMessageApi.Extensions;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
var services = new ServiceCollection();
var configuration = new ConfigurationBuilder()
.AddEnvironmentVariables()
.Build();
services.AddLineSdk(
configuration,
sdkBuilder => sdkBuilder
.UseBot()
.UseMessages());
var serviceProvider = services.BuildServiceProvider();
var sdk = serviceProvider.GetRequiredService<LineSdk>();using Libro.LineMessageApi;
using Libro.LineMessageApi.LineMessageObject;
using Libro.LineMessageApi.LineReceivedObject;
using System.Text.Json;
public async Task<IActionResult> Webhook(HttpRequestMessage request, string channelSecret, string channelAccessToken)
{
if (!LineChannel.VaridateSignature(request, channelSecret))
{
return new UnauthorizedResult();
}
var body = await request.Content.ReadAsStringAsync();
var payload = JsonSerializer.Deserialize<LineReceivedMsg>(body);
var replyToken = payload?.events?[0]?.replyToken;
if (!string.IsNullOrWhiteSpace(replyToken))
{
var sdk = new LineSdkBuilder(channelAccessToken)
.UseMessages()
.Build();
await sdk.Messages!.SendReplyMessageAsync(replyToken, new TextMessage("收到!"));
}
return new OkResult();
}請先閱讀「LINE Messaging API 2.0 規格速覽與快速上手」,內含支援端點與最短上手流程。
docs/line-message-api-2.0.md
本 repo 以 docs/wiki/ 作為文件來源,可用腳本同步到 GitHub Wiki repo:
pwsh scripts/sync-wiki.ps1
pwsh scripts/sync-wiki.ps1 -Commit
pwsh scripts/sync-wiki.ps1 -Commit -Push此專案支援多語系文件,預設語系為繁體中文(zh-TW),並提供英文(en-US)版本。
本專案採用 MIT License,詳見 LICENSE。
此範例提供兩條路徑:
- API 範例:透過設定或環境變數注入 Channel Access Token / Secret
- Dashboard 範例:由頁面輸入並存於記憶體,提供快速驗證與即時事件流
設定 LineChannel:
{
"LineChannel": {
"ChannelAccessToken": "YOUR_CHANNEL_ACCESS_TOKEN",
"ChannelSecret": "YOUR_CHANNEL_SECRET"
}
}或使用環境變數:
LineChannel__ChannelAccessTokenLineChannel__ChannelSecret
Webhook 入口:
POST /line/hook
新增 Bootstrap 5 + Vue 的 Web UI 範例,支援輸入 Token/Secret、設定 Webhook Endpoint,並即時顯示 webhook 事件。