Форум программистов, компьютерный форум, киберфорум
PHP: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для licoric
1 / 1 / 1
Регистрация: 11.05.2012
Сообщений: 92
Telegram API

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

24.07.2023, 00:51. Показов 1259. Ответов 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 / 117
Регистрация: 15.02.2012
Сообщений: 1,950
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 / 117
Регистрация: 15.02.2012
Сообщений: 1,950
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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru