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

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

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

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

Slack

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

Q&A

解決済

3回答

1864閲覧

Slackで本日の予定を確認する自動投稿を行いたい

oskn

総合スコア3

Google Apps Script

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

Slack

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

0グッド

0クリップ

投稿2021/07/27 08:19

前提・実現したいこと

Slackにて、TimeTreeというスケジュールアプリに登録されている本日の予定を
毎日決まった日時に自動投稿するしくみを作りたいと考えています。

SlackのTimeTreeアプリは、たとえば「@TimeTree today」とSlackに投稿すると、
以下画像のような形で本日の予定が返ってきます。
成功例

これを利用し、毎朝8:30に「@TimeTree today」と自動投稿することで、
TimeTreeの本日の予定が毎日自動でSlackに投稿されるといった形にしたいです。

試したこと

(1) Slackのリマインダー機能を利用した定時投稿

以下のスラッシュコマンドにてリマインダーを設定

/remind #general @TimeTree today at 8:30am every day

[結果]
正常にリマインダーは動作し投稿が行われますが、投稿された内容に対してSlackの
TimeTreeアプリが反応しませんでした。
おそらく投稿内容が以下の通りで文頭に「リマインダー: 」という形式外の単語が
入っているためと思われます。

リマインダー : @TimeTree 今日

(2) Incoming WebhookとGASを利用した自動投稿

該当チャンネルにてIncoming Webhookをアクティブにした上で、ネットの情報を参考に
GASにて以下のスクリプトを作成しました。

GoogleAppScript

1var postUrl = 'https://hooks.slack.com/services/********************'; 2var username = 'test'; // 通知時に表示されるユーザー名 3var icon = ':hamster:'; // 通知時に表示されるアイコン 4var channel = '#schedule' 5var message = '<@TimeTree> today'; // 投稿メッセージ 6 7function myFunction() { 8 var jsonData = 9 { 10 "username" : username, 11 "icon_emoji": icon, 12 "channel": channel, 13 "text" : message 14 }; 15 var payload = JSON.stringify(jsonData); 16 var options = 17 { 18 "method" : "post", 19 "contentType" : "application/json", 20 "payload" : payload 21 }; 22 UrlFetchApp.fetch(postUrl, options); 23}

Apps Scriptの[実行]ボタンでテスト投稿を実施。

[結果]
以下の通り投稿自体は問題なく行われますが、TimeTreeのbotユーザーへのメンションが
有効にならず「@TimeTree」という文字列として処理されてしまいました。
おそらくそのためにTimeTreeアプリからは反応がありませんでした。
試行結果

知りたいこと

前述の「試したこと」のスクリプトなどに誤りがあるためうまく行っていないようであれば、
修正箇所をご教示ください。
前述の「試したこと」ではそもそも無理ということであれば、別の方法が知りたいです。

知見がある方がいましたらどうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

seratch様に頂いた回答を参考にして、TimeTree アプリの bot user の user_id を正常に取得できました。
また、取得した user_id(U から始まるものでした) に対し、Slack API の bot user から、正しくメンションを飛ばすことに成功しました。
イメージ説明

ですが TimeTree アプリが bot user からのメンションを想定していないのか、メンションを送っても反応がありませんでした。
(通常のユーザーから手動でメンションを送ると反応あり)

目的は達成できませんでしたが、一応本問い合わせで知りたかった bot user へのメンションの送り方は理解できたため、seratch様をベストアンサーとさせていただきました。

投稿2021/09/27 01:38

oskn

総合スコア3

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

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

0

ベストアンサー

その TimeTree アプリの bot user の user ID を取得し (users.list で一覧を取得すればそこにあるはずです)、それを <@{user_id}> の記法で埋めることでメンションできるはずです。bot なので bot_id (B から始まる) と user_id (U か W で始まる)がありますので、ご注意を。

https://api.slack.com/reference/surfaces/formatting#mentioning-users

投稿2021/08/19 06:06

seratch

総合スコア215

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

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

0

json_dataに「 "link_names": 1」を追加した場合どうでしょうか。

var jsonData = { "username" : username, "icon_emoji": icon, "channel": channel, "text" : message,   "link_names": 1 };

https://api.slack.com/methods/chat.postMessage#arg_link_names

投稿2021/07/27 10:36

編集2021/07/27 10:38
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

oskn

2021/07/28 01:44 編集

回答ありがとうございます。 頂いた通りjsonDataに "link_names" の項目を追加してみましたが、やはり @TimeTree がメンションにならず、通常の文字として処理されてしまいました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問