From f294a71bc5771bf896fd13c47e651692d4925a5c Mon Sep 17 00:00:00 2001 From: ex-takashima Date: Sat, 14 Feb 2026 10:01:20 +0900 Subject: [PATCH 1/8] feat(channels): add LINE Official Account channel support Add LINE Messaging API as the 9th messaging channel using HTTP Webhook. Supports text/image/audio messages, group chat @mention detection, reply with quote, and loading animation. - No external SDK required (standard library only) - HMAC-SHA256 webhook signature verification - Reply Token (free) with Push API fallback - Group chat: respond only when @mentioned - Quote original message in replies using quoteToken Closes #146 Co-Authored-By: Claude Opus 4.6 --- .env.example | 2 + config/config.example.json | 9 + pkg/channels/line.go | 598 +++++++++++++++++++++++++++++++++++++ pkg/channels/manager.go | 13 + pkg/config/config.go | 20 ++ 5 files changed, 642 insertions(+) create mode 100644 pkg/channels/line.go diff --git a/.env.example b/.env.example index c450b6e..66539b6 100644 --- a/.env.example +++ b/.env.example @@ -9,6 +9,8 @@ # ── Chat Channel ────────────────────────── # TELEGRAM_BOT_TOKEN=123456:ABC... # DISCORD_BOT_TOKEN=xxx +# LINE_CHANNEL_SECRET=xxx +# LINE_CHANNEL_ACCESS_TOKEN=xxx # ── Web Search (optional) ──────────────── # BRAVE_SEARCH_API_KEY=BSA... diff --git a/config/config.example.json b/config/config.example.json index ed5cb70..593ca07 100644 --- a/config/config.example.json +++ b/config/config.example.json @@ -51,6 +51,15 @@ "bot_token": "xoxb-YOUR-BOT-TOKEN", "app_token": "xapp-YOUR-APP-TOKEN", "allow_from": [] + }, + "line": { + "enabled": false, + "channel_secret": "YOUR_LINE_CHANNEL_SECRET", + "channel_access_token": "YOUR_LINE_CHANNEL_ACCESS_TOKEN", + "webhook_host": "0.0.0.0", + "webhook_port": 18791, + "webhook_path": "/webhook/line", + "allow_from": [] } }, "providers": { diff --git a/pkg/channels/line.go b/pkg/channels/line.go new file mode 100644 index 0000000..580e984 --- /dev/null +++ b/pkg/channels/line.go @@ -0,0 +1,598 @@ +package channels + +import ( + "bytes" + "context" + "crypto/hmac" + "crypto/sha256" + "encoding/base64" + "encoding/json" + "fmt" + "io" + "net/http" + "os" + "strings" + "sync" + "time" + + "github.com/sipeed/picoclaw/pkg/bus" + "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/picoclaw/pkg/utils" +) + +const ( + lineAPIBase = "https://api.line.me/v2/bot" + lineDataAPIBase = "https://api-data.line.me/v2/bot" + lineReplyEndpoint = lineAPIBase + "/message/reply" + linePushEndpoint = lineAPIBase + "/message/push" + lineContentEndpoint = lineDataAPIBase + "/message/%s/content" + lineBotInfoEndpoint = lineAPIBase + "/info" + lineLoadingEndpoint = lineAPIBase + "/chat/loading/start" + lineReplyTokenMaxAge = 25 * time.Second +) + +type replyTokenEntry struct { + token string + timestamp time.Time +} + +// LINEChannel implements the Channel interface for LINE Official Account +// using the LINE Messaging API with HTTP webhook for receiving messages +// and REST API for sending messages. +type LINEChannel struct { + *BaseChannel + config config.LINEConfig + httpServer *http.Server + botUserID string // Bot's user ID + botBasicID string // Bot's basic ID (e.g. @216ru...) + botDisplayName string // Bot's display name for text-based mention detection + replyTokens sync.Map // chatID -> replyTokenEntry + quoteTokens sync.Map // chatID -> quoteToken (string) + ctx context.Context + cancel context.CancelFunc +} + +// NewLINEChannel creates a new LINE channel instance. +func NewLINEChannel(cfg config.LINEConfig, messageBus *bus.MessageBus) (*LINEChannel, error) { + if cfg.ChannelSecret == "" || cfg.ChannelAccessToken == "" { + return nil, fmt.Errorf("line channel_secret and channel_access_token are required") + } + + base := NewBaseChannel("line", cfg, messageBus, cfg.AllowFrom) + + return &LINEChannel{ + BaseChannel: base, + config: cfg, + }, nil +} + +// Start launches the HTTP webhook server. +func (c *LINEChannel) Start(ctx context.Context) error { + logger.InfoC("line", "Starting LINE channel (Webhook Mode)") + + c.ctx, c.cancel = context.WithCancel(ctx) + + // Fetch bot profile to get bot's userId for mention detection + if err := c.fetchBotInfo(); err != nil { + logger.WarnCF("line", "Failed to fetch bot info (mention detection disabled)", map[string]interface{}{ + "error": err.Error(), + }) + } else { + logger.InfoCF("line", "Bot info fetched", map[string]interface{}{ + "bot_user_id": c.botUserID, + "basic_id": c.botBasicID, + "display_name": c.botDisplayName, + }) + } + + mux := http.NewServeMux() + path := c.config.WebhookPath + if path == "" { + path = "/webhook/line" + } + mux.HandleFunc(path, c.webhookHandler) + + addr := fmt.Sprintf("%s:%d", c.config.WebhookHost, c.config.WebhookPort) + c.httpServer = &http.Server{ + Addr: addr, + Handler: mux, + } + + go func() { + logger.InfoCF("line", "LINE webhook server listening", map[string]interface{}{ + "addr": addr, + "path": path, + }) + if err := c.httpServer.ListenAndServe(); err != nil && err != http.ErrServerClosed { + logger.ErrorCF("line", "Webhook server error", map[string]interface{}{ + "error": err.Error(), + }) + } + }() + + c.setRunning(true) + logger.InfoC("line", "LINE channel started (Webhook Mode)") + return nil +} + +// fetchBotInfo retrieves the bot's userId, basicId, and displayName from the LINE API. +func (c *LINEChannel) fetchBotInfo() error { + req, err := http.NewRequest(http.MethodGet, lineBotInfoEndpoint, nil) + if err != nil { + return err + } + req.Header.Set("Authorization", "Bearer "+c.config.ChannelAccessToken) + + client := &http.Client{Timeout: 10 * time.Second} + resp, err := client.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("bot info API returned status %d", resp.StatusCode) + } + + var info struct { + UserID string `json:"userId"` + BasicID string `json:"basicId"` + DisplayName string `json:"displayName"` + } + if err := json.NewDecoder(resp.Body).Decode(&info); err != nil { + return err + } + + c.botUserID = info.UserID + c.botBasicID = info.BasicID + c.botDisplayName = info.DisplayName + return nil +} + +// Stop gracefully shuts down the HTTP server. +func (c *LINEChannel) Stop(ctx context.Context) error { + logger.InfoC("line", "Stopping LINE channel") + + if c.cancel != nil { + c.cancel() + } + + if c.httpServer != nil { + shutdownCtx, cancel := context.WithTimeout(ctx, 5*time.Second) + defer cancel() + if err := c.httpServer.Shutdown(shutdownCtx); err != nil { + logger.ErrorCF("line", "Webhook server shutdown error", map[string]interface{}{ + "error": err.Error(), + }) + } + } + + c.setRunning(false) + logger.InfoC("line", "LINE channel stopped") + return nil +} + +// webhookHandler handles incoming LINE webhook requests. +func (c *LINEChannel) webhookHandler(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) + return + } + + body, err := io.ReadAll(r.Body) + if err != nil { + logger.ErrorCF("line", "Failed to read request body", map[string]interface{}{ + "error": err.Error(), + }) + http.Error(w, "Bad request", http.StatusBadRequest) + return + } + + signature := r.Header.Get("X-Line-Signature") + if !c.verifySignature(body, signature) { + logger.WarnC("line", "Invalid webhook signature") + http.Error(w, "Forbidden", http.StatusForbidden) + return + } + + var payload struct { + Events []lineEvent `json:"events"` + } + if err := json.Unmarshal(body, &payload); err != nil { + logger.ErrorCF("line", "Failed to parse webhook payload", map[string]interface{}{ + "error": err.Error(), + }) + http.Error(w, "Bad request", http.StatusBadRequest) + return + } + + // Return 200 immediately, process events asynchronously + w.WriteHeader(http.StatusOK) + + for _, event := range payload.Events { + go c.processEvent(event) + } +} + +// verifySignature validates the X-Line-Signature using HMAC-SHA256. +func (c *LINEChannel) verifySignature(body []byte, signature string) bool { + if signature == "" { + return false + } + + mac := hmac.New(sha256.New, []byte(c.config.ChannelSecret)) + mac.Write(body) + expected := base64.StdEncoding.EncodeToString(mac.Sum(nil)) + + return hmac.Equal([]byte(expected), []byte(signature)) +} + +// LINE webhook event types +type lineEvent struct { + Type string `json:"type"` + ReplyToken string `json:"replyToken"` + Source lineSource `json:"source"` + Message json.RawMessage `json:"message"` + Timestamp int64 `json:"timestamp"` +} + +type lineSource struct { + Type string `json:"type"` // "user", "group", "room" + UserID string `json:"userId"` + GroupID string `json:"groupId"` + RoomID string `json:"roomId"` +} + +type lineMessage struct { + ID string `json:"id"` + Type string `json:"type"` // "text", "image", "video", "audio", "file", "sticker" + Text string `json:"text"` + QuoteToken string `json:"quoteToken"` + Mention *struct { + Mentionees []lineMentionee `json:"mentionees"` + } `json:"mention"` + ContentProvider struct { + Type string `json:"type"` + } `json:"contentProvider"` +} + +type lineMentionee struct { + Index int `json:"index"` + Length int `json:"length"` + Type string `json:"type"` // "user", "all" + UserID string `json:"userId"` +} + +func (c *LINEChannel) processEvent(event lineEvent) { + if event.Type != "message" { + logger.DebugCF("line", "Ignoring non-message event", map[string]interface{}{ + "type": event.Type, + }) + return + } + + senderID := event.Source.UserID + chatID := c.resolveChatID(event.Source) + isGroup := event.Source.Type == "group" || event.Source.Type == "room" + + var msg lineMessage + if err := json.Unmarshal(event.Message, &msg); err != nil { + logger.ErrorCF("line", "Failed to parse message", map[string]interface{}{ + "error": err.Error(), + }) + return + } + + // In group chats, only respond when the bot is mentioned + if isGroup && !c.isBotMentioned(msg) { + logger.DebugCF("line", "Ignoring group message without mention", map[string]interface{}{ + "chat_id": chatID, + }) + return + } + + // Store reply token for later use + if event.ReplyToken != "" { + c.replyTokens.Store(chatID, replyTokenEntry{ + token: event.ReplyToken, + timestamp: time.Now(), + }) + } + + // Store quote token for quoting the original message in reply + if msg.QuoteToken != "" { + c.quoteTokens.Store(chatID, msg.QuoteToken) + } + + var content string + var mediaPaths []string + localFiles := []string{} + + defer func() { + for _, file := range localFiles { + if err := os.Remove(file); err != nil { + logger.DebugCF("line", "Failed to cleanup temp file", map[string]interface{}{ + "file": file, + "error": err.Error(), + }) + } + } + }() + + switch msg.Type { + case "text": + content = msg.Text + // Strip bot mention from text in group chats + if isGroup { + content = c.stripBotMention(content, msg) + } + case "image": + localPath := c.downloadContent(msg.ID, "image.jpg") + if localPath != "" { + localFiles = append(localFiles, localPath) + mediaPaths = append(mediaPaths, localPath) + content = "[image]" + } + case "audio": + localPath := c.downloadContent(msg.ID, "audio.m4a") + if localPath != "" { + localFiles = append(localFiles, localPath) + mediaPaths = append(mediaPaths, localPath) + content = "[audio]" + } + case "video": + localPath := c.downloadContent(msg.ID, "video.mp4") + if localPath != "" { + localFiles = append(localFiles, localPath) + mediaPaths = append(mediaPaths, localPath) + content = "[video]" + } + case "file": + content = "[file]" + case "sticker": + content = "[sticker]" + default: + content = fmt.Sprintf("[%s]", msg.Type) + } + + if strings.TrimSpace(content) == "" { + return + } + + metadata := map[string]string{ + "platform": "line", + "source_type": event.Source.Type, + "message_id": msg.ID, + } + + logger.DebugCF("line", "Received message", map[string]interface{}{ + "sender_id": senderID, + "chat_id": chatID, + "message_type": msg.Type, + "is_group": isGroup, + "preview": utils.Truncate(content, 50), + }) + + // Show typing/loading indicator (requires user ID, not group ID) + c.sendLoading(senderID) + + c.HandleMessage(senderID, chatID, content, mediaPaths, metadata) +} + +// isBotMentioned checks if the bot is mentioned in the message. +// It first checks the mention metadata (userId match), then falls back +// to text-based detection using the bot's display name, since LINE may +// not include userId in mentionees for Official Accounts. +func (c *LINEChannel) isBotMentioned(msg lineMessage) bool { + // Check mention metadata + if msg.Mention != nil { + for _, m := range msg.Mention.Mentionees { + if m.Type == "all" { + return true + } + if c.botUserID != "" && m.UserID == c.botUserID { + return true + } + } + // Mention metadata exists with mentionees but bot not matched by userId. + // The bot IS likely mentioned (LINE includes mention struct when bot is @-ed), + // so check if any mentionee overlaps with bot display name in text. + if c.botDisplayName != "" { + for _, m := range msg.Mention.Mentionees { + if m.Index >= 0 && m.Length > 0 { + runes := []rune(msg.Text) + end := m.Index + m.Length + if end <= len(runes) { + mentionText := string(runes[m.Index:end]) + if strings.Contains(mentionText, c.botDisplayName) { + return true + } + } + } + } + } + } + + // Fallback: text-based detection with display name + if c.botDisplayName != "" && strings.Contains(msg.Text, "@"+c.botDisplayName) { + return true + } + + return false +} + +// stripBotMention removes the @BotName mention text from the message. +func (c *LINEChannel) stripBotMention(text string, msg lineMessage) string { + stripped := false + + // Try to strip using mention metadata indices + if msg.Mention != nil { + runes := []rune(text) + for i := len(msg.Mention.Mentionees) - 1; i >= 0; i-- { + m := msg.Mention.Mentionees[i] + // Strip if userId matches OR if the mention text contains the bot display name + shouldStrip := false + if c.botUserID != "" && m.UserID == c.botUserID { + shouldStrip = true + } else if c.botDisplayName != "" && m.Index >= 0 && m.Length > 0 { + end := m.Index + m.Length + if end <= len(runes) { + mentionText := string(runes[m.Index:end]) + if strings.Contains(mentionText, c.botDisplayName) { + shouldStrip = true + } + } + } + if shouldStrip { + start := m.Index + end := m.Index + m.Length + if start >= 0 && end <= len(runes) { + runes = append(runes[:start], runes[end:]...) + stripped = true + } + } + } + if stripped { + return strings.TrimSpace(string(runes)) + } + } + + // Fallback: strip @DisplayName from text + if c.botDisplayName != "" { + text = strings.ReplaceAll(text, "@"+c.botDisplayName, "") + } + + return strings.TrimSpace(text) +} + +// resolveChatID determines the chat ID from the event source. +// For group/room messages, use the group/room ID; for 1:1, use the user ID. +func (c *LINEChannel) resolveChatID(source lineSource) string { + switch source.Type { + case "group": + return source.GroupID + case "room": + return source.RoomID + default: + return source.UserID + } +} + +// Send sends a message to LINE. It first tries the Reply API (free) +// using a cached reply token, then falls back to the Push API. +func (c *LINEChannel) Send(ctx context.Context, msg bus.OutboundMessage) error { + if !c.IsRunning() { + return fmt.Errorf("line channel not running") + } + + // Load and consume quote token for this chat + var quoteToken string + if qt, ok := c.quoteTokens.LoadAndDelete(msg.ChatID); ok { + quoteToken = qt.(string) + } + + // Try reply token first (free, valid for ~25 seconds) + if entry, ok := c.replyTokens.LoadAndDelete(msg.ChatID); ok { + tokenEntry := entry.(replyTokenEntry) + if time.Since(tokenEntry.timestamp) < lineReplyTokenMaxAge { + if err := c.sendReply(ctx, tokenEntry.token, msg.Content, quoteToken); err == nil { + logger.DebugCF("line", "Message sent via Reply API", map[string]interface{}{ + "chat_id": msg.ChatID, + "quoted": quoteToken != "", + }) + return nil + } + logger.DebugC("line", "Reply API failed, falling back to Push API") + } + } + + // Fall back to Push API + return c.sendPush(ctx, msg.ChatID, msg.Content, quoteToken) +} + +// buildTextMessage creates a text message object, optionally with quoteToken. +func buildTextMessage(content, quoteToken string) map[string]string { + msg := map[string]string{ + "type": "text", + "text": content, + } + if quoteToken != "" { + msg["quoteToken"] = quoteToken + } + return msg +} + +// sendReply sends a message using the LINE Reply API. +func (c *LINEChannel) sendReply(ctx context.Context, replyToken, content, quoteToken string) error { + payload := map[string]interface{}{ + "replyToken": replyToken, + "messages": []map[string]string{buildTextMessage(content, quoteToken)}, + } + + return c.callAPI(ctx, lineReplyEndpoint, payload) +} + +// sendPush sends a message using the LINE Push API. +func (c *LINEChannel) sendPush(ctx context.Context, to, content, quoteToken string) error { + payload := map[string]interface{}{ + "to": to, + "messages": []map[string]string{buildTextMessage(content, quoteToken)}, + } + + return c.callAPI(ctx, linePushEndpoint, payload) +} + +// sendLoading sends a loading animation indicator to the chat. +func (c *LINEChannel) sendLoading(chatID string) { + payload := map[string]interface{}{ + "chatId": chatID, + "loadingSeconds": 60, + } + if err := c.callAPI(c.ctx, lineLoadingEndpoint, payload); err != nil { + logger.DebugCF("line", "Failed to send loading indicator", map[string]interface{}{ + "error": err.Error(), + }) + } +} + +// callAPI makes an authenticated POST request to the LINE API. +func (c *LINEChannel) callAPI(ctx context.Context, endpoint string, payload interface{}) error { + body, err := json.Marshal(payload) + if err != nil { + return fmt.Errorf("failed to marshal payload: %w", err) + } + + req, err := http.NewRequestWithContext(ctx, http.MethodPost, endpoint, bytes.NewReader(body)) + if err != nil { + return fmt.Errorf("failed to create request: %w", err) + } + + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", "Bearer "+c.config.ChannelAccessToken) + + client := &http.Client{Timeout: 30 * time.Second} + resp, err := client.Do(req) + if err != nil { + return fmt.Errorf("API request failed: %w", err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + respBody, _ := io.ReadAll(resp.Body) + return fmt.Errorf("LINE API error (status %d): %s", resp.StatusCode, string(respBody)) + } + + return nil +} + +// downloadContent downloads media content from the LINE API. +func (c *LINEChannel) downloadContent(messageID, filename string) string { + url := fmt.Sprintf(lineContentEndpoint, messageID) + return utils.DownloadFile(url, filename, utils.DownloadOptions{ + LoggerPrefix: "line", + ExtraHeaders: map[string]string{ + "Authorization": "Bearer " + c.config.ChannelAccessToken, + }, + }) +} diff --git a/pkg/channels/manager.go b/pkg/channels/manager.go index b0e1416..44d3de7 100644 --- a/pkg/channels/manager.go +++ b/pkg/channels/manager.go @@ -149,6 +149,19 @@ func (m *Manager) initChannels() error { } } + if m.config.Channels.LINE.Enabled && m.config.Channels.LINE.ChannelAccessToken != "" { + logger.DebugC("channels", "Attempting to initialize LINE channel") + line, err := NewLINEChannel(m.config.Channels.LINE, m.bus) + if err != nil { + logger.ErrorCF("channels", "Failed to initialize LINE channel", map[string]interface{}{ + "error": err.Error(), + }) + } else { + m.channels["line"] = line + logger.InfoC("channels", "LINE channel enabled successfully") + } + } + logger.InfoCF("channels", "Channel initialization completed", map[string]interface{}{ "enabled_channels": len(m.channels), }) diff --git a/pkg/config/config.go b/pkg/config/config.go index 56f1e19..4c20b8b 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -75,6 +75,7 @@ type ChannelsConfig struct { QQ QQConfig `json:"qq"` DingTalk DingTalkConfig `json:"dingtalk"` Slack SlackConfig `json:"slack"` + LINE LINEConfig `json:"line"` } type WhatsAppConfig struct { @@ -133,6 +134,16 @@ type SlackConfig struct { AllowFrom []string `json:"allow_from" env:"PICOCLAW_CHANNELS_SLACK_ALLOW_FROM"` } +type LINEConfig struct { + Enabled bool `json:"enabled" env:"PICOCLAW_CHANNELS_LINE_ENABLED"` + ChannelSecret string `json:"channel_secret" env:"PICOCLAW_CHANNELS_LINE_CHANNEL_SECRET"` + ChannelAccessToken string `json:"channel_access_token" env:"PICOCLAW_CHANNELS_LINE_CHANNEL_ACCESS_TOKEN"` + WebhookHost string `json:"webhook_host" env:"PICOCLAW_CHANNELS_LINE_WEBHOOK_HOST"` + WebhookPort int `json:"webhook_port" env:"PICOCLAW_CHANNELS_LINE_WEBHOOK_PORT"` + WebhookPath string `json:"webhook_path" env:"PICOCLAW_CHANNELS_LINE_WEBHOOK_PATH"` + AllowFrom FlexibleStringSlice `json:"allow_from" env:"PICOCLAW_CHANNELS_LINE_ALLOW_FROM"` +} + type ProvidersConfig struct { Anthropic ProviderConfig `json:"anthropic"` OpenAI ProviderConfig `json:"openai"` @@ -231,6 +242,15 @@ func DefaultConfig() *Config { AppToken: "", AllowFrom: []string{}, }, + LINE: LINEConfig{ + Enabled: false, + ChannelSecret: "", + ChannelAccessToken: "", + WebhookHost: "0.0.0.0", + WebhookPort: 18791, + WebhookPath: "/webhook/line", + AllowFrom: FlexibleStringSlice{}, + }, }, Providers: ProvidersConfig{ Anthropic: ProviderConfig{}, From 6083168ab4f1b5a344c6cf422b0126cc6ede5ee2 Mon Sep 17 00:00:00 2001 From: zepan Date: Sat, 14 Feb 2026 09:11:44 +0800 Subject: [PATCH 2/8] update wechat group qrcode --- assets/wechat.png | Bin 146556 -> 148820 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/wechat.png b/assets/wechat.png index 73b09da6843c87f46fc1af759df8e5cdde24c36c..0f97fa3eed73bd214bb34cc945b771b00c64a878 100644 GIT binary patch literal 148820 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
Telegram(推奨) @@ -376,6 +377,56 @@ picoclaw gateway
+
+LINE + +**1. LINE 公式アカウントを作成** + +- [LINE Developers Console](https://developers.line.biz/) にアクセス +- プロバイダーを作成 → Messaging API チャネルを作成 +- **チャネルシークレット** と **チャネルアクセストークン** をコピー + +**2. 設定** + +```json +{ + "channels": { + "line": { + "enabled": true, + "channel_secret": "YOUR_CHANNEL_SECRET", + "channel_access_token": "YOUR_CHANNEL_ACCESS_TOKEN", + "webhook_host": "0.0.0.0", + "webhook_port": 18791, + "webhook_path": "/webhook/line", + "allow_from": [] + } + } +} +``` + +**3. Webhook URL を設定** + +LINE の Webhook には HTTPS が必要です。リバースプロキシまたはトンネルを使用してください: + +```bash +# ngrok の例 +ngrok http 18791 +``` + +LINE Developers Console で Webhook URL を `https://あなたのドメイン/webhook/line` に設定し、**Webhook の利用** を有効にしてください。 + +**4. 起動** + +```bash +picoclaw gateway +``` + +> グループチャットでは @メンション時のみ応答します。返信は元メッセージを引用する形式です。 + +> **Docker Compose**: `picoclaw-gateway` サービスに `ports: ["18791:18791"]` を追加して Webhook ポートを公開してください。 + +
+ ## ⚙️ 設定 設定ファイル: `~/.picoclaw/config.json` diff --git a/README.md b/README.md index 536444b..9c505d9 100644 --- a/README.md +++ b/README.md @@ -242,14 +242,15 @@ That's it! You have a working AI assistant in 2 minutes. ## 💬 Chat Apps -Talk to your picoclaw through Telegram, Discord, or DingTalk +Talk to your picoclaw through Telegram, Discord, DingTalk, or LINE -| Channel | Setup | -| ------------ | -------------------------- | -| **Telegram** | Easy (just a token) | -| **Discord** | Easy (bot token + intents) | -| **QQ** | Easy (AppID + AppSecret) | -| **DingTalk** | Medium (app credentials) | +| Channel | Setup | +| ------------ | ---------------------------------- | +| **Telegram** | Easy (just a token) | +| **Discord** | Easy (bot token + intents) | +| **QQ** | Easy (AppID + AppSecret) | +| **DingTalk** | Medium (app credentials) | +| **LINE** | Medium (credentials + webhook URL) |
Telegram (Recommended) @@ -399,6 +400,56 @@ picoclaw gateway
+
+LINE + +**1. Create a LINE Official Account** + +- Go to [LINE Developers Console](https://developers.line.biz/) +- Create a provider → Create a Messaging API channel +- Copy **Channel Secret** and **Channel Access Token** + +**2. Configure** + +```json +{ + "channels": { + "line": { + "enabled": true, + "channel_secret": "YOUR_CHANNEL_SECRET", + "channel_access_token": "YOUR_CHANNEL_ACCESS_TOKEN", + "webhook_host": "0.0.0.0", + "webhook_port": 18791, + "webhook_path": "/webhook/line", + "allow_from": [] + } + } +} +``` + +**3. Set up Webhook URL** + +LINE requires HTTPS for webhooks. Use a reverse proxy or tunnel: + +```bash +# Example with ngrok +ngrok http 18791 +``` + +Then set the Webhook URL in LINE Developers Console to `https://your-domain/webhook/line` and enable **Use webhook**. + +**4. Run** + +```bash +picoclaw gateway +``` + +> In group chats, the bot responds only when @mentioned. Replies quote the original message. + +> **Docker Compose**: Add `ports: ["18791:18791"]` to the `picoclaw-gateway` service to expose the webhook port. + +
+ ## ClawdChat Join the Agent Social Network Connect Picoclaw to the Agent Social Network simply by sending a single message via the CLI or any integrated Chat App.

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 J!3sLb{{ncip^5+i literal 146556 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 P-L#S$T5!k2xaR)=>fm$F From d7822e5d5246d57ae24ba2d37b6397851d4884a9 Mon Sep 17 00:00:00 2001 From: Meng Zhuo Date: Sat, 14 Feb 2026 09:47:55 +0800 Subject: [PATCH 3/8] chore: fmt code in build --- .github/workflows/build.yml | 4 ++++ pkg/channels/base_test.go | 1 - pkg/tools/web.go | 8 ++++---- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 465d1d6..6a138b8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,6 +15,10 @@ jobs: uses: actions/setup-go@v5 with: go-version-file: go.mod + - name: fmt + run: | + make fmt + git diff --exit-code || (echo "::error::Code is not formatted. Run 'make fmt' and commit the changes." && exit 1) - name: Build run: make build-all diff --git a/pkg/channels/base_test.go b/pkg/channels/base_test.go index f82b04c..78c6d1d 100644 --- a/pkg/channels/base_test.go +++ b/pkg/channels/base_test.go @@ -50,4 +50,3 @@ func TestBaseChannelIsAllowed(t *testing.T) { }) } } - diff --git a/pkg/tools/web.go b/pkg/tools/web.go index 6fc89c9..804d9d1 100644 --- a/pkg/tools/web.go +++ b/pkg/tools/web.go @@ -114,7 +114,7 @@ func (p *DuckDuckGoSearchProvider) Search(ctx context.Context, query string, cou func (p *DuckDuckGoSearchProvider) extractResults(html string, count int, query string) (string, error) { // Simple regex based extraction for DDG HTML // Strategy: Find all result containers or key anchors directly - + // Try finding the result links directly first, as they are the most critical // Pattern: Title // The previous regex was a bit strict. Let's make it more flexible for attributes order/content @@ -133,14 +133,14 @@ func (p *DuckDuckGoSearchProvider) extractResults(html string, count int, query // But simple global search for snippets might mismatch order. // Since we only have the raw HTML string, let's just extract snippets globally and assume order matches (risky but simple for regex) // Or better: Let's assume the snippet follows the link in the HTML - + // A better regex approach: iterate through text and find matches in order // But for now, let's grab all snippets too reSnippet := regexp.MustCompile(`([\s\S]*?)`) snippetMatches := reSnippet.FindAllStringSubmatch(html, count+5) maxItems := min(len(matches), count) - + for i := 0; i < maxItems; i++ { urlStr := matches[i][1] title := stripTags(matches[i][2]) @@ -157,7 +157,7 @@ func (p *DuckDuckGoSearchProvider) extractResults(html string, count int, query } lines = append(lines, fmt.Sprintf("%d. %s\n %s", i+1, title, urlStr)) - + // Attempt to attach snippet if available and index aligns if i < len(snippetMatches) { snippet := stripTags(snippetMatches[i][1]) From ff9297336103d50b64fd75660f8b866847959ad9 Mon Sep 17 00:00:00 2001 From: Meng Zhuo Date: Sat, 14 Feb 2026 09:56:21 +0800 Subject: [PATCH 4/8] chore: fix tab in build --- .github/workflows/build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6a138b8..0f075b0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,8 +15,9 @@ jobs: uses: actions/setup-go@v5 with: go-version-file: go.mod + - name: fmt - run: | + run: | make fmt git diff --exit-code || (echo "::error::Code is not formatted. Run 'make fmt' and commit the changes." && exit 1) From ac79a23e0a1cb6d0b5b97208a3c63a1832df13a3 Mon Sep 17 00:00:00 2001 From: ex-takashima Date: Sat, 14 Feb 2026 11:21:47 +0900 Subject: [PATCH 5/8] style: fix gofmt formatting (CRLF -> LF) Co-Authored-By: Claude Opus 4.6 --- pkg/channels/base_test.go | 1 - pkg/channels/line.go | 1196 ++++++++++++++++++------------------- pkg/tools/web.go | 8 +- 3 files changed, 602 insertions(+), 603 deletions(-) diff --git a/pkg/channels/base_test.go b/pkg/channels/base_test.go index f82b04c..78c6d1d 100644 --- a/pkg/channels/base_test.go +++ b/pkg/channels/base_test.go @@ -50,4 +50,3 @@ func TestBaseChannelIsAllowed(t *testing.T) { }) } } - diff --git a/pkg/channels/line.go b/pkg/channels/line.go index 580e984..ffb5533 100644 --- a/pkg/channels/line.go +++ b/pkg/channels/line.go @@ -1,598 +1,598 @@ -package channels - -import ( - "bytes" - "context" - "crypto/hmac" - "crypto/sha256" - "encoding/base64" - "encoding/json" - "fmt" - "io" - "net/http" - "os" - "strings" - "sync" - "time" - - "github.com/sipeed/picoclaw/pkg/bus" - "github.com/sipeed/picoclaw/pkg/config" - "github.com/sipeed/picoclaw/pkg/logger" - "github.com/sipeed/picoclaw/pkg/utils" -) - -const ( - lineAPIBase = "https://api.line.me/v2/bot" - lineDataAPIBase = "https://api-data.line.me/v2/bot" - lineReplyEndpoint = lineAPIBase + "/message/reply" - linePushEndpoint = lineAPIBase + "/message/push" - lineContentEndpoint = lineDataAPIBase + "/message/%s/content" - lineBotInfoEndpoint = lineAPIBase + "/info" - lineLoadingEndpoint = lineAPIBase + "/chat/loading/start" - lineReplyTokenMaxAge = 25 * time.Second -) - -type replyTokenEntry struct { - token string - timestamp time.Time -} - -// LINEChannel implements the Channel interface for LINE Official Account -// using the LINE Messaging API with HTTP webhook for receiving messages -// and REST API for sending messages. -type LINEChannel struct { - *BaseChannel - config config.LINEConfig - httpServer *http.Server - botUserID string // Bot's user ID - botBasicID string // Bot's basic ID (e.g. @216ru...) - botDisplayName string // Bot's display name for text-based mention detection - replyTokens sync.Map // chatID -> replyTokenEntry - quoteTokens sync.Map // chatID -> quoteToken (string) - ctx context.Context - cancel context.CancelFunc -} - -// NewLINEChannel creates a new LINE channel instance. -func NewLINEChannel(cfg config.LINEConfig, messageBus *bus.MessageBus) (*LINEChannel, error) { - if cfg.ChannelSecret == "" || cfg.ChannelAccessToken == "" { - return nil, fmt.Errorf("line channel_secret and channel_access_token are required") - } - - base := NewBaseChannel("line", cfg, messageBus, cfg.AllowFrom) - - return &LINEChannel{ - BaseChannel: base, - config: cfg, - }, nil -} - -// Start launches the HTTP webhook server. -func (c *LINEChannel) Start(ctx context.Context) error { - logger.InfoC("line", "Starting LINE channel (Webhook Mode)") - - c.ctx, c.cancel = context.WithCancel(ctx) - - // Fetch bot profile to get bot's userId for mention detection - if err := c.fetchBotInfo(); err != nil { - logger.WarnCF("line", "Failed to fetch bot info (mention detection disabled)", map[string]interface{}{ - "error": err.Error(), - }) - } else { - logger.InfoCF("line", "Bot info fetched", map[string]interface{}{ - "bot_user_id": c.botUserID, - "basic_id": c.botBasicID, - "display_name": c.botDisplayName, - }) - } - - mux := http.NewServeMux() - path := c.config.WebhookPath - if path == "" { - path = "/webhook/line" - } - mux.HandleFunc(path, c.webhookHandler) - - addr := fmt.Sprintf("%s:%d", c.config.WebhookHost, c.config.WebhookPort) - c.httpServer = &http.Server{ - Addr: addr, - Handler: mux, - } - - go func() { - logger.InfoCF("line", "LINE webhook server listening", map[string]interface{}{ - "addr": addr, - "path": path, - }) - if err := c.httpServer.ListenAndServe(); err != nil && err != http.ErrServerClosed { - logger.ErrorCF("line", "Webhook server error", map[string]interface{}{ - "error": err.Error(), - }) - } - }() - - c.setRunning(true) - logger.InfoC("line", "LINE channel started (Webhook Mode)") - return nil -} - -// fetchBotInfo retrieves the bot's userId, basicId, and displayName from the LINE API. -func (c *LINEChannel) fetchBotInfo() error { - req, err := http.NewRequest(http.MethodGet, lineBotInfoEndpoint, nil) - if err != nil { - return err - } - req.Header.Set("Authorization", "Bearer "+c.config.ChannelAccessToken) - - client := &http.Client{Timeout: 10 * time.Second} - resp, err := client.Do(req) - if err != nil { - return err - } - defer resp.Body.Close() - - if resp.StatusCode != http.StatusOK { - return fmt.Errorf("bot info API returned status %d", resp.StatusCode) - } - - var info struct { - UserID string `json:"userId"` - BasicID string `json:"basicId"` - DisplayName string `json:"displayName"` - } - if err := json.NewDecoder(resp.Body).Decode(&info); err != nil { - return err - } - - c.botUserID = info.UserID - c.botBasicID = info.BasicID - c.botDisplayName = info.DisplayName - return nil -} - -// Stop gracefully shuts down the HTTP server. -func (c *LINEChannel) Stop(ctx context.Context) error { - logger.InfoC("line", "Stopping LINE channel") - - if c.cancel != nil { - c.cancel() - } - - if c.httpServer != nil { - shutdownCtx, cancel := context.WithTimeout(ctx, 5*time.Second) - defer cancel() - if err := c.httpServer.Shutdown(shutdownCtx); err != nil { - logger.ErrorCF("line", "Webhook server shutdown error", map[string]interface{}{ - "error": err.Error(), - }) - } - } - - c.setRunning(false) - logger.InfoC("line", "LINE channel stopped") - return nil -} - -// webhookHandler handles incoming LINE webhook requests. -func (c *LINEChannel) webhookHandler(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodPost { - http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) - return - } - - body, err := io.ReadAll(r.Body) - if err != nil { - logger.ErrorCF("line", "Failed to read request body", map[string]interface{}{ - "error": err.Error(), - }) - http.Error(w, "Bad request", http.StatusBadRequest) - return - } - - signature := r.Header.Get("X-Line-Signature") - if !c.verifySignature(body, signature) { - logger.WarnC("line", "Invalid webhook signature") - http.Error(w, "Forbidden", http.StatusForbidden) - return - } - - var payload struct { - Events []lineEvent `json:"events"` - } - if err := json.Unmarshal(body, &payload); err != nil { - logger.ErrorCF("line", "Failed to parse webhook payload", map[string]interface{}{ - "error": err.Error(), - }) - http.Error(w, "Bad request", http.StatusBadRequest) - return - } - - // Return 200 immediately, process events asynchronously - w.WriteHeader(http.StatusOK) - - for _, event := range payload.Events { - go c.processEvent(event) - } -} - -// verifySignature validates the X-Line-Signature using HMAC-SHA256. -func (c *LINEChannel) verifySignature(body []byte, signature string) bool { - if signature == "" { - return false - } - - mac := hmac.New(sha256.New, []byte(c.config.ChannelSecret)) - mac.Write(body) - expected := base64.StdEncoding.EncodeToString(mac.Sum(nil)) - - return hmac.Equal([]byte(expected), []byte(signature)) -} - -// LINE webhook event types -type lineEvent struct { - Type string `json:"type"` - ReplyToken string `json:"replyToken"` - Source lineSource `json:"source"` - Message json.RawMessage `json:"message"` - Timestamp int64 `json:"timestamp"` -} - -type lineSource struct { - Type string `json:"type"` // "user", "group", "room" - UserID string `json:"userId"` - GroupID string `json:"groupId"` - RoomID string `json:"roomId"` -} - -type lineMessage struct { - ID string `json:"id"` - Type string `json:"type"` // "text", "image", "video", "audio", "file", "sticker" - Text string `json:"text"` - QuoteToken string `json:"quoteToken"` - Mention *struct { - Mentionees []lineMentionee `json:"mentionees"` - } `json:"mention"` - ContentProvider struct { - Type string `json:"type"` - } `json:"contentProvider"` -} - -type lineMentionee struct { - Index int `json:"index"` - Length int `json:"length"` - Type string `json:"type"` // "user", "all" - UserID string `json:"userId"` -} - -func (c *LINEChannel) processEvent(event lineEvent) { - if event.Type != "message" { - logger.DebugCF("line", "Ignoring non-message event", map[string]interface{}{ - "type": event.Type, - }) - return - } - - senderID := event.Source.UserID - chatID := c.resolveChatID(event.Source) - isGroup := event.Source.Type == "group" || event.Source.Type == "room" - - var msg lineMessage - if err := json.Unmarshal(event.Message, &msg); err != nil { - logger.ErrorCF("line", "Failed to parse message", map[string]interface{}{ - "error": err.Error(), - }) - return - } - - // In group chats, only respond when the bot is mentioned - if isGroup && !c.isBotMentioned(msg) { - logger.DebugCF("line", "Ignoring group message without mention", map[string]interface{}{ - "chat_id": chatID, - }) - return - } - - // Store reply token for later use - if event.ReplyToken != "" { - c.replyTokens.Store(chatID, replyTokenEntry{ - token: event.ReplyToken, - timestamp: time.Now(), - }) - } - - // Store quote token for quoting the original message in reply - if msg.QuoteToken != "" { - c.quoteTokens.Store(chatID, msg.QuoteToken) - } - - var content string - var mediaPaths []string - localFiles := []string{} - - defer func() { - for _, file := range localFiles { - if err := os.Remove(file); err != nil { - logger.DebugCF("line", "Failed to cleanup temp file", map[string]interface{}{ - "file": file, - "error": err.Error(), - }) - } - } - }() - - switch msg.Type { - case "text": - content = msg.Text - // Strip bot mention from text in group chats - if isGroup { - content = c.stripBotMention(content, msg) - } - case "image": - localPath := c.downloadContent(msg.ID, "image.jpg") - if localPath != "" { - localFiles = append(localFiles, localPath) - mediaPaths = append(mediaPaths, localPath) - content = "[image]" - } - case "audio": - localPath := c.downloadContent(msg.ID, "audio.m4a") - if localPath != "" { - localFiles = append(localFiles, localPath) - mediaPaths = append(mediaPaths, localPath) - content = "[audio]" - } - case "video": - localPath := c.downloadContent(msg.ID, "video.mp4") - if localPath != "" { - localFiles = append(localFiles, localPath) - mediaPaths = append(mediaPaths, localPath) - content = "[video]" - } - case "file": - content = "[file]" - case "sticker": - content = "[sticker]" - default: - content = fmt.Sprintf("[%s]", msg.Type) - } - - if strings.TrimSpace(content) == "" { - return - } - - metadata := map[string]string{ - "platform": "line", - "source_type": event.Source.Type, - "message_id": msg.ID, - } - - logger.DebugCF("line", "Received message", map[string]interface{}{ - "sender_id": senderID, - "chat_id": chatID, - "message_type": msg.Type, - "is_group": isGroup, - "preview": utils.Truncate(content, 50), - }) - - // Show typing/loading indicator (requires user ID, not group ID) - c.sendLoading(senderID) - - c.HandleMessage(senderID, chatID, content, mediaPaths, metadata) -} - -// isBotMentioned checks if the bot is mentioned in the message. -// It first checks the mention metadata (userId match), then falls back -// to text-based detection using the bot's display name, since LINE may -// not include userId in mentionees for Official Accounts. -func (c *LINEChannel) isBotMentioned(msg lineMessage) bool { - // Check mention metadata - if msg.Mention != nil { - for _, m := range msg.Mention.Mentionees { - if m.Type == "all" { - return true - } - if c.botUserID != "" && m.UserID == c.botUserID { - return true - } - } - // Mention metadata exists with mentionees but bot not matched by userId. - // The bot IS likely mentioned (LINE includes mention struct when bot is @-ed), - // so check if any mentionee overlaps with bot display name in text. - if c.botDisplayName != "" { - for _, m := range msg.Mention.Mentionees { - if m.Index >= 0 && m.Length > 0 { - runes := []rune(msg.Text) - end := m.Index + m.Length - if end <= len(runes) { - mentionText := string(runes[m.Index:end]) - if strings.Contains(mentionText, c.botDisplayName) { - return true - } - } - } - } - } - } - - // Fallback: text-based detection with display name - if c.botDisplayName != "" && strings.Contains(msg.Text, "@"+c.botDisplayName) { - return true - } - - return false -} - -// stripBotMention removes the @BotName mention text from the message. -func (c *LINEChannel) stripBotMention(text string, msg lineMessage) string { - stripped := false - - // Try to strip using mention metadata indices - if msg.Mention != nil { - runes := []rune(text) - for i := len(msg.Mention.Mentionees) - 1; i >= 0; i-- { - m := msg.Mention.Mentionees[i] - // Strip if userId matches OR if the mention text contains the bot display name - shouldStrip := false - if c.botUserID != "" && m.UserID == c.botUserID { - shouldStrip = true - } else if c.botDisplayName != "" && m.Index >= 0 && m.Length > 0 { - end := m.Index + m.Length - if end <= len(runes) { - mentionText := string(runes[m.Index:end]) - if strings.Contains(mentionText, c.botDisplayName) { - shouldStrip = true - } - } - } - if shouldStrip { - start := m.Index - end := m.Index + m.Length - if start >= 0 && end <= len(runes) { - runes = append(runes[:start], runes[end:]...) - stripped = true - } - } - } - if stripped { - return strings.TrimSpace(string(runes)) - } - } - - // Fallback: strip @DisplayName from text - if c.botDisplayName != "" { - text = strings.ReplaceAll(text, "@"+c.botDisplayName, "") - } - - return strings.TrimSpace(text) -} - -// resolveChatID determines the chat ID from the event source. -// For group/room messages, use the group/room ID; for 1:1, use the user ID. -func (c *LINEChannel) resolveChatID(source lineSource) string { - switch source.Type { - case "group": - return source.GroupID - case "room": - return source.RoomID - default: - return source.UserID - } -} - -// Send sends a message to LINE. It first tries the Reply API (free) -// using a cached reply token, then falls back to the Push API. -func (c *LINEChannel) Send(ctx context.Context, msg bus.OutboundMessage) error { - if !c.IsRunning() { - return fmt.Errorf("line channel not running") - } - - // Load and consume quote token for this chat - var quoteToken string - if qt, ok := c.quoteTokens.LoadAndDelete(msg.ChatID); ok { - quoteToken = qt.(string) - } - - // Try reply token first (free, valid for ~25 seconds) - if entry, ok := c.replyTokens.LoadAndDelete(msg.ChatID); ok { - tokenEntry := entry.(replyTokenEntry) - if time.Since(tokenEntry.timestamp) < lineReplyTokenMaxAge { - if err := c.sendReply(ctx, tokenEntry.token, msg.Content, quoteToken); err == nil { - logger.DebugCF("line", "Message sent via Reply API", map[string]interface{}{ - "chat_id": msg.ChatID, - "quoted": quoteToken != "", - }) - return nil - } - logger.DebugC("line", "Reply API failed, falling back to Push API") - } - } - - // Fall back to Push API - return c.sendPush(ctx, msg.ChatID, msg.Content, quoteToken) -} - -// buildTextMessage creates a text message object, optionally with quoteToken. -func buildTextMessage(content, quoteToken string) map[string]string { - msg := map[string]string{ - "type": "text", - "text": content, - } - if quoteToken != "" { - msg["quoteToken"] = quoteToken - } - return msg -} - -// sendReply sends a message using the LINE Reply API. -func (c *LINEChannel) sendReply(ctx context.Context, replyToken, content, quoteToken string) error { - payload := map[string]interface{}{ - "replyToken": replyToken, - "messages": []map[string]string{buildTextMessage(content, quoteToken)}, - } - - return c.callAPI(ctx, lineReplyEndpoint, payload) -} - -// sendPush sends a message using the LINE Push API. -func (c *LINEChannel) sendPush(ctx context.Context, to, content, quoteToken string) error { - payload := map[string]interface{}{ - "to": to, - "messages": []map[string]string{buildTextMessage(content, quoteToken)}, - } - - return c.callAPI(ctx, linePushEndpoint, payload) -} - -// sendLoading sends a loading animation indicator to the chat. -func (c *LINEChannel) sendLoading(chatID string) { - payload := map[string]interface{}{ - "chatId": chatID, - "loadingSeconds": 60, - } - if err := c.callAPI(c.ctx, lineLoadingEndpoint, payload); err != nil { - logger.DebugCF("line", "Failed to send loading indicator", map[string]interface{}{ - "error": err.Error(), - }) - } -} - -// callAPI makes an authenticated POST request to the LINE API. -func (c *LINEChannel) callAPI(ctx context.Context, endpoint string, payload interface{}) error { - body, err := json.Marshal(payload) - if err != nil { - return fmt.Errorf("failed to marshal payload: %w", err) - } - - req, err := http.NewRequestWithContext(ctx, http.MethodPost, endpoint, bytes.NewReader(body)) - if err != nil { - return fmt.Errorf("failed to create request: %w", err) - } - - req.Header.Set("Content-Type", "application/json") - req.Header.Set("Authorization", "Bearer "+c.config.ChannelAccessToken) - - client := &http.Client{Timeout: 30 * time.Second} - resp, err := client.Do(req) - if err != nil { - return fmt.Errorf("API request failed: %w", err) - } - defer resp.Body.Close() - - if resp.StatusCode != http.StatusOK { - respBody, _ := io.ReadAll(resp.Body) - return fmt.Errorf("LINE API error (status %d): %s", resp.StatusCode, string(respBody)) - } - - return nil -} - -// downloadContent downloads media content from the LINE API. -func (c *LINEChannel) downloadContent(messageID, filename string) string { - url := fmt.Sprintf(lineContentEndpoint, messageID) - return utils.DownloadFile(url, filename, utils.DownloadOptions{ - LoggerPrefix: "line", - ExtraHeaders: map[string]string{ - "Authorization": "Bearer " + c.config.ChannelAccessToken, - }, - }) -} +package channels + +import ( + "bytes" + "context" + "crypto/hmac" + "crypto/sha256" + "encoding/base64" + "encoding/json" + "fmt" + "io" + "net/http" + "os" + "strings" + "sync" + "time" + + "github.com/sipeed/picoclaw/pkg/bus" + "github.com/sipeed/picoclaw/pkg/config" + "github.com/sipeed/picoclaw/pkg/logger" + "github.com/sipeed/picoclaw/pkg/utils" +) + +const ( + lineAPIBase = "https://api.line.me/v2/bot" + lineDataAPIBase = "https://api-data.line.me/v2/bot" + lineReplyEndpoint = lineAPIBase + "/message/reply" + linePushEndpoint = lineAPIBase + "/message/push" + lineContentEndpoint = lineDataAPIBase + "/message/%s/content" + lineBotInfoEndpoint = lineAPIBase + "/info" + lineLoadingEndpoint = lineAPIBase + "/chat/loading/start" + lineReplyTokenMaxAge = 25 * time.Second +) + +type replyTokenEntry struct { + token string + timestamp time.Time +} + +// LINEChannel implements the Channel interface for LINE Official Account +// using the LINE Messaging API with HTTP webhook for receiving messages +// and REST API for sending messages. +type LINEChannel struct { + *BaseChannel + config config.LINEConfig + httpServer *http.Server + botUserID string // Bot's user ID + botBasicID string // Bot's basic ID (e.g. @216ru...) + botDisplayName string // Bot's display name for text-based mention detection + replyTokens sync.Map // chatID -> replyTokenEntry + quoteTokens sync.Map // chatID -> quoteToken (string) + ctx context.Context + cancel context.CancelFunc +} + +// NewLINEChannel creates a new LINE channel instance. +func NewLINEChannel(cfg config.LINEConfig, messageBus *bus.MessageBus) (*LINEChannel, error) { + if cfg.ChannelSecret == "" || cfg.ChannelAccessToken == "" { + return nil, fmt.Errorf("line channel_secret and channel_access_token are required") + } + + base := NewBaseChannel("line", cfg, messageBus, cfg.AllowFrom) + + return &LINEChannel{ + BaseChannel: base, + config: cfg, + }, nil +} + +// Start launches the HTTP webhook server. +func (c *LINEChannel) Start(ctx context.Context) error { + logger.InfoC("line", "Starting LINE channel (Webhook Mode)") + + c.ctx, c.cancel = context.WithCancel(ctx) + + // Fetch bot profile to get bot's userId for mention detection + if err := c.fetchBotInfo(); err != nil { + logger.WarnCF("line", "Failed to fetch bot info (mention detection disabled)", map[string]interface{}{ + "error": err.Error(), + }) + } else { + logger.InfoCF("line", "Bot info fetched", map[string]interface{}{ + "bot_user_id": c.botUserID, + "basic_id": c.botBasicID, + "display_name": c.botDisplayName, + }) + } + + mux := http.NewServeMux() + path := c.config.WebhookPath + if path == "" { + path = "/webhook/line" + } + mux.HandleFunc(path, c.webhookHandler) + + addr := fmt.Sprintf("%s:%d", c.config.WebhookHost, c.config.WebhookPort) + c.httpServer = &http.Server{ + Addr: addr, + Handler: mux, + } + + go func() { + logger.InfoCF("line", "LINE webhook server listening", map[string]interface{}{ + "addr": addr, + "path": path, + }) + if err := c.httpServer.ListenAndServe(); err != nil && err != http.ErrServerClosed { + logger.ErrorCF("line", "Webhook server error", map[string]interface{}{ + "error": err.Error(), + }) + } + }() + + c.setRunning(true) + logger.InfoC("line", "LINE channel started (Webhook Mode)") + return nil +} + +// fetchBotInfo retrieves the bot's userId, basicId, and displayName from the LINE API. +func (c *LINEChannel) fetchBotInfo() error { + req, err := http.NewRequest(http.MethodGet, lineBotInfoEndpoint, nil) + if err != nil { + return err + } + req.Header.Set("Authorization", "Bearer "+c.config.ChannelAccessToken) + + client := &http.Client{Timeout: 10 * time.Second} + resp, err := client.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("bot info API returned status %d", resp.StatusCode) + } + + var info struct { + UserID string `json:"userId"` + BasicID string `json:"basicId"` + DisplayName string `json:"displayName"` + } + if err := json.NewDecoder(resp.Body).Decode(&info); err != nil { + return err + } + + c.botUserID = info.UserID + c.botBasicID = info.BasicID + c.botDisplayName = info.DisplayName + return nil +} + +// Stop gracefully shuts down the HTTP server. +func (c *LINEChannel) Stop(ctx context.Context) error { + logger.InfoC("line", "Stopping LINE channel") + + if c.cancel != nil { + c.cancel() + } + + if c.httpServer != nil { + shutdownCtx, cancel := context.WithTimeout(ctx, 5*time.Second) + defer cancel() + if err := c.httpServer.Shutdown(shutdownCtx); err != nil { + logger.ErrorCF("line", "Webhook server shutdown error", map[string]interface{}{ + "error": err.Error(), + }) + } + } + + c.setRunning(false) + logger.InfoC("line", "LINE channel stopped") + return nil +} + +// webhookHandler handles incoming LINE webhook requests. +func (c *LINEChannel) webhookHandler(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) + return + } + + body, err := io.ReadAll(r.Body) + if err != nil { + logger.ErrorCF("line", "Failed to read request body", map[string]interface{}{ + "error": err.Error(), + }) + http.Error(w, "Bad request", http.StatusBadRequest) + return + } + + signature := r.Header.Get("X-Line-Signature") + if !c.verifySignature(body, signature) { + logger.WarnC("line", "Invalid webhook signature") + http.Error(w, "Forbidden", http.StatusForbidden) + return + } + + var payload struct { + Events []lineEvent `json:"events"` + } + if err := json.Unmarshal(body, &payload); err != nil { + logger.ErrorCF("line", "Failed to parse webhook payload", map[string]interface{}{ + "error": err.Error(), + }) + http.Error(w, "Bad request", http.StatusBadRequest) + return + } + + // Return 200 immediately, process events asynchronously + w.WriteHeader(http.StatusOK) + + for _, event := range payload.Events { + go c.processEvent(event) + } +} + +// verifySignature validates the X-Line-Signature using HMAC-SHA256. +func (c *LINEChannel) verifySignature(body []byte, signature string) bool { + if signature == "" { + return false + } + + mac := hmac.New(sha256.New, []byte(c.config.ChannelSecret)) + mac.Write(body) + expected := base64.StdEncoding.EncodeToString(mac.Sum(nil)) + + return hmac.Equal([]byte(expected), []byte(signature)) +} + +// LINE webhook event types +type lineEvent struct { + Type string `json:"type"` + ReplyToken string `json:"replyToken"` + Source lineSource `json:"source"` + Message json.RawMessage `json:"message"` + Timestamp int64 `json:"timestamp"` +} + +type lineSource struct { + Type string `json:"type"` // "user", "group", "room" + UserID string `json:"userId"` + GroupID string `json:"groupId"` + RoomID string `json:"roomId"` +} + +type lineMessage struct { + ID string `json:"id"` + Type string `json:"type"` // "text", "image", "video", "audio", "file", "sticker" + Text string `json:"text"` + QuoteToken string `json:"quoteToken"` + Mention *struct { + Mentionees []lineMentionee `json:"mentionees"` + } `json:"mention"` + ContentProvider struct { + Type string `json:"type"` + } `json:"contentProvider"` +} + +type lineMentionee struct { + Index int `json:"index"` + Length int `json:"length"` + Type string `json:"type"` // "user", "all" + UserID string `json:"userId"` +} + +func (c *LINEChannel) processEvent(event lineEvent) { + if event.Type != "message" { + logger.DebugCF("line", "Ignoring non-message event", map[string]interface{}{ + "type": event.Type, + }) + return + } + + senderID := event.Source.UserID + chatID := c.resolveChatID(event.Source) + isGroup := event.Source.Type == "group" || event.Source.Type == "room" + + var msg lineMessage + if err := json.Unmarshal(event.Message, &msg); err != nil { + logger.ErrorCF("line", "Failed to parse message", map[string]interface{}{ + "error": err.Error(), + }) + return + } + + // In group chats, only respond when the bot is mentioned + if isGroup && !c.isBotMentioned(msg) { + logger.DebugCF("line", "Ignoring group message without mention", map[string]interface{}{ + "chat_id": chatID, + }) + return + } + + // Store reply token for later use + if event.ReplyToken != "" { + c.replyTokens.Store(chatID, replyTokenEntry{ + token: event.ReplyToken, + timestamp: time.Now(), + }) + } + + // Store quote token for quoting the original message in reply + if msg.QuoteToken != "" { + c.quoteTokens.Store(chatID, msg.QuoteToken) + } + + var content string + var mediaPaths []string + localFiles := []string{} + + defer func() { + for _, file := range localFiles { + if err := os.Remove(file); err != nil { + logger.DebugCF("line", "Failed to cleanup temp file", map[string]interface{}{ + "file": file, + "error": err.Error(), + }) + } + } + }() + + switch msg.Type { + case "text": + content = msg.Text + // Strip bot mention from text in group chats + if isGroup { + content = c.stripBotMention(content, msg) + } + case "image": + localPath := c.downloadContent(msg.ID, "image.jpg") + if localPath != "" { + localFiles = append(localFiles, localPath) + mediaPaths = append(mediaPaths, localPath) + content = "[image]" + } + case "audio": + localPath := c.downloadContent(msg.ID, "audio.m4a") + if localPath != "" { + localFiles = append(localFiles, localPath) + mediaPaths = append(mediaPaths, localPath) + content = "[audio]" + } + case "video": + localPath := c.downloadContent(msg.ID, "video.mp4") + if localPath != "" { + localFiles = append(localFiles, localPath) + mediaPaths = append(mediaPaths, localPath) + content = "[video]" + } + case "file": + content = "[file]" + case "sticker": + content = "[sticker]" + default: + content = fmt.Sprintf("[%s]", msg.Type) + } + + if strings.TrimSpace(content) == "" { + return + } + + metadata := map[string]string{ + "platform": "line", + "source_type": event.Source.Type, + "message_id": msg.ID, + } + + logger.DebugCF("line", "Received message", map[string]interface{}{ + "sender_id": senderID, + "chat_id": chatID, + "message_type": msg.Type, + "is_group": isGroup, + "preview": utils.Truncate(content, 50), + }) + + // Show typing/loading indicator (requires user ID, not group ID) + c.sendLoading(senderID) + + c.HandleMessage(senderID, chatID, content, mediaPaths, metadata) +} + +// isBotMentioned checks if the bot is mentioned in the message. +// It first checks the mention metadata (userId match), then falls back +// to text-based detection using the bot's display name, since LINE may +// not include userId in mentionees for Official Accounts. +func (c *LINEChannel) isBotMentioned(msg lineMessage) bool { + // Check mention metadata + if msg.Mention != nil { + for _, m := range msg.Mention.Mentionees { + if m.Type == "all" { + return true + } + if c.botUserID != "" && m.UserID == c.botUserID { + return true + } + } + // Mention metadata exists with mentionees but bot not matched by userId. + // The bot IS likely mentioned (LINE includes mention struct when bot is @-ed), + // so check if any mentionee overlaps with bot display name in text. + if c.botDisplayName != "" { + for _, m := range msg.Mention.Mentionees { + if m.Index >= 0 && m.Length > 0 { + runes := []rune(msg.Text) + end := m.Index + m.Length + if end <= len(runes) { + mentionText := string(runes[m.Index:end]) + if strings.Contains(mentionText, c.botDisplayName) { + return true + } + } + } + } + } + } + + // Fallback: text-based detection with display name + if c.botDisplayName != "" && strings.Contains(msg.Text, "@"+c.botDisplayName) { + return true + } + + return false +} + +// stripBotMention removes the @BotName mention text from the message. +func (c *LINEChannel) stripBotMention(text string, msg lineMessage) string { + stripped := false + + // Try to strip using mention metadata indices + if msg.Mention != nil { + runes := []rune(text) + for i := len(msg.Mention.Mentionees) - 1; i >= 0; i-- { + m := msg.Mention.Mentionees[i] + // Strip if userId matches OR if the mention text contains the bot display name + shouldStrip := false + if c.botUserID != "" && m.UserID == c.botUserID { + shouldStrip = true + } else if c.botDisplayName != "" && m.Index >= 0 && m.Length > 0 { + end := m.Index + m.Length + if end <= len(runes) { + mentionText := string(runes[m.Index:end]) + if strings.Contains(mentionText, c.botDisplayName) { + shouldStrip = true + } + } + } + if shouldStrip { + start := m.Index + end := m.Index + m.Length + if start >= 0 && end <= len(runes) { + runes = append(runes[:start], runes[end:]...) + stripped = true + } + } + } + if stripped { + return strings.TrimSpace(string(runes)) + } + } + + // Fallback: strip @DisplayName from text + if c.botDisplayName != "" { + text = strings.ReplaceAll(text, "@"+c.botDisplayName, "") + } + + return strings.TrimSpace(text) +} + +// resolveChatID determines the chat ID from the event source. +// For group/room messages, use the group/room ID; for 1:1, use the user ID. +func (c *LINEChannel) resolveChatID(source lineSource) string { + switch source.Type { + case "group": + return source.GroupID + case "room": + return source.RoomID + default: + return source.UserID + } +} + +// Send sends a message to LINE. It first tries the Reply API (free) +// using a cached reply token, then falls back to the Push API. +func (c *LINEChannel) Send(ctx context.Context, msg bus.OutboundMessage) error { + if !c.IsRunning() { + return fmt.Errorf("line channel not running") + } + + // Load and consume quote token for this chat + var quoteToken string + if qt, ok := c.quoteTokens.LoadAndDelete(msg.ChatID); ok { + quoteToken = qt.(string) + } + + // Try reply token first (free, valid for ~25 seconds) + if entry, ok := c.replyTokens.LoadAndDelete(msg.ChatID); ok { + tokenEntry := entry.(replyTokenEntry) + if time.Since(tokenEntry.timestamp) < lineReplyTokenMaxAge { + if err := c.sendReply(ctx, tokenEntry.token, msg.Content, quoteToken); err == nil { + logger.DebugCF("line", "Message sent via Reply API", map[string]interface{}{ + "chat_id": msg.ChatID, + "quoted": quoteToken != "", + }) + return nil + } + logger.DebugC("line", "Reply API failed, falling back to Push API") + } + } + + // Fall back to Push API + return c.sendPush(ctx, msg.ChatID, msg.Content, quoteToken) +} + +// buildTextMessage creates a text message object, optionally with quoteToken. +func buildTextMessage(content, quoteToken string) map[string]string { + msg := map[string]string{ + "type": "text", + "text": content, + } + if quoteToken != "" { + msg["quoteToken"] = quoteToken + } + return msg +} + +// sendReply sends a message using the LINE Reply API. +func (c *LINEChannel) sendReply(ctx context.Context, replyToken, content, quoteToken string) error { + payload := map[string]interface{}{ + "replyToken": replyToken, + "messages": []map[string]string{buildTextMessage(content, quoteToken)}, + } + + return c.callAPI(ctx, lineReplyEndpoint, payload) +} + +// sendPush sends a message using the LINE Push API. +func (c *LINEChannel) sendPush(ctx context.Context, to, content, quoteToken string) error { + payload := map[string]interface{}{ + "to": to, + "messages": []map[string]string{buildTextMessage(content, quoteToken)}, + } + + return c.callAPI(ctx, linePushEndpoint, payload) +} + +// sendLoading sends a loading animation indicator to the chat. +func (c *LINEChannel) sendLoading(chatID string) { + payload := map[string]interface{}{ + "chatId": chatID, + "loadingSeconds": 60, + } + if err := c.callAPI(c.ctx, lineLoadingEndpoint, payload); err != nil { + logger.DebugCF("line", "Failed to send loading indicator", map[string]interface{}{ + "error": err.Error(), + }) + } +} + +// callAPI makes an authenticated POST request to the LINE API. +func (c *LINEChannel) callAPI(ctx context.Context, endpoint string, payload interface{}) error { + body, err := json.Marshal(payload) + if err != nil { + return fmt.Errorf("failed to marshal payload: %w", err) + } + + req, err := http.NewRequestWithContext(ctx, http.MethodPost, endpoint, bytes.NewReader(body)) + if err != nil { + return fmt.Errorf("failed to create request: %w", err) + } + + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", "Bearer "+c.config.ChannelAccessToken) + + client := &http.Client{Timeout: 30 * time.Second} + resp, err := client.Do(req) + if err != nil { + return fmt.Errorf("API request failed: %w", err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + respBody, _ := io.ReadAll(resp.Body) + return fmt.Errorf("LINE API error (status %d): %s", resp.StatusCode, string(respBody)) + } + + return nil +} + +// downloadContent downloads media content from the LINE API. +func (c *LINEChannel) downloadContent(messageID, filename string) string { + url := fmt.Sprintf(lineContentEndpoint, messageID) + return utils.DownloadFile(url, filename, utils.DownloadOptions{ + LoggerPrefix: "line", + ExtraHeaders: map[string]string{ + "Authorization": "Bearer " + c.config.ChannelAccessToken, + }, + }) +} diff --git a/pkg/tools/web.go b/pkg/tools/web.go index 6fc89c9..804d9d1 100644 --- a/pkg/tools/web.go +++ b/pkg/tools/web.go @@ -114,7 +114,7 @@ func (p *DuckDuckGoSearchProvider) Search(ctx context.Context, query string, cou func (p *DuckDuckGoSearchProvider) extractResults(html string, count int, query string) (string, error) { // Simple regex based extraction for DDG HTML // Strategy: Find all result containers or key anchors directly - + // Try finding the result links directly first, as they are the most critical // Pattern: Title // The previous regex was a bit strict. Let's make it more flexible for attributes order/content @@ -133,14 +133,14 @@ func (p *DuckDuckGoSearchProvider) extractResults(html string, count int, query // But simple global search for snippets might mismatch order. // Since we only have the raw HTML string, let's just extract snippets globally and assume order matches (risky but simple for regex) // Or better: Let's assume the snippet follows the link in the HTML - + // A better regex approach: iterate through text and find matches in order // But for now, let's grab all snippets too reSnippet := regexp.MustCompile(`([\s\S]*?)`) snippetMatches := reSnippet.FindAllStringSubmatch(html, count+5) maxItems := min(len(matches), count) - + for i := 0; i < maxItems; i++ { urlStr := matches[i][1] title := stripTags(matches[i][2]) @@ -157,7 +157,7 @@ func (p *DuckDuckGoSearchProvider) extractResults(html string, count int, query } lines = append(lines, fmt.Sprintf("%d. %s\n %s", i+1, title, urlStr)) - + // Attempt to attach snippet if available and index aligns if i < len(snippetMatches) { snippet := stripTags(snippetMatches[i][1]) From 6463796fa1cb436f6d6f654dce1463c661e74586 Mon Sep 17 00:00:00 2001 From: ex-takashima Date: Sat, 14 Feb 2026 11:32:42 +0900 Subject: [PATCH 6/8] fix: update tests to match upstream API changes Fix web_test.go and config_test.go to use current function signatures after merging upstream changes (WebSearchToolOptions, BraveConfig). Co-Authored-By: Claude Opus 4.6 --- pkg/config/config_test.go | 11 +++++++---- pkg/tools/web_test.go | 23 ++++++----------------- 2 files changed, 13 insertions(+), 21 deletions(-) diff --git a/pkg/config/config_test.go b/pkg/config/config_test.go index 0a5e7b5..14618b1 100644 --- a/pkg/config/config_test.go +++ b/pkg/config/config_test.go @@ -136,11 +136,14 @@ func TestDefaultConfig_WebTools(t *testing.T) { cfg := DefaultConfig() // Verify web tools defaults - if cfg.Tools.Web.Search.MaxResults != 5 { - t.Error("Expected MaxResults 5, got ", cfg.Tools.Web.Search.MaxResults) + if cfg.Tools.Web.Brave.MaxResults != 5 { + t.Error("Expected Brave MaxResults 5, got ", cfg.Tools.Web.Brave.MaxResults) } - if cfg.Tools.Web.Search.APIKey != "" { - t.Error("Search API key should be empty by default") + if cfg.Tools.Web.Brave.APIKey != "" { + t.Error("Brave API key should be empty by default") + } + if cfg.Tools.Web.DuckDuckGo.MaxResults != 5 { + t.Error("Expected DuckDuckGo MaxResults 5, got ", cfg.Tools.Web.DuckDuckGo.MaxResults) } } diff --git a/pkg/tools/web_test.go b/pkg/tools/web_test.go index 30bc7d9..988eada 100644 --- a/pkg/tools/web_test.go +++ b/pkg/tools/web_test.go @@ -173,30 +173,19 @@ func TestWebTool_WebFetch_Truncation(t *testing.T) { } } -// TestWebTool_WebSearch_NoApiKey verifies error handling when API key is missing +// TestWebTool_WebSearch_NoApiKey verifies that nil is returned when no provider is configured func TestWebTool_WebSearch_NoApiKey(t *testing.T) { - tool := NewWebSearchTool("", 5) - ctx := context.Background() - args := map[string]interface{}{ - "query": "test", - } + tool := NewWebSearchTool(WebSearchToolOptions{BraveAPIKey: "", BraveMaxResults: 5}) - result := tool.Execute(ctx, args) - - // Should return error result - if !result.IsError { - t.Errorf("Expected error when API key is missing") - } - - // Should mention missing API key - if !strings.Contains(result.ForLLM, "BRAVE_API_KEY") && !strings.Contains(result.ForUser, "BRAVE_API_KEY") { - t.Errorf("Expected API key error message, got ForLLM: %s", result.ForLLM) + // Should return nil when no provider is enabled + if tool != nil { + t.Errorf("Expected nil when no search provider is configured") } } // TestWebTool_WebSearch_MissingQuery verifies error handling for missing query func TestWebTool_WebSearch_MissingQuery(t *testing.T) { - tool := NewWebSearchTool("test-key", 5) + tool := NewWebSearchTool(WebSearchToolOptions{BraveAPIKey: "test-key", BraveMaxResults: 5, BraveEnabled: true}) ctx := context.Background() args := map[string]interface{}{} From 1299b204652a7ff57b8ffea8a5ab14838ff3e97f Mon Sep 17 00:00:00 2001 From: moveyield Date: Sat, 14 Feb 2026 13:23:16 +0800 Subject: [PATCH 7/8] refactor: remove unused min func Signed-off-by: moveyield --- pkg/tools/web.go | 7 ------- 1 file changed, 7 deletions(-) diff --git a/pkg/tools/web.go b/pkg/tools/web.go index 804d9d1..ccd9958 100644 --- a/pkg/tools/web.go +++ b/pkg/tools/web.go @@ -171,13 +171,6 @@ func (p *DuckDuckGoSearchProvider) extractResults(html string, count int, query return strings.Join(lines, "\n"), nil } -func min(a, b int) int { - if a < b { - return a - } - return b -} - func stripTags(content string) string { re := regexp.MustCompile(`<[^>]+>`) return re.ReplaceAllString(content, "") From 7d45101fcd7675b50504b75f49bc0abcf9896722 Mon Sep 17 00:00:00 2001 From: ex-takashima Date: Sat, 14 Feb 2026 13:22:24 +0900 Subject: [PATCH 8/8] docs: add LINE channel setup instructions to README Add LINE Official Account setup guide to both README.md and README.ja.md, including configuration, webhook URL setup, and Docker Compose port note. Co-Authored-By: Claude Opus 4.6 --- README.ja.md | 53 +++++++++++++++++++++++++++++++++++++++++- README.md | 65 ++++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 110 insertions(+), 8 deletions(-) diff --git a/README.ja.md b/README.ja.md index 48105ce..a6e81c3 100644 --- a/README.ja.md +++ b/README.ja.md @@ -223,7 +223,7 @@ picoclaw agent -m "What is 2+2?" ## 💬 チャットアプリ -Telegram、Discord、QQ、DingTalk で PicoClaw と会話できます +Telegram、Discord、QQ、DingTalk、LINE で PicoClaw と会話できます | チャネル | セットアップ | |---------|------------| @@ -231,6 +231,7 @@ Telegram、Discord、QQ、DingTalk で PicoClaw と会話できます | **Discord** | 簡単(Bot トークン + Intents) | | **QQ** | 簡単(AppID + AppSecret) | | **DingTalk** | 普通(アプリ認証情報) | +| **LINE** | 普通(認証情報 + Webhook URL) |