LINE Clova のスキル開発がやっと可能になりました。
↓以下のサイトを参考にして作ってみました。
ExtensionサーバーのURL の内容は、以下の通り。
PHPでサーバーを立てる
↓こちらは、単純にメッセージを返すだけのPHPプログラム。
test.php
<?php
//レスポンスのjson作成
function makeSentense($message){
return array(
'version' => "1.0",
'sessionAttributes' => null,
'response' => [
'outputSpeech' =>[
'type' => "SimpleSpeech",
'values' => [
'lang' => 'ja',
'type' => 'PlainText',
'value' => $message
]
],
'directives' => null,
'shouldEndSession' => false
]
);
}
//メイン
$json_string = file_get_contents('php://input');
$jsonObj = json_decode($json_string);
$response = makeSentense("クローバエクステンションのテストです");
header("Content-Type: application/json; charset=utf-8");
echo json_encode($response);
?>
↓こちらは、入力した音声のデータを抽出するPHPプログラム
test2.php
<?php
//レスポンスのjson作成
function makeSentense(
$message,
$shouldEndSession
){
return array(
'version' => "1.0",
'sessionAttributes' => null,
'response' => [
'outputSpeech' =>[
'type' => "SimpleSpeech",
'values' => [
'lang' => 'ja',
'type' => 'PlainText',
'value' => $message
]
],
'directives' => null,
'shouldEndSession' => $shouldEndSession
]
);
}
//requestからvalue取得
function getResponse($jsonObj){
//★ここがポイント
return $jsonObj->{"request"}->{"intent"}->{"slots"}->{【スロット名】}->{"value"};
}
//メイン
$json_string = file_get_contents('php://input');
$jsonObj = json_decode($json_string);
$query = getResponse($jsonObj);
$response = makeSentense($query, false);
header("Content-Type: application/json; charset=utf-8");
echo json_encode($response);
?>
node jsでサーバーを立てる
node js は、以下を参考にしました。
$ npm i @line/clova-cek-sdk-nodejs express body-parser
↓ ngrok を使ってnode js サーバー を外部に公開する。
node index.js
const clova = require('@line/clova-cek-sdk-nodejs');
const express = require('express');
const bodyParser = require('body-parser');
const clovaSkillHandler = clova.Client
.configureSkill()
.onLaunchRequest(responseHelper => {
responseHelper.setSimpleSpeech(
clova.SpeechBuilder.createSpeechText('こんにちは!')
);
})
.onIntentRequest(async responseHelper => {
const intent = responseHelper.getIntentName();
const sessionId = responseHelper.getSessionId();
switch (intent) {
case 'Clova.YesIntent':
responseHelper.setSimpleSpeech(
clova.SpeechBuilder.createSpeechText("はいはい")
);
break;
case 'Clova.NoIntent':
// Or build speechObject with SpeechBuilder for response
responseHelper.setSimpleSpeech(
clova.SpeechBuilder.createSpeechText('いえいえ')
);
break;
}
})
.onSessionEndedRequest(responseHelper => {
const sessionId = responseHelper.getSessionId();
// Do something on session end
})
.handle();
const app = new express();
app.listen(3000);
console.log('start app.listen(3000)');
//const clovaMiddleware = clova.Middleware({ applicationId: YOUR_APPLICATION_ID });
// Use clovaMiddleware
if you want to verify signature and applicationId.
// Please note applicationId
is required when using this middleware.
//app.post('/clova', clovaMiddleware, clovaSkillHandler);
// Or you can simply use bodyParser.json()
to accept any request without verifying, e.g.,
app.post('/clova', bodyParser.json(), clovaSkillHandler);