Channels
X (Twitter)
Account Activity webhook signed with X-Twitter-Webhooks-Signature (HMAC-SHA256 of the body, base64, sha256= prefix). HMAC fail-closes without consumer_secret.
CRC is a GET on the same HTTP front: crc_token → JSON {"response_token": "sha256=<hmac>"}. handle() never sees that GET.
export X_BEARER_TOKEN='…'
export X_CONSUMER_SECRET='…'
export PORT=8080cx.channels.add(
"x",
via="self-host",
bearer_token=bearer_token,
consumer_secret=consumer_secret,
bot_token="local",
)
# POST -> cx.handle("x", body, headers)
# GET crc_token on the same HTTP front (not handle())await cx.channels.add("x", {
via: "self-host",
bearer_token,
consumer_secret,
bot_token: "local",
})
// POST → await cx.handle("x", body, headers)
// GET crc_token on the same HTTP front (not handle())What it can do
Plans Post and Reply (tweets and DMs). Capabilities: receive, send, reply, dm.