Ответы пользователя по тегу API
  • Есть ли сервисы по отправке SMS по API с тестовым периодом?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В настоящее время скорее нет, чем да.

    Сейчас все крупные мобильные операторы требуют регистрации имени с предоставлением документов о товарном знаке, имени сайта итд итп. У некоторых это требует абонентской платы (обычно порядка 2 тыс. рублей в месяц), у некоторых даже бесплатно, но ритуал соблюсти всё равно надо.

    Единственное что можно тут сделать - выяснить у поставщика, нет ли у него возможности отправки на какого-нить не очень крупного оператора (MVNO?), у которого купить симку и на этом номере тестироваться с каким-нить общим именем типа "sms info". Но в целом для выхода в прод регистрация имени всё равно потребуется.
    Ответ написан
    Комментировать
  • Как удалить последние 2 сообщения в телеграм боте?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Никак, бот может удалять только свои сообщения, но не сообщения от пользователя.
    Ответ написан
  • Telegram Bot API как боту отправить контакт?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Бот может отправить пользователю кнопку, при нажатии на которую пользователь разрешает передать боту свои контактные данные.

    См. опцию request_contact в документации.
    Ответ написан
    5 комментариев
  • Можно ли получать ид юзера зная его юзернейм?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Средствами Bot API невозможно по username получить id. Серьёзни, никак. Я недавно отвечал на похожий вопрос https://qna.habr.com/q/1224466

    Но в указанном узком сценарии возможно сделать такое, но с оговорками.

    Во-первых, придётся явно сохранять связку username-id для всех пользователей, пишущих боту.

    Во-вторых, не у всех пользователей есть username.

    В-третьих, пользователь может в любой момент сменить свой username, и бот об этом не узнает.

    По реализации всё достаточно просто: при каждом поступающем сообщении запоминаем пару username-id в базе, а для нужной команды достаём.
    Ответ написан
    Комментировать
  • Как получить id?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Никак, средствами Bot API это невозможно. Тем более что у пользователя может вообще не быть username.

    Конечно, его можно получить в событии от пользователя в поле Update.from.id, но для этого пользователь должен сделать какое-то действие в сторону бота (или, например, в сторону группы, в которой он состоит).
    Ответ написан
    Комментировать
  • Как сделать что-бы бот отправлял сообщение в групповой но, не в лс?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Распространённая ошибка: в качестве chat_id используется id пользователя. Естественно, получателем будет пользователь, а не группа.

    Правильно вместо этого:

    $chat_id = $data['message']['from']['id'];

    использовать это:

    $chat_id = $data['message']['chat']['id'];
    Ответ написан
    Комментировать
  • 403 ошибка при fetch запросе к API Яндекс Диск, в чем проблема?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Оказывается, yandex почему-то возвращает 403, если в заголовках запроса есть параметр Referrer. Помогло добавить в html страницы:

    <meta name="referrer" content="no-referrer">

    После этого Referrer из запросов исчез, и всё заработало.
    Ответ написан
    2 комментария
  • Можно ли получить телеграм id по номеру телефона?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Да, потенциально клиентский API Телеграма открыт и позволяет сделать поиск по номеру телефона. Но надо понимать, что пользователь может запретить настройками находить себя по номеру телефона. Также надо понимать, что при сколько-нибудь массовом поиске по номеру телефона Телеграм отреагирует и заблокирует.

    Рекомендую отказаться от этой затеи.
    Ответ написан
    2 комментария
  • Составить запрос в API для проверки работоспособности прокси сервера на Python?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    405 возвращает потому что в доке ошибочно http:// вместо https://, который приводит к редиректу на https:// с GET. Это лечится заменой на https.

    Следующая стадия - полечить ответы об ошибках. Они в ответ возвращают json со строкой, в которой json. Поэтому проверяем, если r.json() текст - интерпретируем как json.

    Сами прокси передавать в POST-запросе через перенос строки в параметре proxy_list:

    import requests
    import json
    
    data = '203.13.32.122:80\n203.13.32.122:443'
    r = requests.post('https://proxy-checker.net/api/proxy-checker/', data={"proxy_list": data })
    
    print (r)
    
    resp_json = r.json()
    if isinstance(resp_json, str):
      resp_json = json.loads(r.json())
    print (json.dumps(resp_json, indent=2, ensure_ascii=False))


    Короче, очень кривой API...
    Ответ написан
  • Как удалить кнопку из клавиатуры telebot?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нельзя удалить одну кнопку. Можно либо удалить всю клавиатуру целиком, либо отправить другую клавиатуру на замену. Соответственно, для удаления всего одной кнопки нужно помнить, какую клавиатуру отправлял в прошлый раз (хранить это явным образом или определять из контекста), чтобы отправить новую клавиатуру без этой кнопки.
    Ответ написан
    Комментировать
  • Как правильно отправлять запросы к Telegram API (не Bot API)?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Там не просто http-протокол, поэтому легко это повторить нельзя. Если интересно именно php, то советуют библиотеку https://github.com/danog/MadelineProto

    Для python - библиотека telethon или, как вариант, pyrogram. Для js - mtproto-core. Большинство ботописателей используют python и telethon.
    Ответ написан
    Комментировать
  • Сменить ID профиля ВКонтакте в базе данных ВК?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Да, id пользователя неизменен. Можно только удалить пользователя и создать нового, тогда его id будет другим.
    Ответ написан
    Комментировать
  • Отправка файла через телеграм бота с помощью libcurl с определенным параметром?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если по ссылке, то надо передать ссылку в URL: ...&document=ссылка

    Если файл лежит локально, то передать файл в multipart/form-data, как-то примерно так: https://curl.se/libcurl/c/postit2.html
    Ответ написан
    Комментировать
  • Где взять api для приложения музыки?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    https://www.jamendo.com/
    https://developer.jamendo.com/v3.0
    Довольно много музыки (в том числе очень неплохой) на либеральных лицензиях. Но исполнители преимущественно малоизвестные.
    Ответ написан
    Комментировать
  • Как отправить сообщение боту от имени пользователя?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Да, потребуется использовать клиентский API (MTProto). https://core.telegram.org/#getting-started

    Библиотеки tdlib, для python - telethon или pyrogram, для других языков см. гугл.
    Ответ написан
    Комментировать
  • Получать сообщения от пользователя?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Есть два способа получения доступа к API WA.

    1. Легальный: WhatsApp Business API. Нужно зарегистрировать бизнес (можно ИП) в Facebook Business Manager, пройти модерацию, получить доступ через одного из партнёров WhatsApp. Недостатки: дорого. Достоинства: надёжно, официально.

    2. Нелегальный: имитация недокументированного WhatsApp Web API. Достаточно держать телефон с WhatsApp включённым, сфотографировав QR-код, выданный нужной библиотекой или сервисом. Недостатки: риск бана (невысокий, но я бы не советовал использовать Очень Важный Номер в таких играх), риск что всё сломается из-за изменения Web API, необходимость держать включённым номер телефона. Достоинства: дёшево, не нужно регистрировать шаблоны для отправки сообщения первым (но если часто отправлять первым повышается риск бана).
    Ответ написан
    Комментировать
  • Как сделать ссылку в callback_data?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Для этого надо использовать url-кнопку, а не callback-кнопку

    https://core.telegram.org/api/bots/buttons
    Ответ написан
    Комментировать
  • Как авторизовать пользователя на сайте через бот Вайбера?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Update: как обсудили с автором, скорее всего тут речь об использовании deep linking. Пользователь идёт по ссылке, где в context передаётся какой-то идентификатор или хеш, затем делится с ботом своим номером телефона, и авторизация пройдена.

    Предыдущий ответ оставляю, так как он тоже может оказаться полезен:

    Viber Bot (в девичестве Viber Public Account) не позволяет отправку сообщений по номеру телефона. Для этого надо использовать Viber Business Messages (в девичестве Viber Service Messages) через партнёров Viber.

    Обычная практика в этой сфере - посылать сообщение через Viber, затем по таймауту высылать запасную СМС. Это называют модным словом "каскад". Можно для повышения надёжности включать в каскад также WhatsApp (и другие каналы с отправкой по номеру телефона, например, mail.ru notify). Но можно просто при проверке номера пользователя предлагать ему самому выбрать из списка предпочтительный канал для проверки (если не сработает - пользователь попробует другой канал самостоятельно).

    Нужно быть готовым к тому, что стоимость отправки в Viber/WA по номеру телефона стоит дороже, чем СМС. Хотя сообщение на мессенджеры принято тарифицировать только при успешной доставке (недоставленные бесплатны), есть также обязательный ежемесячный платёж (для Viber это требование самого Viber, для WhatsApp большинство поставщиков продают минимальный пакет хотя бы на 5-10 тыс. рублей, а те, кто не берут абонентку, для покрытия своих расходов тарифицируют даже бесплатные сообщения).
    Ответ написан
  • Как получить file_id без отправки сообщения пользователю?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Я решал эту задачу так: при первой отправке файла я его отправлял как файл, запоминая file_id в словаре и в таблице в базе, а при следующей уже имел готовый file_id. При этом я могу в любой момент добавлять файлы, не задумываясь о том, загружал ли я их уже в Telegram или нет.

    files = {}
    def load_files():
      global files
      res = db.execute("SELECT file_name,file_id FROM files")
      files = {}
      for row in res:
        file_name, file_id = row
        files[file_name] = file_id
    
    def save_file(file_name, file_id):
      global files
      db.execute("INSERT INTO files (file_name,file_id) VALUES (?,?) ON CONFLICT(file_name) DO UPDATE SET file_id=excluded.file_id", (file_name, file_id))
      files[file_name] = file_id
    
    load_files()
    
    ...
            if item["photo"] in files:
              file_id = files[item["photo"]]
              print (f" send photo file_name={item['photo']} file_id={file_id}")
              bot.send_photo(call.message.chat.id, file_id)
            else:
              with open(os.path.join("menu", item["photo"]), "rb") as f:
                bot.send_chat_action(call.message.chat.id, "upload_photo")
                r = bot.send_photo(call.message.chat.id, f)
                file_id = r.photo[0].file_id
                save_file(item["photo"], file_id)
                print (f" uploaded photo file_name={item['photo']} file_id={file_id}")
    Ответ написан
    Комментировать
  • Через какой сервис использовать Whatsapp API?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Напрямую доступ к API может получить разве только какая-нибудь крупная транснациональная компания. Менее крупным следует обращаться к агрегаторам-партнёрам. Официальный список

    Подключиться могут только бизнесы (можно ИП), причём есть ограничения, например, нельзя продавцам алкоголя и лекарств.

    При выборе следует ориентироваться на две основные вещи: на ценовую политику и на наличие нужных интеграций. Далеко не всякого поставщика поддерживает bitrix, jivochat или что там ещё у вас планируется. До кучи, может влиять юрисдикция конкретного поставщика. Далеко не всем может быть удобно заключать договор с Сингапуром или переводить платежи в Ирландию.

    Выбрав, можно выяснять уже детали подключения, используемый протокол и всё такое. Обычно каждый провайдер заинтересован, чтобы к нему больше подключались, и потому с удовольствием ответит на любые вопросы.

    Разумеется, надо быть готовым к тому, что стоит использование этого API дороже, чем отправка смс.
    Ответ написан
    Комментировать