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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

2回答

1341閲覧

[LINE/GAS]シートで指定した複数のuserId宛てにメッセージを送りたい

negi_0919

総合スコア22

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2018/03/21 13:45

編集2018/03/21 13:53

前提

・LINEBotで複数のユーザーにメッセージを送りたい
・使用しているものはGoogle Apps Scriptとスプレッドシートの2つです

実現したいこと

スプレッドシートで指定したuserId宛て(複数)にメッセージを送りたい

発生している問題

全く反応しない

該当のソースコード

function doPost(e) { var token = PropertiesService.getScriptProperties().getProperty('CHANNEL_ACCESS_TOKEN'); var reply_token= JSON.parse(e.postData.contents).events[0].replyToken; var user_id= JSON.parse(e.postData.contents).events[0].source.userId; var group_id= JSON.parse(e.postData.contents).events[0].source.groupId; if (user_id != undefined ) { var profile = get_profile(user_id); } var sheet = SpreadsheetApp.openById("(シートID)"); switch (JSON.parse(e.postData.contents).events[0].type) { case 'message': //message event var user_message = JSON.parse(e.postData.contents).events[0].message.text; var url = "https://api.line.me/v2/bot/message/multicast"; var headers = { "Content-Type" : "application/json; charset=UTF-8", 'Authorization': 'Bearer ' + token, }; var range = sheet.getRange(1, 2, 3); var postData = { "to" :[range.getValue()], "messages" : [ { 'type':'text', 'text':"成功しました!" } ] }; var options = { "method" : "post", "headers" : headers, "payload" : JSON.stringify(postData) }; return UrlFetchApp.fetch(url, options); } } } function get_profile(userid) { var token = PropertiesService.getScriptProperties().getProperty('CHANNEL_ACCESS_TOKEN'); var url = 'https://api.line.me/v2/bot/profile/' + userid; var headers = { 'Authorization': 'Bearer ' + token }; var options = { 'headers' : headers }; var response = UrlFetchApp.fetch(url, options); var content = JSON.parse(response.getContentText()); return content; }

試したこと

送信先をリファレンス通りに記載した所、正常に動作しました
"to" :["userId①","userId②"],
が、実現したいことは"シートで指定した"userId(複数)宛てにメッセージを送信するという事なので
どなたか分かる方いましたら教えていただけると幸いです よろしくお願い致します

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/04/06 03:59

質問の投げっぱなしはやめましょう。
guest

回答2

0

"to:{ユーザーIDの一次元配列}"で良いのなら以下のロジックで良いと思います。
0. getValues()でユーザーID取得(二次元配列)
0. ユーザーID配列の行列変換(行列転置)
0. 変換後のユーザーID配列[0](目的の一次元配列)を"to":へセット

なお、昔、私も二次元配列の行列変換用の関数を自作しましたが、以下がスマートで参考になると思います。

[参考]
ワクガンス|JavaScriptの覚書 2次元配列の行列を入替

投稿2018/03/22 00:36

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

javascript

1function doPost(e) { 2 const token = PropertiesService.getScriptProperties().getProperty('CHANNEL_ACCESS_TOKEN'); 3 // const reply_token= e.postData.contents.events[0].replyToken; 4 // const user_id= e.postData.contents.events[0].source.userId; 5 // const group_id= e.postData.contents.events[0].source.groupId; 6 // if (user_id != undefined ) { 7 // var profile = get_profile(user_id); 8 // } 9 const sheet = SpreadsheetApp.openById("(シートID)"); 10 11 switch (e.postData.contents.events[0].type) { 12 case 'message': //message event 13 // const user_message = e.postData.contents.events[0].message.text; 14 const url = "https://api.line.me/v2/bot/message/multicast"; 15 const headers = { 16 "Content-Type" : "application/json; charset=UTF-8", 17 'Authorization': 'Bearer ' + token, 18 }; 19 const range = sheet.getRange(1, 2, 3).getValues().map(function(e) {return e[0];}); 20 const postData = { 21 "to" :range, 22 "messages" : [ 23 { 24 'type':'text', 25 'text':"成功しました!" 26 } 27 ] 28 }; 29 30 var options = { 31 "method" : "post", 32 "headers" : headers, 33 "payload" : JSON.stringify(postData) 34 }; 35 return UrlFetchApp.fetch(url, options); 36 } 37} 38 39// function get_profile(userid) { 40// const token = PropertiesService.getScriptProperties().getProperty('CHANNEL_ACCESS_TOKEN'); 41// const url = 'https://api.line.me/v2/bot/profile/' + userid; 42// const headers = { 43// 'Authorization': 'Bearer ' + token 44// }; 45// const options = { 46// 'headers' : headers 47// }; 48// const response = UrlFetchApp.fetch(url, options); 49// return JSON.parse(response.getContentText()); 50// }

投稿2019/06/20 12:56

papinianus

総合スコア12705

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問