Skip to content

Global Webhooks

Signed URLs that run commands without binding a Telegram user. user and chat are null; the User instance is not available.

Think of them as system-level triggers — cron jobs, monitoring hooks, account-wide reads, and backend integrations that don't act on behalf of one person.


What you get (and don't)

In the command Available?
bot, owner, plan, db, HTTP, modules
user, chat, User null
request, params, options, res
msg null

No default chat

Without user or chat, you must pass chat_id explicitly to Api.sendMessage() and friends.


getGlobalUrl(command, { options, redirect, params, expiresIn })

Parameter Type Description
command string Command name or alias
options object Signed data passed to the command
redirect string Optional HTTPS URL — prefetched into content
params object Extra query parameters
expiresIn number Optional seconds until URL expires

Example — cron stats job

let statsUrl = Webhook.getGlobalUrl("aggregateStats", {
  options: { days: 30 },
  redirect: "https://api.example.com/metrics.json",
  params: { ref: "cron" },
  expiresIn: 300
})

What the URL looks like

https://{domain}/webhook/{bot_id}
  ?command=aggregateStats
  &options=%7B%22days%22%3A30%7D
  &sig=d4e5f6...
  &expires=1710000300
  &ref=cron

Note: there is no user parameter. The signature is computed with an empty user segment.


Inside the command

Design for user being null:

let total = await db.bot.get("total_users") || 0

// content may hold prefetched redirect body
let external = content || {}

res.json({
  ok: true,
  total_users: total,
  external_keys: Object.keys(external)
})

Sending Telegram messages

No chat? Store an admin chat ID in bot storage, or pass one you know:

let adminChat = await db.bot.get("admin_chat_id")
if (adminChat) {
  await Api.sendMessage({
    chat_id: adminChat,
    text: "Daily stats job completed."
  })
}

Global vs user webhook — quick picker

Scenario Use
Action for one logged-in user User webhook
Nightly stats aggregation Global webhook
User-specific payment callback User webhook with getUrlFor
Signed public API, no user data Global webhook
Unsigned browser-facing API Webapp
Static landing page Public web

See also