notifier: Slack DM channel (depends on deeper Slack integration)
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 42/100
- issue の種類
- 機能追加
- 明瞭さ
- おおむね明確
- 活発さ
- 静か
- 技術スタック
- typescript
調査の方向性
apps/api/src/notify/index.ts と issue #82 から始めて、既存の notifier の契約とメールフローを理解してください。Slack の認証情報と配信動作を選択する前に、specs/api/saml.md と specs/behaviors/help-wanted-roles.md を読んでください。Slack DM の配信、ハンドルの解決、フォールバックまたは併用配信、SLACK_BOT_TOKEN の設定、および対応する失敗ログの実装が完了すれば、完了とします。
索引モデルが issue の本文から書いたものです。
説明
Follow-up from #82
#82 wires up a real notifier for help-wanted-role events (interest expressed, role filled). The agreed-on first-cut shape is email-only via Resend — covered in that issue.
This issue tracks the Slack DM channel, deliberately deferred until we tackle deeper Slack integration.
Why deferred
The Notifier interface in apps/api/src/notify/index.ts already accepts maintainerSlackHandle per notification, so the data flow is ready. What's missing is the credential trust — sending a DM from a workspace bot requires either:
- A workspace-installed Slack app with
chat:writescope + a bot token (the easiest path). - SAML IdP-side identity assertions extended to support delegated Slack actions (much heavier).
We're already the SAML IdP for codeforphilly.slack.com (specs/api/saml.md), but that's an inbound SAML flow (user signs into Slack via us). Sending DMs out to Slack is the inverse — we'd be initiating a workspace action on a member's behalf. Cleaner to do that via a dedicated Slack app with its own token.
Scope (when picked up)
- Add a
SlackDmNotifierimplementation alongsideEmailNotifier. - A new env var (
SLACK_BOT_TOKEN) — sealed-secret in the cluster repo. - Map Slack handles → user IDs via
users.lookupByEmail(orusers.listcached) since handles can change. Skip if the handle doesn't resolve. - Compound notifier: try Slack DM first, fall back to email if Slack delivery fails or the recipient has no Slack handle. (Or run both — pick when implementing.)
- Failure logging at the same envelope as today's notifier.
Related
- #82 — email-only first cut
specs/behaviors/help-wanted-roles.md— what gets delivered
- 主要言語
- TypeScript
- スター
- 1
- フォーク
- 1
- 平均マージ
- 1日 20時間
- マージ済み PR(30日)
- 25
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
CodeForPhilly/codeforphilly-ng のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
-
MarkdownEditor toolbar: use Radix Toolbar from radix-ui instead of the hand-rolled roving tabindex オープンenhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
CodeForPhilly/codeforphilly-ng の issue をすべて見る
似ている issue
-
blocklist removal
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
MetaMask/eth-phishing-detect#296544 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
pastelsky/bundlephobia#1122 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
-
category/development priority/P2 scope/file-operations scope/testing type/enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
-
Enatega Customer and Rider app: Add-ons price is not visible to customer after order is placed. オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100