10月何もしていない...(会社のブログはギリギリ書いた記憶がある)。
何もしなすぎてるので極小ネタを。
SlackのAppにはUser Interactionという機能があり、例えばSlackの入力画面からのショートカット実行結果を受け取り、フォームを返したりさらに入力を受け取ったりなんやかんやできる。
この辺にまとまってる通りなのだけど、メッセージに紐づくショートカット(メッセージ右上のメニューから実行できるやつ)には、元のメッセージの情報がInteractionCallbackとして含まれている。例えばGoのコードならこういう感じで取れる。
payload := new(slack.InteractionCallback) err := json.Unmarshal(getPayloadFormValue()), payload) if err != nil { ... } fmt.Printf("%v\n", payload.Message)
ところで、このMessageには元メッセージのURLがそのものズバリでは含まれていない模様。
例えばショートカットがAcceptされた通知として、元のメッセージのURLを含むポストをする(そうすると元メッセージも引用されるし)などをしたい場合、以下のようなコードを書くしかない。
workspace := "myworkspace" chanId := payload.Channel.ID slug := "p" + strings.ReplaceAll(payload.Message.Timestamp, ".", "") url := fmt.Sprintf("https://%s.slack.com/archives/%s/%s", workspace, chanId, slug)
メッセージのURLにはタイムスタンプの情報が含まれている模様(今はそういう仕様なだけ?)。
なおスレッドのパーマリンクの場合、また別のタイムスタンプ Message.ThreadTimestamp
がある。
やりたいことに対し情報がなかったので残しとく。