*********На территории Российской Федерации запрещена деятельность социальных сетей Facebook и Instagram, принадлежащих компании Meta Platforms Inc., признанная экстремистской!

Мы не призываем Пользователей к использованию ресурса.

Помните!

  1. Действия, связанные с приобретением товаров или услуг у запрещенной организации могут быть расценены как финансирование экстремистской деятельности, согласно ст. 282.3 УК РФ.
  2. Также с 1 сентября 2025 запрещено распространять рекламу на информационных ресурсах тех организаций, деятельность которых запрещена в РФ (согласно ч. 3 ст. 12 ФЗ от 25 июля 2002 № 114-ФЗ).

Что такое постоянное меню

Постоянное меню позволяет создавать и отправлять меню основных функций вашего бизнеса, таких, как часы работы, расположение магазинов и продукты, которые всегда отображаются в разговоре человека с вашей компанией в Messenger.

Поддерживаемые кнопки:

Постоянное меню состоит из набора кнопок . В постоянном меню поддерживаются следующие типы кнопок:
● кнопки-ссылки URL (web_url)
● колбек-кнопки (postback)

Как добавить постоянное меню

response = ig_set_persistent_menu(login, buttons), где:
login - логин в инстаграме, можно посмотреть в меню Каналы в сейлбот,
buttons - словарь с кнопками

Пример оформления словаря с кнопками:
buttons = {"default": [["postback", "Button 1", "callback_text 1"], ["postback", "Button 2", "callback_text 2"], ["web_url", "Site link", "https://salebot.ai/"]]}\
default - обязательный ключ, описывает массив кнопок, которые будут в меню по умолчанию, не зависимо от локализации пользователя.
В качестве значения указывается массив с кнопками. Каждая кнопка описывается отдельным массивом:
["тип кнопки", "Отображаемый текст кнопки", "Текст, который придет в бот - callback"]

Типы кнопок и их описание:
&#xNAN;- колбек-кнопка:
["postback", "Отображаемый текст кнопки", "Текст, который придет в бот"]
&#xNAN;- кнопка-ссылка URL:
["web_url", "Отображаемый текст ссылки", "Ссылка"]

Как настроить меню с учетом локализации клиента

Настроить кнопки отдельно для разных регионов можно, используя для этого дополнительный ключ в словаре кнопок.

Например, добавим кнопки для русской локали:

buttons = {"default": [["postback", "Button 1", "callback_text 1"], ["postback", "Button 2", "callback_text 2"], ["web_url", "Site link", "https://salebot.ai/"]], "ru_RU": [["postback", "Кнопа", "callback_text 1"], ["postback", "Кнопа 2", "callback_text 2"], ["web_url", "Ссылка", "https://salebot.pro/"]]}

Обратите внимание, что в данном случае ключ - это локаль, для которой будут отображаться кнопки.

Список всех доступных локалей:
af_ZA, ar_AR, as_IN, az_AZ, be_BY, bg_BG, bn_IN, br_FR, bs_BA, ca_ES, cb_IQ, co_FR, cs_CZ, cx_PH, cy_GB, da_DK, de_DE, el_GR, en_GB, en_UD, en_US, es_ES, es_LA, et_EE, eu_ES, fa_IR, ff_NG, fi_FI, fo_FO, fr_CA, fr_FR, fy_NL, ga_IE, gl_ES, gn_PY, gu_IN, ha_NG, he_IL, hi_IN, hr_HR, hu_HU, hy_AM, id_ID, is_IS, it_IT, ja_JP, ja_KS, jv_ID, ka_GE, kk_KZ, km_KH, kn_IN, ko_KR, ku_TR, lt_LT, lv_LV, mg_MG, mk_MK, ml_IN, mn_MN, mr_IN, ms_MY, mt_MT, my_MM, nb_NO, ne_NP, nl_BE, nl_NL, nn_NO, or_IN, pa_IN, pl_PL, ps_AF, pt_BR, pt_PT, qz_MM, ro_RO, ru_RU, rw_RW, sc_IT, si_LK, sk_SK, sl_SI, so_SO, sq_AL, sr_RS, sv_SE, sw_KE, sz_PL, ta_IN, te_IN, tg_TJ, th_TH, tl_PH, tr_TR, tz_MA, uk_UA, ur_PK, uz_UZ, vi_VN, zh_CN, zh_HK, zh_TW

Пример запроса:

buttons = {"default": [["postback", "Button 1", "callback_text 1"], ["postback", "Button 2", "callback_text 2"], ["web_url", "Site link", "https://salebot.ai/"]], "ru_RU": [["postback", "Кнопа", "callback_text 1"], ["postback", "Кнопа 2", "callback_text 2"], ["web_url", "Ссылка", "https://salebot.pro/"]]}
response = ig_set_persistent_menu('login', buttons)

В случае успешного исполнения функция возвращает:
{"result":"success"}

Иначе - описание ошибки:
'Error parse buttons data' - ошибка в словаре кнопок
{"error":{"message":"(#100) param persistent_menu[0][call_to_actions] must be non-empty.","type":"OAuthException","code":100,"fbtrace_id":"AJtVczu7TEJJxbMfnO"}}

Как удалить постоянное меню

response = ig_delete_persistent_menu('login'), где login - имя аккаунта

В случае успешного исполнения функция возвращает:

{"result":"success"}

Иначе - описание ошибки:

'Bot not found'

Как отправить несколько фото одним сообщением (галерея)

Instagram позволяет отправить до 10 фотографий одним сообщением — они отображаются одной галереей, каждое фото открывается на весь экран.

Если в блоке прикреплено несколько картинок подряд, бот отправит их галереей автоматически. Картинок больше 10 разобьются на несколько галерей.
● В галерею попадают только форматы JPG и PNG. GIF и другие форматы уйдут отдельными сообщениями.
● Подпись к галерее Instagram не поддерживаетёт отдельным сообщением.
Instagram позволяет отправить до 10 фотографий одним сообщением — они отображаются одной галереей, каждое фото открывается на весь экран.

Если в блоке прикреплено несколько картинок переей автоматически. Картинок больше 10разобьются на несколько галерей.
● В галерею попадают только форматы JPG и PNG. GIF и другие форматы уйдут отдельными сообщениями.
● Подпись к галерее Instagram не поддерживает, поэтому текст блока придёт отдельным сообщением.

Отправить галерею можно и из калькулятора:

response = insta_send_images(images), где:
images - список ссылок на картинки, от 1 до 10. Можно передать массив, JSON-массив строкой или ссылки через запятую

Пример запроса:

response = insta_send_images(['https://site.rte.ru/photo2.jpg','https://site.ru/photo3.png'])

Галерея отправляется текущему клиенту и сохра

В случае успешного исполнения функция возвращает id отправленного сообщения:
aWdfZAG1faXRlbToxOklHTWVzc2FnZAUlE...

Иначе - описание ошибки:
'images: from 1 to 10 urls' - передано меньше 1 или больше 10 ссылок
'images must be a list of urls' - ссылки переданы не списком
'client is not instagram' - функция вызвана не для клиента из Instagram

Как отправить клиенту свою публикацию

Бот может прислать клиенту в директ пост или рилс вашего аккаунта — он придёт карточкой публикации.

response = insta_send_post(media_id), где:
media_id - id публикации. Необязательный параметр: по умолчанию берётся публикация, под которой клиент оставил
последний комментарий

Когда клиент комментирует публикацию, её id сохраняется в переменную клиента instagram_media_id, а ссылка на неё — в instagram_media_url.

Пример запроса — прислать в директ пост, который клиент прокомментировал:

response = insta_send_post()

Отправить можно только публикацию своего аккаунта, чужую Instagram не примет. В переписке сохранится ссылка на
отправленную публикацию.

В случае успешного исполнения функция возвращает id отправленного сообщения.

Иначе - описание ошибки:
ередан, и клиент ещё не комментировал публикации
'client is not instagram' - функция вызвана не для клиента из Instagram

Как показать клиенту, что бот печатает

response = insta_typing(on), где:
on - необязательный параметр. По умолчанию true — показать клиенту «печатает…», false — убрать индикатор раньше времени

Индикатор пропадает сам, когда бот отправляет сообщение, или примерно через 20 секунд.

Пример запроса — показать «печатает…» перед долгим ответом:

response = insta_typing()

Как отметить сообщения клиента прочитанными

response = insta_mark_seen() - отмечаетнными, у клиента в Instagram они отобразятсякак просмотренные.

Обе функции в случае успешного исполнения возвращают ответ Instagram:
{"recipient_id":"1234567890123456"}

Иначе - описание ошибки:
'client is not white' - у клиента нет id переписки Instagram, например клиент только оставил комментарий и ещё не писал в директ

Как отследить реакцию клиента на сообщение

Когда клиент ставит реакцию на сообщение бота, в бот приходит событие:
new_like <id сообщения> <эмодзи> - клиенер new_like aWdfZAG1faXRlbToxOk... ❤
like_deleted <id сообщения> - клиент убрал реакцию

Чтобы бот ответил на реакцию, задайте в блоке условие на вхождение текста: например new_like — на любую реакцию или new_like ❤ — только на сердечко.

Реакции приходят только на сообщения, которые есть в переписке Salebot.

Как узнать, по какой ссылке из истории пришёл клиент

Если клиент ответил на вашу историю со стикером-ссылкой, ссылка со стикера сохраняется в переменную сделки story_link_sticker_url, рядом с переменной story_url — ссылкой на саму историю. По ней можно понять, с какого предложения пришёл клиент, и направить его в нужную ветку воронки.