Pack not delivered
Who is this for
Section titled “Who is this for”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,
@usernameor 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.
Symptom
Section titled “Symptom”- 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’”).
Likely causes
Section titled “Likely causes”- The pack is still being generated or checked; the guest came back early.
- The pack is done and the link was sent, but the guest does not see it (wrong chat, muted bot, bot blocked).
- The job failed (generation error, cost cap, out of money).
- Telegram has not confirmed the new pack yet: the job sits in
delivering. - The queue is not moving: maintenance mode, the bot service is down, or a long provider outage.
- The guest never reached the photo step: no job exists.
Diagnose
Section titled “Diagnose”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:
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 -20curl -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):
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:
curl -s localhost:8000/health # "maintenance" not null → lift it, see Bot silent / Billing 402systemctl is-active sticker-bot # not active → systemctl restart sticker-botjournalctl -u sticker-bot --since -5min --no-pager -o cat | grep -E 'RATE_LIMIT|режим обслуживания' | tailC — 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.
Verify
Section titled “Verify”-
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 -3Expected:
STICKERSET_CONFIRMED job <N> пак <pack_name>: ….
Prevent
Section titled “Prevent”- 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.
Where to go next
Section titled “Where to go next”- Generation failing — when the status is
failed. - Bot silent — when the bot sends nothing to anyone.
- Pack delivery flow — the delivery checks as a diagram.
- Runbooks — back to the symptom table.
Last verified: 2026-11-13 against ai-sticker-pack@b715418 and ai-stickers-landing@e350ff5.