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

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

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

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

Q&A

解決済

1回答

12261閲覧

GAS doPost()の返り値? が反応しない

alpha_

総合スコア9

Google Apps Script

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

0グッド

0クリップ

投稿2018/07/18 09:00

前提・実現したいこと

GASでbotを作成しています。
doPost(e)などを使用しても発火しません。
(e)内のデータを見ても「undefined」となっています。
https://tech.camph.net/slack-bot-with-gas/
こちらのサイト様を参照にしていますが実行されません。
同様の型もすべて発動しないです。
サーバーからの返り値?がないようで、どうしたら良いのか分かりません。

発生している問題・エラーメッセージ

TypeError: undefined からプロパティ「parameter」を読み取れません。

該当のソースコード

GAS

1function doPost(e) { 2 var token = PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN'); 3 var bot_name = "秘書子"; 4 var bot_icon = "http://i.imgur.com/DP2oyoM.jpg"; 5 var verify_token = "Llv4n1b8ExPYBihjnjq2V7IB"; 6 7 8 //投稿の認証 9 if (verify_token != e.parameter.token) { 10 throw new Error("invalid token."); 11 } 12 13 var app = SlackApp.create(token); 14 15 //Trigger Words部分の削除 16 var text = e.parameter.text.substr(4); 17 18 var message = e.parameter.user_name + "さんは「" + text + "」と言っています。"; 19 20 return app.postMessage(e.parameter.channel_id, message, { 21 username: bot_name, 22 icon_url: bot_icon 23 }); 24}

試したこと

Slack APIの確認
プロジェクトバージョンアップしてのデバック
e.~を消去してからのデバック

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

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

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

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

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

guest

回答1

0

ベストアンサー

状況の確認のために、↓のような関数を作り、ウェブアプリケーションとして導入で得られるアドレスにブラウザからアクセスして、スラックに投稿されるかどうか確認するとよいかと思います。

javascript

1function doGet(e) { 2 var token = PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN'); 3 var bot_name = "秘書子"; 4 var bot_icon = "http://i.imgur.com/DP2oyoM.jpg"; 5 6 var app = SlackApp.create(token); 7 8 var message = "ユーザさんは「こんにちは」と言っています。"; 9 10 app.postMessage("チャンネルid", message, { 11 username: bot_name, 12 icon_url: bot_icon 13 }); 14 15 return; 16}

これにより、
※ブラウザからアクセスができなければ
⇒gasが一般公開できていない可能性(できれば、googleアカウントにログインしていないブラウザから開くと確実に確認できると思います)
※slackが届くなら
⇒slackからの発信に問題があるのではないか
※slackが届かないなら
⇒slackのトークンがただしく取得できてないのではないか
などが確認できます。

チャンネルidはここから確認してください。

-- 補足
getが反応しているということは"発火"はしているということです。slackのoutgoingwebhookあたりの設定を見直したほうがよいように思います。

投稿2018/07/18 09:19

編集2018/07/19 01:38
papinianus

総合スコア12705

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

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

alpha_

2018/07/18 09:27

ありがとうございます! ご教授頂いた方法で確認してみたところ、 「スクリプトが完了しましたが、返された値はサポートされている戻り値の型ではありませんでした」 と表示されてしまいました……
papinianus

2018/07/19 01:39

すみません。考慮がたりていませんでした。コードを修正しました。これでブラウザから開くとエラーは出るものの、slackへの投稿が起こると期待できます。 今回のエラーからdoGet()は起動したことが伺えます。補足のとおり、slackからの発信の設定もあわせてご確認ください。
alpha_

2018/07/20 08:24

確認させていただきました。 編集頂いたコードを動かしてみたところ、ブラウザでは 「スクリプトが完了しましたが、何も返されませんでした。」 と表示されましたが、Slack上では投稿されました。 補足部のoutgoingwebhookも確認いたしましたが、特に問題は無いようです。 ただ、outgoingwebhookのトークンは使わないのか疑問におもいました。  重ね重ねお手数おかけいたします……
papinianus

2018/07/20 08:52 編集

投稿できたってことは、色々とあってますね。doGet(e)で検証できることはないのでもう忘れてください。 まず、verifytokenを参照記事からもってきておられますが、"Llv4n1b8ExPYBihjnjq2V7IB"のかわりに気にしておられる「outgoingwebhookのトークン」を入れてください。 (一般にgasはアドレスさえ分かればどこからでも送信できるので、tokenをみて、ふるいにかけたり、もしくは複数のslackのどこから受信したかを切り分ける目的で使います。doGetのときはそういう振り分けは不要なので無視しました) 質問の冒頭にある > (e)内のデータを見ても「undefined」となっています。 は、どうやって確認しましたか(確かにエラーはそういうことを言っていますが、それをどうやって確認なさったのでしょうか)?
alpha_

2018/07/20 09:26

outgoingwebhookのトークンを入力したところ、投稿及び返信されました! ありがとうございますっ!! デバック上ではエラーが出てしまっていますが、返信は実行されました。 > (e)内のデータを見ても「undefined」となっています。 こちらは、デバックの際に出てくる返り値のリストのような所で(e)の項目を確認し、undefinedと書かれていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問