LoginSignup
27

More than 5 years have passed since last update.

Messaging APIで会話ができるLINE BOTを作ってみた(PHP + さくらVPS + docomo API)

Last updated at Posted at 2016-11-05

9月末にLINEから発表されたLINE BOTが作れるMessaging APIを使って、簡易的な会話ができるBOTを作ってみました。

S__11231236.jpg

以下の環境を用いて動かします。
- LINE developer
- PHP (参考資料が多かったので)
- さくらVPS
- docomo API

LINE developers設定

ここが一番面倒な作業になります。(僕もここで一番つまりました...)
まずはLINE BUSINESS CENTERでアカウントを作成。

「アカウントリスト」から「ビジネスアカウントを作成」を選択。すると以下のページにいきます。ここから「一般アカウントを始める」を選択。
※僕の場合ここで「認証済みアカウントを申し込む」を選択してしまい詰まりました。今回は無料の「一般アカウント」を使用します。
スクリーンショット-2016-11-05-8.56.28.jpg

そしてBotの名前と業種を選択して、アカウントを申し込み登録。
アカウントリストにて自分のアカウントができていることを確認。Messaging APIを申し込みを行います。ここから、LINE MANAGERのページへ。

スクリーンショット-2016-11-05-9.27.15.jpg

LINE MANAGER設定

「アカウント設定」→「Bot設定」を選択し、以下の画面の設定を行ってください。
※「利用可能なAPI」がREPLY_MESSAGEになっていることを確認。もしPUSH_MESSAGEが入っている場合は有料のアカウントが必要になるため、無料のアカウントではJSONが返ってきません。

スクリーンショット-2016-11-05-9.27.15.jpg

LINE deveroper設定

①PHPを置いているサーバのURLを設定。
https://【さくらのアカウント名】.sakura.ne.jp/LineBot/MessagingBot/callback.php

②サーバはSSL認証があるもの(さくらVPSはデフォルトで設定済)
Cannel Access Tokenは後ほど使います。
スクリーンショット-2016-11-05-9.27.153.jpg

これでLINEの設定は完了です。

さくらVPS

さくらのサーバコントロールパネルから、ドメイン設定のペーシを開きます。サクラのVPSではデフォルトでSSLを利用できる設定になっていると思います。
スクリーンショット-2016-11-05-9.27.154.jpg

もしSSLの設定が利用中になっていない場合は「変更」から、共有SSLの設定にチェックを入れればOK!
スクリーンショット-2016-11-05-9.ふぁえ27.152.jpg

実行ファイルを配置

さくらのファイルマネージャーを開きます。LINE developerで設定した階層に実行ファイルを配置してあげます。

https://【さくらのアカウント名】.sakura.ne.jp/LineBot/MessagingBot/callback.php

スクリーンショット-2016-11-05rdh-9.27.152.jpg

docomo Developer登録

あと少しです...。docomoのオープン化している会話APIを使うためには、アカウント登録が必要になります。
docomo Developer https://dev.smt.docomo.ne.jp/?p=index
スクリーンショット-2016-11-05ふぁえr-9.27.152.jpg

登録完了後、API Keyを使用して、BotがPOSTするメッセージを取得します。これであとは、PHPのプログラムを書いてあげれば完了です。

ユーザーのメッセージに対しての返事を返すプログラム (PHP)

callback.php
<?php

$accessToken = '【Cannel Access Tokenの値を使用する】';

//ユーザーからのメッセージ取得
$json_string = file_get_contents('php://input');
$jsonObj = json_decode($json_string);

$type = $jsonObj->{"events"}[0]->{"message"}->{"type"};
//メッセージ取得
$text = $jsonObj->{"events"}[0]->{"message"}->{"text"};
//ReplyToken取得
$replyToken = $jsonObj->{"events"}[0]->{"replyToken"};

//メッセージ以外のときは何も返さず終了
if($type != "text"){
    exit;
}

//docomo返信
$response = chat($text);

//返信データ作成
$response_format_text = [
    "type" => "text",
    "text" => $response
    ];

$post_data = [
    "replyToken" => $replyToken,
    "messages" => [$response_format_text]
    ];

$ch = curl_init("https://api.line.me/v2/bot/message/reply");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json; charser=UTF-8',
    'Authorization: Bearer ' . $accessToken
    ));
$result = curl_exec($ch);
curl_close($ch);



//ドコモの雑談APIから雑談データを取得
function chat($text) {
    // docomo chatAPI
    $api_key = '【docomoのAPI Keyを使用する】';
    $api_url = sprintf('https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue?APIKEY=%s', $api_key);
    $req_body = array('utt' => $text);

    $headers = array(
        'Content-Type: application/json; charset=UTF-8',
    );
    $options = array(
        'http'=>array(
            'method'  => 'POST',
            'header'  => implode("\r\n", $headers),
            'content' => json_encode($req_body),
            )
        );
    $stream = stream_context_create($options);
    $res = json_decode(file_get_contents($api_url, false, $stream));

    return $res->utt;
}

以上で完成です!さくらのVPSはすでに動いているサーバであればすんなりと設定できるのですが、アカウント作成したばかりだと設定が変更されるまでに時間がかかったりますので、注意が必要かもしれません。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27