LINE Clova スキル開発 覚書

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 サーバー を外部に公開する。

https://xxxxxxxx.ngrok.io/clova/

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);

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA