2017-09-04 10 views
0
'use strict'; 

var Firebase = require('firebase'); 

var config = { 
    apiKey: "apiKey", 
    authDomain: "projectId.firebaseapp.com", 
    databaseURL: "https://databaseName.firebaseio.com", 
    storageBucket: "bucket.appspot.com" 
}; 

    if(Firebase.apps.length === 0) { 
     Firebase.initializeApp(config); 
    } 

exports.handler = function(event, context,callback) { 

    try{ 
     var request = event.request; 

     if(request.type === "LaunchRequest"){ 
     let options = {}; 
     options.speechText= "Welcome to TV. Using this skill you can control over 60 channels on your tv. To change to a different channel? You can say for example, play BBC Earth on tv"; 
     options.endSession= false; 
     context.succeed(buildResponse(options)); 

     }else if(request.type ==="IntentRequest"){ 
     let options ={}; 
      if(request.intent.name === "ChannelIntent"){ 

       var message = 'hey guys'; 
       var ref = Firebase.database().ref().child("hello"); 
       var messagesRef = ref.child('messages'); 
       var messageRef = messagesRef.push(message); 

       let ChannelName = request.intent.slots.ChannelName.value; 
       options.speechText= "Channel changed to " +ChannelName+ ". "; 
       options.endSession= true; 
       context.succeed(buildResponse(options)); 
      }else{ 
       throw "unknown intent type"; 
      } 

     }else if(request.type ==="SessionEndedRequest"){ 

     }else{ 
      throw "unknown intent type"; 
     } 

    } catch(e){ 
     context.fail("Exception: "+e); 
    } 
} 


function buildResponse(options){ 
    var response = { 
    version: "1.0", 
    response:{ 
     outputSpeech: { 
     type: "PlainText", 
     text: options.speechText 
     }, 
     shouldEndSession: options.endSession 
    } 
    }; 

    if(options.repromptText){ 
    response.reponse.reprompt ={ 
     outputSpeech: { 
     type: "PlainText", 
     text: options.repromptText 
     } 
    }; 
    } 
    return response; 
} 

アイデアは、アンドロイドテレビアプリを制御するためにアレクサのスキルを使用することです。 firebaseは、alexaスキルをAndroid TVアプリに接続するために使用されます。コードはAWSラムダで正常に実行されますが、firebase dbは更新されません。 誰かが同様の問題を抱えて解決策を見つけた場合は、解決策を教えてください。AWSラムダとファイアベースのリアルタイムデータベースが更新されない

aws lambda関数のコードスニペットを追加します。

答えて

0

ほとんどのFirebase操作は非同期であるため、成功することはできません。電話が完了するのを待たなければなりません:

messagesRef.push(message, (err) => { 
    if (err) return context.fail(err); 
    let ChannelName = request.intent.slots.ChannelName.value; 
    options.speechText= "Channel changed to " +ChannelName+ ". "; 
    options.endSession= true; 
    context.succeed(buildResponse(options)); 
}) 
+0

それは働いています:) –

関連する問題