TL;DR
- Slack APIを利用したbotの投稿 (スレッド返信) が開発途中で溢れたので削除したかった.
- 投稿主であるbotがチャンネルにいない場合,投稿は削除できず,
channel_not_foundになる. - 投稿URLから得られる
thread_tsをtsとしてchat.deleteを叩いてもmessage_not_foundになる. -
thread_tsは親スレッドを指しており,スレッド返信の削除に使うべきなのは,投稿URL中のpXXXXXXXXXXXXに"." (ドット) を挟んで得られるts. - つまり,
pXXXXXXXXXXXXから得られるXXXXXX.XXXXXXをtsとして使えばいい
ハマった現象
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"}'