LoginSignup
0
0

More than 1 year has passed since last update.

Slackアプリに「自分」として投稿させるまで

Last updated at Posted at 2022-05-25

記事を書いた理由

  • Slackアプリのホームタブで、ボタンをクリックしたらアプリとしてでなく「自分」として特定のチャンネルに書き込みする機能を実装したかった。
  • ググっても情報が微妙に古かった(引数にas_userを使うものしか見つからなかった)。

だいたいの環境

  • Bolt for JavaScript (3.11.0)
  • AWS Lambda
    • デプロイ方法は↑のチュートリアルにある。dotenvを使えるようにserverless.yamlのトップレベル?にuseDotenv:trueを追加すると便利。

chat.postMessage関数のas_user属性は最近のSlackアプリでは使えない

特定チャンネルへの投稿にはWebClientインスタンスのpostMessageメソッドを使うが、アプリとしてでなく操作しているユーザーとして投稿したいときに使うであろうas_user属性は古いSlackアプリでは使えない。
令和最新版としては、

// Webクライアント初期化
const web = new WebClient('TOKEN')
// 書き込み
const result = await web.chat.postMessage({
  text: '書き込み内容',
  channnel: '書き込むチャンネルのID/ DMを送るユーザーのID',
  username: 'ユーザー名',
  icon_url: 'プロフィール画像のURL',
  icon_emoji: ':smile:' // icon_urlの代わり
})

as_userを使う場合必要だったchat:write.customizeなトークンのスコープは不要。
理由は実態としてはユーザー名とプロフィール画像を差し替えたアプリが書き込んでいるため。
ちなみにユーザー名やプロフィール画像を取得したければ先ほどのweb変数を使って

// ユーザーオブジェクトの取得
// https://api.slack.com/methods/users.info#examples
const { user } = await web.users.info({ user: 'ユーザーID' })
// ユーザー名と画像。画像サイズ(_48)は適当
const { display_name, image_48 } = user?.profile

最後に

Node.js初心者なのもあるが,チュートリアル後にモジュール分割するのに割と詰まったので別に記事を書きたい。参考にした本の読書記録になるかもしれない。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0