const Obniz = require('obniz');
const express = require('@runkit/runkit/express-endpoint/1.0.0');
const clova = require('@line/clova-cek-sdk-nodejs');
const app = express(exports);
const clovaExtensionId = 'YOUR_CLOVA_EXTENTION_ID';
const yourObnizId = 'YOUR_OBNIZ_ID';
// 使い方のテンプレート
const TEMPLATE_INQUIRY = '前へ進め などを指示してください';
//obnizを動かす部分
async function moveTo(direction) {
let obniz = new Obniz(yourObnizId);
let connected = await obniz.connectWait({ timeout: 5 });
if (!connected) {
// 5秒探してobnizが見つからない(オフラインの場合)は何もしない
return false;
}
let motorA = obniz.wired('DCMotor', { forward: 0, back: 1 });
motorA.power(50);
let motorB = obniz.wired('DCMotor', { forward: 2, back: 3 });
motorB.power(50);
if (direction === '前') {
motorA.move(true);
motorB.move(true);
} else if (direction === '後ろ') {
motorA.move(false);
motorB.move(false);
}
// 1秒だけ動かす
await obniz.wait(1000);
motorA.stop();
motorB.stop();
// モーターを止めない場合,obniz.waitからの3行を消して次の行を入れる
// これはコネクションが切断されても状態を維持するコマンド(モーターへの出力が維持される)
// obniz.resetOnDisconnect(false);
// コネクションを切断する
obniz.close();
return true;
}
//clovaとの連携部分
const clovaSkillHandler = clova.Client.configureSkill()
//アプリ起動時の応答
.onLaunchRequest(responseHelper => {
responseHelper.setSimpleSpeech({
lang: 'ja',
type: 'PlainText',
value: `「クローバー・ラジコン」が起動されました。${TEMPLATE_INQUIRY}`,
});
})
//各インテントごとの対応
.onIntentRequest(async responseHelper => {
const intent = responseHelper.getIntentName();
console.log(`intent : ${intent}`);
if (intent === 'MoveIntent') {
let slots = responseHelper.getSlots();
console.log(`slots : ${JSON.stringify(slots)}`);
let direction = slots.DirectionSlot;
console.log(`direction : ${direction}`);
if (direction == null) {
//応答する
responseHelper.setSimpleSpeech({
lang: 'ja',
type: 'PlainText',
value: `${TEMPLATE_INQUIRY}`,
});
return;
}
await moveTo(direction);
//応答する
responseHelper.setSimpleSpeech({
lang: 'ja',
type: 'PlainText',
value: `${direction}へ動きました`,
});
} else if (intent === 'Clova.GuideIntent') {
// ビルトインインテント。ユーザーがヘルプを呼び出した場合
//応答する
responseHelper.setSimpleSpeech({
lang: 'ja',
type: 'PlainText',
value: TEMPLATE_INQUIRY,
});
} else {
// その他のインテントの場合
responseHelper.setSimpleSpeech({
lang: 'ja',
type: 'PlainText',
value: `意図しない入力です。${TEMPLATE_INQUIRY}`,
});
}
})
// スキルの終了リクエスト
.onSessionEndedRequest(responseHelper => {})
.handle();
const clovaMiddleware = clova.Middleware({
applicationId: clovaExtensionId,
});
app.post('/', clovaMiddleware, clovaSkillHandler);