LINEの「BOT API Trial Account」が先着1万名限定で自由に開発できるということなので、ドコモの雑談対話APIと組み合わせて、
弊社School Withのマスコットキャラクター「うぃず吉」に命を吹き込みたいと思います。
用意するもの
- LINE BOT API Trial Account
- ドコモ雑談対話API用アクセスキー
- SSL証明書が設置されたWebサーバ
LINE BOT APIアカウントを取得
取得したら下記をメモっておきましょう
- CHANNEL ID
- CHANNEL SECRET
- MID
CallBack URLはこんな感じでポート番号まで指定してください。
https://example.com:443/callback
またServer IP Whitelistには用意したWebサーバのIPを入力してください。
ドコモ雑談対話API用アカウントを取得
取得したら下記をメモっておきましょう
- API Key
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
結果
なんとか会話になってますねw