# Fan Token transferleri için Telegram bildirimleri alın

Chiliz Chain üzerinde gerçekleşen Fan Token™ transferlerini izlemek, yüksek değerli hareketlerden haberdar olmanın ve topluluğunuzu gelişmelerden haberdar tutmanın harika bir yoludur.

Biraz yapılandırma ve kod ile, bir Fan Token™ transferi belirli bir eşiği aştığında bir grubu bilgilendirmek için bir Telegram botu kurabilirsiniz.

## Envio kullanarak bunu nasıl yaparsınız?

[Envio](https://envio.dev/) Chiliz’de akıllı sözleşme olaylarını dinlemesine ve olaya dayalı olarak bir işlem gerçekleştirmesine olanak tanıyan güçlü bir indeksleme aracıdır.

Bu nasıl yapılır rehberinde, botu nasıl yapılandıracağınızı, ilgili olayları nasıl yakalayacağınızı ve Telegram uyarılarını otomatik olarak nasıl tetikleyeceğinizi göreceksiniz; böylece kurulumunuzu büyük transferler için bir “balina gözlemcisine” dönüştüreceksiniz.

### 1. Adım: Ön Gereksinimleri Yükleyin

Başlamadan önce, gerekli araçların kurulu olduğundan emin olun: [gerekli araçlar](https://docs.envio.dev/docs/HyperIndex/getting-started#prerequisites) yüklü:

* [pnpm](https://pnpm.io/)
* [Node.js](https://nodejs.org/en)
* [Docker](https://www.docker.com/)

{% hint style="info" %}
Projenin tamamını [bu GitHub deposunda](https://github.com/DenhamPreen/fc-barce-fan-token-indexer/tree/main).
{% endhint %}

### 2. Adım: Envio Indexer’ı Başlatın

Bir Envio indexer’ını başlatmak ve Chiliz Chain üzerinde (EVM uyumlu bir blok zinciri olan) bir ERC20 şablonu oluşturmak için aşağıdaki komutu çalıştırın ve yönergeleri izleyin:

```bash
pnpx envio init
```

İstendiğinde yapmanız gereken çeşitli seçimler şunlardır:

<figure><img src="/files/2a98091e5edd72fa88f7e1ba4943a152c7f3ed77" alt=""><figcaption></figcaption></figure>

### 3. Adım: Yapılandırma `config.yaml`

Dosyasını `config.yaml` FC Barcelona Fan Token™ sözleşme adresini (veya izlemek istediğiniz başka bir Fan Token™’ı) belirtmek için değiştirin:

{% code overflow="wrap" lineNumbers="true" %}

```yaml
# yaml-language-server: $schema=./node_modules/envio/evm.schema.json
name: fan-token-watcher
description: Büyük transferlerde Telegram’a bildirim gönderen Fan Token’lar için basit bir indexer
networks:
  - id: 8888 # Chiliz
    start_block: 0
    contracts:
      - name: ERC20
        address: "0xFD3C73b3B09D418841dd6Aff341b2d6e3abA433b" # FC Barcelona
        handler: src/EventHandlers.ts
        events:          
          - event: "Transfer(address indexed from, address indexed to, uint256 value)"
field_selection:
  transaction_fields:
    - "hash"
```

{% endcode %}

**Not:** Biz `approval` olayını kaldırıyoruz çünkü yalnızca transferlerle ilgileniyoruz.

### 4. Adım: GraphQL Şemasını Basitleştirin

Dosyasını `schema.graphql` dosyasını yalnızca hesap bakiyelerini izlemek için:

```graphql
type Account {
  id: ID!   # Hesabın adresi
  balance: BigInt! # Hesabın token bakiyesi
}
```

Bu noktada, olayları dinleyen bir ERC20 indexer’ımız var.

Şimdi, Telegram bildirimleri göndermek için mantık ekleyelim.

### 5. Adım: Telegram Bildirim Mantığını Uygulayın

Dosyasını `/src/EventHandlers.ts` dosyasına büyük transferleri algılamak ve Telegram uyarıları göndermek için mantık ekleyin.

{% code overflow="wrap" lineNumbers="true" %}

```typescript
import { ERC20 } from "generated";
import { isIndexingAtHead, indexBalances } from "./libs/helpers";
import { fetchEnsHandle } from "./libs/ens";
import { sendMessageToTelegram } from "./libs/telegram";
import { WHALE_THRESHOLD, explorerUrlAddress, explorerUrlTx } from "./constants";

ERC20.Transfer.handler(async ({ event, context }) => {
  if (isIndexingAtHead(event.block.timestamp) && event.params.value >= BigInt(WHALE_THRESHOLD)) {
    const ensHandleOrFromAddress = await fetchEnsHandle(event.params.from); 
    const ensHandleOrToAddress = await fetchEnsHandle(event.params.to);
    const msg = `FC Barcelona BALINA UYARISI 🐋: <a href="${explorerUrlAddress(
      event.params.from
     )}">${ensHandleOrFromAddress}</a> tarafından <a href="${explorerUrlAddress(
      event.params.to
     )}">${ensHandleOrToAddress}</a> adresine ${event.params.value} FC Barcelona için yeni bir transfer yapıldı! 🔥 - <a href="${explorerUrlTx(
      event.transaction.hash
     )}">işlem</a>`;

    await sendMessageToTelegram(msg);
  }

  await indexBalances(context, event);
});
```

{% endcode %}

{% hint style="success" %}
Örnek `/libs/` klasörü [tam burada GitHub’da bulunabilir](https://github.com/DenhamPreen/fc-barce-fan-token-indexer/tree/main/src/libs), dahil olmak üzere `helpers.ts` ve `ens.ts` dosyaları.
{% endhint %}

### 6. Adım: Sabitleri Yapılandırın

Bir `constants.ts` dosyasını ortam değişkenlerini saklamak için kullanın:

{% code overflow="wrap" lineNumbers="true" %}

```typescript
export const EXPLORER_URL_MONAD = process.env.ENVIO_EXPLORER_URL_MONAD;
export const WHALE_THRESHOLD: string = process.env.ENVIO_WHALE_THRESHOLD ?? "1000";
export const BOT_TOKEN = process.env.ENVIO_BOT_TOKEN;
export const CHANNEL_ID = process.env.ENVIO_TELEGRAM_CHANNEL_ID;
export const MESSAGE_THREAD_ID = process.env.ENVIO_TELEGRAM_MESSAGE_THREAD_ID;

export const explorerUrlAddress = (address: string) =>
  EXPLORER_URL_MONAD + "address/" + address;
export const explorerUrlTx = (txHash: string) =>
  EXPLORER_URL_MONAD + "tx/" + txHash;
```

{% endcode %}

### 7. Adım: Telegram Mesajları Gönderme

Yükleyin [Axios HTTP istemcisini](https://axios-http.com/):

```bash
pnpm i axios
```

şu dosyada bir yardımcı işlev oluşturun: `libs/telegram.ts` Axios kullanarak mesaj göndermek için:

{% code overflow="wrap" lineNumbers="true" %}

```typescript
import axios from "axios";
import { CHANNEL_ID, MESSAGE_THREAD_ID, BOT_TOKEN } from "../constants";

export const sendMessageToTelegram = async (message: string): Promise<void> => {
  try {
    const apiUrl = `https://api.telegram.org/bot${BOT_TOKEN}/sendMessage`;
    await axios.post(apiUrl, {
      chat_id: CHANNEL_ID,
      text: message,
      parse_mode: "HTML",
    });
  } catch (error) {
    console.error("Mesaj gönderilirken hata oluştu:", error);
  }
};
```

{% endcode %}

### 8. Adım: Son Yapılandırma ve Indexer’ı Çalıştırma

#### Yapılandırın `.env` Dosyayı

```sh
cp .env.example .env
```

Düzenleyin `.env` Telegram bot kimlik bilgilerinizle:

```sh
ENVIO_BOT_TOKEN=
ENVIO_TELEGRAM_CHANNEL_ID=
ENVIO_TELEGRAM_MESSAGE_THREAD_ID=
ENVIO_EXPLORER_URL="https://chiliscan.com/"
ENVIO_WHALE_THRESHOLD=1000
```

#### Bir Telegram Botu Oluşturun

1. Mesaj `@BotFather` Telegram’da ve şunu çalıştırın:

   ```
   /newbot
   ```
2. Bot token’ınızı almak için yönergeleri izleyin.
3. Botu Telegram grubunuza ekleyin ve şunu çalıştırın `/start`.
4. Şurayı ziyaret edin `https://api.telegram.org/bot<YourBOTToken>/getUpdates` grup sohbet kimliğini bulmak için.

{% hint style="success" %}
Yeni grubu botla oluşturduysanız ve yalnızca şu sonucu alıyorsanız `{"ok":true,"result":[]}`, botu gruptan kaldırın ve tekrar ekleyin.
{% endhint %}

#### Son olarak, bağımlılıkları yükleyin ve indexer’ı başlatın

```sh
pnpm i
pnpm envio dev
```

Bu kurulumla, artık Fan Token transferlerini dinleyen ve Telegram’a balina uyarıları gönderen Envio destekli bir indexer’ınız var.

<figure><img src="/files/503a75375c658eb97fb3591f7ac82272984d7b30" alt=""><figcaption></figcaption></figure>

Daha ileri gitmek için, indexer’ı kendi sunucunuzda barındırabilir veya Envio’nun barındırılan hizmetine dağıtabilirsiniz.

Ve bakiyeleri kaydettiğimiz için, bir GraphQL bakiye API’si olarak da kullanılabilir.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.chiliz.com/tr-ai/develop/advanced/get-telegram-notifications-for-fan-token-transfers.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
