Tuesday, October 20, 2026

finlight Webhooks से Slack या Discord पर समाचार भेजें

Kevin Bartsch

finlight Webhooks से Slack या Discord पर समाचार भेजें

अपनी टीम के सामने समाचार पहुँचाने का सबसे तेज़ तरीका यह है कि उसे उसी चैट में भेजा जाए जिसे वे पहले से देख रहे हैं। finlight webhooks के साथ आपको पोलिंग नहीं करनी पड़ती: जैसे ही कोई लेख आपके फ़िल्टर से मेल खाता है, finlight आपके एंडपॉइंट को कॉल करता है। यह ट्यूटोरियल एक छोटा Python एंडपॉइंट बनाता है जो webhook को सत्यापित करता है और उसे Slack या Discord पर भेज देता है।

finlight webhooks कैसे काम करते हैं

आप dashboard में एक webhook बनाते हैं, उसके फ़िल्टर सेट करते हैं (टिकर, श्रेणियाँ, इत्यादि), और finlight को अपना एंडपॉइंट URL देते हैं। जब कोई लेख मेल खाता है, तो finlight उस लेख को आपके एंडपॉइंट पर POST करता है और अनुरोध पर हस्ताक्षर करता है, ताकि आप पुष्टि कर सकें कि यह वाकई finlight से ही आया है। हर अनुरोध में दो हेडर होते हैं:

  • X-Webhook-Signature — बॉडी का एक HMAC-SHA256 हस्ताक्षर।
  • X-Webhook-Timestamp — रीप्ले अस्वीकार करने के लिए (5 मिनट की सहनशीलता विंडो के साथ)।

आधिकारिक SDK आपके लिए दोनों को सत्यापित कर देता है।

एंडपॉइंट

import os

import requests
from flask import Flask, request
from finlight_client import WebhookService, WebhookVerificationError

app = Flask(__name__)

WEBHOOK_SECRET = os.environ["FINLIGHT_WEBHOOK_SECRET"]
CHAT_WEBHOOK_URL = os.environ["CHAT_WEBHOOK_URL"]


@app.route("/finlight-webhook", methods=["POST"])
def finlight_webhook():
    raw_body = request.get_data(as_text=True)
    signature = request.headers.get("X-Webhook-Signature")
    timestamp = request.headers.get("X-Webhook-Timestamp")

    try:
        article = WebhookService.construct_event(
            raw_body, signature, WEBHOOK_SECRET, timestamp
        )
    except WebhookVerificationError:
        return "", 400

    text = (
        f"*{article.title}*\n"
        f"{article.sentiment} · {article.source}\n"
        f"{article.link}"
    )

    # Slack incoming webhook expects {"text": ...}
    requests.post(CHAT_WEBHOOK_URL, json={"text": text})
    return "", 200

WebhookService.construct_event(...) हस्ताक्षर की जाँच करता है, टाइमस्टैम्प को मान्य करता है, और एक पार्स किया हुआ Article लौटाता है। यदि कुछ भी विफल होता है, तो यह WebhookVerificationError फेंकता है, और आप 400 लौटाते हैं।

इसके बजाय Discord पर भेजना

Discord incoming webhook text के बजाय content फ़ील्ड का उपयोग करते हैं। इस post को बदल दें:

requests.post(CHAT_WEBHOOK_URL, json={"content": text})

बाकी सब वैसा ही रहता है।

हमेशा सत्यापित करें

सत्यापन मायने रखता है: इसके बिना, जो भी आपका URL ढूँढ ले, वह आपके चैनल में नकली लेख भेज सकता है। हमेशा कच्ची, बिना पार्स की हुई बॉडी construct_event को पास करें (उसे पहले दोबारा सिरियलाइज़ न करें), अपने एंडपॉइंट का सीक्रेट एक एनवायरनमेंट वेरिएबल में रखें, और जल्दी रिस्पॉन्स दें ताकि finlight इंतज़ार में न रहे।

एनरिच्ड बनाम रॉ

finlight एनरिच्ड webhook (सेंटिमेंट और एंटिटी के साथ) और रॉ webhook (हल्का, तेज़) दोनों प्रदान करता है। जब आपके अलर्ट में सेंटिमेंट या संबंधित कंपनियाँ दिखानी हों तब एनरिच्ड का उपयोग करें, और जब आपको बस हेडलाइन जितनी जल्दी हो सके चाहिए तब रॉ का।

आगे कहाँ जाएँ

अपनी मुफ़्त API key पाएँ →