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

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

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

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

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

Q&A

解決済

1回答

3690閲覧

GASとSlackの連携でdoPost関数が動かない

todo-2mari5

総合スコア11

Google Apps Script

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

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

0グッド

0クリップ

投稿2020/02/07 08:07

編集2020/02/07 08:12

GASをslackと連携させるため、ウェブアプリケーションとして公開したいのですがうまくいかず、調べていたところ深みにはまってしましました。

qiitaの関連ページなどをいくつも検索し、試しましたが解決には至りませんでした。

1、doGet,doPost関数が反応しない

こちらの記事を参考に実装したのですが、curlコマンドを打つとCSSのスタイルやスクリプトタグを含む文章が返ってきました。

javascript

1function doGet(e) { 2 var ss = SpreadsheetApp.getActiveSpreadsheet(); 3 var sheet = ss.getSheetByName('シート1'); 4 var sheetData = sheet.getRange('A2:B' + sheet.getLastRow()).getValues(); 5 6 // データの成形 7 var responseList = []; 8 sheetData.map(function(d) { 9 responseList.push({ fruit: d[0], price: d[1] }); 10 }); 11 12 // レスポンス 13 var response = { 14 data: responseList, 15 meta: { status: 'success' } 16 }; 17 return ContentService.createTextOutput(JSON.stringify(response)).setMimeType(ContentService.MimeType.JSON); 18}

command

1curl -L "エンドポイントURL"

長いので一部ですが、このようなものが返ってきます。

command

1<!DOCTYPE html> 2<html lang="ja"> 3 <head> 4 <meta charset="utf-8"> 5 <meta content="width=300, initial-scale=1" name="viewport"> 6 <meta name="google-site-verification" content="LrdTUW9psUAMbh4Ia074-BPEVmcpBxF6Gwf0MSgQXZs"> 7 <title>繝ュ繧ー繧、繝ウ - Google 繧「繧ォ繧ヲ繝ウ繝・/title> 8<style> 9 html, body { 10 font-family: Arial, sans-serif; 11 background: #fff; 12 margin: 0; 13 padding: 0; 14 border: 0; 15 position: absolute; 16 height: 100%; 17 min-width: 100%; 18 font-size: 13px; 19 color: #404040; 20 direction: ltr; 21 -webkit-text-size-adjust: none; 22 } 23 button, 24 input[type=button], 25 input[type=submit] {

スクリプトエディタ>公開>ウェブアプリケーションとして導入>test web app for your latest code.
では問題なく表示されます。

javascript

1{ 2 "data":[ 3 {"fruit":"apple","price":100}, 4 {"fruit":"banana","price":200}, 5 {"fruit":"orange","price":300}, 6 {"fruit":"grape","price":500}], 7 "meta":{"status":"success"} 8}

slackでの認証に失敗する

また、こちらのサイトを参考にslackとの連携を行おうと思ったのですがイメージ説明このようにエラーが出てしまいました。
参考サイトのコードをそのままコピペしたので、タイポはないと思います。

javascript

1function doPost(e) { 2 3 var postData = JSON.parse(e.postData.getDataAsString()); 4 5 if (postData.type == "url_verification") { 6 return ContentService.createTextOutput(postData.challenge); 7 } 8 9 var param = postData.event.text; 10 if (postData.event.subtype == "bot_message" || param == null) { 11 return; 12 } 13}

curlのコマンドを変えてみたり、グーグルのアカウントを変更、スクリプトを一から作成といろいろ試してみましたが、インターネットの記事に同様の症状が載っておらず。
あったとしても、権限の範囲が間違っていた等、私には当てはまらないことばかりで、解決できませんでしたので、こちらにて質問させていただきました。

ご回答いただければ、幸いです。

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

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

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

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

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

CHERRY

2020/02/07 08:21

Slack API は、基本的に POST してくるので、 doGet では受け取れないと思います。 doGet と最後に記載されている doPost は、どの様な関係でしょうか?
todo-2mari5

2020/02/07 09:02 編集

質問いただきありがとうございます。 たしかにこの構成だとわかりづらいですね、後ほど修正いたします。 doPostで情報を受け取れない旨承知しております。 上部doGetの部分は、slackの連携云々ではなくそもそもGASウェブアプリケーションとして導入できていないのでは?と思いリンク先を参考に検証してみたものになります。 後半部分との関連性はありません。
kairi003

2020/02/09 10:07 編集

実行アカウント(Execute this app as:)はMeになってますか?
guest

回答1

0

ベストアンサー

「繝ュ繧ー繧、繝ウ - Google 繧「繧ォ繧ヲ繝ウ繝・」って「ログイン - Google アカウント」なんでGoogleアカウントでのログインを求められています。
Execute the app as:はMeですか?
GAS公開時に実行者を利用者にすると、当然Googleにログインしなければ実行できなくなります。

追記
curlや外部サービスはあなたのGoogleアカウントでログインしていないのでそのテストでは意味がないです.
GASを作成したアカウントでログインしていない時に動作しなければなりません.
ブラウザならシークレットモードで試して見るのがわかりやすいです.

GASの公開時の設定には,公開範囲(Who has access to the app)とは別に実行アカウント(Execute the app as)があります.
アクセス可能者は実行者はスクリプトにアクセスできる人で,実行アカウントが実際にスクリプトを実行したことになる人です.

まず大前提として,GASを動かすにはGoogleアカウントが必要です.そして実行アカウントは,誰のGoogleアカウントを使うのかの設定です.

これがアクセス者(user accessing the app)なら,アクセスした人のGoogleアカウントで実行したことになります.この場合アクセスした人のアカウントの月ごとアクセス回数などが消費され,あなたのアカウントのものに影響はありません.
公開範囲がAnyoneなら,たとえばシークレットモードでブラウザを開いて適当なGoogleアカウントでログインし実行すればきちんと動くはずです.

しかし,これではなんらかのGoogleアカウントにログインしていない状態でいなければ実行できなくなってしまいます.それを防ぐために,実行アカウントをMe(作成者)にして,自分のアカウントで実行されるようにする必要があります.この場合誰が実行しても,自分のGoogleアカウントでログインして実行してた時と同じ動作をします.

投稿2020/02/09 10:11

編集2020/02/09 16:14
kairi003

総合スコア1330

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

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

todo-2mari5

2020/02/09 12:29

回答ありがとうございます。 はい、デフォルトのアカウントでないとエラーが出るとの情報を拝見いたしましたので、一度全てのアカウントからログアウトして、GASを作成実行するアカウントのみでログインいたしました。
kairi003

2020/02/09 16:13 編集

回答に転記しました
todo-2mari5

2020/02/10 01:14

追記ありがとうございます。 確認いたしましたが、Excute the app asの部分はMeを選択しておりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問