This article explains how to send LINE messages from a Klaviyo Flow scenario, connecting email and LINE into a single journey. It walks through setup, pre-launch checks, and notes on delivery timing, in order.
Choosing among the LINE delivery routes
LINE sends from Lumo use one of these routes — Lumo's Message Broadcast, automated sends from a Klaviyo Flow, or LINE notification messages — depending on your goal.
| What you want to do | Route to use |
|---|---|
| Campaign-style mass broadcasts (announcing best-selling products, sale announcements, and so on) | Lumo's Message Broadcast. Specify a Segment built from Klaviyo conditions (lists, properties, ID linkage) as the recipients |
| Scenario-driven automated sends (abandoned cart follow-ups, post-purchase cross-sells, and so on) | A Webhook action in a Klaviyo Flow. This is the method described in this article |
| Transactional notifications you want to reach customers even before they add you (order and shipping confirmations, and so on) | LINE notification messages. The setup is explained in Send LINE Notification Messages from a Klaviyo Flow |
Klaviyo Campaigns (mass sends) have no Webhook action, so you cannot "send LINE from a Klaviyo Campaign." Mass broadcasts go out from Lumo's Message Broadcast. With either route, you can use your Klaviyo Segments as they are, and delivery results (sends, opens, clicks, and so on) are recorded on Klaviyo profiles.
What you can do with LINE delivery from a Klaviyo Flow
With Klaviyo Flow's Webhook action, you can send LINE messages at any point you like within a scenario.
For example, you can build cross-channel scenarios in a single Flow, such as sending a coupon on LINE the day after a welcome email, reminding customers on LINE about products left in their cart, or sending cross-sell recommendations on LINE a few days after a purchase. Even content that is hard to convey by email can be delivered visually through LINE messages that use images and buttons.
The customers you send to must already have completed ID linkage between LINE and Klaviyo. For customers who are not linked, the recipient cannot be identified, so the message will not be delivered.
Get the connection details needed for delivery
You get the full set of connection details to configure in the Klaviyo Webhook action from "Klaviyo Flow connection details" on the auto send message's detail page.
Open "Klaviyo Flow connection details" and select the LINE Official Account to use for delivery, and the following values appear. They become available once the Klaviyo integration is enabled.
| Item | Description |
|---|---|
| Destination URL | The URL to set as the destination of the Webhook action. In Klaviyo, choose POST as the HTTP method |
| Header (Key / Value) | The key and authentication key to set in the Webhook's custom header. They are used to prevent unauthorized requests |
| JSON body | The content the Webhook sends. Copy it as is with "Copy JSON" |
Add a Webhook action to your Klaviyo Flow
Add a Webhook action in your Klaviyo Flow at the position where you want to send a LINE message.
The setup steps are as follows.
- In your Klaviyo Flow, add a Webhook action at the place where you want to send a LINE message
- Choose POST as the method and set the Destination URL
- In the custom header, set the Key and Value you noted
- Paste the content of the message to send into the JSON body
The specific way to set the JSON body is explained next, in "Specify the message to send."
No filter is needed to narrow recipients to ID-linked customers
The Webhook action runs for every customer who reaches that step in the Flow, but Lumo automatically skips sends to customers who are not ID-linked, so you can operate safely without adding a profile filter.
- Klaviyo does not check whether a customer is ID-linked, so the webhook itself runs for everyone who reaches the step
- When Lumo receives the request, it identifies the recipient and does not send to customers who are not ID-linked (no error occurs, either)
- Messages are never delivered to non-linked customers by mistake
If you want Klaviyo's Sent count to reflect actual recipients
The Sent count shown on Klaviyo's Webhook action is the number of times the webhook ran, not the number of LINE messages actually sent. If you want your reports to show a number closer to the actual recipients, add a Conditional Split just before the Webhook action (for example, the property "LINE User ID" is set) and place the Webhook action on the branch that meets the condition.
Note that if you narrow the entire Flow with a profile filter, email sends in the same Flow are also limited to ID-linked customers. If you want emails to keep going to everyone as before, use a Conditional Split just before the Webhook action instead of a Flow-level profile filter.
Specify the message to send
There are two ways to specify the message to send: using a Lumo Auto Send Message, or specifying the text directly.
When you want to send a polished message such as a product card or a Rich Message, use an Auto Send Message; when you only need a short one-liner, specifying the text directly is simpler.
Use an Auto Send Message (recommended)
When you want to send a polished LINE message such as a product card or a Rich Message, use a Lumo Auto Send Message.
- Create an Auto Send Message in Lumo (you can create one quickly from a template)
- On the Auto Send Message's detail screen, choose "Klaviyo Flow connection details"
- In the dialog that appears, select the LINE Official Account to use for delivery, and the Destination URL, header, and JSON body to configure in the Webhook action appear
- Copy the JSON body with "Copy JSON" and paste it into the request body of the Klaviyo Webhook action
The generated JSON body already includes the merge variable {{ person|lookup:'LINE User ID' }} that specifies the recipient. There is no need to edit it by hand — paste it as-is, and the correct recipient is inserted for each customer who passes through the Flow.
Send text directly
If you only need to send a short text message, you can specify the text directly without preparing an Auto Send Message.
In the JSON body you got from "Klaviyo Flow connection details", delete the autoMessageId line and instead specify the text you want to send in messageText. Leave the recipient merge variable {{ person|lookup:'LINE User ID' }} in place.
Note that merge variables in the {{ data.keyName }} format are for LINE notification messages only. They cannot be used in the regular LINE message delivery described in this article.
Showcase products with product cards
With a product card (the "Products" card type of Card Type Messages), you can automatically assemble card-format messages that include a product image, product name, and button.
Add a product card as a Card Type Message when creating an Auto Send Message. How products are selected (the data source) falls into two broad types.
Trigger products
This data source assembles cards from the product information contained in the event that triggered the Flow. Choose "Trigger products" as the product card's data source, then pick the template that fits your use case.
| Template | Use |
|---|---|
| "Abandoned cart follow-up" | Reminds customers of the products left in their cart, with images. A variable that inserts a cart-recovery URL is also available |
| Browse reminders, low-stock alerts, and more | In Flows triggered by product views or stock status, assembles cards for the products in question |
Content feeds
This data source automatically selects products that match the feed's conditions from your store's product data and assembles the cards. Choose "From a content feed (auto)" as the product card's data source, then select the content feed to use.
| Feed type | Products featured |
|---|---|
| "Best sellers" | Products with strong sales records |
| "Newest" | Recently added products |
| "On sale" | Products on sale |
| "Hand-picked" | Products you choose (up to 10) |
The product data used by content feeds syncs directly from your Shopify store. To use them, install the Lumo app on both Klaviyo and Shopify.
Notes on using "Best sellers"
Best sellers selects products based on sales records, so products with no sales are not shown. In stores that still have little sales data — such as right after opening — there may be no products to show, and the message may display as text only. In that case, the fallback products are shown instead. Right after launch, we recommend using a "Newest" feed or fallback products, then switching to "Best sellers" once sales data has accumulated.
With any data source, you can set the title, body, button text, maximum number of products, and more. The Auto Send Message you create can be built into the Webhook action via "Klaviyo Flow connection details".
How duplicate sends of the same message are prevented
The JSON body generated under "Klaviyo Flow connection details" includes a deduplication key (idempotencyKey), which automatically prevents duplicate sends even when the same event arrives repeatedly.
- In abandoned cart follow-up, order confirmation, and shipping confirmation Flows, a key based on the checkout or order number is set automatically. Even if Klaviyo resends a Webhook or a Flow fires twice, the same customer does not receive the same message twice within 24 hours
- Browse reminder, low-stock, and restock Flows do not carry a key. This is so that legitimate repeat delivery — such as when the same customer views the same product again — is not blocked
- If you are using a JSON body you obtained earlier, get the latest JSON from "Klaviyo Flow connection details" and paste it again to enable this
Check behavior before going live
Before you publish the Flow, verify your setup with Payload Preview and a test send.
The verification steps are as follows.
- In the Klaviyo Webhook action, open Preview Webhook (Payload Preview) and confirm that actual values are merged into each field, such as the recipient and the product information
- Run a test send and confirm on a real device that the message arrives on your own LINE and that the card-format message displays correctly
- If everything looks good, set the Flow to Live
- After saving, reopen the Flow screen and check that the Webhook action has not reverted to Draft. If it remains in Draft, messages will not be sent
About delivery timing
Sends from a Klaviyo Flow can have a time lag between when the event occurs and when the message is actually sent.
Because Klaviyo batches event ingestion and Flow processing internally, it can take anywhere from tens of minutes to about an hour before the Webhook action runs. This is due to how Klaviyo works; Lumo sends to LINE promptly as soon as it receives the request from Klaviyo.
- To verify that your setup is correct, use Payload Preview and a test send rather than waiting for an actual delivery
- If more than 6 hours pass between when the event occurs and when it is ingested into Klaviyo, the Flow will not be triggered for that event (this is Klaviyo's specification)
Regenerate the authentication key
When there is a possibility that the authentication key has leaked, for example, you can regenerate it from the "Link IDs from Flows" section on the Klaviyo integration settings screen.
Choose "Regenerate auth key", then choose "Regenerate" in the confirmation dialog. Once regenerated, the old authentication key immediately stops working. In every Klaviyo Flow Webhook you use for LINE delivery or ID linking, be sure to update the custom header Value to the new authentication key. If you forget to update it, LINE delivery will stop with an authentication error.
When things do not work
Common problems with Flow delivery and how to address them are listed below.
| Symptom | What to check |
|---|---|
| The message is not delivered | First, check that the recipient customer has completed ID linkage between LINE and Klaviyo. For customers who are not linked, the recipient cannot be identified |
| The message arrives late | Due to processing on the Klaviyo side, it can take anywhere from tens of minutes to about an hour before the Webhook runs. This is not a problem with Lumo. Verify your setup with Payload Preview and a test send |
| The Flow does not send | Check that the Webhook action is Live (published). It can revert to Draft after saving |
| You get an authentication error | Check that the Webhook's custom header Key and Value match the values in "Klaviyo Flow connection details". After regenerating the authentication key, the value on the Klaviyo Flow side also needs to be updated |
| The recipient is not merged correctly | Check that the JSON body includes the merge variable {{ person|lookup:'LINE User ID' }}. Content generated under "Klaviyo Flow connection details" includes it automatically |
| Merge variables aren't replaced | Variables in the {{ data.keyName }} format are for LINE notification messages only. They cannot be used in regular LINE message delivery |
| The same message arrived twice | Check that the JSON body includes the deduplication key (idempotencyKey). Getting the latest JSON from "Klaviyo Flow connection details" and pasting it again automatically prevents duplicate sends |
| No products appear on the product card | Best-seller feeds show only products with sales records. In stores with little sales data, use a "Newest" feed or fallback products. Content feeds require product data sync with your Shopify store (installing the Lumo app on the Shopify side) |