ロボットとのコミュニケーション課題とチャットボット

Amazon Echoに「アレクサ、本を読んで」と話しかけると、Kindleの本を読み上げる。Google Lensを使うと、カメラに写っている画像の情報を検索する――。

キーボードやスマホのタッチ操作以外の新たなUIが登場しています。

LINEやFecebook Messengerのようなチャットサービスを介してテキスト対話形式でAIを活用する「チャットボット」もそうした新たなUIの一つでしょう。すでに、宅配便の再配達や出前を依頼したり、銀行口座の残高を照会したりできるなど、用途は拡大しています。

そして、チャットボットは、ホワイトカラー業務を自動化する仮想知的労働者(デジタルレイバー : Digital Labor)とのコミュニケーション手段としも注目が集まっています。

RPA導入によりデジタルレイバーと一緒に業務を進めることになると、どのようにコミュニケーションをとるかが問題になります。現段階での有力な選択肢の一つがチャットボットというわけです。

図:人間とデジタルレイバーをつなぐチャットボット

LINE BOT

今回は読者の皆様にとって、おそらく最も馴染みのあるチャットツールであるLINEを使ったLINE BOTを作ってみましょう。

LINEには、メッセージに応答してくれるMessaging APIが用意されており、これを使うとLINE BOTと呼ばれるチャットボットを比較的簡単に構築できます。

今回は、「こんにちは」と話しかけると、「こんにちは正野さん」と自動で回答してくれるようなチャットボットを作ってみましょう。

LINEにて「こんにちは」と入力すると、「Webhooks」というMessaging API経由で、HTTPS POSTにてクラウド(PaaS)環境「Heroku」上のPHPアプリケーションを呼び出します。PHPアプリケーションはLINE Bot SDKを使ってプログラムしており、Reply Messageと呼ばれるMessaging APIを呼び出します。

図:LINEを使ったチャットボット経由でデジタルレイバーと会話するイメージ

上図に示す構成を以下の4つの手順で準備します。

  1. Heroku環境構築(heroku-cliインストール含む)
  2. LINE Bot SDKをインストール
  3. Messaging APIの利用登録と設定
  4. アプリケーション(index.php)作成

 

LINE BOT動作環境(Heroku)の構築

LINE BOTを利用するため、Herokuを準備しましょう。ブラウザから[https://www.heroku.com/]にアクセスします。[SIGN UP FOR FREE]をクリックし、アカウントを作成します。

図:Herokuトップ画面

名前やメールアドレスなどを入力し、[CREATE FREE ACCOUNT]をクリックします。

図:サインアップ画面

アカウント確認用メールが送付されます。登録したメールアドレスに以下のような形式のリンクが掲載されていますので、クリックします。

https://id.heroku.com/account/accept/xxxxxxxx/yyyyyyyyyyyyyyy

パスワード設定画面が表示されますので、パスワードを入力し、[SET PASSWORD AND LOG IN]をクリックするとパスワード設定が完了します。

図:パスワード設定画面

[Click here to proceed as 登録したメールアドレス]リンクをクリックすると、Herokuトップ画面が表示されますので、[Create New App]をクリックします。

図:Herokuトップ画面

[App Name]を設定し、[Create App]をクリックします。これで、herokuアカウントの登録およびアプリケーション登録が完了しました。

図:アプリケーション情報の設定

heroku-cliのインストール

ターミナルからHerokuを操作するためのheroku-cliをインストールします。ターミナルから以下の通りbrewコマンドを投入します。

$ brew install heroku
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).

<中略>

==> Installing dependencies for heroku: icu4c, node
==> Installing heroku dependency: icu4c
==> Downloading https://homebrew.bintray.com/bottles/icu4c-58.2.sierra.bottle.ta
################################################ 100.0%
==> Pouring icu4c-58.2.sierra.bottle.tar.gz
==> Caveats
This formula is keg-only, which means it was not symlinked into /usr/local,
because macOS provides libicucore.dylib (but nothing else).

If you need to have this software first in your PATH run:
  echo 'export PATH="/usr/local/opt/icu4c/bin:$PATH"' >> ~/.bash_profile
  echo 'export PATH="/usr/local/opt/icu4c/sbin:$PATH"' >> ~/.bash_profile

For compilers to find this software you may need to set:
    LDFLAGS:  -L/usr/local/opt/icu4c/lib
    CPPFLAGS: -I/usr/local/opt/icu4c/include

==> Summary
  /usr/local/Cellar/icu4c/58.2: 242 files, 65MB
==> Installing heroku dependency: node
==> Downloading https://homebrew.bintray.com/bottles/node-8.3.0.sierra.bottle.ta
################################################ 100.0%
==> Pouring node-8.3.0.sierra.bottle.tar.gz
Warning: The post-install step did not complete successfully
You can try again using `brew postinstall node`
==> Caveats
Bash completion has been installed to:
  /usr/local/etc/bash_completion.d
==> Summary
  /usr/local/Cellar/node/8.3.0: 4,152 files, 46.8MB
==> Installing heroku
==> Downloading https://homebrew.bintray.com/bottles/heroku-6.13.10.sierra.bottl
################################################ 100.0%
==> Pouring heroku-6.13.10.sierra.bottle.tar.gz
  /usr/local/Cellar/heroku/6.13.10: 6,405 files, 37.3MB

Herokuにログインし、git経由でアプリケーションを登録します。[your_app_name]には、ご自身で[App Name]に設定した値を指定してください。

$ heroku login
$ cd my-project/
$ vi index.php
$ git init
$ heroku git:remote -a your_app_name
$ git add .
$ git commit -am "regist app"
$ git push heroku master

index.phpの内容は以下の通りです。

<?php
echo "Hello World!";
?>

[Open app]をクリックします。

図:アプリケーションへアクセス

Herokuに登録されたアプリケーションにアクセスできます。

図:アプリケーションへのアクセス結果

LINE Bot SDKのインストール

LINE Bot SDKをインストールするため、composerと呼ばれるライブラリ依存関係解決ツールをインストールします。

$ brew install homebrew/php/composer
==> Tapping homebrew/php
Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-php'...
remote: Counting objects: 760, done.
remote: Compressing objects: 100% (590/590), done.
remote: Total 760 (delta 510), reused 225 (delta 161), pack-reused 0
Receiving objects: 100% (760/760), 305.66 KiB | 0 bytes/s, done.
Resolving deltas: 100% (510/510), done.
Tapped 726 formulae (775 files, 1.4MB)
==> Installing composer from homebrew/php
==> Downloading https://homebrew.bintray.com/bottles-php/composer-1.4.2.sierra.b
################################################ 100.0%
==> Pouring composer-1.4.2.sierra.bottle.tar.gz
==> Caveats
      composer no longer depends on the homebrew php Formulas since the last couple of macOS releases
      contains a php version compatible with composer. If this has been part of your workflow
      previously then please make the appropriate changes and `brew install php71` or other appropriate
      Homebrew PHP version.
==> Summary
  /usr/local/Cellar/composer/1.4.2: 5 files, 1.8MB

composerを使ってLINE Bot SDKをインストールします。

$ composer require linecorp/line-bot-sdk
Using version ^2.2 for linecorp/line-bot-sdk
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing linecorp/line-bot-sdk (2.2.0): Downloading (100%)
Writing lock file
Generating autoload files

Messaging APIの利用登録

ブラウザから[https://business.line.me/ja/]にアクセスします。[ログイン]をクリックします。

図:LINE BUSINESS CENTERトップページ

お使いのLINEアカウントでログインします。

図:LINEアカウントでログイン

認証番号が表示されます。スマホ側にて、認証番号を求められますので、入力すると、以下の画面に遷移します。メールアドレスを入力し、[上記に同意して次に進む]をクリックします。

図:メールアドレスの入力画面

名前や電話番号などを入力し、次画面へ遷移します。

図:名前等の入力画面

確認画面にて[LINE Business Centerの公式アカウントと友達になる。]にチェックされていることを確認し、[完了する]をクリックします。

図:確認画面

[アカウントリスト]タブにて、[Messaging API]の[もっと見る]をクリックします。

図:Messaging APIサービス利用開始

[Developer Trialを始める]をクリックします。

図:Developer Trialの選択

アカウント名と業種を入力し、[確認する]をクリックします。確認画面が表示されますので[申し込む]をクリックします。

図:アカウント名と業種の入力

申し込みが完了しました。[LINE@MANAGERへ]をクリックします。

図:申し込み完了

Messaging APIの設定

[Bot設定]にて[APIを利用する]をクリックします※1

※1 1:1トークができなくなるなどの記載がありますが、普段スマホで使っているアカウントでトークができなくなるといった事象は見られませんでした。断言はできませんが、Botで利用するアカウントに限った注意書きだと思われます。

図:API利用開始設定

[リクエスト設定]にて[Webhoot送信]に[利用する]を、[自動応答メッセージ]に[利用しない]を選択し、[保存]をクリックします。

図:リクエストの設定

[Bot設定]から[LINE Developersで設定する]をクリックします。

図:LINE DevelopersでのBot設定

AGREEをクリックします。

図:使用許諾への同意

[Webhook URL]にHerokuのURLを指定し、[SAVE]をクリックします。また、[Channel Secret]の[SHOW]と、[Channel Access Token]の[ISSUE]をクリックし、それぞれ値を控えておいてください。加えて、[QR Code]をスマホから読み取り、チャットボットを友達として追加します。

図:Webhook URLの登録

Messaging APIを動かしてみます。index.phpを以下の通り修正してください。

<?php

require_once __DIR__ . '/vendor/autoload.php';

$inputString = file_get_contents('php://input');
error_log($inputString);

?>

gitでcommit及びpushして登録します。

$ git commit -am "show error log"
$ git push heroku master 

以下の1行目のコマンドにてログを出力できる状態にしたうえで、スマホのLINEにて[テスト]と入力すると、下方のように表示されます。

$ heroku logs --app bot-starter-shono --tail -s app

<中略>

2017-08-11T13:11:29.843744+00:00 app[web.1]: [11-Aug-2017 13:11:29 UTC] {"events":[{"type":"message","replyToken":"dee76e0897ca4b3c9ea3cc7b6182e5e8","source":{"userId":"U6d77ca2c3c130eefc9fd9ce0b2f7bfca","type":"user"},"timestamp":1502457089126,"message":{"type":"text","id":"6528750654160","text":"テスト"}}]}

チャットメッセージ応答アプリケーション

チャットメッセージに応答するアプリケーションを作成します。index.phpを以下の通り修正し、git経由で登録してください。

<?php

require_once __DIR__ . '/vendor/autoload.php';

$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient(getenv('CHANNEL_ACCESS_TOKEN'));
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => getenv('CHANNEL_SECRET')]);
$signature = $_SERVER['HTTP_' . \LINE\LINEBot\Constant\HTTPHeader::LINE_SIGNATURE];
$events = $bot->parseEventRequest(file_get_contents('php://input'), $signature);

foreach ($events as $event) {
  $bot->replyText($event->getReplyToken(), 'こんにちは正野さん');
}

?>

Herokuの[Settings]タブにて[CHANNEL_SECRET]と[CHANNEL_ACCESS_TOKEN]を登録します。設定する値は先ほど控えた値を使います。

図:Herokuの[Setting]タブにて必要情報を登録

スマホでLINEを立ち上げ、[こんにちは] (任意の文字列)と入力すると、[こんにちは正野さん]と表示されます。

図:LINEボットとのHelloWorldレベルの会話

*  *  *

知的労働者からのメッセージを受け、単純なメッセージを返すのみのチャットボットを作ることで、チャットボットのイメージを掴んでいただきました。

現在は、ルールベースのシンプルなAIを用いたRPAが中心ですが、近い将来、機械学習やディープラーニングを用いたものが出てくると想定されます。例えば、IBMのゴールデン・ブリッジ はWatsonを活用し、チャットボットとRPAを組合せてヘルプデスクの負荷を軽減する次世代ユーザサポートを実現しています。

コマンドラインやRPAツールから起動するだけではなく、フランクなやり取りによりRPA操作を実現するチャットボットの重要性が増してくるでしょう。

著者紹介


正野 勇嗣 (SHONO Yuji ) - NTTデータ 課長

2011年頃まで開発自動化技術のR&Dに従事。その後、開発プロジェクト支援やトラブルシューティング等に主戦場を移す。「ソースコード自動生成」に加えて、JenkinsやMaven等の「ビルド自動化」、JsTestDriverやSelenium等の「テスト自動化」を扱うようになり、多様化する開発自動化技術動向に興味。

最近は第四の自動化であるInfrastructure as Code等の「基盤自動化」の魅力に惹かれている。開発自動化技術に関する雑誌・記事執筆も行う。2児のパパ。