我想尝试使用GCE连接到LINE的Messaging API

介绍

我不喜欢LINE,更倾向于使用Slack的人。然而,我周围有很多人频繁使用LINE。为了与他们一起工作,我制作了一个可以使用/提醒等功能的机器人。

我想这次我想要进行那个示威活动。
很抱歉,我并不是这个领域的专家,所以可能会有很多不足之处,请谅解。(对于我们内部使用的事情,只要有所行动就好,这是你也这样认为吧?)

环境

我们将使用Ubuntu和Node.js。

步骤 (Bù

好的,那么现在我想要写下实际的步骤。

创建一个实例

让我们在Compute Engine上创建一个实例。听说US区域的f1-micro可以一直免费使用一个。在这里我们选择Ubuntu 16.04 LTS。据说硬盘空间免费使用最多可达30GB,所以我们就这样吧。

重点是允许流量通过并设置静态的外部IP。请确保可以进行SSH连接。

安装Node.js、Nginx、Certbot和MongoDB。

请立即连接到实例。

$ sudo apt-get install build-essential nodejs npm -y
$ sudo npm install n -g
$ sudo n lts
$ sudo apt-get purge nodejs npm -y
$ sudo apt autoremove -y

作为参考,在Ubuntu上轻松安装最新的Node.js,我们将安装Node.js LTS版本。如果您不喜欢n,请使用其他工具。

下一个,

$ curl http://nginx.org/keys/nginx_signing.key | sudo apt-key add -
$ VCNAME=`cat /etc/lsb-release | grep DISTRIB_CODENAME | cut -d= -f2` && sudo -E sh -c "echo \"deb http://nginx.org/packages/ubuntu/ $VCNAME nginx\" >> /etc/apt/sources.list"
$ VCNAME=`cat /etc/lsb-release | grep DISTRIB_CODENAME | cut -d= -f2` && sudo -E sh -c "echo \"deb-src http://nginx.org/packages/ubuntu/ $VCNAME nginx\" >> /etc/apt/sources.list"
$ sudo apt-get update
$ sudo apt-get install nginx -y

作为参考,在Ubuntu上安装最新的Nginx。(参考:在Ubuntu上安装最新的nginx-Qiita)

$ sudo apt-get update
$ sudo apt-get install software-properties-common -y
$ sudo add-apt-repository ppa:certbot/certbot -y
$ sudo apt-get update
$ sudo apt-get install python-certbot-nginx -y

作为参考,请在Ubuntu 16.04(xenial)上安装Certbot,但请不要获取证书。由于尚无域名,因此无法执行此操作。

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
$ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
$ sudo apt-get update
$ sudo apt-get install mongodb-org -y
$ sudo systemctl enable mongod
$ sudo systemctl start mongod

在Ubuntu上安装MongoDB社区版。

到此为止,以及未来的部分,视情况而定。

$ sudo reboot

请按照步骤操作,至少不应出现错误。如果遇到问题,请重新启动。

获取一个免费的域名

我会获取一个域名。当然,不一定要免费,但这次我决定使用Freenom。

我已经获取了qiita.ga。

编辑 /etc/nginx/conf.d/default.conf

由于不太了解,所以请把这些作为参考而已。我真希望能得到一位Nespe的朋友的帮助。

$ sudo vim /etc/nginx/conf.d/default.conf

请将第三行的localhost替换为刚刚获取的域名,这里是qiita.ga。

$ sudo certbot --nginx

作为一种证明,最终获得了证书。请努力回答英文问题哦。

這樣應該可以使用https了。對於LINE的Webhook來說,安全性是必需的。

写代码

好吧,让我们开始编码吧。虽然我想说这句话,但是觉得麻烦,所以我准备了一个代码库。虽然叫做“boilerplate”,但实际内容有点乱。

$ git clone https://github.com/shamofu/line-bot-boilerplate.git
$ cd line-bot-boilerplate
$ npm install

在执行代码之前,请填写.env文件。
可以通过以下操作获得MONGODB_URI。

$ mongo
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.3
...
> exit

在这种情况下,请将MONGODB_URI设置为mongodb://127.0.0.1:27017/reminder。

CHANNEL_开头的值是从Messaging API的Channel基本设置中获得的。
CHANNEL_SECRET是基本信息>Channel Secret,CHANNEL_ACCESS_TOKEN是消息发送和接收设置>访问令牌(长期)的值。

好了,趁着浏览设置的机会,我们来设置一下Webhook吧。
在这里,我们将消息发送和接收设置>Webhook URL 设置为https://qiita.ga/line/webhook。即https://(域名)/line/webhook。

启动机器人

那么让我们启动机器人吧!这次我们将使用pm2。

$ sudo npm install pm2 -g
$ sudo pm2 startup
$ sudo pm2 start main.js --watch --name=line-bot
$ sudo pm2 save

现在通过重新启动实例,机器人将自动启动。

只需让Nginx识别该机器人。

$ sudo vim /etc/nginx/conf.d/default.conf

比较之下,

    1. 定义上游

 

    设置代理

做吧。 (参考:在Qiita上使用nginx作为反向代理)

首先,放在服务器(server)块的上方。

upstream line-bot {
    server localhost:1124;
}

请在下面追加。

然后是第二个。

location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
}

在…的下面,

location /line {
    proxy_pass http://line-bot;
}

proxy_redirect                      off;
proxy_set_header Host               $host;
proxy_set_header X-Real-IP          $remote_addr;
proxy_set_header X-Forwarded-Host   $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;

请在下面添加注释。

恭喜!

请添加机器人为好友,然后试着这样和它交流。

/remind
簡単なのだ!
イエオイア!
in 10 seconds

预计在10秒后收到与预期相符的消息。
您可以在第一行指定命令,在最后一行指定日期和时间。
可以使用诸如in an hour | 3/9 | 3:34等等的日期和时间格式。 (参考:chrono-node – npm)

总结

辛苦了,起初可能有些难以理解每个人的意思。
但是,比预想的并不难吧。

希望我的自制机器人可以被朋友们使用!但如果不小心把数据库弄炸了的话…唉,万一发生这种情况的话…

广告
将在 10 秒后关闭
bannerAds