## 背景
`chat.postMessage`のAPIを利用して
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://api.slack.com/img/logos/favicon.ico" />
<span class="link-card-v2-site-name">api.slack.com</span>
</div>
<div class="link-card-v2-title">
chat.postMessage method | Slack Developer Docs
</div>
<div class="link-card-v2-content">
Sends a message to a channel.
</div>
<a href="https://api.slack.com/methods/chat.postMessage#formatting"></a>
</div>
以下の記述がある `reply_broadcast` が使ってみた。
> **reply_broadcast** boolean ·Optional
> Used in conjunction with thread_ts and indicates whether reply should be made visible to everyone in the channel or conversation. Defaults to false.
期待通りの挙動をしたが、唯一投稿者だけが期待通りでなかった。
![[Pasted image 20240505145911.png|frame]]
*実際の投稿*
これがどうにかなるのかを調査する。
## この挙動は仕様か?
明確に記載されたドキュメントを見つけることはできなかった。
ただ、[[Slack]]のアプリを見てみたところ、メッセージ投稿には同じ`chat.postMessage` APIを利用しており、`reply_broadcast = true`を指定しているところまで一緒だった。未確認だが、一番怪しいと思ったのは指定されたトークンの種類。公式アプリは[[クライアントトークン (Slack)|クライアントトークン]]を使っており、[[ユーザートークン (Slack)|ユーザートークン]]との挙動の違いが出ている可能性が高い。
## 同様の機能を実現するには?
正攻法では厳しそうなので発想を転換する。以下の2stepで投稿するようにする。
1. 普通に投稿する
2. **1のリンクをもつ投稿をchannelにする**
レスポンスで必要な部分は以下。
```json
{
"ok": true,
"channel": "AAAAAAAAAAA",
"message": {
"ts": "1714890492.885529",
"thread_ts": "1714886751.105239",
}
}
```
以下のルールでarchiveを参照する。
```
https://<ドメイン固有のslug>.slack.com/archives/{channel}/p{tsから.を消した値}?thread_ts={thread_ts}&cid={channel}
```