Изучение информации об ошибках при отправке сообщений через telegram

Статус ошибки в Телеграм

Статус ошибки приобретают те сообщения в Телеграм, которые не дошли до адресата. То есть если вы видите, что после отправки галочки “доставлено” в окне сообщения не появилось.

Чтобы понять, почему это произошло, следует провести анализ деталей ошибки. Все сообщения, которые приобрели такой статус, отображаются в статистике по каждой отправленной вами рассылке.

Изучение информации об ошибках при отправке сообщений через telegram

Обратите внимание на колонку “Статус” в отчетности, именно здесь прописываются детали ошибки.

Изучение информации об ошибках при отправке сообщений через telegram

Информация об ошибке

Кроме того, сведения об ошибке можно получить при переходе в само письмо. Если вы воспользуетесь этим способом и откроете сообщение, перед вами появится текст именно в таком виде, в котором вы отправили его адресату.

Ниже разберем самые распространенные ошибки и расскажем, что они означают:

Ошибка API

Если вы получите в отчете такие ошибки, пользователь будет автоматически отписан от бота. Таким образом, статус “Подключен” будет изменен на “Отключен”.

Изучение информации об ошибках при отправке сообщений через telegram

Ошибка/сбой API

API становятся все более важной частью экономики XXI века и нашей повседневной жизни. Огромные компании, такие как Stripe и Amazon, были построены на отличных платформах для разработчиков. Даже аналоговые инструменты, такие как офисные телефонные системы, становятся доступными API. Все более совершенные продукты VoIP интегрируются телефонные системы для малого бизнеса с таким программным обеспечением, как Google Workspace. Это открывает новые возможности для сотрудников и клиентов. Но API не исключают ошибок. Являетесь ли вы разработчиком проектов-любителей или обладателем миллиона долларов SaaS-продукт пользователь, вы обнаружите, что сбои неизбежны.

Что такое ошибка/сбой API?

Ошибка API происходит когда серверу не удается найти запрошенный ресурс у поставщика API. В таких случаях возвращается числовое сообщение об ошибке, помогающее идентифицировать конкретную ошибку. К частым причинам ошибок API относятся проблемы в конечной точке, неправильные параметры или проблемы с ключом API во время вызова запроса. Разрешение этих ошибок имеет решающее значение для бесперебойной связи между приложениями и обеспечения успешного получения данных от поставщика API.

Распространенные ошибки API

Некоторые распространенные ошибки API:

Ошибки HTTP/HTTPS

Одна из наиболее распространенных ошибок API возникает, когда в URL-адресах путаются протоколы http:// и https://.

Для разработчиков проблема в том, что некоторые API поддерживают только протокол HTTP, а другие совместимы с HTTPS. Некоторые поддерживают разные стандарты на разных конечных точках в одном и том же клиентоориентированном продукте.

Это может стать еще более запутанным, когда разработчики объединяют несколько API. Если они являются штатными разработчиками, создающими решения сделай сам для асинхронного бизнес-коммуникации с удаленными командами. Разработчикам приходится тратить время на поиск конечной точки, вызывающей проблему, а затем создавать обходной путь, позволяющий двум остальным API взаимодействовать друг с другом.
Если вы API провайдер, вы можете предотвратить эту ошибку, применив определенные стратегии HTTPS. Например, ваш API может автоматически перенаправлять HTTP-запросы на HTTPS-запросы по мере их поступления.
## Бесполезные сообщения об ошибках API
Для ваших пользователей качество сообщений об ошибках может быть разницей между кратким сбоем и часом, потраченным на то, чтобы рвать на себе волосы, что помогает сокращение оттока клиентов.
HTTP предоставляет более 70 кодов состояния HTTP, но вам нужно реализовать как минимум наиболее распространенные из них, с которыми привыкли работать разработчики. Примеры таких включают:
- `400 Bad Request`
- `404 Not Found`
- `429 Too Many Requests`
- `5xx API Errors`
Почти всегда это происходит из-за опечатки во вводе пользователя. Но это не значит, что вы сошли с крючка! Убедитесь, что в сообщении об ошибке указаны некоторые подробности ошибочного ввода, чтобы пользователь мог быстро его исправить.
### Несанкционированный
Это означает, что код авторизации признан действительным, но у пользователя нет разрешения. Например, пользователь может пытаться получить доступ к чему-то, доступному только администраторам, что повышает безопасность удаленного персонала.
### Не найдено
Запрос пользователя действителен, но конечная точка или ресурс, который он запрашивает, не существует. Возможно, это связано с тем, что файл уже был удален, но убедитесь, что это не вызвано ошибкой HTTP/HTTPS.
### Слишком много запросов
Это происходит, когда один и тот же пользователь пытается вызвать API слишком много раз подряд. После ряда громких DDoS-атак за последнее десятилетие веб-сервисы внимательно следят за тем, кто и как часто обращается к их серверу.
### Ошибки API 5xx
Коды состояния, начинающиеся с 5, обозначают ошибки сервера, возможно, с вашей стороны. В этом случае убедитесь, что ваши сообщения об ошибках помогают или успокаивают пользователя. Это может быть контактная информация или страница с актуальной информацией о времени безотказной работы и простоя.
Поставщики API могут избежать некорректных сообщений об ошибках, приложив лишь небольшую адаптацию и обработку ошибок. Не ограничивайтесь кодом ошибки и используйте четкие и краткие сообщения, которые ссылаются на документацию.
## Адаптация сообщений об ошибках API
Поставщики программного обеспечения должны создать целевой профиль потребителей - разработчиков, которые будут использовать их API.
Сообщения об ошибках должны быть адаптированы к типам цифровых задач, которые разработчики будут пытаться выполнить.
### Пример сообщения об ошибке от Twilio

message: Номер Кому 5551234567 не является действительным номером телефона.

В этом сообщении, помимо стандартного статуса 400, есть код ошибки 21211.
В сообщении упоминается конкретный виртуальный номер телефона, вызывающий проблему, и ссылка на страницу документации для изучения проблемы 21211.
### Значение хороших сообщений об ошибках
Плохие сообщения об ошибках усложняют интеграцию API в компанию, ориентированную на продукт. Простой процесс интеграции API имеет решающее значение для успеха.
Хорошие сообщения об ошибках не только важны для функциональности, но также являются маркетинговым активом для API.
## Смешение методов
Ошибка может возникнуть, если перепутаны методы запроса. Например, отправка POST запроса, который возвращает GET запрос, может вызвать ошибку.
Неясная документация также может привести к ошибкам методов. Важно объяснить в документации, какие методы требуются.
## Отсутствие заголовков Content-Type/Accept
Большинство API требуют наличие заголовков Content-Type и Accept. Эти заголовки помогают согласовать типы данных, которые отправляются и принимаются.
Некоторые API могут принимать запросы без этих заголовков, но коммерческие API, связанные с безопасностью, могут строго контролировать заголовки.

Изображение

Ошибки в API-запросах: распространенные ошибки, которые следует избегать
Поставщики API также должны проверять типы ответов, которые они могут получить по умолчанию или по ошибке. Если у вашего API нет причин обрабатывать HTML, вам следует отклонить этот тип контента. Это позволяет избежать проблем, с которыми вы можете столкнуться при использовании обычных инструментов. Например, всякий раз, когда Nginx получает тайм-аут запроса, он может выдать вам ошибку HTML, которую ваш API не знает, как обработать.
## Объяснение предотвращения ошибок
Предотвращение многих из этих распространенных ошибок сводится к тщательному тестированию. Также хорошей идеей будет жестко контролировать, какие данные будет принимать ваш API, как только они станут доступны. Кроме того, поставщики API должны уделять особое внимание отличной документации API и сообщениям об ошибках.
Это поможет пользователям самостоятельно разобраться в проблемах, но если дело дойдет до программное обеспечение для обслуживания клиентов, это поможет вам быстрее решить проблему. После того, как вы выявили этот недостаток, пришло время посмотреть, сможете ли вы улучшить свою документацию или даже абстрагировать всю проблему, чтобы она больше не повторилась.
## Введение
В данном кейсе будет рассмотрена настройка nginx для задания кастомных страниц типовых ошибок вместо стандартных или их отсутствия.
## Описание задачи
Как правило, на наших проектах создаётся страница ошибки 404 в своём дизайне, которая подключается автоматически, с помощью штатной конфигурации сервера. А вот другим статусам ошибок такое внимание не уделяется, хотя реализовать подключение страниц для них несложно.
По итогу, вместо стандартного вывода браузера,
![](https://thb.tildacdn.com/tild3134-3332-4431-a431-643632623536/-/empty/sozdanie-stranic-tip.jpg)
или стандартной страницы ошибки веб-сервера,
![](https://thb.tildacdn.com/tild3163-6137-4033-b264-373833643662/-/empty/noroot.png)
мы получим полноценную страницу сайта.
![](https://thb.tildacdn.com/tild6439-6534-4430-b839-313038616330/-/empty/noroot.png)
## Исходные данные
В качестве типового примера рассмотрим следующую конфигурацию. Предположим, для статуса 400 Bad Request нам нужно отдать статичный html-файл. Для статусов 401 Unauthorized, 402 Payment Required и 403 Forbidden будем использовать один php-обработчик, который сам должен будет определять тип ошибки. Для статуса 404 Not Found подключим другой php-обработчик. А для статусов 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable и 504 Gateway Timeout применим один общий html-файл.
Разбираемый пример затем можно будет адаптировать под потребности реального проекта.
Подключение PHP-страницы для обработки ошибки не рекомендуется — лучше подготовить и затем подключить специальные html-страницы без динамической информации. Генерируемые ботами ошибки (например, 404) через подключаемые страницы ошибок могут создавать существенную нагрузку на сервер.
## Решение
Первым делом нужно определиться с тем, используется ли на сервере nginx. Уточнить это можно, проверив заголовки ответа сервера через Chrome DevTools.
![](https://thb.tildacdn.com/tild6333-6666-4333-a632-656336393634/-/empty/server-nginx.jpg)
Для задания страниц ошибок нужно внести правки в файл конфигурации nginx, который отвечает за настраиваемый сайт. Например, для наших серверов разработки путь к файлам конфигурации для сайтов содержит название сайта.
Пример для сайта site.o2k.ru — файл /etc/nginx/sites-available/site.o2k.ru.conf.
Для задания страниц ошибок в конфигурацию сервера нужно добавить следующие строчки:
fastcgi\_intercept\_errors on; error\_page 400 /error\_pages/400.html; error\_page 401 /error\_pages/40x.php?code=401; error\_page 402 /error\_pages/40x.php?code=402; error\_page 403 /error\_pages/40x.php?code=403; error\_page 404 /error\_pages/404.php; error\_page 500 502 503 504 /error\_pages/50x.html;
Общий вид файла конфигурации (красным фоном выделены изменения).
Смысл конфигурации в следующем:
Без этой директивы ошибки, генерируемые в PHP (например, установка статуса 404), не будут обрабатываться nginx, и клиенту (браузеру) будет отдаваться «сырой» ответ от PHP.
При использовании Apache можно отключить эту директиву и отдавать страницы ошибок через него, но очевидных преимуществ у этого решения нет, а конфигурировать нужно уже два сервиса вместо одного.
Если эта директива установлена, то на указанных в директиве error\_page страницах типовых ошибок (например, /error\_pages/40x.php) не должен устанавливаться статус!
Это, например, вызов кода CHTTP::SetStatus("404 Not Found"); или header("HTTP/1.0 404 Not Found");. Если статус будет устанавливаться, то будет происходить зацикливание: PHP выдаёт статус 404, nginx перехватывает его и подключает свою страницу 404, на ней PHP выдает статус 404, nginx перехватывает его и так далее по кругу. Nginx отслеживает возникновение такой ситуации и выводит свою страницу ошибки по умолчанию, поэтому сервер не зависнет, но тем не менее наша кастомная страница ошибки не подключится.
После изменения конфигурации нужно перезагрузить nginx:
Для сверки можно использовать страницы, на которых устанавливаются соответствующие статусы. Такие страницы есть в архиве, приведённом в разделе «Файлы».
## Примечание — обработка API-адресов
Если на сайте есть скрипты, работающие как API, которым требуется отдавать сообщение в определенном формате даже при ошибках, то конфигурацию нужно дорабатывать.
Пример: на сайте реализована интеграция с внешним сервисом. Его логика работы такова, что он отправляет запрос на сайт, а в ответе ожидает получить результат выполнение некой операции. Если же операцию выполнить невозможно, например, переданы неверные авторизационные данные, не найден запрошенный заказ и т. п., то сайт должен передать соответствующий HTTP-статус, а также сообщение в том же формате, что и при успешной обработке.
Однако по приведенной выше конфигурации nginx «перехватывает» ошибку и отдает специальную страницу. То есть сервису в ответе придет не сообщение в формате, например, JSON, а HTML-код типовой страницы ошибки. Чтобы это исправить, нужно добавить в конфигурацию отдельное правило для обработки адресов API.
Правило, которое нужно добавить, создаётся на основе правила обработки файлов .php. Достаточно скопировать его, добавить в условия директиву fastcgi\_intercept\_errors off; и изменить условие отбора страниц для применения этого правила.
Один из вариантов сформировать условие отбора — заменить \~ .php$ () на ^\~ /local/api/ (для раздела /local/api/ — заменить на актуальный). Первое — это отбор по регулярному выражению — все, что заканчивается на .php. Второе — это отбор по совпадению пути — все, что начинается с указанного пути. Символ ^ в начале правила означает, что правило применится сразу же, без поиска и применения других подходящих условий. Без этого переопределение директивы fastcgi\_intercept\_errors в правиле не срабатывает.
Пример итогового правила для раздела /local/api:
Общий вид файла конфигурации (красным выделены изменения из предыдущего примера, синим — изменения из текущего раздела):
У такого решения есть недостаток — по новому правилу из указанного раздела интерпретатору PHP передаются все файлы, а не только файлы с разрешением .php. Поэтому особенно важно, чтобы указанный раздел не использовался для хранения загружаемых пользователями файлов.
Пример: в папку upload загружаются закачиваемые пользователями изображения. Если пользователь переименует файл с PHP-кодом example.php в файл изображения example.jpg, то сможет загрузить его, например, через интерфейс загрузки фото в форме отзыва. Если затем открыть этот файл по прямой ссылке, то он не будет исполнен интерпретатором PHP, поскольку ему передаются только файлы .php. А вот если такой файл будет загружен в указанный в конфигурации раздел (в примере это /local/api/), то его код будет исполнен.
Если кто-то получает доступ к файловой системе и загружает свои файлы не через интерфейсы сайта, а напрямую, то он может напрямую загрузить свой файл с кодом в любое место сайта и вызвать его исполнение по правилу .php. Поэтому потенциальная уязвимость решения именно в загружаемых пользователями файлах, которые загружаются через штатные интерфейсы. Маловероятно, что где-либо разделы для API будут использоваться еще и как разделы для хранения файлов пользователей, но теоретически такая возможность есть, поэтому о такой проблеме нужно знать.
## Результат
Вместо стандартного браузерного сообщения об ошибке или стандартной страницы ошибки сервер, теперь на сайте выводится наша страница, содержимым которой мы можем управлять, в том числе используя в ее формировании код на PHP.
Архив errors\_pages\_case.zip с папками error\_pages и errors. В папке error\_pages находятся простые примеры страниц ошибок, которые можно использовать как заглушки на время сверки настроек. В папке errors находятся страницы, устанавливающие соответствующие их названиям статусы. По этим страницам можно сверять, подключаются ли заданные в настройках сервера страницы ошибок, или выводятся стандартные. Также для сверки можно воспроизводить ситуацию, которую они и характеризуют, например, для проверки страницы статуса 404 набрать несуществующий адрес.
### Рекомендованные статьи
Стек: react, nextJS, TS
Это мой запрос
data это параметр который я отправляю
пробовал по этому ответу обворачивать url в encodeURIComponent, но не помогло
Bad Request при входе в приложение Госуслуги Москвы
Apple iPhone 14 pro, XS maxПрошивка: 16.4.1
Мб кто-то сталкивался с такой ошибкой?
Предпринимались действия:Действия с моей стороны по iphone 14 pro :lol: с перезагрузкой iphone после каждого из пунтов и не один раз:1) Удалила программу/загрузила заново на iphone;2) Сгрузила программу/восстановила на iphone;3) Почистила кукисы, кеши в телефона во всех браузерах (яндекс, сафари) на iphone;4) Удалила всю историю, предупреждения для сайтов, превью вкладок, чаты во всех браузерах (яндекс, сафари) на iphone;5) Проделала пункты 3 и 4 для браузера на ноутбуке на котором входила и меняла пароли :girl\_cray: ;6) Удалила программу Госуслуги с iphone XS max$ :lol: 7) Установила с официального сайта Госуслуг сертификат доверия (корневой сертификат);8) Сделала полный сброс iphone, как перед продажей, восстановила из резервной копии;8) Сделала полный сброс iphone, как перед продажей, зашла под другим аккаунтом;9) \*\*\* отчаялась\*\*\* :yes2: 10) \*\*\* по плану либо ждать новую версию ios/ либо перепрошить через iTunes (тут мне надо почитать как , но дело в том что сохраненная копия iphone у меня уже была сделана когда приложение Госуслуги Москвы уже не работали).
Сообщение отредактировал lentahl - 21.04.23, 15:50
ИИ-бот GetCourse Добрый день! Я - бот-помощник по документации платформы Getcourse, помогу вам найти ответ на справочный вопрос по работе системы. Пожалуйста, сформулируйте свой вопрос одним сообщением.
## Статья была полезной?
Если при отправке сообщения через Telegram оно не было доставлено пользователю, то такое сообщение получает статус «Ошибка».
Для того чтобы проверить, почему не было доставлено сообщение, нужно проанализировать детали ошибки.
Сообщения со статусом «Ошибка» можно просмотреть из статистики каждой отправленной рассылки.
Детали ошибки (её описание) можно увидеть в колонке «Статус»:
Также информацию по полученной ошибке можно будет увидеть при переходе в конкретное письмо:
Открытое таким образом сообщение содержит в себе текст в том виде, в котором оно было отправлено пользователю.
Наиболее распространённые ошибки и их значения:
После получения указанных выше ошибок происходит автоматическая отписка пользователя от вашего телеграм-бота. Статус его подписки изменяется с «Подключен» на «Отключен».
Читайте также:  Учетная форма 001 гс у для госслужбы бланк скачать бесплатно