Fix Poke webhook: verify success field, point key setup to Kitchen
CI / build (push) Canceled after 0s
CI / docker (push) Canceled after 0s
Build & Push Container Image / build-and-push (push) Canceled after 0s
CI / lint (push) Canceled after 7m3s

- forward_to_poke now checks the response's success field instead of
  trusting the HTTP status alone; Poke can return 200 with
  success: false on a soft failure, which was previously logged and
  treated as delivered.
- README/start.sh pointed users to Settings > Advanced for the API
  key, which issues a legacy pk_ key incompatible with the
  inbound/api-message endpoint this project uses. Now points to
  poke.com/kitchen -> API Keys for a V2 key.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-02 18:18:56 -04:00
co-authored by Claude Sonnet 5
parent 35e4d3da86
commit 9f26098954
3 changed files with 13 additions and 3 deletions
+2 -2
View File
@@ -61,11 +61,11 @@ Set up poke-mail (https://github.com/kacperkwapisz/poke-mail) for me — clone t
cp config.example.yml config.yml cp config.example.yml config.yml
``` ```
Edit `config.yml` with your email credentials and Poke API key (from [poke.com/settings/advanced](https://poke.com/settings/advanced)): Edit `config.yml` with your email credentials and Poke API key (from [poke.com/kitchen](https://poke.com/kitchen) → API Keys — **not** Settings → Advanced or the Recipes page; those issue a legacy `pk_` key that only works with the deprecated `inbound-sms/webhook` endpoint, not the one below):
```yaml ```yaml
webhook_url: https://poke.com/api/v1/inbound/api-message webhook_url: https://poke.com/api/v1/inbound/api-message
poke_api_key: your-api-key # from https://poke.com/settings/advanced poke_api_key: your-api-key # from https://poke.com/kitchen → API Keys (V2 key required for this endpoint)
accounts: accounts:
# iCloud Mail — login is @icloud.com, send as your custom domain # iCloud Mail — login is @icloud.com, send as your custom domain
+8
View File
@@ -445,6 +445,14 @@ async def forward_to_poke(
async with httpx.AsyncClient(timeout=30) as http: async with httpx.AsyncClient(timeout=30) as http:
resp = await http.post(webhook_url, json=payload, headers=headers) resp = await http.post(webhook_url, json=payload, headers=headers)
resp.raise_for_status() resp.raise_for_status()
# A 2xx status doesn't guarantee delivery — Poke can return
# HTTP 200 with {"success": false, ...} on a soft failure, so
# the status code alone isn't sufficient confirmation.
result = resp.json()
if not result.get("success", True):
raise RuntimeError(
f"Poke reported failure: {result.get('message', 'unknown error')}"
)
logger.info( logger.info(
"Forwarded email '%s' to Poke (status %d)", "Forwarded email '%s' to Poke (status %d)",
email_data["subject"], email_data["subject"],
+3 -1
View File
@@ -183,7 +183,9 @@ PYEOF
echo "" echo ""
else else
echo " ⚠ poke_api_key not set in config.yml." echo " ⚠ poke_api_key not set in config.yml."
echo " Run 'npx poke login' then restart, or paste your key from poke.com/settings/advanced" echo " Run 'npx poke login' then restart, or paste a V2 key from poke.com/kitchen -> API Keys"
echo " (Settings > Advanced and the Recipes page issue a different, incompatible key —"
echo " the webhook_url above requires a V2 key created in Kitchen)"
echo "" echo ""
printf " Poke API key (leave blank to set manually later): " printf " Poke API key (leave blank to set manually later): "
read -r POKE_TOKEN_INPUT read -r POKE_TOKEN_INPUT