Back to HomeAppSheet

AppSheet LINE Integration Tutorial: Build a LINE Notification Bot with Messaging API [2026]

18 min min read
#AppSheet#LINE#LINE Messaging API#LINE Notify#Webhook#Automation#Notifications#Bot#Enterprise Applications#No-Code#Integration

AppSheet LINE Integration Tutorial: Build a LINE Notification Bot with Messaging API [2026]

Important update (2026-07): LINE officially shut down LINE Notify on March 31, 2025. The notify-bot.line.me and notify-api.line.me endpoints are gone. Any older tutorial that tells you to "issue a Notify token and POST to notify-api" will now fail completely. This guide has been fully rewritten to use LINE's official replacement, the LINE Messaging API. If you're looking for a "LINE Notify alternative," this is it. (Source: LINE Developers shutdown announcement)

When building Apps in Asia, notifications need to reach users instantly.

Emails might not be checked immediately, but messaging app notifications are read within seconds.

This tutorial teaches you how to make AppSheet send LINE notifications with the Messaging API, from setup to practical applications.

Want to learn AppSheet basics first? See AppSheet Complete Guide.


Why Integrate with LINE?

First, let's explain why LINE notifications are so important.

Most Popular Messaging App

LINE has extremely high penetration in Taiwan and other Asian markets.

Almost everyone has LINE and keeps it open all day.

In comparison:

  • Email: Might only check once a day
  • SMS: Has costs and often ignored
  • App Push: Requires installing dedicated App

LINE's Advantages:

FeatureDescription
InstantMessages arrive instantly, most people read immediately
UbiquitousAlmost everyone has it
Free tierLINE Official Accounts include a monthly free message quota
No learning curveUsers don't need new apps or new interfaces

AppSheet + LINE Application Scenarios

What can you do connecting AppSheet and LINE?

  • Order notifications: New order comes in, sales immediately gets LINE message
  • Approval reminders: Leave request submitted, manager gets LINE notification
  • Alert warnings: Inventory below safety level, purchasing knows immediately
  • Daily reports: Every morning auto-send yesterday's sales summary

These things that required manual tracking can all be automated.


Integration Method: Use the LINE Messaging API

These tutorials used to offer two paths: LINE Notify and the LINE Messaging API.

Now there's only one. LINE Notify was retired on 2025-03-31, so this article teaches the LINE Messaging API end to end.

The Messaging API is the programmable interface of a LINE Official Account. It's more capable than the old Notify: not just one-way alerts, but two-way interaction, images, and Flex messages. There are three ways to send, pick by need:

push: send to a specific user or group

Best for: notifying a specific sales rep, manager, or one LINE group

You specify the recipient's userId or a group's groupId, and the message goes only to that target. Most precise, but you must obtain the target's ID first (see "How to get a userId/groupId" below).

broadcast: send to all friends

Best for: company-wide alerts, small internal teams, fastest to get running

No IDs needed at all — your team members just add your LINE Official Account as a friend, AppSheet hits the broadcast endpoint, and every friend receives it. This is the simplest setup and the closest to the old Notify experience, so the examples below default to it.

multicast: send to several specific users at once

Best for: notifying a batch of specific people (pass multiple userIds)

A middle ground between push and broadcast — one call, an array of user IDs.

Illustration 1: LINE Messaging API send methods compared

AppSheet + LINE Messaging API Tutorial

Step by step setup guide.

Step 1: Create a LINE Official Account and Issue a Channel Access Token

The Messaging API lives under a "LINE Official Account," so the first step is to create the account, enable the Messaging API, and get the pass — the channel access token.

Steps:

  1. Register a LINE Business ID with your LINE account or email, and create a LINE Official Account in the LINE Official Account Manager
  2. Enable the Messaging API inside the Official Account Manager (since September 2024, Messaging API channels can only be created here, not directly from the Developers Console)
  3. On first enablement you'll register developer info and select a Provider
  4. Log in to the LINE Developers Console with the same account

Get the channel access token:

  1. Open your channel → click the "Messaging API" tab at the top
  2. Find "Channel access token (long-lived)" and click "Issue"
  3. Important: copy and securely store this token — it's long-lived (doesn't expire) and is effectively your Official Account password; if leaked, anyone can send messages as you

(Source: LINE Developers – Channel access token)

Token format example (the real one is much longer):

eyJhbGciOiJIUzI1NiJ9.....long string....abcDEF123

Step 2: Set Up AppSheet Automation

Next, set up automation in AppSheet to call the LINE Messaging API when triggered. This part is almost identical to the old tutorial — only the Webhook fields change.

Steps:

  1. Open your AppSheet App
  2. Go to "Automation" page
  3. Click "New Bot" to create new automation

Configure Event (Trigger Condition):

  1. Click "Create a new event"

  2. Event Type select (as needed):

    • Data Change: Trigger on data change
    • Schedule: Scheduled execution
  3. If selecting Data Change:

    • Table: Select table to monitor
    • Data change type: Select Adds only / Updates only / or All changes

Configure Process (Flow):

  1. Click "Add a step"
  2. Select "Call a webhook"

Configure Webhook (this is the biggest change from Notify):

  • Preset: Select "Custom"
  • URL (to send to all friends, use broadcast):
    https://api.line.me/v2/bot/message/broadcast
    
    (To send to a specific target, use https://api.line.me/v2/bot/message/push)
  • HTTP Method: POST
  • HTTP Content Type: Application/JSON (Notify used x-www-form-urlencoded; the Messaging API uses JSON)

Configure Headers:

Click "Add" to add Header:

  • Header Name: Authorization
  • Header Value: Bearer YOUR_CHANNEL_ACCESS_TOKEN

Replace YOUR_CHANNEL_ACCESS_TOKEN with the token from Step 1.

Format is Bearer + space + Token.

Configure Body (JSON):

{
  "messages": [
    { "type": "text", "text": "<<[FieldName]>> message content" }
  ]
}

For push (to a specific target), add a to field at the top level:

{
  "to": "Uxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "messages": [
    { "type": "text", "text": "message content" }
  ]
}

(Source: LINE Developers – Send messages)

Step 3: Configure Message Content

The message text goes in the text field inside the messages array, and can include AppSheet dynamic data.

Basic format:

{
  "messages": [
    { "type": "text", "text": "New Order\n\nCustomer: <<[CustomerName]>>\nAmount: <<[Amount]>>\nNotes: <<[Notes]>>" }
  ]
}

Explanation:

  • \n = Line break (the Messaging API uses \n, not the old Notify %0A)
  • <<[FieldName]>> = Insert that field's value
  • \n\n = Two line breaks (blank line)
  • Tip: if <<...>> inserts free-text a user typed, characters like a double quote " or a newline can break the JSON — clean the source field first

Actual received message:

New Order

Customer: John Smith
Amount: 5000
Notes: Please process urgently

Step 4: Test Notification

Must test after setup is complete.

Test steps:

  1. First make sure you (or a test account) have added the Official Account as a friend (both broadcast and push only reach friends)
  2. Return to AppSheet App main screen
  3. Add a record that matches trigger conditions
  4. Wait a few seconds (usually 5-10 seconds)
  5. Check if LINE received notification

Not receiving?

ProblemPossible CauseSolution
401 UnauthorizedToken wrong or invalidatedReissue the long-lived token on the "Messaging API" console tab; confirm the "Bearer " prefix
400 Bad RequestMalformed JSONCheck quotes, commas, and escape characters
Not receiving at allWrong URL or Content-TypeConfirm api.line.me/v2/bot/message/broadcast (or push) and Content-Type application/json
Push not receivedWrong to ID, or recipient isn't a friendConfirm the userId/groupId and that the target added the account; if unsure, use broadcast
Received but no line breaksUsed %0AUse \n inside JSON

Illustration 2: AppSheet Webhook Settings Screen

How to Get a userId/groupId (only needed for push/multicast)

Broadcast needs no IDs — it just goes to all friends. But to push precisely to one person or group, you first need their ID:

  • userId: when a user adds your Official Account as a friend or messages it, LINE delivers a Webhook event containing that user's userId to your configured Webhook URL
  • groupId: after you invite the Official Account into a LINE group, the group event includes the groupId

In other words, obtaining an ID requires a URL that can receive LINE Webhook events (slightly more advanced). If you just want to "notify the team," the easiest path is broadcast — have members friend the account, and you never touch an ID.

Application Scenarios

Practical examples (below use broadcast; for a specific target, switch to push and add to).

Scenario 1: Order Notification

New order comes in, the team immediately gets notified.

Trigger Condition:

  • Table: Orders
  • Event: Adds only (when new order added)

Message Content:

{
  "messages": [
    { "type": "text", "text": "📦 New Order\n\nOrder ID: <<[OrderID]>>\nCustomer: <<[CustomerName]>>\nAmount: $<<[Amount]>>\nTime: <<[CreatedAt]>>\n\nPlease process promptly!" }
  ]
}

Received Message:

📦 New Order

Order ID: ORD-2025-001
Customer: John Smith
Amount: $15,000
Time: 2025-12-15 14:30

Please process promptly!

Scenario 2: Approval Reminder

Leave request submitted, manager gets notification.

Trigger Condition:

  • Table: LeaveRequests
  • Event: Adds only
  • Condition (optional): [Status] = "Pending"

Message Content:

{
  "messages": [
    { "type": "text", "text": "📝 Leave Request\n\nApplicant: <<[EmployeeName]>>\nType: <<[LeaveType]>>\nDates: <<[StartDate]>> ~ <<[EndDate]>>\nReason: <<[Reason]>>\n\nPlease review in the system" }
  ]
}

Scenario 3: Alert Warning

Inventory below safety level, purchasing gets alert.

This is slightly more complex, requiring Automation's conditional logic.

Setup Method:

  1. Event: Schedule (e.g., every morning at 9 AM)
  2. In Process, add "Run a data action"
  3. Execute Action on Products table
  4. In Action, set condition: [Stock] < [SafetyStock]
  5. Only matching items send Webhook

Message Content:

{
  "messages": [
    { "type": "text", "text": "⚠️ Inventory Alert\n\nProduct: <<[ProductName]>>\nCurrent Stock: <<[Stock]>>\nSafety Stock: <<[SafetyStock]>>\n\nPlease restock immediately!" }
  ]
}

For more automation setup, see AppSheet Automation Tutorial.

Scenario 4: Daily Report

Every morning auto-send yesterday's sales summary.

Setup Method:

  1. Event: Schedule

    • Frequency: Daily
    • Time: 8:00 AM
  2. Create a Virtual Column to calculate yesterday's total

  3. Webhook message includes statistics

Message Example:

{
  "messages": [
    { "type": "text", "text": "📊 Daily Sales Report\n\nOrders: <<[YesterdayOrderCount]>>\nRevenue: $<<[YesterdayRevenue]>>\n\nKeep it up!" }
  ]
}

Want more advanced LINE integration? Broadcast suits company-wide alerts; targeted recipients, two-way interaction, and Flex message cards need push plus Webhook event handling.

Schedule technical consultation and let us help evaluate the best integration solution for you.


Advanced Tips

Make LINE notifications smarter.

Conditional Notifications

Not all data needs notification — you can set conditions (this is on the AppSheet side, unrelated to LINE, so it's unchanged).

Example: Only notify for large orders

In Automation's Event, set Condition:

[Amount] >= 10000

This way only orders with amount >= 10000 send LINE.

Example: Only notify specific personnel

[AssignedTo] = USEREMAIL()

Only notifies the responsible person.

Image Notifications

The Messaging API sends images with an image message object — just add it to the messages array:

{
  "messages": [
    { "type": "text", "text": "New product listed" },
    {
      "type": "image",
      "originalContentUrl": "https://example.com/full.jpg",
      "previewImageUrl": "https://example.com/thumb.jpg"
    }
  ]
}

Note: both originalContentUrl and previewImageUrl must be public HTTPS URLs — LINE won't load HTTP images.

Send Stickers

The Messaging API sends stickers with a sticker message object:

{
  "messages": [
    { "type": "sticker", "packageId": "446", "stickerId": "1988" }
  ]
}

Available sticker IDs: https://developers.line.biz/en/docs/messaging-api/sticker-list/

Group Notifications

Send to a LINE group instead of an individual.

Setup Method:

  1. Invite your LINE Official Account into the target group
  2. Get the group's groupId from the group's Webhook event
  3. Use the push endpoint with to set to the groupId

Notes:

  • push takes only one to at a time (one userId or groupId)
  • All group members see the notification
  • If you'd rather not handle groupIds, use broadcast and have members friend the account

Multi-Target Notifications

Notify multiple people or groups at once.

  • multicast: pass to as an array of userIds, sent in one call
    {
      "to": ["Uxxxx1...", "Uxxxx2...", "Uxxxx3..."],
      "messages": [ { "type": "text", "text": "message content" } ]
    }
    
    Endpoint: https://api.line.me/v2/bot/message/multicast
  • broadcast: goes to all friends, least effort

Illustration 3: LINE Notification Actual Screen

Common Questions

Does LINE Notify still work?

No. LINE Notify was officially retired on 2025-03-31, and its domains (notify-bot.line.me, notify-api.line.me) are shut down. Use the LINE Messaging API instead — the method taught in this article.

Is the LINE Messaging API free?

A LINE Official Account includes a monthly free message quota; beyond that you pay per plan. The free allowance and plan prices vary by region and change over time, so check LINE's official Official Account pricing page for exact numbers — this article won't guess them.

What if I lose or leak the channel access token?

Go to LINE Developers Console → "Messaging API" tab → Reissue the long-lived channel access token; reissuing immediately invalidates the old one. Then update the Authorization header in your AppSheet webhook.

Recommendation: store the token somewhere secure — never in a public repo or message.

Can I send to specific users?

Yes. Use the push endpoint with to set to the user's userId (obtained from a Webhook event). When you don't need a specific target, broadcast to all friends is simplest.

Does AppSheet need a paid plan to use Webhook?

Yes. Webhook is an Automation feature, requires Starter plan or above.

For detailed pricing, see AppSheet Pricing Guide.

Is there a message length limit?

A single Messaging API text message holds far more characters than the retired LINE Notify — more than enough for typical notifications. See LINE's official Message objects docs for the exact limit.

Why aren't line breaks in messages working?

Inside the Messaging API JSON, line breaks use \n (an escape character), not the URL-encoded %0A from the Notify era.

Can I receive user replies?

Yes — this is exactly where the Messaging API beats the retired Notify. It supports receiving user messages via Webhook, enabling query bots, approval replies, and full chatbots.

For advanced Webhook setup, see AppSheet API Integration Guide.

FAQ

Q1: LINE Notify vs LINE Messaging API — which should I use for AppSheet notifications?

LINE Notify is no longer an option — it was shut down on March 31, 2025. The LINE Messaging API is the current, official way to send LINE notifications, and it's more capable than Notify ever was. Within the Messaging API, choose the send method by need: (A) broadcast — sends to everyone who friended your LINE Official Account; no recipient IDs to manage; the simplest drop-in for team-wide alerts; (B) push — sends to one specific userId or groupId; most precise, but you first obtain the ID from a Webhook event; (C) multicast — one call to an array of specific userIds. Setup: create a LINE Official Account, enable the Messaging API, issue a long-lived channel access token from the console's Messaging API tab, then point an AppSheet "Call a webhook" step at https://api.line.me/v2/bot/message/broadcast (or /push) with an Authorization: Bearer {token} header and a JSON body. Decision: internal team notifications → broadcast (easiest); customer-facing or targeted sends → push; batch of known recipients → multicast; two-way chatbot → Messaging API with Webhook event handling.

Q2: Why does my AppSheet Bot send LINE notifications to the wrong person?

Three common causes with the Messaging API. (1) Wrong send method — if you use broadcast, it goes to every friend of the Official Account, not one person; for a single recipient use push with a to field. (2) Stale or wrong to ID — a userId/groupId is obtained from a Webhook event and is specific to your channel; hardcoding one sends to that target only. Fix: store per-user userIds in an AppSheet table and look up the right one on each Bot run. (3) Missing per-record recipient — if the Bot triggers on a record change, add a "Notify_UserId" column to the record and reference it in the webhook body, rather than a single global value. Debug technique: add a "Debug_Log" action before the LINE send that writes "Sending to [id/method]" to a log table, making recipient routing visible.

Q3: Can AppSheet send LINE notifications with images from the database?

Yes, via an image message object with public URLs. The Messaging API uses {"type":"image","originalContentUrl":"...","previewImageUrl":"..."} inside the messages array. Implementation steps: (1) store images in AppSheet using an Image column type; (2) images hosted by AppSheet get a URL — expose them via "Public" sharing so LINE can fetch them; (3) put the public HTTPS URL into both originalContentUrl and previewImageUrl; (4) LINE renders the image in the notification. Common issue: "Image not showing": (A) the URL requires authentication — use Public sharing; (B) the file is too large — resize before upload; (C) the URL is HTTP — LINE only loads HTTPS. Privacy consideration: images sent through LINE pass through LINE servers; don't send sensitive personal photos without consent.

Q4: Is there a rate limit for LINE notifications from AppSheet?

Yes, both LINE and AppSheet impose limits. (1) LINE Messaging API — a LINE Official Account includes a monthly free message quota, with paid tiers above it; per-endpoint request rate limits also apply. Exact free allowance and pricing vary by region and change over time, so confirm on LINE's official pricing page rather than trusting a fixed number. (2) AppSheet Bot limits — action quotas vary by plan tier; each webhook counts against your action quota. (3) Timeout — AppSheet webhooks time out around 30 seconds; the LINE API typically responds within a few seconds, but retry logic helps with transient failures. Handling limits: (A) batch — combine multiple events into one message; (B) exponential backoff — retry with increasing delays on 429 errors; (C) use scheduled Bots instead of event-driven for bulk sends; (D) prefer broadcast/multicast over many individual pushes for high volume.

Q5: Can we track whether LINE notifications were read/opened by users?

Not directly, but workarounds exist. The Messaging API does not provide read receipts for push/broadcast messages. Track engagement instead via: (A) click-tracking URLs — use a URL shortener or UTM parameters in links inside messages; a click tells you the message was engaged; (B) Quick Reply buttons — a tap sends a postback Webhook event you can log; (C) Webhook events for user replies — if the user responds, you know they read it. Best practices: (1) include a unique tracking parameter per user in message URLs (e.g., ?notif_id=12345&user_id=user_abc); (2) log clicks in AppSheet tables via a callback endpoint; (3) use the LINE Official Account Manager's analytics for aggregate delivery/engagement metrics. Because the Messaging API supports interaction events (postbacks, replies), it gives you far more auditability than the retired Notify's fire-and-forget model.


Next Steps

With LINE notifications set up, your App can instantly notify users.

Continue Learning

Implementation Recommendations

  1. Test before going live: Confirm the JSON body and recipient are correct
  2. Don't send too many: Avoid notification spam — only send important ones, and save your message quota
  3. Keep the token secure: a leaked channel access token lets others send as your Official Account
  4. Start with broadcast: if you're unsure how to get IDs, begin with broadcast, then graduate to push

Need More Advanced LINE Integration?

The Messaging API can satisfy most notification needs. If you want fuller two-way interaction, auto-replies, and Flex message cards, we can help you plan it.

Common advanced needs:

  • Users query inventory in LINE
  • Manager approves leave directly in LINE
  • LINE chatbot answers common questions
  • Integration with the Official Account's rich menu and Flex messages

Schedule technical consultation and let us help build a complete LINE integration solution.


References

  1. LINE Developers – Messaging API overview: https://developers.line.biz/en/docs/messaging-api/
  2. LINE Developers – Send messages (push/multicast/broadcast): https://developers.line.biz/en/docs/messaging-api/sending-messages/
  3. LINE Developers – Channel access token: https://developers.line.biz/en/docs/basics/channel-access-token/
  4. LINE Developers – LINE Notify shutdown announcement (2025-03-31): https://developers.line.biz/en/news/2025/04/01/line-notify/
  5. AppSheet Documentation – Call a webhook

Need Professional Cloud Advice?

Whether you're evaluating cloud platforms, optimizing existing architecture, or looking for cost-saving solutions, we can help

Book Free Consultation

Related Articles