介绍

如果你不带伞出门,下午开始下雨,你可能会遇到麻烦。
早上能看到天气预报就好了,就是有点麻烦。

因此,我决定使用 AWS 的免费配额制作一个 LINE Bot 来通知自己。
这就像早上从天气预报网站自动抓取数据,如果预报下雨,就会发出“我今天需要一把雨伞”之类的信息。能够通知火车延误也很有用。 (似乎这样的服务已经存在。)

本期内容

到目前为止,我还没有接触过 AWS 或 Line API,所以我将从简单的部分开始,然后从实现开始。
在本文中,我搭建了如图所示的AWS环境。
两个 Lambda 函数如下。使用的语言是 Python。

  • 对于回复(reply_message 函数):简单的鹦鹉返回函数
  • 用于传递(push_message 功能):传递固定短语

AWSで自分用のLINE Botを作った①

执行

要创建 LINE Bot,首先需要登录 LINE 开发者控制台并创建频道。如何创建频道在下面的官方文档中有描述。

这一次,我们使用的是消息传递 API。然后您将能够设置 Webhook URL(从 LINE 平台向机器人发送事件时的目标 URL)。
通过在此 Webhook URL 中指定调用 reply_message 函数的 API Gateway 的 URL,您将能够回复注册用户的聊天。

AWS Lambda 实施

Python SDK

为了创建 LINE 机器人,有如下消息 API SDK。

由于这次我们将使用 Python,因此我们将在此处使用官方的 Python SDK。

用 Lambda 使用外部包似乎有几种方法,但这次我们采用了使用 Lambda 层的方法。通过将压缩包上传到层,您可以将包与多个 Lambda 共用。
Lambda 在层的 python 目录中加载包。因此,使用以下命令创建一个 zip 文件并将其上传到准备好的层。

#pythonディレクトリにパッケージをインストール
$ pip install line-bot-sdk -t ./python

#pythonディレクトリごとzip化(ファイル名は何でも良い)
$ zip -r extra_package.zip ./python/

(补充)开发环境

  • Ubuntu 20.04.4 LTS
  • Python 3.10.4
  • line-bot-sdk 包 2.3.0
  • Lambda 运行时 python3.9

回复消息功能

首先,实现一个具有简单鹦鹉返回函数的reply_message 函数。
作为初步准备,请参阅上面准备的层。还要添加以下环境变量:这两个值都可以从 LINE Developers 控制台获取。

  • CHANNEL_ACCESS_TOKEN:频道访问令牌(我这次用的是长寿命版)
  • CHANNEL_SECRET:频道密码

reply_message 函数中注册的源码如下。我正在实施一个流程,以便在收到短信时发回相同的文本。

是mb。 py
import os

from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import InvalidSignatureError
from linebot.models import MessageEvent, TextMessage, TextSendMessage

# LINE BotのAPI
line_bot_api = LineBotApi(os.environ['CHANNEL_ACCESS_TOKEN'])
# Webhook(メッセージ等のイベント)のハンドラー
handler = WebhookHandler(os.environ['CHANNEL_SECRET'])


def lambda_handler(event, context):
    # LINE Platformから送信されるリクエストの署名とボデイ
    signature = event['headers']['x-line-signature']
    body = event['body']

    # ハンドラーにより署名を検証してWebhookを処理する
    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        print("Invalid signature. Please check your channel access token/channel secret.")
        return {
            'statusCode': 400
        }

    return {
        'statusCode': 200,
    }


# ハンドラーにテキスト型メッセージを受信した場合の処理を追加
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    # 受信したメッセージに対して同じテキストを返信
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.text))

(补充)关于 webhook

Webhook 是一种将 LINE 平台上发生的事件发送到其他系统的机制。这次,事件将被发送到您指定为 webhook URL 的 reply_message 函数(通过 API 网关)。事件包括关注 LINE Bot 和发送消息。在我们使用的 LINE Bot SDK 中,我们将使用 webhook 处理程序的装饰器来实现对 webhook 事件的处理。

push_message 函数

接下来实现push_message函数,该函数具有传递固定短语的功能。
与 reply_message 函数一样,引用层并注册环境变量作为准备。

push_message 函数中注册的源码如下。当这个 Lambda 函数运行时,它会向我发送一条“Hello World”消息。顺便说一句,您可以从 reply_message 函数的执行日志中检查您的 LINE 用户 ID(如果您使用打印功能输出正文,则可以从 CloudWatch 日志中看到)。

是mb。 py
import os

from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import LineBotApiError
from linebot.models import TextSendMessage

# LINE BotのAPI
line_bot_api = LineBotApi(os.environ['CHANNEL_ACCESS_TOKEN'])


def lambda_handler(event, context):
    # 送信先のLINEユーザーID
    user_id = {自分のLINEユーザID}
    try:
        # メッセージの送信
        line_bot_api.push_message(
            user_id, TextSendMessage(text='Hello World!'))
    except LineBotApiError as e:
        # error handle
        print("Failure push message.")
        return {
            'statusCode': 400
        }

    return {
        'statusCode': 200
    }

操作确认

我将创建的 LINE Bot 注册为朋友并检查了它的操作。
我发送的同一条短信正在回复您。此外,还会传递触发 push_message 功能的固定消息。它似乎工作正常(谢天谢地!)。

AWSで自分用のLINE Botを作った①

综上所述

这一次,我使用 AWS Lambda 和 Python 制作了一个具有简单功能的 LINE Bot。
未来,我想尝试抓取天气信息,这是最初的目的,并使用 DynamoDB 管理用户信息。

(继续)


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308622637.html

相关文章: