あなたのモバイル番号に無料の暗号融資清算警告をする

22150 ワード

この前の6月、私は摂氏からローンを取った.私の家族のためのいくつかの財政援助のためのネットワーク.以前は、私がそれのhodlerであったので、私はBitcoin価格について決して心配しませんでした、しかし、私がローンをとったとき、私は小さい価格しゃっくりがあったとしても、より怖いです.

REFERAL ALERT
If you would like to take the loan against your crypto give celsius a chance, use this signup promo https://celsiusnetwork.app.link/149806af89 you get $40 and I get $40, more about it here


その結果、私はBitcoin価格のためのオンライン警報のためにgoogledしました、そして、私はCryptocurrencyalertingを見つけました.しかし、私は無料の電話の呼び出しのアラートサービスを取得しないキャッチは、代わりに電子メールを得た.米国とカナダの外では、いずれかの呼び出しやSMSを取得するには、プロの計画を持っている必要があります.それで、私はなぜ価格が条件に会ったとき、cron仕事を作成して、呼び出しをすると思いませんでした.

技術スタック

  • 私はNODEJSをcron仕事として働かせました.そして、それは絶えずAPIからbitcoin価格を問い合わせて、条件が満たされるかどうかチェックします.
  • Bitcoinの価格のためにCoingecko API .
  • 電話でプログラムを作るためにtwillo . あなたはクレジットカードなしで試用口座を持つことができます、そして、彼らはあなたに数を買うことができて、数分/呼び出しを費やすことができるいくつかの無料クレジットを提供します.more about here
  • 展開スタック


    Deta.sh 我々が我々のcron仕事を走らせる無料の雲プロバイダーです.DETAにはまだ有料プランはない.ので、コードを自由に実行できます.無料で無料ホスティングやサービスプロバイダを探検するFree-for-dev

    の暗号化を開始しましょう


    1 .アカウントの作成


    まず、DETAで無料アカウントを作成します.あなたがアカウントを持っていたならばweb.deta.sh エンドポイント.

    2 .ローカル開発の設定


    DETAで提供される指示に従ってください.千葉大here あなたのOSに基づくインストールとセットアップのために.CLIを設定したら、DETAにログインしてください.ターミナルからのshアカウント、それについてもっとhere

    3 . cronジョブの配備


    今すぐドキュメントをhere 単にあなたのダッシュボードで実行しているcron仕事を作成すること.この基本的な流れは、プラットフォームの概要を説明します.今まで我々はまだDETAを使って快適に感じています.shは、このようなプロトタイプのための素晴らしいプラットフォームです.
    作成している間BitCoinNumアラートとしてあなたのサンプルアプリを命名します、私たちが後でこのサンプル・コードをindex.js 論理に

    minimum time interval is 1 min while running the cron job


    4 .アカウントを作成する


    REFERAL ALERT
    use this referral link www.twilio.com/referral/eES7kf during sign up to get $10 and I get $10


    これを通すlink , あなたの自由なトレイルアカウントについての制限と説明については、どのようにまだ作成されていない場合.

    In the trial account you need to verify your phone number if you would like to receive a call or SMS.once you verify you will be able to receive calls that are made from code.


    あなたのサインアップの後、あなたはtwilio console .

    新しいtwilioプロジェクトを作成する


    方法を学ぶhere .

    6 .アカウントIDと認証トークンを取得する


    あなたのダッシュボードでは、呼び出しから送信/SMSを送信するために必要なアカウントsidとauthトークンを取得します.

    使節変数[ env ]の設定


    コードに必要なすべての値は.env .このファイルはAPIキーとauthトークンとプログラムに必要な他のデータを保持します.このファイルを敏感にして、Githubレポにファイルをアップロードしないでください.このファイルを入手できますhere . env変数についてhere ..env
    PROJECT_KEY=<Deta project key>
    DETABASE=<Database name, provide what ever name you like>
    MARGIN_CALL=<Your bitcoin margin call price in USD>
    LIQUIDATION_CALL=<Your bitcoin liq call price in USD>
    TWILIO_SID=<your Twilio sid>
    TWILIO_AUTH_TOKEN=<your Twilio auth token>
    TWILIO_PHONE_NUMBER=<Twillo phone number with country code>
    TWILIO_MESSAGE_LIQ=Bitcoin price is at liquidation call
    TWILIO_MESSAGE_MARGIN=Bitcoin price is at margin call
    PHONE_NUMBER_WITH_COUNTRY_CODE=<Phone number to which you want to receive a call, with Countrycode>
    

    There should not be space after the equals sign
    SECRET=123 //no space after equals
    SECRET= 123 //space after equals, not accepted


    プレースホルダのテキストを実際の値に置き換えます.Envファイルは、実行中にこれらの値をコードに反映するように次のコマンドを適用します.そのコマンドなしで将来的に値を更新する場合は、コードに反映されません.
    deta update -e .env
    
    

    8 .論理の適用


    前のステップ[ 3 ]では、サンプルコードを持つDETAプロジェクトを作成しましたindex.js ファイル.今必要なのは、ファイルのソースコード/内容をすべてノードに置き換えることです.以下のJSコード.私は、コード自体のコメントをして、あなたにその論理のその部分がしようとしていることを考えさせます.

    8.1インデックスの更新。jsファイル


    const { app, Deta } = require("deta");
    const axios = require("axios");
    
    
    // add your Project Key
    const deta = Deta(process.env.PROJECT_KEY);
    // 
    // Envorment Varaibles
    const db = deta.Base(process.env.DETABASE);
    const accountSid = process.env.TWILIO_SID;
    const authToken = process.env.TWILIO_AUTH_TOKEN;
    const client = require("twilio")(accountSid, authToken);
    const marginCall = process.env.MARGIN_CALL;
    const liquidationCall = process.env.LIQUIDATION_CALL;
    const PhoneNumber=process.env.PHONE_NUMBER_WITH_COUNTRY_CODE;
    
    let btcprice = 0;
    
    // define a function to run on a schedule
    // the function must take an event as an argument
    app.lib.cron(async (event) => {
      console.log("CRON running @ " + new Date().toLocaleTimeString());
      const resp = await getBitcoinPrice();
      const data = resp.data;
      console.log("Current BTC price ===>", data.bitcoin.usd);
      btcprice = parseInt(data.bitcoin.usd);
      //btcprice = 23000; this variable holds the btc price at that moment
    
      // hascalled is the key in the database, which stores if phone call made for liquidation/Margin conditions when the predefined criteria met.
      // Suppose if BTC price met Margin condition then a call will be made , once its made,the code is not going 
      // to make a another call in the very next run even the condition satisfied.
    
    // querying the DB for the key `hascalled`
      let hasCalled = await db.get("hascalled");
    
      console.log("values from db for the key named hascalled is  -->", hasCalled);
      if (hasCalled == null) {
        // Runs for the very first time
    
        // initally set margin and liq to false for the key 'hascalled' in db
        const insertedkey = await db.put(
          { margin: false, liq: false },
          "hascalled"
        );
    
        hasCalled = insertedkey;
      }
    
      //_BTCValidation_Block_Margin
      if (hasCalled.margin == false) {
    
        // This block will get executed only if there was no liquidation call not made yet
        await _BTCValidationMargin();
      }
    
      //_BTCValidation_Block_Liquidation
      if (hasCalled.liq == false) {
         // This block will get executed only if there was no liquidation call not made yet
        await _BTCValidationliquid();
      }
    
    
    });
    
    
    const _BTCValidationMargin = async () => {
      if (btcprice < marginCall && btcprice > liquidationCall) {
    
        await getCallfromTwillo(process.env.TWILIO_MESSAGE_MARGIN, PhoneNumber);
    
        const updateState = await db.update({ margin: true }, "hascalled");
        console.log("DB UPDATED For Margin --->", updateState);
      }
    };
    
    const _BTCValidationliquid = async () => {
      if (btcprice < liquidationCall) {
    
        await getCallfromTwillo(process.env.TWILIO_MESSAGE_LIQ, PhoneNumber);
    
        const updateState = await db.update({ liq: true }, "hascalled");
        console.log("DB UPDATED For Liquid --->", updateState);
      }
    };
    
    const getCallfromTwillo = async (msg, _to) => {
      const call = await client.calls.create({
        twiml: `<Response><Say>${msg}</Say></Response>`,
        to: _to,
        from: process.env.TWILIO_PHONE_NUMBER,
      });
      console.log(call.sid);
    
    };
    
    const getBitcoinPrice = async () => {
      try {
        return await axios.get(
          "https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=USD"
        );
      } catch (error) {
        console.error(error);
      }
    };
    
    module.exports = app;
    
    
    

    8.2プロジェクト依存の更新


    私たちの論理コードは2つのNPM依存性に依存します.AXIOS and TWILIO .インストールするには、次のコマンドを端末に適用します.
    npm i axios twilio
    

    最後に論理を展開する


    ルートディレクトリで端末を開き、次のコマンドを適用してローカルソースコードをリモートに展開します
    deta deploy
    
    配備について詳しく知るhere .

    ログ用チェックバイザー


    データ.は、Visor 生産コードのロガー種である機能.バイザーについて詳しく知るhere

    プロジェクト構造


    📦ビットコロン
    ┣ 📂.データ
    ┃ ┣ 📜進捗情報
    ┃ ┗ 📜州
    ┣ モジュール名
    ┣ 📜.env
    ┣ 📜インデックス.js
    ┣ 📜パッケージロック.JSON
    ┗ 📜パッケージ.JSON

    12 . detaベースリセット


    あなたが選択することによってそうすることができるDBでキーをリセットしたいならばBase あなたのdetabaseダッシュボードのセクション.次のようなイメージが表示されます

    そのキーの値をチェックすることもできます.次の実行は、更新された値
    これを使うgithub repo 更なる参照のために
    ⭐⭐⭐ 楽しいコーディングを持っている!⭐⭐⭐
    時間をありがとう.🐸