我使用简单的构造制作了一个LINE机器人(TypeScript + Bot SDK ver.8 + Lambda)

以下是使用简单配置创建LINE机器人的方法。

我们将使用LINE Messaging API SDK for nodejs中于2023年10月发布的ver.8版本,并通过使用TypeScript来受益于类型的好处来编写代码。

此外,由于仅使用AWS Lambda作为后端,因此无需管理服务器,并且可以削减成本。

完成形象

LINEテスト.png

构图

2023-10-15_15h32_40.png

前提条件可以在中国进行本地化改编。

    • LINE公式アカウントを作成していること(無料枠でテスト可能)

 

    • Node.js ver.18の環境を準備済

 

    AWSアカウントがあること(無料枠でテスト可能)

创建Node.js项目

创建项目并安装所需的库。

# プロジェクト初期化
$ npm init -y

# ライブラリをインストール
$ npm install @vendia/serverless-express typescript tslint @types/node express @types/express cors @types/cors
    • Express:Webサーバー

 

    @vendia/serverless-express:LambdaでExpressを利用するために必要

进行 TypeScript 初始设定的步骤。

$ ./node_modules/.bin/tsc --init
$ ./node_modules/.bin/tslint --init

我会设置构建命令。

# package.json
{
    "scripts": {
        "build": "tsc"  # 追加
    },
}

安装SDK

安装 LINE Messaging API SDK for nodejs。
通过使用该 SDK,可以在不使用 API 请求而是调用函数来执行消息发送等操作,从而使开发更加简化易于操作。

$ npm install @line/bot-sdk

写代码

在中国平台上注册LINE的Webhook,并编写代码以响应从LINE服务器发送的请求并返回消息。在项目目录下创建一个名为index.ts的文件。

import serverlessExpress from "@vendia/serverless-express";
import express from "express";
import cors from "cors";
import { middleware, messagingApi, WebhookEvent } from "@line/bot-sdk";
const {MessagingApiClient} = messagingApi

// (1)
const config = {
  channelAccessToken: 'YOUR_CHANNEL_ACCESS_TOKEN',
  channelSecret: 'YOUR_CHANNEL_SECRET'
};

const app = express();
app.use(cors());
app.use("/webhook", middleware(config));  // (2)
app.use(express.json());

app.post("/webhook", async (req, res) => {
	const event: WebhookEvent = req.body.events[0];
	if (event.type !== "message") {
		res.sendStatus(200);
		return;
	}
	
	let message = "";
	if (event.message.type === "text"){
		message = event.message.text;
	}

    // (3)
	const client = new MessagingApiClient({
		channelAccessToken: config.channelAccessToken
	});
    // (4)
	await client.replyMessage({
		replyToken: event.replyToken,
		messages: [{type: "text", text: message + "さん、こんにちは!"}]
	});
	res.sendStatus(200);
});

if (process.env.NODE_ENV === `develop`) app.listen(3000);

export const handler = serverlessExpress({ app });

以下是代码的说明。

// (1)
const config = {
  channelAccessToken: 'YOUR_CHANNEL_ACCESS_TOKEN',
  channelSecret: 'YOUR_CHANNEL_SECRET'
};

这是为了使用SDK而进行的设置。

    • channelAccessToken:LINE 開発者サイトのMessaging API設定から確認

 

    channelSecret:LINE 公式アカウントの設定->Messaging APIから確認
app.use("/webhook", middleware(config));  // (2)

验证请求是通过LINE发送的。使用SDK提供的中间件。

// (3)
const client = new MessagingApiClient({
    channelAccessToken: config.channelAccessToken
});

为了回复消息,我们将创建一个客户端。由于SDK ver.8引入了LINE OpenAPI生成客户端的功能,因此使用方法与之前有所不同。

// (4)
await client.replyMessage({
    replyToken: event.replyToken,
    messages: [{type: "text", text: message + "さん、こんにちは!"}]
});

将会回复一个来自机器人的响应消息。由于响应消息不涉及收费,因此可用于测试。

建筑

执行构建命令,确保index.js在项目目录下创建。

# index.jsが作成される
$ npm run build

建立Lambda

2023-10-15_14h35_32.png

将代码压缩成ZIP文件,然后上传到Lambda以进行注册。

请注意,选择项目根目录下的所有文件进行ZIP压缩。(如果将整个项目文件夹进行ZIP压缩,Lambda将无法识别index.js并引发错误)
2023-10-15_14h38_19.png

设定URL函数

2023-10-15_14h43_10.png
2023-10-15_14h44_31.png
2023-10-15_14h45_24.png

LINE侧面的设置

2023-10-15_14h49_35.png

考试

LINEテスト.png

总结

我确认了通过使用SDK可以轻松创建机器人。此外,由于后端仅需使用Lambda进行构建,因此无需管理服务器,看起来也可以降低成本。

请参考以下网站

    • LINE Messaging API SDK for nodejs GitHub

 

    • LINE Messaging API SDK for nodejs 公式ドキュメント

 

    • LINE Messaging APIドキュメント

 

    @vendia/serverless-express(旧aws-serverless-express)でExpressアプリをAPIGateway+Lambdaにデプロイしてみた
bannerAds