По работе продираюсь через бот-API национального мессенджера. Уже завалил босса получил токен. Делюсь опытом.
1. Регистрируемся на платформе МСП
2. Указываем данные юрлица. Минимум ИП. Самозанятые - мимо.
3. Подтверждаем данные через госуслуги или один из банков на выбор. Выбор банков ограничен Сбером, Альфой и Т-Банком.
4. После подтверждения юрлица подаём заявку на создание бота
5. После ручной модерации ВОЗМОЖНО бот будет создан
6. В случае успеха на предыдщуем пункте получаем токен и приступаем к разработке.
Чтобы нам было веселее:
- Документация весьма поверхностная. К счастью есть готовые библиотеки для Typescript и Go. На последнем я как раз и пишу бота.
- Подтверждение юрлица: после регистрации на платформе надо перейти на госуслуги по ссылке с платформы и зайти с правами генерального директора. Никак иначе. Варианта отправить запрос на госуслуги чтобы гендир его там принял и подтвердил - нет. Поэтому пришлось согласовывать время и в четыре руки проходить авторизацию.
- Постоянно натыкаешься на сообщения "будет реализовано позже". Даже URL slug у бота нельзя задать.
P.S. Прошу прощения за обилие постов про национальный мессенджер. Просто последнее время на работе занимаюсь в основном им.
1. Регистрируемся на платформе МСП
2. Указываем данные юрлица. Минимум ИП. Самозанятые - мимо.
3. Подтверждаем данные через госуслуги или один из банков на выбор. Выбор банков ограничен Сбером, Альфой и Т-Банком.
4. После подтверждения юрлица подаём заявку на создание бота
5. После ручной модерации ВОЗМОЖНО бот будет создан
6. В случае успеха на предыдщуем пункте получаем токен и приступаем к разработке.
Чтобы нам было веселее:
- Документация весьма поверхностная. К счастью есть готовые библиотеки для Typescript и Go. На последнем я как раз и пишу бота.
- Подтверждение юрлица: после регистрации на платформе надо перейти на госуслуги по ссылке с платформы и зайти с правами генерального директора. Никак иначе. Варианта отправить запрос на госуслуги чтобы гендир его там принял и подтвердил - нет. Поэтому пришлось согласовывать время и в четыре руки проходить авторизацию.
- Постоянно натыкаешься на сообщения "будет реализовано позже". Даже URL slug у бота нельзя задать.
P.S. Прошу прощения за обилие постов про национальный мессенджер. Просто последнее время на работе занимаюсь в основном им.
👍1👌1
Оффтоп
Знаю многих людей, которые время от времени что-то покупают на вторичном рынке. Сам тоже отношусь к ним. Вобщем-то это здорово когда какая-то вещь получает вторую жизнь.
Но время от времени сталкиваюсь с людьми, которые делают покупки на вторичном рынке смыслом жизни. Ну и пусть. У каждого свои развлечения и увлечения. Но некоторые становятся настоящими воинами и идут в бой, убеждая других что только так и надо жить.
Когда покупаешь что-то новое эти персонажи начинают тебя убеждать что ты совершил глупость, заплатив втридорога, когда мог купить гораздо дешевле на вторичке. По их мнению подержанная иномарка обязательно лучше новой отечественной, подержанный макбук лучше нового от условного Dexp и т.д. и т.п.
И вот недавно я вдруг понял: вот этим своим походом против новых вещей эти люди буквально мочатся против ветра, ведь чтобы они могли покупать что либо на вторичном рынке, кто-то должен покупать новые вещи.
И чё-т так грустно стало. Не знаю почему. Возможно потому что я опять разочаровался в умственных способностях большого количества людей.
Знаю многих людей, которые время от времени что-то покупают на вторичном рынке. Сам тоже отношусь к ним. Вобщем-то это здорово когда какая-то вещь получает вторую жизнь.
Но время от времени сталкиваюсь с людьми, которые делают покупки на вторичном рынке смыслом жизни. Ну и пусть. У каждого свои развлечения и увлечения. Но некоторые становятся настоящими воинами и идут в бой, убеждая других что только так и надо жить.
Когда покупаешь что-то новое эти персонажи начинают тебя убеждать что ты совершил глупость, заплатив втридорога, когда мог купить гораздо дешевле на вторичке. По их мнению подержанная иномарка обязательно лучше новой отечественной, подержанный макбук лучше нового от условного Dexp и т.д. и т.п.
И вот недавно я вдруг понял: вот этим своим походом против новых вещей эти люди буквально мочатся против ветра, ведь чтобы они могли покупать что либо на вторичном рынке, кто-то должен покупать новые вещи.
И чё-т так грустно стало. Не знаю почему. Возможно потому что я опять разочаровался в умственных способностях большого количества людей.
😁1
Есть API, написанное на PHP и отдающее ответы в JSON. Есть клиент, написанный на Go. Время от времени клиент давится ответом. В лог падает такое:
Изучение показало что проблема в типизации PHP. Вернее в практически полном её отсутствии. Функция json_encode в отсутствии строгой типизации пытается "думать на ходу", в итоге если строковое поле содержит только цифры - кодирует его как int, а если не только - то как строку.
При этом клиентская библиотека на том же PHP не видит никаких проблем и прожёвывает ответ. А вот Go с его строгой типизацией давится. Ищу решение.
json: cannot unmarshal number into Go struct field .data.attributes.code of type string
Изучение показало что проблема в типизации PHP. Вернее в практически полном её отсутствии. Функция json_encode в отсутствии строгой типизации пытается "думать на ходу", в итоге если строковое поле содержит только цифры - кодирует его как int, а если не только - то как строку.
При этом клиентская библиотека на том же PHP не видит никаких проблем и прожёвывает ответ. А вот Go с его строгой типизацией давится. Ищу решение.
Забавно что в PHP 8 (а может и 7) можно нормально генерировать json. И способ даже чем-то похож на Go)
Примерно так:
Но почему-то таким путём идут далеко не все, предпочитая что-то такое:
Примерно так:
<?php
class MyClass {
public string $strVal = "";
}
$obj = new('MyClass');
$obj->strVal = "789";
print json_encode($obj);
Но почему-то таким путём идут далеко не все, предпочитая что-то такое:
<?php
print json_encode([ "strVal" => "789" ]);
В национальном мессенджере появился бот @id1658140062_bot, которому кидаешь адрес, а он возвращает ссылку на домовой чат.
Имеешь ли ты какое-то отношение к этому дому - никак не проверяется.
Представляю какие возможности для спамеров и прочих мошенников открывает этот бот.
Методом тыка обнаружил одно ограничение: с казанского IP бот выдаёт только ссылки на казанские чаты. Если у меня есть жильё в другом городе то похоже чтобы найти чат надо ехать в тот город и оттуда запускать бота)
Чатов частных домов к счастью (или к сожалению) там нет)
Имеешь ли ты какое-то отношение к этому дому - никак не проверяется.
Представляю какие возможности для спамеров и прочих мошенников открывает этот бот.
Методом тыка обнаружил одно ограничение: с казанского IP бот выдаёт только ссылки на казанские чаты. Если у меня есть жильё в другом городе то похоже чтобы найти чат надо ехать в тот город и оттуда запускать бота)
Чатов частных домов к счастью (или к сожалению) там нет)
Яндекс выпустил приложение Интернетометр для измерения скорости интернета на смартфонах с Android. В отличие от конкурентов приложение Яндекса не позволяет выбрать точку, до которой измеряется скорость. Тестирование всегда происходит до серверов Яндекса, которые входят в "белые списки" и работают даже при ограничениях интернета.
У нас в Татарстане во время ограничений сервисы не из "белого списка" продолжают работать, но скорость ограничивается до ~250kbit/s. В итоге хоть и со скрипом, но пользоваться можно.
Вчера немного проехался по Татарстану, Марий Эл и Чувашии и посмотрел как в реальности работают эти самые белые списки в других регионах. Теперь знаю что, например, приложение Ак-Барс банка не входит в "белые списки". Но зато Яндекс Интернетометр всю дорогу убеждал меня что у меня "Отличный интернет" и "Можно комфортно смотреть видео в 2K/4K".
У нас в Татарстане во время ограничений сервисы не из "белого списка" продолжают работать, но скорость ограничивается до ~250kbit/s. В итоге хоть и со скрипом, но пользоваться можно.
Вчера немного проехался по Татарстану, Марий Эл и Чувашии и посмотрел как в реальности работают эти самые белые списки в других регионах. Теперь знаю что, например, приложение Ак-Барс банка не входит в "белые списки". Но зато Яндекс Интернетометр всю дорогу убеждал меня что у меня "Отличный интернет" и "Можно комфортно смотреть видео в 2K/4K".
Немного новостей: "Qt Book Reader 0.1.0". Подробнее: https://www.ylsoftware.com/news/773
Коды подтверждения в Max: они приходят и как будто это хорошо. Но в настольном приложении при нажатии на кнопку "Просмотреть код" получаем сообщение о возможности получения кода только в мобильном приложении. Ровно такая же история в веб-версии.
Сейчас по работе начинаем работу над мини приложением для Max и подозреваю что и там мне будет о чём рассказать.
Сейчас по работе начинаем работу над мини приложением для Max и подозреваю что и там мне будет о чём рассказать.
👌1
Миниприложение в Max это по сути веб-приложение, которое открывается в webview внутри мессенджера. Это окно отличается от обычного браузера в основном наличием некоторых дополнительных JS-интерфейсов для взаимодействия с окружением.
Приложение у пользователя запускается напрямую с сервера разработчика. Таким образом:
1. Разработчик приложения видит реальный IP пользователя.
2. При ограничениях интернета миниприложения скорее всего работать не будут.
Чтобы всем было веселее нигде в документации эти два пункта не проговариваются и выясняются только методом научного тыка.
Приложение у пользователя запускается напрямую с сервера разработчика. Таким образом:
1. Разработчик приложения видит реальный IP пользователя.
2. При ограничениях интернета миниприложения скорее всего работать не будут.
Чтобы всем было веселее нигде в документации эти два пункта не проговариваются и выясняются только методом научного тыка.
Вот и я увидел как взламывают национальный мессенджер.
От соседа пришло сообщение с просьбой "проголосовать за понижение налогов" и html-файл. Файл даже не пришлось скармливать антивирусу. Оказалось достаточно открыть в редакторе чтобы увидеть что в нём кроме редиректа на непонятную страницу ничего нет.
Эту страницу открыл в чистом браузере в песочнице и посмотрел что там. Там по классике: просят ввести номер от аккаунта чтобы проголосовать. Далее механика ясна.
Аккаунт соседа в мессенджере уже заблокирован. Попробую при встрече выяснить как он его будет разблокировать) Файл на всякий случай отправил в одну из антивирусных лабораторий.
От соседа пришло сообщение с просьбой "проголосовать за понижение налогов" и html-файл. Файл даже не пришлось скармливать антивирусу. Оказалось достаточно открыть в редакторе чтобы увидеть что в нём кроме редиректа на непонятную страницу ничего нет.
Эту страницу открыл в чистом браузере в песочнице и посмотрел что там. Там по классике: просят ввести номер от аккаунта чтобы проголосовать. Далее механика ясна.
Аккаунт соседа в мессенджере уже заблокирован. Попробую при встрече выяснить как он его будет разблокировать) Файл на всякий случай отправил в одну из антивирусных лабораторий.
Что-то неожиданно спокойно я стал спать по ночам последние дни. Сегодня меня посетила мысль и быстрая проверка подтвердила догадку: сервер мониторинга не может отправить мне сообщение потому что стоит в РФ и не достукивается до Telegram.
К счастью критичных инцидентов за последние дни не было, только средние, не влияющие на общую картину. Но я всё равно немного расстроен. Ищу альтернативный канал отправки уведомлений. SMS - тупо дорого.
А кто как решает проблему уведомлений в наше не простое время?
К счастью критичных инцидентов за последние дни не было, только средние, не влияющие на общую картину. Но я всё равно немного расстроен. Ищу альтернативный канал отправки уведомлений. SMS - тупо дорого.
А кто как решает проблему уведомлений в наше не простое время?
Дошли руки почитать закон 281-ФЗ, который вносит поправки в КоАП в частности запрещающие "рекламу VPN". Так вот. "VPN" там не упоминается. А упоминаются "Программно-аппаратные средства доступа к информационным ресурсам, информационно-телекоммуникационным сетям, доступ к которым ограничен". Достаточно витиевато.
Очень хочется послушать комментарии юристов, но как будто бы здесь речь идёт не о запрете виртуальных частных сетей, а о запрете обхода блокировок, что есть немного разные вещи.
Очень хочется послушать комментарии юристов, но как будто бы здесь речь идёт не о запрете виртуальных частных сетей, а о запрете обхода блокировок, что есть немного разные вещи.
Дочь пожаловалась что не смогла оплатить проезд в автобусе банковской картой. Якобы карта в чёрном списке. "С *** ли?" подумал я и стал изучать вопрос.
Оказалось что в Казани оплата проезда работает интересным образом: в момент прикладывания карты выдаётся билет и запоминаются данные карты, а реально оплата происходит потом, когда у терминала появляется связь. И если в этот момент на карте недостаточно денег или ещё какая ошибка списания - она попадает в чёрный список.
Судя по всему попытка списания только одна. Попытаться позже - трудно. Чтобы достать карту из чёрного списка надо на сайте транспортной карты авторизоваться по номеру банковской карты(!) и оплатить задолженность.
Думаю что можно придумать множество других решений, не таких сложных и неудобных.
Оказалось что в Казани оплата проезда работает интересным образом: в момент прикладывания карты выдаётся билет и запоминаются данные карты, а реально оплата происходит потом, когда у терминала появляется связь. И если в этот момент на карте недостаточно денег или ещё какая ошибка списания - она попадает в чёрный список.
Судя по всему попытка списания только одна. Попытаться позже - трудно. Чтобы достать карту из чёрного списка надо на сайте транспортной карты авторизоваться по номеру банковской карты(!) и оплатить задолженность.
Думаю что можно придумать множество других решений, не таких сложных и неудобных.
VPS, на котором размещён сайт проекта арендован у хостера, личный кабинет которого не открывается из РФ. А форма оплаты из личного кабинета отправляет на сайт ЮМани, который открывается только из РФ. И похожая ситуация со многими сервисами. Добавлять маршруты на каждый сервис довольно тяжко и выглядит рукоблудием, хоть и неизбежным.
В какой-то момент меня посетила мысль: что общего между подростком и IT-специалистом в РФ? - Оба активно занимаются рукоблудием. А в чём разница? - Подросток хотя бы получает удовольствие.
Извините...
В какой-то момент меня посетила мысль: что общего между подростком и IT-специалистом в РФ? - Оба активно занимаются рукоблудием. А в чём разница? - Подросток хотя бы получает удовольствие.
Извините...
Продолжаем разработку под национальный мессенджер.
Возникла задача: добавить в сообщение от бота кнопку открытия мини-приложения.
Первое с чем сталкиваемся: функция keyboardRow.AddOpenApp не документирована и не все её параметры очевидны. Более того: параметр app судя по JSON-схеме опционален, но если его не указывать то API возвращает ошибку что сей параметр не может быть пустым. А если указывать что либо (урл приложения, токен бота, рэндомный набор символов) то получаем ошибку вида:
В надежде разобраться идём в issues на github и находим issue #2:
Закрытое с пометкой "not planned".
Тут было много всяких эмоциональных слов, но внутренний цензор убедил меня что пост будет лучше смотреться без них.
Возникла задача: добавить в сообщение от бота кнопку открытия мини-приложения.
Первое с чем сталкиваемся: функция keyboardRow.AddOpenApp не документирована и не все её параметры очевидны. Более того: параметр app судя по JSON-схеме опционален, но если его не указывать то API возвращает ошибку что сей параметр не может быть пустым. А если указывать что либо (урл приложения, токен бота, рэндомный набор символов) то получаем ошибку вида:
not.found (Key: common.finder, args: [link,javax.ejb.FinderException: Link not found with pk = LinkPK{name='what-i-send-as-app-value', space=TAMTAM},].)
В надежде разобраться идём в issues на github и находим issue #2:
Could you add any examples with keyboard (simple/inline)?
Закрытое с пометкой "not planned".
Тут было много всяких эмоциональных слов, но внутренний цензор убедил меня что пост будет лучше смотреться без них.
😁4
Относительно недавно наш рынок покинул бренд роутеров Keenetic. Вместо него остался Netcraze. Обещали бесшовную миграцию, полную поддержку и прочие радости.
И вот появилась возможность проверить. В реальности действительно всё прошло довольно гладко и я даже немного расслабился и тут же получил удар поддых: сервис KeenDNS теперь называется СrazeDNS и формально обслуживание доменов в зонах keentic.* продолжается, однако перенести такое имя на новый роутер нельзя. Можно только зарегистрировать новое в новых зонах.
Т.е. с бесшовной миграцией всё-таки не получилось.
Сижу перенастраиваю свои внутренние сервисы на новый домен. Нашёл себе работу.
И вот появилась возможность проверить. В реальности действительно всё прошло довольно гладко и я даже немного расслабился и тут же получил удар поддых: сервис KeenDNS теперь называется СrazeDNS и формально обслуживание доменов в зонах keentic.* продолжается, однако перенести такое имя на новый роутер нельзя. Можно только зарегистрировать новое в новых зонах.
Т.е. с бесшовной миграцией всё-таки не получилось.
Сижу перенастраиваю свои внутренние сервисы на новый домен. Нашёл себе работу.