TradingView WebHook API не работает. Что может блокировать запросы POST?

С тех пор, как TradingView открыл поддержку веб-перехватчиков, я рвал на себе волосы, пытаясь понять, почему мой сервер не получает никаких сигналов. Я сделал следующее до сих пор:

  • Убедитесь, что порты открыты, убедитесь, что TradingView действительно отправляет POST-запросы.
  • Пробовал POSTing на сервере barebones nodejs, сервере flask и, наконец, обратном прокси-сервере nginx на сервер flask.
  • Сделал перекрестные ссылки на входящие заголовки и тело POST на webhook.site, реплицировал их на Postman, а также на другие инструменты, и мой сервер принял их нормально.

Вы можете увидеть поступающие сигналы здесь: http://webhook.site/#!/48e29a5b-d266-4021-8b96-0039371b3643/2005d010-e3ae-4077-8808-af34491f5a4d/

Но где-то на пути доставки явно что-то идет не так, потому что в логах nginx и unix нет ни следа каких-либо запросов. Это определенно не проблема брандмауэра или CORS, иначе у меня была бы такая же проблема при репликации с помощью инструментов, верно? Кто-нибудь может помочь мне раскрыть это дело?

Вот мой конфиг nginx:

    server {
    listen 80;
    server_name lunarlabs.org;

    location / {
      add_header 'Access-Control-Allow-Origin' '*';
      add_header 'Access-Control-Allow-Credentials' 'true';
      add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
      add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
      return 301 https://$host$request_uri;
    }

}

server {
      listen 443 ssl;
      server_name lunarlabs.org;
      ssl_certificate /etc/letsencrypt/live/***.org/cert.pem;
      ssl_certificate_key /etc/letsencrypt/live/***.org/privkey.pem;
      # ...
      access_log  /var/log/nginx.log;
      error_log /var/log/nginxerror.log;

      root /var/www/html/public;
      index index.php;

    location / {
      add_header 'Access-Control-Allow-Origin' '*';
      add_header 'Access-Control-Allow-Credentials' 'true';
      add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
      add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,X-Forwarded-For,content-length';
      include proxy_params;
      proxy_pass http://unix:/home/tvhook/***;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection 'upgrade';
      proxy_set_header Host $host;
      proxy_cache_bypass $http_upgrade;
    }
}

Демонстрационный сервер веб-перехватчиков, который я настроил, доступен по адресу https://lunarlabs.org/webhook — любой Данные POST в формате JSON должны возвращать 200. Но сигналы TradingView, похоже, действительно не нравятся моему серверу или моему серверу действительно не нравятся их запросы.


person Isaiah Y    schedule 25.08.2019    source источник
comment
как ты это решил?   -  person T.Todua    schedule 17.09.2019


Ответы (4)


У меня была такая же проблема.

Служба поддержки Tradingview сообщила об ошибке на своей стороне: «x509: сертификат, подписанный неизвестным органом». Однако запрос на завивку работал нормально для меня.

Я использую SSL-сертификат Comodo, и оказалось, что я не настроил «цепной сертификат» на своей стороне в nginx. Помогла настройка и переустановка nginx. Вебхуки с ТВ теперь работают нормально.

person Kuba Włodarczyk    schedule 29.08.2019

Сообщение https://lunarlabs.org/webhook: x509: сертификат, подписанный неизвестным центром

curl --data 'ds' 'https://lunarlabs.org/webhook' curl: (60) Peer сертификат не может быть аутентифицирован с помощью известных сертификатов CA. Подробнее здесь: http://curl.haxx.se/docs/sslcerts.html

curl выполняет проверку SSL-сертификата по умолчанию, используя «набор» открытых ключей центра сертификации (CA) (сертификаты CA). Если файл пакета по умолчанию не подходит, вы можете указать альтернативный файл, используя параметр --cacert. Если этот HTTPS-сервер использует сертификат, подписанный ЦС, представленным в комплекте, проверка сертификата, вероятно, не удалась из-за проблемы с сертификатом (срок его действия может быть просрочен или имя может не совпадать с именем домена в URL-адресе). Если вы хотите отключить проверку сертификата curl, используйте параметр -k (или --insecure).

person Andrey D    schedule 26.08.2019

Я столкнулся с той же проблемой, хотя мои настройки могут немного отличаться.

Апач + фляга

tradingview_alert = request.get_json(force=True)

Получить данные, полученные в запросе Flask

person Coinpocalypse    schedule 26.08.2019
comment
Это ответ или различия между вашей конфигурацией и конфигурацией OP? - person barbsan; 26.08.2019
comment
Это ответ на исчезновение описания предупреждения, которое tradeview передает в запросе POST, и мой способ решения этой проблемы. Скорее всего, это связано с тем, что tradeview отправляет JSON, но не устанавливает соответствующий заголовок. - person Coinpocalypse; 26.08.2019

Я пробовал серверы Windows и Linux (ubuntu) (с Apache), и оба они получили пинг, но пустые данные сообщения. Я не мог найти проблему до настоящего времени (я сомневаюсь, что телевизор не сможет добиться успеха с curl).

Итак, у меня есть два варианта:

1) перейти на хук "Mail-to-SMS" и использовать простой сервис https://cloudmailin.com

or

2) Используйте прямые ссылки для Webhook, например:

оповещение1 : example.com/?action=BUY
оповещение2 : example.com/?action=SELL

поэтому вам не нужно пустое сообщение, вместо этого извлеките переменные запроса $_GET.

person T.Todua    schedule 17.09.2019