# TON (The Open Network)

## What is TON?

[**The Open Network**](https://docs.ton.org/learn/introduction) **(TON)** is a decentralized and open internet platform made up of several components. These include: TON Blockchain, TON DNS, TON Storage, and TON Sites. TON Blockchain is the core protocol that connects TON’s underlying infrastructure together to form the greater TON Ecosystem.

## Directual TON plugin

Directual TON plugin allows you to create Web-apps, Telegram Mini Apps easily and securely using no-code approach.

{% embed url="<https://youtu.be/ITFuJdNdUkI>" %}

### Step 1. Install free TON plugin from the Marketplace in your Directual app

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

### Step 2. Add a webhook for notifications

Go to API → [Webhooks](/api-integrations/webhooks.md) and add a new one. Turn on CORS for it!

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

### Step 3. Exploring the scenario plugin

First — you have **Get transactions** step in your scenario. It calls `/v2/blockchain/accounts/{account_id}/transactions` method of [TON API](https://docs.tonconsole.com/tonapi/api-v2).

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

{% hint style="info" %}
Usually, such scenarios run on a scheduler manner (hourly, for example), the data structure (let's name it `trigger`) contains a **single object**.
{% endhint %}

Specify the wallet address to get the transactions and the field where to save the API response:

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

The response looks like:

```json
{
    "transactions": [
        {
            "hash": "8c0276b72beecc5d7eba39d693fb9f8b266258caef1200f7970006b2f79d7c06",
            "lt": 46659096000001,
            "account": {
                "address": "0:84a12aee228a602c8e37a84c7e62d7846c26d6",
                "is_scam": false,
                "is_wallet": true
            },
            "success": true,
            "in_msg": {
                "msg_type": "int_msg",
                "value": 20000000,
                "fwd_fee": 266669,
                "destination": {
                    "address": "0:84a12aee228aa63a84c7e62d7846c26d6",
                    "is_scam": false,
                    "is_wallet": true
                },
                "source": {
                    "address": "0:18857605abfbbc6f1bfbb4f668bf3680",
                    "is_scam": false,
                    "is_wallet": true
                },
                "decoded_body": {
                    "text": "Order #123"
                }
            }
        }
    ]
}
```

Key things here are:&#x20;

* `transactions.in_msg.value`
* `transactions.in_msg.decoded_body.text`

Let's use [JSON-step](/scenarios/editing-scenarios/action-steps/json-step.md) for parsing the response! For that we need:

1. Create a new data structure `ton transactions` with needed fields;
2. Add a field type of `arrayLink` to transactions data structure to the structure `trigger`
3. Configure JSON-step: add the json-scheme (copy it above) and set up matching

<div><figure><img src="/files/qE96CCmADnmr4zL1RUmt" alt=""><figcaption></figcaption></figure> <figure><img src="/files/E8KKrlFduO043Amrqkgz" alt=""><figcaption></figcaption></figure> <figure><img src="/files/ptXkd63hMNIMzrctE07K" alt=""><figcaption></figcaption></figure></div>

All right, we get all the transactions. Then we can identify them using comments/values, etc.

{% hint style="warning" %}
Hint: if you want to extract oder number from text like `Your order is #12345`, use the following expression (turn on JS-evaluation):&#x20;

```
"{{text}}".match(/#(.+)/) ? "{{text}}".match(/#(.+)/)[1] : ""
```

{% endhint %}

### Step 4. Exploring web-plugin

Add a **Pay in TONs** component to your web-page

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

Configure the plugin (paste to the `webhook` URL of the [webhook we'e created](#step-2.-add-a-webhook-for-notifications)).

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

{% hint style="warning" %}
Pay attention that `amount` is in nanoTons. 1 000 000 000 nanoTONs = 1 TON
{% endhint %}

The user will see the two-component:

1. First step – connecting wallet (Telegram wallet, MyTonWallet, Tonkeeper, etc.)
2. Second step – confirming transaction

<div><figure><img src="/files/gG5Q7Xh3KskcZwQn8HWn" alt=""><figcaption></figcaption></figure> <figure><img src="/files/C34PHt7Y6rnbZ9PcWa8O" alt=""><figcaption></figcaption></figure></div>

### Step 5. Processing transactions

When the user confirms the transaction, you'll get a notification via webhook (don't forget to turn on CORS for it!)

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

Notification body:

```json
{
   "user": "36142243",
   "addressFrom": "0:18857605abf7216fa98ae1bbc6f1bfbb4f668bf3680",
   "addressTo": "UQCEoSruIoqmNBdQrEzTd6hMfmLXhGwm1hF4",
   "orderNumber": "123",
   "status": "success",
   "amountTons": "0.02",
   "amountNanoTons": 20000000
}
```

`user` will be `null` if your user is not authorised.

{% hint style="warning" %}
Don't use that notification for confirming your orders! Because one can send a fake request to your webhook. Use that notification as a trigger for checking the blockchain!
{% endhint %}

Bear in mind that there may be a certain lag between notification and transaction completing (usually 1-3 minutes). Thus, use [Delay step](/scenarios/editing-scenarios/system-steps/delay-step.md) in the scenario, that is triggered by the webhook.

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


---

# 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://readme.directual.com/plugins/using-plugins/blockchain-web3/ton-the-open-network.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.
