obnizのフォーラムは新しいシステムに移行しております。

新しいフォーラムはこちらになります

LINEハンズオンのRunKitで、起動時単発処理して終了する方法



  • LINEでのハンズオンのRunkitのサンプルを見て下記のコードを書きました。起動されたらサーボを動かして「はい」と発話して直ちに終了させるには、どのように書けばよいでしょうか?

    //■アプリ起動時の応答
    .onLaunchRequest(async responseHelper => {
    responseHelper.setSimpleSpeech({
    lang: 'ja',
    type: 'PlainText',
         value: はい。 ,
    });
    let obniz = new Obniz(yourObnizId);
    let connected = await obniz.connectWait({ timeout: 2 });
    let Servo1 = obniz.wired('ServoMotor', { gnd: 0, vcc: 1,signal: 2});
    Servo1.angle(110);
    await obniz.wait(500);
    Servo1.angle(90);
    })



  • @Google-Homer さん

    LINEハンズオンの資料を活用してくださりありがとうございます

    Runkitを使われてると思いますが、RunkitやAWS Lambdaなどのサーバーレスは、レスポンスを返すとそこで処理を止めてしまうという特徴があります。

    そのため、responseHelper.setSimpleSpeech()にてレスポンスを返してしまっているので、それより後ろのコードが実行されず、強制終了されてしまっています。

    responseHelper.setSimpleSpeech()Servo1.angle(90)よりも後ろに持って来ていただければ動くかと思います。
    そちらで試していただけますか?



  • ありがとうございます。
    現状のコードのままでも処理は止まることなく、レスポンス発話とサーボ両方動作します。やりたかったのは、Clovaに戻った後に発話入力待ちにせずSkillを終了させる事でした。

    下記1行追加で、自己解決しました。(意味は解ってませんが・・)

    responseHelper.responseObject.response.shouldEndSession = true;

    //■アプリ起動時の応答
    .onLaunchRequest(async responseHelper => {
    responseHelper.setSimpleSpeech({
    lang: 'ja',
    type: 'PlainText',
         value:      っ。 ,
    });
    responseHelper.responseObject.response.shouldEndSession = true;
    let obniz = new Obniz(yourObnizId);
    let connected = await obniz.connectWait({ timeout: 5 });
    let Servo1 = obniz.wired('ServoMotor', { gnd: 0, vcc: 1,signal: 2});
    Servo1.angle(110);
    await obniz.wait(500);
    Servo1.angle(90);

    })



  • @Google-Homer さん

    なるほど、サーバーレス系でレスポンス返すと動かないという問い合わせをよく受けるので、そちらかと思ってしまいました。

    無事できたようで良かったです!



SUGGESTED TOPICS