前提・実現したいこと
GoogleAppsScriptを使ってSlackBotを作成しています。
やりたいのは、
0. どこかのチャンネルでボットに呼びかける
0. 呼びかけられたチャンネルに挨拶を返す
0. その後呼びかけた人に今日の予定をダイレクトメッセージで送信する
という内容です。
発生している問題・エラーメッセージ
1,2は成功していますが、3のところで呼びかけた本人ではなく、
slackbotにメッセージが通知されてしまいます。
これを呼びかけた本人に通知してほしいです。
実装は、着信Webフックの設定ページ「セットアップ手順」の「チャンネルに上書きする」の
着信 Web フックにはデフォルトのチャンネルがありますが、JSONペイロードで上書きすることができます。パブリックチャンネルは "channel": "#other-channel"、ダイレクトメッセージは "channel": "@username" で指定できます。
を参照して作ったのにちゃんと動いてくれず、どうしていいかわからない状態です。
該当のソースコード
ネットで検索したらよく出てくるGoogleAppsScriptのSlackBotライブラリは使用してません。
Appディレクトリから追加した着信Webフック(Incoming Webhooks)と発信Webフック(Outgoing Webhooks)を使って実装しています。
javascript
1function doPost(e){ 2 var url = PropertiesService.getScriptProperties().getProperty('SLACK_POST_URL'); 3 var options = { 4 "method" : "POST", 5 "headers": {"Content-type": "application/json"}, 6 "payload" : JSON.stringify({ 7 text: "今日の予定", 8 channel: "@"+e.parameter.user_name 9 }) 10 }; 11 12 UrlFetchApp.fetch(url, options); 13 return null 14}
試したこと
■チャンネル表記を色々変えてみる
以下パターンも試してみました。
channelに渡すもの | 結果 |
---|---|
"@" + e.parameter.user_name | slackbotに通知される |
"@" + e.parameter.user_id | slackbotに通知される |
"<@" + e.parameter.user_name + ">" | 送信エラー |
"<@" + e.parameter.user_id + ">" | 送信エラー |
"#" + e.parameter.user_id | 送信エラー |
"#" + e.parameter.user_name | 送信エラー |
encodeURIComponent("@" + e.parameter.user_name) | 送信エラー |
encodeURIComponent("@" + e.parameter.user_id) | 送信エラー |
固定で私のユーザ名、ユーザIDも試しましたが、slackbotに通知されてしまいました。
■自作のSlackAPI経由で通知してみる
着信Webフックではなく自分でSlaskAPIを作って、IncomingWebhooksを設定して試してみました。
こちらの方法では設定したユーザにダイレクトメッセージが発行されましたが、
Webhook URLがユーザ毎で変わってしまうので切り替えられませんでした。
■デフォルトチャンネルを自分のダイレクトメッセージにしてみる
もしかして外部からの通知は全部slackbotになるのかと、
試しに着信Webフックのデフォルトチャンネルを自分のダイレクトメッセージ宛てしてみました。
やりたいこと通り、私にダイレクトメッセージが届きました。
補足情報(FW/ツールのバージョンなど)
使用言語:GoogleAppsScript
使用APP:発信Webフック、着信Webフック
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/04 04:16