Webhooks из нового API TradingView исчезают, что может блокировать запросы POST?

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

  • Убедитесь, что порты открыты, и что TradingView действительно отправляет запросы POST.
  • Попробовал POSTing на сервере barebones nodejs, сервере фляги и, наконец, обратный прокси-сервер nginx к серверу фляги.
  • Перекрестные ссылки на входящие заголовки 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;
    }
}

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

3 ответа

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

Поддержка Tradingview сообщила об ошибке на своей стороне: "x509: сертификат подписан неизвестным органом". Однако запрос curl работал нормально для меня.

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

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

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

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

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

Apache + Flask

tradingview_alert = request.get_json(force=True)

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

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

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

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

или

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

alert1: example.com/?action=BUY
alert2: example.com/?action=SELL

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

Другие вопросы по тегам