> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs-parschat.parstechai.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs-parschat.parstechai.com/_mcp/server.

# خودکارسازی اینستاگرام

> کلیدواژه‌های فعال‌ساز، پاسخ عمومی به کامنت، پیگیری خصوصی در دایرکت، شرط فالو و هدف‌گیری یک پست مشخص اینستاگرام.

> **Warning**
>
> **نسخه پیش‌انتشار `v1`، منتشرشده در ۲۰۲۶-۰۹-۱۴.** این صفحه شکل API را تعهد می‌کند، نه تاریخ
> آن را. دقیقاً همین چیزی را که این‌جا مستند شده می‌سازیم. شکل API تا **۲۰۲۶-۱۰-۱۴** هنوز ممکن است
> تغییر کند؛ پس از آن، تغییرات از [نسخه‌بندی و پایداری](/documentation/reference/versioning-stability) پیروی می‌کنند.
>
> این بنر صفحه‌به‌صفحه و هم‌زمان با فعال‌شدن هر مسیر برداشته می‌شود. تا وقتی این‌جاست، بر اساس
> قرارداد پیاده‌سازی کنید و فرض کنید این مسیر هنوز قابل فراخوانی نیست.

قانون‌های خودکارسازی **فقط برای اینستاگرام** هستند. با آن‌ها مشتریان شما می‌توانند پاسخ‌ها را خودکار
کنند، بدون اینکه برای شما یا ما درخواست پشتیبانی ثبت کنند. هر قانون به یک کانال اینستاگرام تعلق
دارد و با یک **دایرکت** یا یک **کامنت** زیر پست یا ریلز فعال می‌شود.

## قانون دایرکت

**`cURL`**

```bash cURL
curl -X POST https://api-chat.parstechai.com/v1/robots/rbt_8fK2mQ/channels/chn_3pQ7xL/rules \
  -H "Authorization: Bearer pk_live_xxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Price enquiry to catalogue",
    "trigger": { "on": "dm", "keywords": ["price", "how much", "cost"], "match": "contains" },
    "actions": [
      { "type": "text", "body": "Hello! Here is our catalogue." },
      { "type": "link", "url": "https://shop.example/catalogue", "label": "Catalogue" }
    ],
    "is_active": true
  }'
```

**`Python`**

```python Python
rule = requests.post(
    f"{BASE}/robots/rbt_8fK2mQ/channels/chn_3pQ7xL/rules",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "name": "Price enquiry to catalogue",
        "trigger": {"on": "dm", "keywords": ["price", "how much", "cost"], "match": "contains"},
        "actions": [
            {"type": "text", "body": "Hello! Here is our catalogue."},
            {"type": "link", "url": "https://shop.example/catalogue", "label": "Catalogue"},
        ],
        "is_active": True,
    },
    timeout=10,
).json()
```

**`Response`**

```json Response
{
  "id": "rul_7nQ2xK",
  "name": "Price enquiry to catalogue",
  "trigger": { "on": "dm", "keywords": ["price", "how much", "cost"], "match": "contains" },
  "actions": [
    { "type": "text", "body": "Hello! Here is our catalogue." },
    { "type": "link", "url": "https://shop.example/catalogue", "label": "Catalogue" }
  ],
  "is_active": true,
  "created_at": "2026-09-20T11:12:00Z"
}
```

کلیدواژه‌ها در هر زبانی که کانال پشتیبانی می‌کند تطبیق داده می‌شوند. آن‌ها را همان‌طور بنویسید که
مخاطبان مشتری شما واقعاً تایپ می‌کنند.

| فیلد             | مقادیر                           |
| ---------------- | -------------------------------- |
| `trigger.on`     | `dm` یا `comment`                |
| `trigger.match`  | `contains` یا `equal`            |
| `actions[].type` | `text`، `image`، `link`، `delay` |

> **Info**
>
> واژگان `actions` بسته است: `text`، `image`، `link`، `delay`. یک `type` ناشناخته خطای `422`
> برمی‌گرداند. یک آرایه باز، هر نوع اقدام آینده را برای هر کسی که آن را حدس زده بود به یک تغییر
> ناسازگار بی‌صدا تبدیل می‌کرد.

## قانون کامنت سه کار انجام می‌دهد

```json
{
  "name": "Comment on launch post, public reply and DM",
  "trigger": {
    "on": "comment",
    "keywords": ["available", "in stock"],
    "match": "contains",
    "media_id": "17895695668004550"
  },
  "reply_in_comment": { "body": "Yes, it is in stock. Details sent by DM." },
  "then_send_dm": [
    { "type": "text", "body": "Hello! This product is available." },
    { "type": "link", "url": "https://shop.example/p/1042", "label": "Buy" }
  ],
  "is_active": true
}
```

|                    |                                                                                                    |
| ------------------ | -------------------------------------------------------------------------------------------------- |
| `media_id`         | قانون را به یک پست یا ریلز محدود می‌کند. اگر آن را حذف کنید، قانون روی همه پست‌ها اعمال می‌شود.    |
| `reply_in_comment` | یک پاسخ عمومی زیر کامنت می‌گذارد                                                                   |
| `then_send_dm`     | پیگیری را به‌صورت خصوصی ادامه می‌دهد؛ همان چیزی که یک کامنت عمومی را به یک فروش خصوصی تبدیل می‌کند |

مشتری شما پست را خودش انتخاب می‌کند، دقیقاً همان‌طور که کاربران خود ما این کار را می‌کنند؛ پس
احتمالاً می‌خواهید فهرستی از پست‌ها برای انتخاب به او نشان دهید.
[اندپوینت رسانه](/api-reference/instagram-media/list-media) برای همین است.

## شرط فالو

یک قانون می‌تواند پاسخش را تا زمانی که کامنت‌گذار صفحه را فالو کند نگه دارد. این یکی از سازوکارهای
اصلی رشد در اینستاگرام است.

```json
{
  "name": "Price enquiry, follow first",
  "trigger": { "on": "comment", "keywords": ["price", "1"], "match": "contains" },
  "reply_in_comment": { "body": "Your answer has been sent by DM." },
  "then_send_dm": [
    { "type": "text", "body": "Hello, message us for more help." }
  ],
  "require_follow": {
    "enabled": true,
    "prompt": "Follow the page first, then tap the button below.",
    "button_text": "I followed",
    "retry_prompt": "We checked, and the follow is not confirmed yet. Follow the page, then tap again."
  },
  "is_active": true
}
```

وقتی `require_follow.enabled` برابر true باشد و فرستنده صفحه را فالو نکرده باشد، قانون محتوای پاسخ
را نگه می‌دارد. به‌جای آن `prompt` را همراه با یک دکمه می‌فرستد و پس از تأیید فالو، پاسخ اصلی را
تحویل می‌دهد. `retry_prompt` برای کسی است که پیش از فالوکردن واقعی روی دکمه بزند.

این دکمه یک postback است، یعنی یک ضربه درون اینستاگرام و نه لینکی به بیرون. رفت‌وبرگشت تأیید را
شما پیاده‌سازی نمی‌کنید؛ موتور قانون‌ها انجامش می‌دهد.

### پاسخ نگه‌داشته‌شده پس از ۲۴ ساعت منقضی می‌شود

پس از آن، شخص باید دوباره قانون را فعال کند.

### بررسی وضعیت فالو

```bash
curl "https://api-chat.parstechai.com/v1/robots/rbt_8fK2mQ/channels/chn_3pQ7xL/follow-status?user_id=iguser_88213" \
  -H "Authorization: Bearer pk_live_xxxxxxxxxxxxxxxxxxxx"
```

**`Response`**

```json Response
{ "user_id": "iguser_88213", "follows_business": true, "checked_at": "2026-09-20T11:30:00Z" }
```

> **Warning**
>
> **`follows_business` سه مقدار دارد: `true`، `false` یا `null`.** `null` یعنی Meta رابطه را تأیید
> نکرده است؛ معنایش «فالو نکرده» نیست.
>
> **`null` با `false` یکی نیست.** ما در این حالت به نفع کاربر عمل می‌کنیم: با `null`، پاسخ فرستاده
> می‌شود. پاسخ نگه‌داشته‌شده برای یک دنبال‌کننده واقعی، از نگاه کاربر نهایی یعنی خودکارسازی خراب است؛
> و این بدتر از پاسخ‌دادن به کسی است که فالو نکرده. شما هم با `null` همین‌طور رفتار کنید.

## مدیریت قانون‌ها

| متد      | مسیر                                                     |
| -------- | -------------------------------------------------------- |
| `GET`    | `/v1/robots/{robot_id}/channels/{channel_id}/rules`      |
| `GET`    | `/v1/robots/{robot_id}/channels/{channel_id}/rules/{id}` |
| `PATCH`  | `/v1/robots/{robot_id}/channels/{channel_id}/rules/{id}` |
| `DELETE` | `/v1/robots/{robot_id}/channels/{channel_id}/rules/{id}` |

فهرست صفحه‌بندی‌شده است و بر اساس `is_active` و `on` قابل فیلتر است. برای متوقف‌کردن یک قانون بدون
ازدست‌دادن آن، `is_active` را با PATCH به `false` تغییر دهید.

پارامترهای کامل و محیط آزمایش زنده: [مرجع خودکارسازی](/api-reference/instagram-automation/create-rule).

## خطاها

| وضعیت | معنی                                                                                                              |
| ----- | ----------------------------------------------------------------------------------------------------------------- |
| `403` | بسته شامل خودکارسازی نیست، یا نقش لازم وجود ندارد                                                                 |
| `404` | چنین قانونی وجود ندارد، یا متعلق به شما نیست                                                                      |
| `422` | قانون کامنتی که نه `reply_in_comment` دارد و نه `then_send_dm`، یک `type` ناشناخته برای اقدام، یا `keywords` خالی |