Hey there, fellow developer! Ready to dive into the world of Line API integration? You're in for a treat. Line's powerful messaging platform opens up a whole new realm of possibilities for your apps, and with the @line/bot-sdk
package, it's easier than ever to get started. Let's jump right in!
Before we get our hands dirty, make sure you've got:
Got all that? Great! Let's move on to the fun stuff.
First things first, let's get our project off the ground:
mkdir line-bot-project cd line-bot-project npm init -y npm install @line/bot-sdk express dotenv
Now, let's keep things tidy with environment variables:
touch .env
Add your channel credentials to the .env
file:
CHANNEL_ACCESS_TOKEN=your_access_token_here
CHANNEL_SECRET=your_channel_secret_here
Create a config.js
file to load these variables:
require('dotenv').config(); module.exports = { channelAccessToken: process.env.CHANNEL_ACCESS_TOKEN, channelSecret: process.env.CHANNEL_SECRET };
Time to bring in the big guns. In your main file (let's call it index.js
), add:
const line = require('@line/bot-sdk'); const config = require('./config'); const client = new line.Client(config);
Let's set up our Express server and webhook:
const express = require('express'); const app = express(); app.post('/webhook', line.middleware(config), (req, res) => { Promise .all(req.body.events.map(handleEvent)) .then((result) => res.json(result)) .catch((err) => { console.error(err); res.status(500).end(); }); }); const port = process.env.PORT || 3000; app.listen(port, () => { console.log(`listening on ${port}`); });
Now for the heart of our bot - the event handler:
function handleEvent(event) { if (event.type !== 'message' || event.message.type !== 'text') { return Promise.resolve(null); } return client.replyMessage(event.replyToken, { type: 'text', text: event.message.text }); }
This simple echo bot is just the beginning. Feel free to get creative!
Want to spice things up? Try sending rich messages:
function sendRichMessage(replyToken) { return client.replyMessage(replyToken, { type: 'template', altText: 'This is a buttons template', template: { type: 'buttons', thumbnailImageUrl: 'https://example.com/bot/images/image.jpg', imageAspectRatio: 'rectangle', imageSize: 'cover', imageBackgroundColor: '#FFFFFF', title: 'Menu', text: 'Please select', defaultAction: { type: 'uri', label: 'View detail', uri: 'http://example.com/page/123' }, actions: [ { type: 'postback', label: 'Buy', data: 'action=buy&itemid=123' }, { type: 'postback', label: 'Add to cart', data: 'action=add&itemid=123' } ] } }); }
Don't forget to implement proper error handling and logging. Your future self will thank you!
client.pushMessage(userId, message) .then(() => { console.log('Message sent successfully'); }) .catch((err) => { console.error('Error sending message:', err); });
Time to see your creation in action! Use the Line Official Account Manager to chat with your bot. If things aren't working as expected, don't sweat it. Check your server logs and use console.log
liberally - they're a developer's best friends.
When you're ready to show your bot to the world, remember to update your webhook URL in the Line Developer Console to your production server's address. And don't forget to set your environment variables in your production environment!
And there you have it! You've just built a Line bot from scratch. Pretty cool, right? This is just the tip of the iceberg - there's so much more you can do with the Line API. Why not try implementing more complex interactions or integrating with other services?
Remember, the best way to learn is by doing. So go forth and code! And if you get stuck, the Line Developer Documentation and the @line/bot-sdk
GitHub page are excellent resources.
Happy coding, and may your bot bring joy to Line users everywhere!