ZennoPoster и BAS: получение кода из почты через API
Чтобы шаблон ZennoPoster или BAS сам получил код из письма, отдельный модуль не нужен: хватит трёх HTTP-запросов к API OTPGmail и цикла ожидания. Шаблон арендует настоящий адрес @gmail.com или @icloud.com, вставляет его в форму, раз в несколько секунд спрашивает заказ и забирает код из ответа в JSON. Если код не пришёл, заказ отменяется, и деньги возвращаются на баланс.
Ниже — точные запросы, пути в JSON, фрагменты кода для обеих программ и расчёт лимитов для многопоточных шаблонов. Используйте это для автоматизации собственных сценариев: проверки регистрации на своём сайте, тестовых и рабочих аккаунтов — в рамках правил каждой платформы.
Что понадобится
- Ключ API со страницы «Профиль» в приложении OTPGmail (начинается с
og_). - Баланс. Деньги списываются только при выдаче ящика; пополняется он в USDT или USDC.
- Код сервиса из списка
GET /v1/services: например,git— GitHub,dr— ChatGPT,mm— Microsoft,ot— «Любой сервис» для сайтов, которых нет в списке. - Переменные проекта:
api_hostсо значениемotpgmail.netиapi_keyс ключом. Хранить хост и ключ в переменных удобнее, чем вписывать их в каждый запрос. Ниже{api_host}и{api_key}— условная запись: в ZennoPoster переменная подставляется как{-Variable.api_host-}, в BAS — как[[API_HOST]].
Три запроса, которые нужны шаблону
1. Аренда адреса. POST https://{api_host}/v1/orders с заголовками Authorization: Bearer {api_key}, Content-Type: application/json и Idempotency-Key — уникальная строка (например, GUID) на каждый новый заказ. Тело запроса:
{"service": "git", "domain": "gmail.com"}
Ответ — список заказов, даже если ящик один:
{"success": true, "data": [{"orderId": "…", "email": "…@gmail.com", "status": "waiting_code", "otp": [], "codeDeadlineAt": 1790000000}]}
Нужные пути: data[0].orderId и data[0].email. При ошибке success равен false, а код ошибки лежит в error.code.
2. Опрос заказа. GET https://{api_host}/v1/orders/{orderId} с тем же заголовком авторизации. Пока кода нет, data.status равен waiting_code, а data.otp пуст. Когда письмо пришло, статус меняется на completed, а код появляется в data.otp[0].code; последующие коды добавляются в конец списка.
3. Отмена. POST https://{api_host}/v1/orders/{orderId}/cancel. Работает только пока кода нет и возвращает 100 % на баланс. Если код уже пришёл, придёт ошибка ORDER_NOT_CANCELLABLE.
ZennoPoster: порядок действий
- Действие POST-запроса: URL, заголовки и тело из пункта 1; ответ сохраните в переменную, например
order_json. - Разберите JSON и положите
data[0].orderIdвorder_id, аdata[0].email— вemail. Еслиsuccessравенfalse, отправьте поток в ветку ошибки. - Заполните форму регистрации адресом из
emailи отправьте её. - Запустите ожидание кода — удобнее всего одним C#-действием:
// C#-код в ZennoPoster: ждём код по заказу из переменной order_id
var wc = new System.Net.WebClient();
wc.Headers["Authorization"] = "Bearer " + project.Variables["api_key"].Value;
string url = "https://" + project.Variables["api_host"].Value + "/v1/orders/" + project.Variables["order_id"].Value;
for (int i = 0; i < 75; i++) // 75 попыток по 4 секунды — около 5 минут
{
string json = wc.DownloadString(url);
var m = System.Text.RegularExpressions.Regex.Match(json, "\"code\":\"([^\"]+)\"");
if (m.Success) return m.Groups[1].Value; // код уходит в переменную результата
if (json.Contains("\"status\":\"cancelled\"")) break;
System.Threading.Thread.Sleep(4000);
}
return "";
- Если результат пустой, отправьте запрос отмены из пункта 3 — деньги вернутся сразу, не дожидаясь автоматической отмены.
BAS: порядок действий
В BrowserAutomationStudio те же шаги собираются из действий модуля HTTP-клиента и действия «Выполнить код». После POST-запроса сохраните содержимое ответа в [[ORDER_RESPONSE]] и разберите его:
// BAS, «Выполнить код»: разбираем ответ на создание заказа
var r = JSON.parse([[ORDER_RESPONSE]]);
[[OTP_ERROR]] = r.success ? "" : r.error.code;
if (r.success) {
[[ORDER_ID]] = r.data[0].orderId;
[[EMAIL]] = r.data[0].email;
}
Дальше — цикл: GET-запрос заказа, пауза 4 секунды и разбор ответа, пока [[CODE]] пустой и не исчерпан лимит попыток:
// BAS, «Выполнить код» внутри цикла: ищем код в ответе
var r = JSON.parse([[POLL_RESPONSE]]);
var otp = r.success ? r.data.otp : [];
[[CODE]] = otp.length ? otp[otp.length - 1].code : "";
[[STATUS]] = r.success ? r.data.status : "error";
Выходите из цикла, когда [[CODE]] не пустой или [[STATUS]] равен cancelled. Если лимит попыток исчерпан, а кода нет, отправьте запрос отмены.
Тайм-аут, отмена и возврат
Время ожидания первого кода — не более 25 минут; если код не пришёл, заказ отменяется сам, а 100 % стоимости возвращается на баланс, обычно в течение минуты. В шаблоне разумно ставить свой, более короткий тайм-аут: если сервис обычно присылает код за минуту, а прошло пять, проще отменить заказ и попробовать снова. После первого кода отмены и возврата нет.
У некоторых сервисов свои правила — например, фиксированное окно без отмены и без возврата; они показаны в описании источника до аренды. Подробности — на странице возврат и гарантия.
Ошибки, лимиты и потоки
NO_MAILS_AVAILABLEилиOUT_OF_STOCK— ящики закончились, деньги не списаны. Повторите позже или сменитеdomain.DOMAIN_UNAVAILABLE— у сервиса нет варианта iCloud; повторите сgmail.com.INSUFFICIENT_BALANCE— пополните баланс.RATE_LIMITED(HTTP 429) — превышен лимит; подождите столько секунд, сколько указано в заголовкеRetry-After.
Лимит по умолчанию — 20 запросов в секунду и 900 в минуту на ключ. Один заказ, который опрашивается раз в 4 секунды, тратит 15 запросов в минуту, поэтому одновременно можно ждать коды примерно для 60 заказов. Нужно больше — опрашивайте реже или арендуйте ящики пачкой: поле quantity принимает до 200 штук за запрос. Для сервисов, где ящики часто заканчиваются, есть параметр warehouse — он задаёт выбор источника; варианты описаны в документации API.
Правила сервисов
Аренда адреса не меняет правил платформы, в которой вы регистрируетесь. Создавайте аккаунты только в том количестве и для тех целей, которые разрешают её условия, и не используйте их для обмана людей. OTPGmail выдаёт адрес и код, но не отвечает за использование не по назначению.
Тот же процесс на Python с разбором ошибок — в инструкции API для получения кода из почты на Python, общий обзор — на странице API для почты. Ключ и баланс — в приложении OTPGmail.
Часто задаваемые вопросы
Нужен ли отдельный модуль для BAS или ZennoPoster?
Нет. API — обычный REST с JSON, поэтому хватает стандартных действий HTTP-запроса, разбора JSON и цикла.
Как часто опрашивать заказ из шаблона?
Раз в 3–5 секунд. Чаще бессмысленно: код появится не раньше, чем его отправит сервис, а лимит запросов закончится быстрее.
Что делать, если ящики для сервиса закончились?
Ответ NO_MAILS_AVAILABLE или OUT_OF_STOCK означает, что деньги не списаны. Поставьте в шаблоне паузу и повтор, попробуйте другой тип адреса или задайте параметр warehouse.
Списываются ли деньги за отменённые заказы?
Нет: отмена до первого кода и автоматическая отмена по тайм-ауту возвращают 100 % на баланс. Исключение — сервисы с собственными правилами без возврата; они отмечены до аренды.
Можно ли получить второй код на тот же адрес?
Да, если сервис отправляет больше одного кода на ящик и окно заказа ещё открыто: новые коды добавляются в конец data.otp. Многие сервисы присылают только один код.
