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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Slack

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

Q&A

解決済

1回答

3783閲覧

Slack BOTを使ってSpreadsheetの変更通知を送る

TatsuyaAkitsu

総合スコア13

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Slack

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

0グッド

0クリップ

投稿2018/03/06 10:48

編集2018/03/07 01:44

いつもお世話になっております、今回も皆様のお知恵を拝借できたらと思いご質問させていただけますと幸いです。

前提

Google Spreadsheetにて、ウェブ制作のレビュー管理を行っています。
項目は下記になります。

  • ステータス(対応済みかどうか)
  • 優先度
  • 確認(修正事項報告者が修正されたことを確認したかどうか)
  • 報告日
  • 報告者
  • 対応担当
  • 端末
  • ページ名
  • 内容
  • 備考
  • 報告者メンション
  • 対応担当者メンション

上記項目でシートを作成し「内容」「備考」以外に関しては基本的にプルダウンなどによる選択式を取っています。
「報告者メンション」「対応担当者メンション」は各担当者にひも付き該当のメンション(別シート管理)の値が自動で入力される仕組みになっています。

やりたいこと

このSpreadsheetで「内容」のセルをトリガーにしてGoogle App ScriptにてSlackへの通知をメンション付きで行いたいと考えています。
例えば「Aさん(報告者)」が「担当Bさん」に「エラーを投稿しました」
といった具合です。
この通知自体をSlack内の特定のチャンネルに送っており、更にその中でメンションをつけて通知が届くようにしたいと考えています。

現在のコード

JavaScript

1function showStatus(){ 2 const mySheet = SpreadsheetApp.getActiveSheet(); //シートを取得 3 const myCell = mySheet.getActiveCell(); //アクティブセルを取得 4 const ss = SpreadsheetApp.getActiveSpreadsheet(); //スプシ(≠シート)を取得 5 const ss_url = ss.getUrl(); 6 if(myCell.getColumn()==12){ //数字の部分には列番号(この場合E列) 7 var text = '@' + myCell.offset(0, 9).getValue() + '\n 報告者「' + myCell.offset(0, -5).getValue() + '」から担当「' + myCell.offset(0, -4).getValue() + '」にエラー報告が追加されました' + ss_url; 8 slackPost(); 9 } 10 function slackPost(){ 11 const url = 'https://slack.com/api/chat.postMessage'; 12 const token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxx------トークン----------'; 13 const channel = '#チャンネル名'; 14 const username = 'タスク更新通知BOT'; 15 const parse = 'full'; 16 const method = 'post'; 17 const payload = { 18 'token' : token, 19 'channel' : channel, 20 'text' : text, 21 'username' : username, 22 'parse' : parse, 23 }; 24 const params = { 25 'method' : method, 26 'payload' : payload 27 }; 28 const response = UrlFetchApp.fetch(url, params); 29 } 30}

上記が今設置しているコードです。
試した記事はこちらです

これだけでも正常に稼働はしており、問題なく指定したチャンネルに通知が飛んできています。
下記コードにて、メンションのセルを取得し、そのvalueを入れています。

JavaScript

1'@' + myCell.offset(0, 9).getValue() + '\n 報告者「'

やったこと

ググってみると「@username」の形式が廃止になっている、「@userID」でないといけないですとか、「<!username>」としないといけない、また「@username」でも「link_name=1」が記載されていると問題なく動くといった記事に当たるのですが、どれも試してみても正常に動きませんでした。

Logger.Log()にて出力してみました。
イメージ説明
見たところ特にエラーのようなものが吐き出されているようには見えないのですが、何か参考になれば幸いです。

やりたいこと

JavaScript

1'@' + myCell.offset(0, 9).getValue() + '\n 報告者「'

ここで設定したメンションをつけて、現在設定しているSlackチャンネルにメンション(通知)つきで投稿されるようにしたいと考えています。

最後に

長文乱文大変失礼いたしました。
最後までお付き合いいただきありがとうございました。

何卒皆様のお知恵を賜れますと幸いです。
何卒よろしくお願いいたします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/03/06 12:51

response を Logger.Log() 等で出力して、ご提示ください。post時のエラーならヒントが記載されているはずです。
TatsuyaAkitsu

2018/03/06 15:03

修正依頼、ありがとうございます!`Logger.log()`実行してみました。見たところ特にエラーのような表記はなさそうですが、いかがでしょうか?
guest

回答1

0

ベストアンサー

responseの提示ありがとうございます。(一部は伏せていただいた方がいいと思います)
Slack 使っていませんので詳細は不明ですが、ログを見る限り、メンションされずにそのまま投稿されているという状況かと思います。
解釈が間違っていましたら申し訳ございません。

ググってみると「@username」の形式が廃止になっている、「@userID」でないといけないですとか、「<!username>」としないといけない、また「@username」でも「link_name=1」が記載されていると問題なく動くといった記事に当たるのですが、どれも試してみても正常に動きませんでした。

原典も確認しましょうね。
ドキュメントを確認した限りでは、2018/9/12以降「@username」の形式が廃止になるため、「@userID」を使用しましょう、ということかと思います。

つまり、現在は「@userID」形式への移行期間中で「@username」形式でも動作します。
responseもエラーがないにも関わらずイメージ通りに動作しないのは、メッセージ成形に問題があるということでしょう。
こちらもドキュメントにてフォーマットを確認しまして、以下のように修正すれば良いのではないでしょうか。

javascript

1//取得する値はuserIDのほうが良いでしょう。また、<>はURLエンコードしたほうが良いかもしれません。 2'<@' + myCell.offset(0, 9).getValue() + '>\n 報告者「'

一応、以下でメッセージが正しく成形され、ポストできているか確認できます。
slack API:chat.postMessage

[参考]

投稿2018/03/07 01:27

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

TatsuyaAkitsu

2018/03/07 04:00

ご回答ありがとうございます! 原典、失念しておりました。。。 ありがとうございます、上記確認してみたところ教えていただいた方法で希望通りの動作を確認取れました! お忙しい中ご教授いただきまして、本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問