The Below JS Code Works


  • Re: WebSocket 2.0 Streaming is not Receiving the Live Price Feed

    //Working Code which fetches prices of reliance, sbi, and nifty
    
    const WebSocket = require('ws');
    
    // WebSocket URL
    const url = 'ws://smartapisocket.angelone.in/smart-stream';
    
    // Authentication headers
    const headers = {
      'Authorization': 'Bearer JWT_TOKEN',
      'x-api-key': 'erZDHFHD',
      'x-client-code': 'P529774',
      'x-feed-token': 'FEED_TOKEN'
    };
    
    // Create a WebSocket instance
    const socket = new WebSocket(url, { headers });
    
    // Handle WebSocket connection open
    socket.on('open', () => {
      console.log('WebSocket connected');
    
      // Send a subscription request
      const subscriptionRequest = {
        //correlationID: '',
        action: 1,
        params: {
          mode: 1,
          tokenList: [
            {
              exchangeType: 1,
              tokens: ['26000','2885','3045','99926009','99926011']
    
              /*
              NIFTY-50: 26000
              RELIANCE-EQ: 2885
              SBIN-EQ: 3045
              NIFTY BANK:99926009
              NIFTY MIDCAP 100:99926011
              SENSEX: 99919000
    
              */
    
            },
           /* {
              exchangeType: 5,
              tokens: ['234230', '234235', '234219']
            }*/
          ]
        }
      };
    
      socket.send(JSON.stringify(subscriptionRequest));
    });
    
    // Handle received messages from the WebSocket
    socket.on('message', (message) => {
      // Parse the received binary data based on the provided response contract
    
      // Example: Extract the Last Traded Price (LTP) from the received data
      const data = new Uint8Array(message);
      const ltpBytes = data.slice(43, 47);
      const ltpValue = ltpBytes.reduce((value, byte, index) => value + byte * Math.pow(256, index), 0);
      const ltp = ltpValue / 100;
    
      console.log('Received LTP:', ltp);
    });
    
    // Handle WebSocket connection close
    socket.on('close', () => {
      console.log('WebSocket connection closed');
    });
    
    // Send heartbeat message every 30 seconds to keep the connection alive
    setInterval(() => {
      if (socket.readyState === WebSocket.OPEN) {
        socket.send('ping');
      }
    }, 30000);