0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Slack APIでbotのスレッド返信を削除する方法

0
Posted at

TL;DR

  • Slack APIを利用したbotの投稿 (スレッド返信) が開発途中で溢れたので削除したかった.
  • 投稿主であるbotがチャンネルにいない場合,投稿は削除できず,channel_not_foundになる.
  • 投稿URLから得られるthread_tstsとしてchat.deleteを叩いてもmessage_not_found になる.
  • thread_tsは親スレッドを指しており,スレッド返信の削除に使うべきなのは,投稿URL中の pXXXXXXXXXXXXに"." (ドット) を挟んで得られるts
  • つまり,pXXXXXXXXXXXXから得られるXXXXXX.XXXXXXtsとして使えばいい

ハマった現象

channel_not_found

  • 自分の場合,botの投稿を削除する前にbotを追放 (appを削除) してしまっていた.
  • 再び追加することでchannel_not_foundは出なくなった.

message_not_found

  • 削除したい投稿のURLをhttps://xxx.slack.com/archives/<CHANNEL_ID>/p<PERMALINK_ID>/thread_ts=<THREAD_TS>&cid=<CHANNEL_ID>とする.
    • <CHANNEL_ID>は以下の文字と10桁の数字からなる.
      • "C": Public Channel
      • "G": Private Channel
      • "D": Direct Message
    • <PERMALINK_ID>は16桁の数字からなる.
    • <THREAD_TS>xxxxxxxxxx.xxxxxxという形式からなる.
  • tsというリクエストパラメータ名から,thread_tsを指定してchat.deleteを叩いたが,上記のエラーが出て失敗する.
  • ChatGPTに聞いたところ,thread_tsは親スレッドを指し,返信スレッド (子スレッド) を表すパラメータはp<PERMALINK_ID>
  • また,<PERMALINK_ID>を使ってPOSTする際には,16桁の<PERMALINK_ID>の途中に"." (ドット)を挟み,yyyyyyyyyy.yyyyyyという形にする必要がある.
  • 以下のように chat.delete を叩くと成功する.
    ただし,xoxb-...はSlack APIの"Bot User OAuth Token".
curl -X POST "https://slack.com/api/chat.delete" \
  -H "Authorization: Bearer xoxb-..." \
  -H "Content-type: application/json; charset=utf-8" \
  --data '{"channel":"<CHANNEL_ID>","ts":"yyyyyyyyyy.yyyyyy"}'
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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?