у авиасейлс (не реклама) очень удобная ссылка для этого, она состоит всегда из-
https://www.aviasales.ru/search/MOW3112TCI1
где после слова серч идет индекс аэропорта Вылета, дальше дата ДЕНЬМЕСЯЦ и аэропорт назначения и последняя цифра количество пассажиров.
я написал такой код боту-
// Поиск билетов
if (preg_match("/bБилетыb/ui", $text)){ // реакция на слово "Билеты"
apiRequest("sendMessage", array('chat_id' => $chat_id, "text" => 'Для поиска авиабилетов из Москвы на Тенерифе, Гран-Канарию, Лансароте и обратно используйте спец. команды.
Например для поиска билета из Москвы на Гран-Канарию на 12 января отправьте боту команду «/MG 1201».
Команды:
Москва-Тенерифе /MT
Тенерифе-Москва /TM
Москва-Гран-Канария /MG
Гран-Канария-Москва /GM
Москва-Лансароте /ML
Лансароте-Москва /LM'));
}
else if (strpos($text, '/MT') !== false) {
$option = explode(" ", $text); // Разбивает строку с помощью разделителя $option[1]-ДАТА
apiRequest("sendMessage", array('chat_id' => $chat_id, "text" => 'https://www.aviasales.ru/search/MOW'.$option[1].'TCI1'));
}
else if (strpos($text, '/TM') !== false) {
$option = explode(" ", $text); // Разбивает строку с помощью разделителя $option[1]-ДАТА
apiRequest("sendMessage", array('chat_id' => $chat_id, "text" => 'https://www.aviasales.ru/search/TCI'.$option[1].'MOW1'));
}
else if (strpos($text, '/MG') !== false) {
$option = explode(" ", $text); // Разбивает строку с помощью разделителя $option[1]-ДАТА
apiRequest("sendMessage", array('chat_id' => $chat_id, "text" => 'https://www.aviasales.ru/search/MOW'.$option[1].'LPA1'));
}
else if (strpos($text, '/GM') !== false) {
$option = explode(" ", $text); // Разбивает строку с помощью разделителя $option[1]-ДАТА
apiRequest("sendMessage", array('chat_id' => $chat_id, "text" => 'https://www.aviasales.ru/search/LPA'.$option[1].'MOW1'));
}
else if (strpos($text, '/ML') !== false) {
$option = explode(" ", $text); // Разбивает строку с помощью разделителя $option[1]-ДАТА
apiRequest("sendMessage", array('chat_id' => $chat_id, "text" => 'https://www.aviasales.ru/search/MOW'.$option[1].'ACE1'));
}
else if (strpos($text, '/LM') !== false) {
$option = explode(" ", $text); // Разбивает строку с помощью разделителя $option[1]-Киев,$option[2] = число 3
apiRequest("sendMessage", array('chat_id' => $chat_id, "text" => 'https://www.aviasales.ru/search/ACE'.$option[1].'MOW1'));
}
минус заключается в том что пользователю приходится в ручную вбивать команду в формате /MG 1201 это и неудобно да и не всем понятно.
Хочется модернизировать данный код по такому принципу-
Бот услышал слово Билеты и выдал пользователю стандартную (не ИНЛАЙН) клавиатуру вместе с фразой- выберете аэропорт вылета. Клаве уже изначально заданы несколько аэропортов, допустим Москва, Тенерифе, Гран-Канария.
человек выбрал кнопку Москва, Бот увидел это слово и сделал запись в ххх.ТХТ файл в виде кода MOW (это код аэропортов Москвы в системе авиасейлс), дальше он спрашивает- выберете аэропорт прилета, варианты те же , человек нажал к примеру кнопку Гран-Канария, после чего в тот же файл ххх.ТХТ добавилася код этого аэропорта в виде LPA. Далее вопрос введите количество пассажиров, человек отвечает к примеру 1 идет запись в файл ххх.ТХТ цифарки 1.
И последнйи вопрос Бота введи даты в формате день месяц.
пользователь отвечает к примеру- 3112 что значит 31 декабря, и теперь бот формирует уже готовую ссылку на выдачу в диалог, берет основу- https://www.aviasales.ru/search/
и подставляет к ней код аэропорта вылета из файла, дату, аэропорт прилета и в конце цифра- количество пассажиров, получается у нас в диалоговое окно он выбрасывает ссылку https://www.aviasales.ru/search/MOW3112LPA1
и по средствам Вебпревью мы сразу в диалогом окне видим минимальную цену по мнению ависейлся и можем нажать на ссылку чтобы перейти к ним на сайт и купить.
При обработке слова Билеты выводиться сообщение с предложением выбрать город отбытия, под ним список из строк инлайн-кнопок , после каждого выбора меняется сообщение и набор кнопок в зависимости от выбора пользователя:
Значения callback_data у инлайн-кнопок:
1 запрос - выбор города отбытия типа MOW
2 запрос - выбор города отбытия типа MOW_LPA
3 запрос - выбор кол-ва пассажиров MOW_LPA_1 (кол-во пассажиров)
4 запрос - кнопки месяца от текущего 12, где текст: по типу "Сентябрь 2019" и до "Август 2020", значение 092019
5 запрос - кнопки дня месяца от 1 до 31 - с фильтрацией по кол-ву дней в выбранном месяце
По итогу вывод сообщения с выбранными параметрами и кнопки-ссылки на внешний ресурс, или для превью ссылку в текством виде.
ХЗ что тут писать но должно уже получиться формата- https://www.aviasales.ru/search/MOW3112 если была нажата кнопка Москва в начале и вбито 3112 при следующем вопросе.
ХЗ что тут писать но должно уже получиться формата- https://www.aviasales.ru/search/MOW3112TCI если была нажата кнопка Москва в начале и вбито 3112 при следующем вопросе и Тенерифе как город прилета.
финальная выдача Ботом в диалог получившейся ссылки-
я вставил его в конце в таком формате-
и получилось при таком коде ситуация что при ЛЮБОМ запросе к Боту от него выскакивает в ответ календарь с месяцами и ВСЁ.
Просто так копировать и вставлять не прокатит.
В приведенном вами коде будут выведены несколько сообщений с кнопками. А вам надо сделать пошагово. То есть обрабатывать каждый шаг пользователя.
Пользователь запросил по сообщению "Билеты" - 1 шаг - вывод точки отправления, далее он выбрал город отправления, а это следующий шаг .... и т.д.
Как минимум нужно реализовать обработку нажатия кнопок, и вывод в зависимости от текущего шага.