Expand my Community achievements bar.

Join us on September 25th for a must-attend webinar featuring Adobe Experience Maker winner Anish Raul. Discover how leading enterprises are adopting AI into their workflows securely, responsibly, and at scale.

LINE in AJO: From First Campaign to Advanced Expression Fragment & Custom Action Use Cases

Avatar

Employee

8/28/25

Introduction

The LINE channel in Adobe Journey Optimizer (AJO) allows you to deliver rich, interactive messages directly to customers. The LINE channel is available through action campaigns or as a node on the journey canvas in Journey Optimizer.

LINE is a messaging app with strong usage in Southeast Asia and Japan. It is considered Japan’s most popular app with 97M users (source: Digital Marketing for Asia).

To learn more about how to use the LINE channel in Journey Optimizer, click hereIn this guide, we’ll start with a simple campaign that sends a LINE Message and then step up to an advanced use case where we combine Custom Actions and Expression Fragments to send dynamic, personalized messages in a Journey.

Use Case #1: LINE Message Campaign

Just like the other native channels in AJO, LINE is fully supported as a native channel, giving you access to all AJO features right out of the box. You can send a wide variety of message types, including text, stickers, images, videos, locations, templates, and even rich flex messages.

Step 1: Configure the LINE Channel

Before you can send any message, you must configure your LINE channel in AJO.
You’ll need:

  • Channel ID

  • Channel Secret

Create Channel Configuration for LINE

By following the steps provided in the LINE channel configuration guide, you can set up the channel configuration for LINE.

Step 2: Create Your First LINE Campaign

  1. Go to CampaignsCreate Campaign.

  2. Choose LINE as the channel.

  3. Select your Audience.

  4. In the Content step, paste Message JSON in the content editor.

Follow the detailed steps to create the LINE Campaign

Example LINE Message JSON:

{
  "messages": [
    {
      "type": "template",
      "altText": "The offer awaits you",
      "template": {
        "type": "buttons",
        "thumbnailImageUrl": "https://d1lfxha3ugu3d4.cloudfront.net/assets/system-images/made/assets/system-images/remote/https_d1lfxha3ugu3d4.cloudfront.net/exhibitions/images/2015_Sneaker_Culture_1._AJ_1_from_Nike_4000W.jpg_600_400.jpg",
        "imageAspectRatio": "rectangle",
        "imageSize": "cover",
        "imageBackgroundColor": "#FFFFFF",
        "title": "Diwali Sale",
        "text": "10% sneaker discount linked to {{profile.personalEmail.address}} email.",
        "actions": [
          {
            "type": "postback",
            "label": "Buy",
            "data": "action=buy&itemid=123"
          },
          {
            "type": "postback",
            "label": "Add to cart",
            "data": "action=add&itemid=123"
          }
        ]
      }
    }
  ],
  "to": "{{channelConfiguration.lineUserId}}"
}

Step 3: Preview, Proof & Publish

  • Use the Proof option to preview the message on your LINE Application.

  • Publish the campaign to send it to your audience.

At this stage, you have successfully sent a LINE Message.

Screenshot_2025-08-14-04-23-09-28_94c3c0214f41e8559bec03caf75c21c7.jpg

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Use Case #2: Custom Actions + Expression Fragments (In Journeys)

Custom Actions with Expression Fragments enable practitioners to go beyond out-of-the-box features, integrate external services, and apply dynamic logic for richer, more personalized experiences.

Now let’s make things dynamic!

LINE isn’t just for festive campaigns like Diwali Sales—it can also be used for practical messages like job notifications. You can send text, stickers, images, videos, templates, and flex messages. This makes LINE a versatile native channel for all your messaging needs.


We’ll fetch real-time Job details from an external API, insert them into an Expression Fragment, and use that in a LINE Message sent via a Journey.

Step 1: Create a Custom Action

A Custom Action lets you connect to an external API from within AJO.

Follow the steps from this detailed document on How to create a custom action.

Example: Fetch the job details from your recruiter API. Sample Response below.

 

{
  "results": [
    {
      "id": 1,
      "job": 1,
      "salary": 1000,
      "desc": "Senior Engg"
    },
    {
      "id": 2,
      "job": 2,
      "salary": 5000,
      "desc": "Senior SDE"
    },
    {
      "id": 3,
      "job": 3,
      "salary": 10000,
      "desc": "Director"
    }
  ]
}

 

 

Step 2: Create an Expression Fragment

An Expression Fragment stores reusable personalization logic.

Follow the steps from this detailed document on How to create an Expression Fragment
Note- Avoid any extra whitespaces in the fragment, as it will render as empty content in your LINE json.

Sample Fragment Content

 

{% let salary = "" %}{% let desc = "" %}{% let job = context.journey.actions.`751c23b5-bbb3-4acb-9cab-b084ca77766d`.results %}{% let job = head(job) %}{% let salary = job.salary %}{% let desc = job.desc %}

 

Step 3: Use the Expression Fragment in a LINE Template Message

When creating the LINE content, instead of static JSON, insert your expression fragment and define the variables.

 

{
  "messages": [
    {
      "type": "template",
      "altText": "The offer awaits you",
      "template": {
        "type": "buttons",
        "thumbnailImageUrl": "https://www.betterteam.com/images/betterteam-free-job-posting-sites-5877x3918-20210222.jpg",
        "imageAspectRatio": "rectangle",
        "imageSize": "cover",
        "imageBackgroundColor": "#FFFFFF",
        "title": "Job Opening",
        "text": "Hi, Job offer for- {{fragment id='ajo:663c82b9-2053-49cf-a7e2-4d682fd6bed6' mode='inline'}}{{{desc}}} with salary Rs {{fragment id='ajo:663c82b9-2053-49cf-a7e2-4d682fd6bed6' mode='inline'}}{{{salary}}}/-",
        "actions": [
          {
            "type": "postback",
            "label": "Apply Now",
            "data": "action=add&itemid=123"
          }
        ]
      }
    }
  ],
  "to": "{{channelConfiguration.lineUserId}}"
}

 

 

Now the message is fully dynamic.

Step 4: Use in a Journey

  1. Go to JourneysCreate Journey.

  2. Add an Audience.

  3. Add your Custom Action step to fetch Job data.

  4. Add a LINE Campaign Action with the expression fragment content.

Screenshot 2025-08-14 at 4.39.45 AM.png

 

Step 5: Reporting & Insights

Key metrics:

  • Delivered count

  • Failed count and failure reasons

  • HTTP Status Code returned by LINE API

  • Exclusion Reasons (e.g., audience not eligible, consent not given)

  • Click Tracking count for Flex Message buttons

Screenshot 2025-08-14 at 4.45.55 AM.pngScreenshot 2025-08-14 at 4.46.40 AM.png

 

At this stage again, you have successfully sent a LINE Message.
Screenshot_2025-08-14-04-49-31-88_94c3c0214f41e8559bec03caf75c21c7.jpg

 

Conclusion

By starting with a simple Flex message and moving into custom actions with expression fragments, you unlock real-time personalization in LINE campaigns.
With this setup, your LINE messages can adapt to customer behavior, inventory updates, or any external data you connect.