前提・実現したいこと
Cloud Schedulerを利用してLINEに毎日自動でプッシュ配信する機能を実装しようとしております。
Firebaseにプログラムをデプロイし、Cloud Schedulerで関数のテストをすると、LINE側ではメッセージを受け取れていませんが、Cloud Scheduler側では成功したログが表示されます。
また、同じプログラムをGASで実装したのですが、そちらは正常に動作しております。
発生している問題・エラーメッセージ
LINEでプッシュ通知を受け取れない。
該当のソースコード
Javascript
1#index.js 2 3//create message 4function morningMessage(text) { 5 6 var url = "https://api.line.me/v2/bot/message/broadcast"; 7 var channelAccessToken = 'xxxx'; 8 9 var headers = { 10 "Content-Type": "application/json; charset=UTF-8", 11 'Authorization': 'Bearer ' + channelAccessToken, 12 }; 13 14 var postData = { 15 "messages": [ 16 { 17 'type': 'text', 18 'text': text, 19 } 20 ] 21 }; 22 23 var options = { 24 "method": "post", 25 "headers": headers, 26 "payload": JSON.stringify(postData) 27 }; 28 29 return UrlFetchApp.fetch(url, options); 30}; 31 32//PUSH message 33exports.createMessage = functions.region('asia-northeast1') 34 .pubsub.schedule('every 60 minutes') 35 .timeZone('Asia/Tokyo') 36 .onRun(() => { 37 38 message = "テスト"; 39 return morningMessage(message); 40 41})
Javascript
1#firebase.json 2 3{ 4 "hosting": { 5 "public": "./", 6 "rewrites": [{ 7 "source": "/webhook", 8 "function": "app" 9 }], 10 "ignore": [ 11 "firebase.json", 12 "**/.*", 13 "**/node_modules/**" 14 ] 15 } 16}
Javascrip
1#package.json 2 3{ 4 "name": "functions", 5 "description": "Cloud Functions for Firebase", 6 "scripts": { 7 "serve": "firebase emulators:start --only functions", 8 "shell": "firebase functions:shell", 9 "start": "npm run shell", 10 "deploy": "firebase deploy --only functions", 11 "logs": "firebase functions:log" 12 }, 13 "engines": { 14 "node": "10" 15 }, 16 "dependencies": { 17 "@line/bot-sdk": "^7.0.0", 18 "express": "^4.17.1", 19 "firebase-admin": "^8.10.0", 20 "firebase-functions": "^3.6.1" 21 }, 22 "devDependencies": { 23 "firebase-functions-test": "^0.2.0" 24 }, 25 "private": true 26}
###補足
下記のプログラムが同じindex.jsファイルに書かれていますが、こちらは動作します。
'use strict'; const functions = require('firebase-functions'); const express = require('express'); const line = require('@line/bot-sdk'); // channel secretとaccess tokenをFirebaseの環境変数から呼び出す const config = { channelSecret: functions.config().channel.secret, channelAccessToken: functions.config().channel.accesstoken } // create LINE SDK client const client = new line.Client(config); // create Express app const app = express(); // register a webhook handler with middleware app.post('/webhook', line.middleware(config), (req, res) => { Promise .all(req.body.events.map(handleEvent)) .then((result) => res.json(result)) .catch((err) => { console.error(err); res.status(500).end(); }); }); // event handler async function handleEvent(event) { if (event.type !== 'message' || event.message.type !== 'text') { // ignore non-text-message event return Promise.resolve(null); } // create a echoing text message const echo = { type: 'text', text: event.message.text }; // use reply API return client.replyMessage(event.replyToken, echo ); } exports.app = functions.https.onRequest(app);
あなたの回答
tips
プレビュー