- Клиент бота собирается один раз и достаётся отправителю и транспорту; разрез прошёл по «ответил ли Telegram»: ответ «такого бота нет» роняет старт, недоступность даёт подъём без Telegram (ADR-2026-08-13). Ожидание при сборке ограничено сроком — иначе молчащий Telegram вешал подъём. - Недоставленный ответ не роняет шаг: пишется с job_id и считается метрикой, уровень по причине — WARN для неподнятого входа, ERROR для неназванного адресата. Заведены transcriber_intake_up и transcriber_undelivered_reply_count. - Закрыта утечка токена в журнал: отказ разбора адреса рождается раньше обращения к клиенту, то есть мимо чистки на его границе.
45 lines
1.7 KiB
Go
45 lines
1.7 KiB
Go
package contract
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
// ErrDeliveryChannelDown — канал, которым отвечают отправителю, не поднят.
|
|
// Отдаётся отправителем-заглушкой, которого получает ядро, когда вход не
|
|
// настроен.
|
|
//
|
|
// Значение сентинельное, а не тип: соседям по ряду есть что нести — состояние,
|
|
// идентификатор задачи, — а этому нечего. Заглушка не знает ни задачи, ни чата,
|
|
// и запись о недоставке делает шаг, у которого задача под рукой.
|
|
var ErrDeliveryChannelDown = errors.New("delivery channel is down")
|
|
|
|
type JobNotFoundError struct {
|
|
State string
|
|
Message string
|
|
}
|
|
|
|
func (e *JobNotFoundError) Error() string {
|
|
return fmt.Sprintf("%s - %s", e.State, e.Message)
|
|
}
|
|
|
|
// LostAcquisitionError — захват задачи за время работы шага достался другому.
|
|
// Шаг, получивший его, завершается без записи результата и без ответа
|
|
// отправителю: иначе два воркера пишут в одну задачу по очереди, а отправитель
|
|
// получает два ответа на одну запись.
|
|
type LostAcquisitionError struct {
|
|
JobID string
|
|
}
|
|
|
|
func (e *LostAcquisitionError) Error() string {
|
|
return fmt.Sprintf("%s: job acquisition lost", e.JobID)
|
|
}
|
|
|
|
type NoopJobError struct {
|
|
State string
|
|
}
|
|
|
|
func (e *NoopJobError) Error() string {
|
|
return fmt.Sprintf("%s: no op job occur", e.State)
|
|
}
|