DynamoDBから取得したgroupIDを使い、グループにメッセージを送るAlexaをトリガーとしたLINE botを作成しています。
現在DynamoDBからgroupIDを取得するgetメソッドにコールバック関数を指定しています。
groupId宣言時に、"0123"を代入していますが、コールバック関数内で取得した値を代入したいです。
ですが、以下のコードではgroupIdに取得した値が代入されず、groupId="0123"のままです。
groupIdにコールバック関数内で取得した値を代入する方法を教えてください。
以下、コードになります。
Javascript
1const MindFullnessIntentHandler = { 2 canHandle(handlerInput) { 3 return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest' 4 && Alexa.getIntentName(handlerInput.requestEnvelope) === 'MindFullnessIntent'; 5 }, 6 async handle(handlerInput) { 7 // ----------LINEでメッセージを送信----------// 8 // Userごとのアクセストークン 9 const accessToken = handlerInput.requestEnvelope.session.user.accessToken; 10 console.log(accessToken); 11 12 var options = { //http リクエスト 13 method: 'GET', //method 14 uri: 'https://api.line.me/v2/profile', //エンドポイント 15 headers: { 16 'Authorization': `Bearer ${accessToken}` //ヘッダーにアクセストークンを追加しないと、エンドポイントで認証できない 17 } 18 }; 19 20 // 時間の取得 21 const slots = handlerInput.requestEnvelope.request.intent.slots; 22 const time = slots.time.value; 23 24 // アクセストークンより、LINEのUser情報を取得 25 const lineData = JSON.parse(await rp(options)); 26 27 const userName = lineData.displayName; 28 29 const message = { 30 type: 'text', 31 text: `${userName}さんは${time}分しました.` 32 }; 33 34 const userId = lineData.userId; 35 36 //DynamoDBからgroupIDを取得 37 AWS.config.update({ 38 region: "ap-northeast-1", 39 endpoint: "https://dynamodb.ap-northeast-1.amazonaws.com" 40 }); 41 42 const docClient = new AWS.DynamoDB.DocumentClient(); 43 44 const table = "line_user"; 45 46 const params = { 47 TableName: table, 48 Key: { 49 "userId": userId 50 } 51 }; 52 53 var groupId = "0123"; //groupIdの雛形を作成。userIdから取得出来なければこのgroupId 54 55 docClient.get(params, function(err, data) { 56 if (err) { 57 console.error("Unable to read item. Error JSON:", JSON.stringify(err, null, 2)); 58 } else { 59 console.log("GetItem succeeded:", JSON.stringify(data, null, 2)); 60 groupId = data.Item.groupId; 61 console.log(groupId); 62 return groupId; 63 } 64 }); 65 66 console.log("groupId:" + groupId); 67 68 // botに通知を送信 69 await lineclient.pushMessage(groupId, message); 70 71 const speakOutput = `${time}分ですね。それでは始めましょう!`; 72 73 return handlerInput.responseBuilder 74 .speak(speakOutput) 75 .getResponse(); 76 } 77};
回答1件
あなたの回答
tips
プレビュー