Аватар для licoric
1 / 1 / 1
Регистрация: 11.05.2012
Сообщений: 92
Telegram API

Структура файла

24.07.2023, 00:51. Показов 1315. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Граждане. Я немного запутался, но хочу разобраться.
Делаю для сервиса бота, который будет работать с авторизованными (по номеру телефона) пользователями.

Есть обработчик входящих запросов. Там то я и запутался немного. Я хочу получить примерно такую структуру:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1) проверяем пользователя в базе пользователей
    1.1Пользователь есть - обновляем данные по нему (на случай, если они у него обновились)
    1.2Пользователя нет - добавляем пользователя в базу
 
// момент авторизации
 
2) проверяем, что пришел телефон от пользователя
    2.1 Отправил свой номер - добавляем в базу к пользователю номер телефона
    2.2 Отправил не свой номер - отправляем кнопку "отправить номер телефона";
        2.2.1 die;
 
3) Проверяем наличие телефона у пользователя в базе
    3.1 Если номера нет - отправляем кнопку "отправить номер телефона";
        3.1.1 die;
    
// Дальше пользователя без телефона в базе не пускаем
// (Основной обработчик всех входящих запросов)
 
    IF текст = ***
        отправляем ответ на запрос; die;
    
    ELSEIF текст = ***
        отправляем ответ на запрос; die;
    
    ELSE (Если ничего не пришло из списка)
        отправляем сообщение с "меню"
Суть обработчика такая, что он либо возвращает ответ на какую либо команду, либо присылает меню.
Верна ли будет данная структура или ее как-то можно улучшить?

Добавлено через 1 час 44 минуты
Так же дополню вопрос.

Допустим есть регионы. В каждом регионе магазины, в каждом магазине - товар.
На запрос по конкретному региону мне надо выводить список магазинов.
При клике на магазин - выводить список товаров.

Для начала я беру данные по регионам из базы:
PHP
1
2
3
while($row = mysqli_fetch_assoc($result)) {
    $mess .= '/region'.$row['region'].' (расшифровка региона)'; $mess .= "%0A";
}
На выходе формируется tg-ссылка типа:
/region77 (расшифровка региона)
/region78 (расшифровка региона)

Как мне лучше "ловить" эти ссылки в своем обработчике входящих команд, что бы дальше выдать список магазинов по конкретным регионам? На ум идет только ловить по "стоп-слову" region и убирать его. В итоге останется нужный регион, с которым уже работать дальше (с товарами, соответственно, аналогично).

И второй вопрос, что бы два раза не вставать:
Как организовать, например, отзывы от пользователей на конкретный товар? То есть пользователь должен отправить команду в духе "хочу оставить отзыв на товар" и передать боту id товара. Далее бот ждет сообщения и он должен его правильно соотнести с конкретным товаром. Видимо где-то надо хранить "статус бота". Типа следующее сообщение от этого пользователя будет с отзывом на товар **.

Тут просто прошу помощи в организации логики работы с ботом. По первому сообщению в этой теме мой бот работает только с входящими командами. Если нет команды - выводит просто меню с основными командами бота.

Добавлено через 3 часа 37 минут
блин. Сорян.
Это раздел с апи. Сюда про логику вопрос не лезет. Могут модеры перенести тему в раздел выше?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.07.2023, 00:51
Ответы с готовыми решениями:

Структура файла
В c++ я новичок,слышал,чтобы сделать редактор какого либо файла нужно знать его структуру,хотелось бы знать,что такое структура и как её...

Структура файла
Добрый день, знатокам java. Имеется некий сайт представляющий свои услуги через API. Это API взаимодействует через коннектор написанный...

Структура из файла
У меня есть задание на создание каталога стиральных машин: struct prod { char firm; char color; int width; int hight; int...

4
467 / 431 / 118
Регистрация: 15.02.2012
Сообщений: 1,955
25.07.2023, 13:32
В целом по вашей теме: изучите API телеграм-бота и часть вопросов отпадет.

Любой пользователь подключивший телеграм регистрирует его по номеру телефона,
соответственно есть команда поделится контактом, вот на нее и опирайтесь для регистрации(сохраняйте в БД);
данные в бот передаются либо путем команд либо текстом, вот соответственно на это и разделите всё - пришла команда или текст ну далее if...else.. другой логики нет;

Цитата Сообщение от licoric Посмотреть сообщение
Видимо где-то надо хранить "статус бота". Типа следующее сообщение от этого пользователя будет с отзывом на товар **.
А вот с подобным сам голову ломаю как лучше сделать, в итоге пришлось задвинуть задачу на когда появится время, потому как отправив такое и сделав пометку, человек не факт что решит продолжить, а может закрыть телеграм и через день уже и не вспомнит, а ему в ответ придет совсем не то на что рассчитывал
0
 Аватар для licoric
1 / 1 / 1
Регистрация: 11.05.2012
Сообщений: 92
25.07.2023, 22:14  [ТС]
Цитата Сообщение от tgarl Посмотреть сообщение
В целом по вашей теме: изучите API телеграм-бота и часть вопросов отпадет.
Если честно, то не очень понял про документацию на бота. У меня вопрос не "как сделать", а "как лучше организовать" (структуру файла). Я не прошу совета по коду. Только по организации бекенда.
Любой пользователь подключивший телеграм регистрирует его по номеру телефона,
соответственно есть команда поделится контактом, вот на нее и опирайтесь для регистрации(сохраняйте в БД);
Вопроса в этом тоже нет - я получаю номер телефона и проверяю его на привязку к пользователю. Это уже реализовано и работает. Как и вся моя авторизация в целом.
данные в бот передаются либо путем команд либо текстом, вот соответственно на это и разделите всё - пришла команда или текст ну далее if...else.. другой логики нет;
У меня так уже и сделано.
А вот с подобным сам голову ломаю как лучше сделать, в итоге пришлось задвинуть задачу на когда появится время, потому как отправив такое и сделав пометку, человек не факт что решит продолжить, а может закрыть телеграм и через день уже и не вспомнит, а ему в ответ придет совсем не то на что рассчитывал
Я пока придумал (но еще не делал) такой метод:
Пользователь нажимает на /оставить_отзыв. В его профиль в базу записывается json с данными: на какой id идет отзыв, метка времени написания отзыва, ну и какая-то метка, что это отзыв. Типа такого конструкция получиться должна:
PHP
1
2
3
4
5
$data = array (
    'id' => 53,
    'datetime' => '2023-07-25 21:58:13',
    'type' => 'review'
);
И при проверке входящих команд так же делать проверку на заполненность данного поля у пользователя. Если NULL, то пропускаем. Если что-то есть, то выполняем этот цикл if/else и по типу и ИД заносим данные в базу.

Пошагово это должно быть как-то так:
- пользователь нажимает на "написать отзыв на товар". Это ссылка вида /review53 (где 53 это id). Данные (json) заносятся в поле пользователя в базе.
- Пользователю улетает от бота сообщение "отправьте мне сообщение с отзывом".
- пользователь пишет обычное сообщение и отправляет его боту
- обработчик каждый раз проверяет заполненность поля в базе (да, это лишняя нагрузка и порожний запрос, но в век современных технологий считаю достаточно малой ценой за получаемый функционал). Если поле не NULL, то по типу 'review' запускает необходимый блок кода. А в этом блоке кода мы берем пришедшее сообщение и записываем его в таблицу отзывов (или любые другие манипуляции)
- если успешно записали, то очищаем поле в таблице, что бы скрипт не ждал входящее сообщение.
ps метка времени чисто опциональная история. Человек всегда видит на каком этапе остановился диалог и может его продолжить. Но если надо, то смотрим, сколько прошло времени. IF более, чем n, ELSE ... и так далее. Не вижу, если честно, необходимости привязки ко времени, но это уже каждый сам решает.

Как думаешь - удачное решение? *про реализацию отзывов
0
467 / 431 / 118
Регистрация: 15.02.2012
Сообщений: 1,955
26.07.2023, 09:29
Цитата Сообщение от licoric Посмотреть сообщение
Если честно, то не очень понял про документацию на бота. У меня вопрос не "как сделать", а "как лучше организовать"
Видимо я не так понял.
Тогда
Цитата Сообщение от licoric Посмотреть сообщение
2.2 Отправил не свой номер - отправляем кнопку "отправить номер телефона";
В этом случае это просто текст который никак не обрабатывается - типа нет такой команды и все, зачем проверять текстовый ввод номера телефона когда есть поделится контактом, а 3 пункт это тот же второй по сути

У меня так сделано: каждый запрос в бота проверяет таблицу - есть ли там ID-телеграма от которого пришло сообщение, нету - отправляю кнопку "авторизоваться", это вызов поделиться контактом, и остальной функционал вообще не трогаю
Если есть, то уже выдаю меню авторизованного или принимаю и обрабатываю команды.

Цитата Сообщение от licoric Посмотреть сообщение
Как думаешь - удачное решение? *про реализацию отзывов
Изначально я по такому же пути пошел, но очень быстро столкнулся с такой ситуацией: клиент нажимает оставить отзыв и сидит думает как правильно написать, потом закрывает и ничего не пишет, а после текстовой командой хочет проверить информацию или ещё что-то(а мы решили сделать разделение на Вопрос/отзыв/предложение/комментарий) и в итоге вместо нужного получает "спасибо ваш отзыв получен". На время написания отзыва тоже не сильно можно рассчитывать, кто-то пишет сразу и быстро, а кто-то час, да еще и отложить может на написание чуток попозже, а набранное же остается в поле.
В итоге пока оставил черновой вариант начинать текст со слов "Вопрос:", "ОтзывID если идет на товар)"... Тоже не очень удобно из-за перекладывания на клиента, ему приходится писать больше, но зато он всегда может не зависимо от того, что было набрано до этого написать в нужном ключе.
0
 Аватар для licoric
1 / 1 / 1
Регистрация: 11.05.2012
Сообщений: 92
26.07.2023, 11:06  [ТС]
Кстати. Под сообщением от бота "напишите отзыв" можно присылать кнопку "отмена". Но это тоже такое себе решение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.07.2023, 11:06
Помогаю со студенческими работами здесь

Структура из файла
Выводится массив структур из файла. Возникла проблема: при записи в структуру поле fio может "наложиться" на поле shifr, также...

Структура PE файла
Доброго времени суток! Пытаюсь вручную создать исправный Exe файл, в котором PE-заголовок находится в конце файла. Т.к. код программы...

Структура из файла
Доброе утро! FILEHEADER *FH = (FILEHEADER*) new byte; ReadFile(hFile, FH, FileSize, &BytesRW, 0); В FILEHEADER есть ссылки на массивы...

Структура из файла
У меня есть структура struct data { string chair; vector<string> group; }; Я объявляю вектор ...

Структура файла
Ребят помогите срочно , завтра сдача , а я не успеваю закончить проги, помогите решить: Программирование с использованием записей и ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru