LoginSignup
13
16

More than 5 years have passed since last update.

LINE BOT APIで会社のマスコットキャラに命を吹き込む

Last updated at Posted at 2016-04-14

LINEの「BOT API Trial Account」が先着1万名限定で自由に開発できるということなので、ドコモの雑談対話APIと組み合わせて、
弊社School Withのマスコットキャラクター「うぃず吉」に命を吹き込みたいと思います。

うぃず吉

用意するもの

LINE BOT APIアカウントを取得

取得したら下記をメモっておきましょう

  • CHANNEL ID
  • CHANNEL SECRET
  • MID

スクリーンショット_2016-04-14_21_36_20.png

CallBack URLはこんな感じでポート番号まで指定してください。
https://example.com:443/callback

またServer IP Whitelistには用意したWebサーバのIPを入力してください。

ドコモ雑談対話API用アカウントを取得

取得したら下記をメモっておきましょう

  • API Key

スクリーンショット_2016-04-14_21_43_49.png

SSL証明書が設置されたサーバを用意

無料の証明書Let's Encryptは使えませんでした。
HerokuにFixieというアドオンを導入すれば無料で使えるようです。

アプリケーションコード

  • Silex(PHP)
  • Redis

RedisにコンテキストIDを保存するようにします。
ドコモ雑談対話APIにはPHP用のライブラリがあったのでそちらを使います。

index.php
<?php
// 設定
define('DOCOMO_API_KEY', '');
define('DOCOMO_MODE', 'dialog');
define('LINE_CHANNEL_ID', '');
define('LINE_CHANNEL_SECRET', '');
define('LINE_MID', '');

require_once(__DIR__ . '/vendor/autoload.php');
use jp3cki\docomoDialogue\Dialogue;

$app = new Silex\Application();
$app->post('/callback', function (Request $request) use ($app) {
    // リクエスト取得
    $request = file_get_contents("php://input");
    $json = json_decode($request);
    $content = $json->result[0]->content;
    $message = $content->text;
    // コンテキストIDを取得
    $from = $content->from;
    $redis = new Redis();
    $redis->connect("127.0.0.1",6379);
    $context = $redis->get($from);
    // 送信パラメータの準備
    $dialog = new Dialogue(DOCOMO_API_KEY);
    $dialog->parameter->reset();
    $dialog->parameter->utt = $message;
    $dialog->parameter->context = $context;
    $dialog->parameter->mode = DOCOMO_MODE;
    // 対話
    $ret = $dialog->request();
    // コンテキストIDを保存
    $redis->set($from, $ret->context);
    $response_format_text = [
        'contentType' => 1,
        "toType" => 1,
        "text" => "$ret->utt"
    ];
    $post_data = [
        "to" => [
            $from
        ],
        "toChannel" => "1383378250", // 固定値
        "eventType" => "138311608800106203", // 固定値
        "content" => $response_format_text
    ];
    // LINEに送信
    $ch = curl_init("https://trialbot-api.line.me/v1/events");
    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, [
        'Content-Type: application/json; charser=UTF-8',
        "X-Line-ChannelID: " . LINE_CHANNEL_ID,
        "X-Line-ChannelSecret: " . LINE_CHANNEL_SECRET,
        "X-Line-Trusted-User-With-ACL: " . LINE_MID,
    ]);
    curl_exec($ch);
    curl_close($ch);

    return 'OK';
});
$app->run();

ソースコードはこちら
https://github.com/YuzuruS/line

結果

aIMG_3645.jpg

なんとか会話になってますねw

13
16
0

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
13
16