我尝试在Heroku上运行用PHP创建的LINE BOT


介绍

这是2018年Meister来临日历第8天的文章。
我是正准备毕业的大学实习生masaki-ogawa。
这是《大姐》第8天的文章,但我想写一整年我亲自研究的LINEBOT

制作LINE BOT

时指的是什么

让我们做一个LINE BOT!我提到了使用Messaging API的聊天机器人的基础知识和用法示例。

LINE BOTを作ろう! Messaging APIを使ったチャットホ?ットの基礎と利用例.jpg

我推荐它,因为它非常有帮助。环境构建部分和示例代码非常容易理解和有用。

另外,Messaging API的官方文档也很有帮助。

关于环境建设

有很多关于LINEBOT的文章,并且有许多使用GAS创建无服务器LINEBOT服务器的示例,但是我想使用Heroku,所以我决定使用Heroku。
<铅>

执行环境

  • Macbook Air早期2014
  • 记忆体8GB
  • 处理器Intel Core i5
  • macOS Sierra

开一个Heroku帐户

首先,访问Heroku并转到首页。
在heroku
--PHP
--Node
--Java
--Ruby
--Python
-转到
-斯卡拉
它对应于这种语言。
这次,我选择PHP是因为我所指的书是用PHP编写的,并且因为Your Meister使用PHP并且这是一种熟悉的语言。

首先,创建一个帐户。
登録画面.png
在注册屏幕上输入所需的项目。由于如上所述这次使用PHP,因此在这里选择PHP作为主要的开发语言。
这样就完成了帐户创建。

安装Heroku CLI

不必直接创建LINE BOT,但是在将来的开发过程中检查Heroku日志以及在安装该工具时在本地操作时,有必要安装它,我将其保留。
访问Heroku CLI并通过OS进行安装。

如果安装成功,则

1
2
3
4
5
ogawa:lineBot$ heroku
CLI to interact with Heroku

VERSION
  heroku/7.18.10 darwin-x64 node-v11.1.0

当前版本之类的信息将像

一样返回。

在Heroku

上创建一个新项目

[heroku命令]我继续参考创建来销毁。

这次,我将创建一个名为LINEBOT的目录,如下所示,并将源文件放入其中。

1
2
3
4
5
$ mkdir lineBot

$ cd lineBot

$ touch index.php

将在LINEBOT目录中创建一个空的php文件index.php

1
2
3
4
5
$ git add.

$ git commit -m 'first commit'

$ git push heroku master

使用

,我可以推送一个空文件。

*如果要求您登录,请执行heroku logn,输入注册时使用的电子邮件地址和密码,然后按。

LINE BOT SDK

简介

不需要只返回鹦鹉的BOT,但是对于LINE BOT的将来开发会很方便,因此我们建议安装它。
使用Composer易于安装。

如果未安装Composer,则
我安装了Composer
通过参考安装。

您刚刚创建的LINEBOT目录中的

1
$ composer require linecorp/line-bot-sdk

执行

以完成安装。

1
2
3
4
5
$ git add.

$ git commit -m 'require line-bot-sdk'

$ git push heroku master

一样将其推入Heroku。

向LINE Developers注册

转到

LINE Developers。
ロク?イン.png
单击右上方的登录或屏幕中心的登录。

入力.png
在此屏幕上,输入在LINE帐户中注册的电子邮件地址和密码以登录。

フ?ロハ?イタ?ー.png
登录后,创建一个新的提供程序。这次,我创建了一个名为masaki-ogawa的提供程序。

チャンネル.png
创建一个中间为Messaging API的通道。

画面.png
从此屏幕输入各种信息。

LINE Developers管理屏幕经常更新,因此该屏幕可能与其他文章有所不同,但是输入内容不会改变。截至2018年12月显示此屏幕。

注册完成后,在创建的通道的Webhook URL中指定您先前创建的Heroku应用程序的URL,并记下Channel Secret Channel Access Token。

您也可以检查如何从此文档创建它。

创建一个返回Echolalia

的LINE BOT

IMG_B7444740210C-1.jpeg
创建这样的东西。

检查您需要的数据

当消息从用户发送到BOT时,内容将以JSON格式传递到Webhook URL中指定的URL。
例如,如果文本消息" Hello"是从用户发送的,则您将收到以下JSON。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
  "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
  "type": "message",
  "timestamp": 1462629479859,
  "source": {
    "type": "user",
    "userId": "U4af4980629..."
  },
  "message": {
    "id": "325708",
    "type": "text",
    "text": "こんにちは"
  }
}

由于使用Messaging API发送消息时需要replyToken,因此您可以使用此令牌向用户发送消息等。它还接收UserId,因此您可以从此处获取用户信息,并且可以将有关谁收到消息的信息保存在数据库中。

为了返回消息,仅需要获取接收到的文本的信息,因此可以获取消息中的文本并回复内容。

为返回机器人

的BOT创建代码

在先前创建的index.php中编写以下代码。

index.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
    // Composerでインストールしたライブラリを一括読み込み
    require_once __DIR__ . '/vendor/autoload.php';

    // アクセストークンを使いCurlHTTPClientをインスタンス化
    $httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('Channel Access Token');

    //CurlHTTPClientとシークレットを使いLINEBotをインスタンス化
    $bot = new \LINE\LINEBot($httpClient, ['channelSecret' => 'Channel Secret']);

    // LINE Messaging APIがリクエストに付与した署名を取得
    $signature = $_SERVER["HTTP_" . \LINE\LINEBot\Constant\HTTPHeader::LINE_SIGNATURE];

    //署名をチェックし、正当であればリクエストをパースし配列へ、不正であれば例外処理
    $events = $bot->parseEventRequest(file_get_contents('php://input'), $signature);

    foreach ($events as $event) {
        // メッセージを返信
        $response = $bot->replyMessage(
            $event->getReplyToken(), new \LINE\LINEBot\MessageBuilder\TextMessageBuilder($event->getText())  
        );
    }

使用

SDK,它非常容易实现。使用$event->getReplyToken()获取令牌,并使用$event->getText()获取这次发生的事件的文本。
在这种情况下,如果将令牌和文本传递给replyMessage,则可以创建返回的BOT。

末尾

因为这是开始,所以我想添加一个数据库并保存用户发送的文本。
当前正在创建的LINE BOT是一个LINE BOT,它接受对避难所受害者的请求,因此我们正在创建一个BOT,它允许您输入必要的物资并保存对避难所的请求。
至于我给人的印象,我认为我有一个梦想,可以根据想法进行任何BOT。官方的SDK十分方便。