Skip to content

Pack not delivered

The operator at the station when a guest comes back saying “I got nothing”, and the engineer when the delay or delivery-failure alert arrives.

  • Find the guest in the admin panel by name, @username or Telegram id. The job status tells you what to do.
  • Normal time from photo to link is about 1–1.3 minutes. At 5 minutes the guest gets one “still working” message; at 15 minutes the job fails.
  • A finished pack can always be handed over by hand: https://t.me/addstickers/<pack_name>.
  • If the guest scans the QR code again, the bot answers with the link to the existing pack.
  • A guest who blocked the bot cannot be messaged. Show the link on your phone or as a QR code.
  • A guest says the bot sent Генерирую твой персональный набор стикеров… (“generating your pack…”) and then nothing.
  • Alert: ⚠️ [<EVENT_NAME>] 5 мин без ссылки, гостю ушло «Дорабатываем детали». (“5 minutes without a link; the guest was sent ‘finishing the details’”) followed by the job description.
  • Alert: ⚠️ [<EVENT_NAME>] STICKERSET_DELIVERY_FAILED: ссылка не ушла за 15 мин. (“the link was not sent within 15 minutes”) followed by the job description and Гостю отправлено «поможем вручную» (“the guest was told ‘we will help by hand’”).
  1. The pack is still being generated or checked; the guest came back early.
  2. The pack is done and the link was sent, but the guest does not see it (wrong chat, muted bot, bot blocked).
  3. The job failed (generation error, cost cap, out of money).
  4. Telegram has not confirmed the new pack yet: the job sits in delivering.
  5. The queue is not moving: maintenance mode, the bot service is down, or a long provider outage.
  6. The guest never reached the photo step: no job exists.

Admin panel (https://stickers.eventtalks.uz/admin): type the name, @username or Telegram id into the search box. The row shows status, created/ready times, attempts, the error and the pack link.

Server, when you know the Telegram id:

Terminal window
sqlite3 -readonly /opt/ai-sticker-pack/bot/data/app.db \
"SELECT job_id, status, attempts, pack_name, created_at, link_sent_at, substr(error,1,120) FROM jobs WHERE telegram_user_id=<telegram_user_id> ORDER BY job_id DESC LIMIT 3;"
journalctl -u sticker-bot --since -30min --no-pager -o cat | grep -E 'job <N>\b|job=<N>\b' | tail -20
curl -s localhost:8000/health
Job status Meaning Act
No job, panel status “started, no photo” The guest scanned and maybe consented but no photo was taken A
queued Waiting for a worker slot B
processing Generating. Normal up to about 2 minutes. B
delivering Pack created in Telegram; the link is sent only after Telegram confirms the pack is visible C
done Link was sent D
failed Error E

How delivery works (delivery.py): after the pack is created the job is delivering, and a background check asks Telegram whether the pack has all 12 stickers and whether its public page shows it, twice in a row. It polls every 2 seconds for the first 90 seconds, then every 10 seconds. All deadlines count from the moment the photo was accepted and apply to every stage: 5 minutes → one Дорабатываем детали твоего набора ✨ Скоро пришлю! to the guest and an alert; 15 minutes → failed, the “we will help by hand” message and an alert.

Check a pack by hand, with the same two checks the bot uses (tools/check_pack.py):

Terminal window
cd /opt/ai-sticker-pack && sudo -u sticker venv/bin/python tools/check_pack.py <pack_name>

Expected last line: Итог: ГОТОВ (“result: ready”), exit code 0. НЕ ГОТОВ (“not ready”) with exit code 1 means Telegram does not show the pack yet.

A — no job. The guest starts again at the tablet: Start → QR → bot → consent → outfit → photo. If the bot answers Сессия закрыта, нажми «СТАРТ» на планшете. (“session closed, press Start on the tablet”), the QR session expired; press Start for a new one.

B — queued or processing. Ask the guest to wait; the link arrives in the same chat. If many jobs sit in queued and none moves, the queue is blocked:

Terminal window
curl -s localhost:8000/health # "maintenance" not null → lift it, see Bot silent / Billing 402
systemctl is-active sticker-bot # not active → systemctl restart sticker-bot
journalctl -u sticker-bot --since -5min --no-pager -o cat | grep -E 'RATE_LIMIT|режим обслуживания' | tail

C — delivering. The pack exists. Give the guest the link now: https://t.me/addstickers/<pack_name> (the name is in the admin panel row). The bot sends the same link on its own once Telegram confirms the pack. If check_pack.py keeps saying НЕ ГОТОВ for many minutes, the job fails at 15 minutes; then retry it (E).

D — done. The link was sent. Ask the guest to open the chat with the bot. Or have them scan the kiosk QR code again: the bot answers У тебя уже есть набор: <link> (“you already have a pack”). Or hand over https://t.me/addstickers/<pack_name> from the admin panel.

E — failed. Admin panel → Повторить джоб (“retry job”). If the panel refuses because the selfie is gone or the pack limit is used up, press Разрешить ещё раз (“allow one more”) and photograph the guest again. Causes and fixes: Generation failing.

The guest blocked the bot. The bot cannot write to them; the journal shows Не удалось отправить сообщение user=<id> (“could not send a message”) with a “Forbidden” error. The pack is still created. Show the link from the admin panel on your phone, or ask the guest to unblock the bot and scan the QR code again.

The guest wants a different pack (bad photo): admin panel → Разрешить ещё раз, then a new pass at the station. The old pack stays in Telegram; packs are never deleted or overwritten.

  • The guest opens the link and Telegram offers to add 12 stickers.

  • For a retried job:

    Terminal window
    journalctl -u sticker-bot --since -5min --no-pager -o cat | grep -E 'STICKERSET_CONFIRMED|STAGE_SUMMARY' | tail -3

    Expected: STICKERSET_CONFIRMED job <N> пак <pack_name>: ….

  • Tell guests at the station: “the link comes to the same chat in about a minute; keep Telegram open”.
  • Keep the admin panel open on the operator’s phone during the event.
  • Treat the 5-minute alert as an early warning: check the queue and the provider before the 15-minute failure.
  • Watch the hourly checks in the Event playbook.

Last verified: 2026-11-13 against ai-sticker-pack@b715418 and ai-stickers-landing@e350ff5.