Разработка мобильного чат-бота для Instagram Direct
Instagram Direct Messaging API — часть экосистемы Meta Business Platform. Автоматизация Direct доступна только через официальный Instagram Graph API, и только для бизнес-аккаунтов или аккаунтов создателей, подключённых к Meta Business Suite. Неофициальные инструменты нарушают ToS.
Требования к аккаунту и настройка
Для работы с Instagram Messaging API нужны:
- Instagram Business или Creator аккаунт (не личный)
- Facebook Page, связанная с Instagram-аккаунтом
-
Meta Developer App с разрешениями:
instagram_basic,instagram_manage_messages,pages_manage_metadata - Прохождение App Review для разрешения
instagram_manage_messages(обязательно для продакшена)
App Review — самое долгое место: Meta проверяет приложение вручную, это может занять 1–4 недели. Без прохождения ревью бот работает только с тестовыми аккаунтами.
Webhook: получение сообщений
Instagram Messages приходят через тот же Webhooks Platform, что и Messenger, но поле object = "instagram":
@app.post("/webhook")
async def instagram_webhook(request: Request):
body = await request.json()
if body.get("object") != "instagram":
return "ok"
for entry in body.get("entry", []):
for messaging in entry.get("messaging", []):
sender_id = messaging["sender"]["id"] # Instagram Scoped User ID
if "message" in messaging:
message = messaging["message"]
if "text" in message:
await handle_text(sender_id, message["text"])
elif "attachments" in message:
for att in message["attachments"]:
await handle_attachment(sender_id, att)
elif "reaction" in messaging:
# Реакция пользователя на сообщение
await handle_reaction(sender_id, messaging["reaction"])
return "ok"
Отправка ответов через Graph API
async def send_instagram_message(recipient_id: str, message_data: dict):
ig_account_id = "your_ig_account_id"
async with httpx.AsyncClient() as client:
response = await client.post(
f"https://graph.facebook.com/v18.0/{ig_account_id}/messages",
params={"access_token": PAGE_ACCESS_TOKEN},
json={
"recipient": {"id": recipient_id},
"message": message_data
}
)
return response.json()
# Текстовый ответ
await send_instagram_message(sender_id, {"text": "Привет! Рады видеть вас."})
# Реакция на сообщение (лайк)
await send_instagram_message(sender_id, {
"reaction": {
"reaction": "love",
"mid": original_message_id
}
})
Типы сообщений и ограничения
Instagram Messaging API в части функциональности уступает Telegram и даже Messenger. Нет:
- Persistent Menu
- Generic Template / Carousel (на момент 2024–2025)
- Rich Media карточек
- Location сообщений от бота
Есть: текст, изображения, стикеры (через icebreakers), Quick Replies.
24-часовое окно — строгое ограничение. После последнего сообщения от пользователя бот может отвечать 24 часа. После — только через Human Agent Tag (если в переписке участвовал живой оператор) или Message Tags. В отличие от WhatsApp, нет удобного механизма проактивных шаблонных сообщений.
Автоответ на Stories mentions и Reactions
Пользователь упомянул ваш аккаунт в Stories — это отдельное событие messaging_story_mentions:
if "story_mention" in messaging:
story_url = messaging["story_mention"].get("url", "")
# Поблагодарить пользователя за упоминание
await send_instagram_message(sender_id, {
"text": "Спасибо, что отметили нас в Stories! 🙌"
})
Это легальный и популярный use-case для интернет-магазинов: автоматическая благодарность за UGC.
Получение медиа из входящих сообщений
Пользователь отправил фото — в attachment приходит payload.url. URL валиден ограниченное время (~1 час). Скачивайте и кешируйте сразу:
async def process_image_message(sender_id: str, attachment: dict):
if attachment["type"] == "image":
image_url = attachment["payload"]["url"]
# Скачать через httpx с токеном авторизации
image_data = await download_media(image_url, PAGE_ACCESS_TOKEN)
# Распознать через Vision API / ML Kit
result = await analyze_image(image_data)
await send_instagram_message(sender_id, {"text": result})
Типичный use-case: пользователь отправляет фото товара, бот ищет похожее в каталоге через vector similarity search.
Ограничения в РФ
Instagram заблокирован в РФ с марта 2022. Доступ к API через VPN, использование в приложениях — на усмотрение юриста. Для международных проектов ограничений нет.
Процесс работы
Настройка Meta App и прохождение App Review. Webhook с верификацией и обработкой событий. Реализация ответов на текст и медиа. Автоответы на Stories mentions. Интеграция с CRM для ведения истории диалогов. Тестирование на бизнес-аккаунте в тестовом режиме.
Ориентиры по срокам
Базовый бот с текстовыми ответами — 1–2 недели (плюс время App Review). Полноценный бот с обработкой медиа, автоответами на Stories и CRM-интеграцией — 4–8 недель.







