質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

0回答

1141閲覧

GCPのCloud SchedulerでLINEへのプッシュがうまく動作しない

ytommy

総合スコア11

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2020/06/28 01:15

編集2020/06/28 01:20

前提・実現したいこと

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);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問