Ошибка вызова веб-перехватчика: ошибка URL_REJECTED в DialogFlow v2 Fulfillments

Описание ошибки

При вызове DialogFlow v2 detectIntent API мы случайным образом получаем внутреннюю ошибку с кодом состояния 13:

Вызов веб-перехватчика не удался. Ошибка получения без кода состояния HTTP. Статус: Состояние: URL_REJECTED Причина: 67

Эта ошибка возникает случайно. Один и тот же запрос может быть успешным или неудачным. Интересно, что с пятницы, 23 августа 2019 года, качество обслуживания ухудшается, и сегодня он не работает почти при каждом вызове.

Наше расследование

Мы вообще ничего не нашли о URL_REJECTED с DialogFlow или Google в Интернете.

Но мы нашли значение кода состояния 13 на этой странице :

Внутренние ошибки. Это означает, что некоторые инварианты, ожидаемые базовой системой, были нарушены. Этот код ошибки зарезервирован для серьезных ошибок.

Мы также проверили, что мы не запрещаем Google IP, что наша балансировка нагрузки не нарушена (мы думали об этом, поскольку это будет иметь смысл при случайных сбоях).

Веб-перехватчик запущен и работает, и мы можем называть его сами. Проблема, похоже, возникает в инфра-системе Google, поскольку, похоже, показывает код ошибки 13.


person Drestin    schedule 27.08.2019    source источник


Ответы (2)


(Я отвечаю сразу, потому что мы исправили это перед тем, как опубликовать вопрос. Тем не менее, я отправил сообщение, потому что это может быть полезно для других)

Проблема заключалась в том, что веб-перехватчик был вызван с использованием http. Установка https решила проблему.

Похоже, что Google активировал политику веб-перехватчика для отклонения небезопасных вызовов на своих серверах. Возможно, он был постепенно развернут в их кластере, что могло бы объяснить постепенную деградацию.

Мы знаем, что давно должны были перейти на https, но до сих пор не нашли упоминания о применении этой политики в сети.

person Drestin    schedule 27.08.2019
comment
Пожалуйста, по возможности подробно объясните свой подход. Я запускаю веб-перехватчик на колбе на Python, и это http. Теперь Dialogflow вообще не отвечает. - person neel; 28.08.2019
comment
Вам необходимо настроить https на своем сервере. Я сам этого не делал (это больше похоже на DevOps), но вы найдете множество ресурсов по этому поводу в Интернете. Короче говоря, это означает добавление сертификата к вашему серверу для шифрования запросов и добавление гарантий безопасности. Я нашел этот протокол HTTPS с помощью Flask blog.miguelgrinberg.com/post /. - person Drestin; 29.08.2019

Спасибо за публикацию. Я столкнулся с той же проблемой. Изменение моего веб-перехватчика на HTTPS, похоже, решает проблему.

person Aliss D.    schedule 28.08.2019