> For the complete documentation index, see [llms.txt](https://docs.chiliz.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.chiliz.com/tr/gelistir/gelismis/fan-token-telegram-bildirimleri.md).

# Fan Token Transferleri için Telegram Bildirimleri

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

Biraz yapılandırma ve kodla, bir Fan Token™ transferi belirli bir eşiği aştığında bir gruba bildirim gönderen bir Telegram botu kurabilirsiniz.

## Envio Kullanarak Nasıl Yapılır?

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

Bu rehberde 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 kurulumunuz büyük transferler için bir "balina izleyiciye" dönüşecektir.

### Adım 1: Ön Koşulların Kurulumu

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

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

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

### Adım 2: Envio İndeksleyicisini Başlatma

Bir Envio indeksleyicisi başlatmak ve Chiliz Chain'de (EVM uyumlu bir blockchain) ERC20 şablonu oluşturmak için yönlendirmeleri takip ederek aşağıdaki komutu çalıştırın:

```bash
pnpx envio init
```

İstemde yapmanız gereken seçimler şöyledir:

<figure><img src="/files/WpDGtslerInIMzOv4UhL" alt=""><figcaption></figcaption></figure>

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

`config.yaml` dosyasını, takip etmek istediğiniz FC Barcelona Fan Token™'ının (veya herhangi bir Fan Token™'ın) sözleşme adresini belirtecek şekilde değiştirin:

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

```yaml
# yaml-language-server: $schema=./node_modules/envio/evm.schema.json
name: fan-token-watcher
description: A simple indexer for Fan Tokens that posts notifications to Telegram on large transfers
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:** Yalnızca transferlerle ilgilendiğimiz için `approval` olayını kaldırıyoruz.

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

`schema.graphql` dosyasını yalnızca hesap bakiyelerini izleyecek şekilde değiştirin:

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

Bu noktada, olayları dinleyen bir ERC20 indeksleyicimiz var.

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

### Adım 5: Telegram Bildirim Mantığını Uygulama

`/src/EventHandlers.ts` dosyasını büyük transferleri tespit etmek ve Telegram uyarıları göndermek için mantık içerecek şekilde değiştirin.

{% 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 WHALE ALERT 🐋: A new transfer has been made by <a href="${explorerUrlAddress(
      event.params.from
    )}">${ensHandleOrFromAddress}</a> to <a href="${explorerUrlAddress(
      event.params.to
    )}">${ensHandleOrToAddress}</a> for ${event.params.value} FC Barcelona! 🔥 - <a href="${explorerUrlTx(
      event.transaction.hash
    )}">transaction</a>`;

    await sendMessageToTelegram(msg);
  }

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

{% endcode %}

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

### Adım 6: Sabitleri Yapılandırma

Ortam değişkenlerini depolamak için bir `constants.ts` dosyası oluşturun:

{% 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 %}

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

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

```bash
pnpm i axios
```

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

{% 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("Error sending message:", error);
  }
};
```

{% endcode %}

### Adım 8: Son Yapılandırma ve İndeksleyiciyi Çalıştırma

#### `.env` Dosyasını Yapılandırma

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

`.env` dosyasını Telegram bot kimlik bilgilerinizle düzenleyin:

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

#### Telegram Botu Oluşturma

1. Telegram'da `@BotFather`'a mesaj gönderin ve çalıştırın:

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

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

#### Son olarak, bağımlılıkları yükleyin ve indeksleyiciyi 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 indeksleyiciniz var.

<figure><img src="/files/WHAhSIsgSwZZW8BMqiQX" alt=""><figcaption></figcaption></figure>

Daha ileri gitmek için indeksleyiciyi kendi altyapınızda barındırabilir veya Envio'nun barındırılan hizmetine deploy edebilirsiniz.

Bakiyeleri kaydettiğimiz için bu sistem aynı zamanda bir GraphQL bakiye API'si olarak da kullanılabilir.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://docs.chiliz.com/tr/gelistir/gelismis/fan-token-telegram-bildirimleri.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
