mirror of
https://github.com/tiennm99/claude-status-webhook.git
synced 2026-04-17 13:21:01 +00:00
fix: rename KV binding to CLAUDE_STATUS and fix threadId nullish check
- Rename KV binding SUBSCRIBERS → CLAUDE_STATUS for consistent naming - Fix || null → ?? null to preserve threadId 0 (General topic) - Update KV namespace creation command in README
This commit is contained in:
@@ -59,5 +59,5 @@ Bot stores `message_thread_id` from the topic where `/start` was sent. Notificat
|
||||
|
||||
## CF Bindings (wrangler.jsonc)
|
||||
|
||||
- `SUBSCRIBERS` — KV namespace
|
||||
- `CLAUDE_STATUS` — KV namespace
|
||||
- `STATUS_QUEUE` — Queue producer/consumer (`claude-status`, batch size 30, max retries 3)
|
||||
|
||||
@@ -50,7 +50,7 @@ npx wrangler login
|
||||
### 3. Create KV namespace and Queue
|
||||
|
||||
```bash
|
||||
npx wrangler kv namespace create SUBSCRIBERS
|
||||
npx wrangler kv namespace create claude-status
|
||||
npx wrangler queues create claude-status
|
||||
```
|
||||
|
||||
@@ -58,7 +58,7 @@ Copy the KV namespace ID from the output and update `wrangler.jsonc`:
|
||||
|
||||
```jsonc
|
||||
"kv_namespaces": [
|
||||
{ "binding": "SUBSCRIBERS", "id": "YOUR_KV_NAMESPACE_ID" }
|
||||
{ "binding": "CLAUDE_STATUS", "id": "YOUR_KV_NAMESPACE_ID" }
|
||||
]
|
||||
```
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ import {
|
||||
function getChatTarget(ctx) {
|
||||
return {
|
||||
chatId: ctx.chat.id,
|
||||
threadId: ctx.message?.message_thread_id || null,
|
||||
threadId: ctx.message?.message_thread_id ?? null,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ function getChatTarget(ctx) {
|
||||
*/
|
||||
export async function handleTelegramWebhook(c) {
|
||||
const bot = new Bot(c.env.BOT_TOKEN);
|
||||
const kv = c.env.SUBSCRIBERS;
|
||||
const kv = c.env.CLAUDE_STATUS;
|
||||
|
||||
bot.command("start", async (ctx) => {
|
||||
const { chatId, threadId } = getChatTarget(ctx);
|
||||
|
||||
@@ -36,7 +36,7 @@ export async function handleQueue(batch, env) {
|
||||
msg.ack();
|
||||
} else if (res.status === 403 || res.status === 400) {
|
||||
// Bot blocked or chat not found — auto-remove subscriber
|
||||
await removeSubscriber(env.SUBSCRIBERS, chatId, threadId);
|
||||
await removeSubscriber(env.CLAUDE_STATUS, chatId, threadId);
|
||||
msg.ack();
|
||||
} else if (res.status === 429) {
|
||||
// Rate limited — let queue retry later
|
||||
|
||||
@@ -69,7 +69,7 @@ export async function handleStatuspageWebhook(c) {
|
||||
}
|
||||
|
||||
// Get filtered subscribers
|
||||
const subscribers = await getSubscribersByType(c.env.SUBSCRIBERS, category);
|
||||
const subscribers = await getSubscribersByType(c.env.CLAUDE_STATUS, category);
|
||||
|
||||
// Enqueue messages for fan-out via CF Queues (batch for performance)
|
||||
const messages = subscribers.map(({ chatId, threadId }) => ({
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"main": "src/index.js",
|
||||
"compatibility_date": "2024-12-01",
|
||||
"kv_namespaces": [
|
||||
{ "binding": "SUBSCRIBERS", "id": "<KV_NAMESPACE_ID>" }
|
||||
{ "binding": "CLAUDE_STATUS", "id": "<KV_NAMESPACE_ID>" }
|
||||
],
|
||||
"queues": {
|
||||
"producers": [
|
||||
|
||||
Reference in New Issue
Block a user