Чат-боты
October 28, 2023

Не знаешь как создать бота службы заботы на salebot? Чекай статью

Мой канал в телеге - https://t.me/asxabal <- подписывайся, в моем канале схема этого бота, вы сможете скачать себе и сразу применить его в проекте

Промокод на 10 дней в salebot - asxaba1

Мой чат-бот вакансий - https://t.me/infobizaa_bot

Наша схема будет такой

В чем смысл этого бота? Пользователи скидывают в чат-бота скриншоты о том выполнили они определенное задание, а вот эти самые скрины проверяет менеджер через телеграм группу

Если менеджер не принял задание, то бот уведомляет пользователя, что его скриншот не прошел проверки

Если скриншот подходит, то также бот уведомляет пользователя, что скриншот принят и все четко!

Крч, смысл уловили. Идем дальше

В настройках проекта создаем 4 переменные.

save_webhook=1
dict_of_sent_message_ids_and_text={}
id_counter_for_dict=0
tg_group_id= Сюда пишем platform_id телеграм группы

Про save_webhook документация - https://docs.salebot.pro/messendzhery-i-chaty/kak-sozdat-bota-v-telegram/poluchit-polnyi-vebkhuk-webhook-ot-telegram

dict_of_sent_message_ids_and_text - Это наш словарь где хранится message_id и текст каждой отправленной заявки от пользователя менеджеру (в нашем случае телеграм группу)

И еще нужно создать телеграм группу и добавить туда нашего бота как администратора

Начало нашего бота

Тут мы просим пользователя скинуть фотку

Обычная стрелка

Дальше идет вот такой блок с кодом в калькуляторе

Сам код:

/* Берем фото */ send_photo = attachment_url /* end */

/* Создаем свой id сообщения, чтобы по нему обратится к id сообщения от телеграм(message_id)*/ id_counter_for_dict = id_counter_for_dict + 1 /* end */

/* Формируем текст */ text_caption = 'Дата заявки на проверку отзыва: #{current_date} #{current_time}' + '\n' + 'Имя: #{full_name}' + '\n' + 'Телеграм: #{tg_username}' + '\n' + 'Тип проверки: Еще не проверили' /* end */

/* Формируем кнопки */ btn = '[{"line":0,"index_in_line":0,"text":"Все верно ✅","type":"inline","callback":"mid#{id_counter_for_dict}_p#{platform_id}_succesfulle_feedback"},{"line":1,"index_in_line":0,"text":"Не верно ❌","type":"inline","callback":"mid#{id_counter_for_dict}_p#{platform_id}_failed_feedback"}]' /* end */

/* Отправляем в группу Фотку с текстом и кнопками */ res_send_photo_feedback = tg_send_photo(tg_group_id, send_photo, text_caption, btn) /* end */

/* В данном словаре мы будем хранить все необходимые данные отправленного сообщения. Это позволит нам легко изменять текст сообщения, так как мы будем сохранять в нем уникальный идентификатор сообщения (message_id). */ dict_of_sent_message_ids_and_text["message_#{id_counter_for_dict}"] = {"message_id": "#{res_send_photo_feedback["result"]["message_id"]}", "caption": "#{text_caption}"} /* end */

По сути код достаточно простой и ничего сложного в нем нет

Вам достаточно знать что такое словари и дальше быстро все поймете

Насчет кнопок, мы формируем специальные кнопки с коллбеком

Ссылка на документацию про эти кнопки - https://docs.salebot.pro/osnovnye-ponyatiya.-kak-sozdavat-botov-na-salebot.pro/knopki#kak-dobavit-callback-knopku-vkontakte-telegram

После отправки картинки боту, в указанный чат придет подобное сообщение

И если мы нажмем на кнопку "Все верно ✅" то в этот же чат отправится коллбэк.


В чате для участников коллбэк никак не будет отображаться, но вот salebot коллбэк прекрасно видит и мы можем его отловить и активировать блок

Так сделаем же это!

Нажали на кнопку "Все верно ✅" и в чат пришел вот такой коллбэк

mid8

это означает message_id 8 (Не путать с message_id от телеграмма, здесь другой указан. У нас сюда передается id который указан ключом в переменной dict_of_sent_message_ids_and_text

p377884669

Это platform_id клиента

типо p#{platform_id}

Таким образом, мы одним коллбэком в чат получаем platform_id клиента
и id через который мы сможем обратится к message_id телеграмма для редактирования сообщения

Создаем блок и в условии ставим вот такое регулярное выражение:
mid.*p.*succesfulle_feedback

И самое важное, в поле "Выбор соответствия" нажимаем на "Регулярное выражение"

И такой код в калькуляторе:


/* Получаем platform_id клиента */ user_id_for_callback_succesfulle = findall('mid\d+_p(\d+)_succesfulle_feedback', question, 0) /* end */

/* Получаем id сообщения который находится в переменной dict_of_sent_message_ids_and_text */ message_number_in_dict = findall('mid(\d+)_p\d+_succesfulle_feedback', question, 0) /* end */

/* Отправляем коллбэк клиенту */ res_send_callback_succesfulle = tg_callback('#{user_id_for_callback_succesfulle}', 'succesfulle_check_feedback_index_#{message_number_in_dict}')

Если вы не понимаете этот код, то изучите вот это:

Регулярки:
1. https://docs.salebot.pro/peremennye-1/spisok-poleznykh-regulyarnykh-vyrazhenii
2. https://teletype.in/@asxabal/re
3. https://docs.salebot.pro/peremennye-1/kalkulyator/dlya-raboty-s-regulyarnymi-vyrazheniyami#findall-or-similar
Коллбэк:
1. https://docs.salebot.pro/peremennye-1/api-v-kalkulyatore#tg_callback

Итого, этот блок отправляет нашему пользователю коллбэк

Этот коллбэк говорит, что его фотка успешно прошла проверку

Вот так будет приходить пользователю этот коллбэк

succesfulle_check_feedback_index_8 -> эта цифра в конце указывает нам id сообщения в словаре dict_of_sent_message_ids_and_text

Создаем еще один блок и в условии указываем такое регулярное выражение:
succesfulle_check_feedback_index_\d+

\d+ -> эта штука означает что в конце может быть любая цифра

Код в калькуляторе пишем такой:

/* Получаем index сообщения который находится в переменной dict_of_sent_message_ids_and_text */ message_index_in_dict = findall('succesfulle_check_feedback_index_(\d+)', question, 0) /* end */

/* редактируем сообщение заявки из чата */ text_caption = dict_of_sent_message_ids_and_text["message_#{message_index_in_dict}"]["caption"]

text_caption = replace(text_caption, 'Еще не проверили', 'Все верно ✅')

text_caption = text_caption + '\n' + 'Дата проверки: #{current_date} #{current_time}'

dict_of_sent_message_ids_and_text["message_#{message_index_in_dict}"]["caption"] = text_caption /* end */

/* Редактируем сообщение из чата */ result_edit_message_succesfulle = tg_edit_message_caption(tg_group_id, dict_of_sent_message_ids_and_text["message_#{message_index_in_dict}"]["message_id"], dict_of_sent_message_ids_and_text["message_#{message_index_in_dict}"]["caption"], "")

И всеее. По id, который мы передаем в коллбэке, мы смогли обратится к нужному message_id и смогли редактировать ранее отправленный текст в группе

И благодоря этой логике, при нажатии на кнопку "Все верно" текст в чате успешно поменялся

И мы пользователю сообщили, что его сообщение успешно прошла проверку

Сценарий для этой кнопки работает абсолютно по такой же логике

Вы сможете забрать этот шаблон в моем телеграм канале https://t.me/asxabal
добавить в свой проект и подробно самим рассмотреть эту логику

И напоминаю Промокод на 10 дней в salebot - asxaba1