Телеграмм бот запросить номер телефона

Расскажем, как кнопка поможет в два клика получить имя пользователя и его контактный телефон через Telegram-бота.

В Telegram номер телефона — это уникальный идентификатор, который используется при регистрации в приложении и присваивается каждому пользователю. Получить контактный номер пользователя можно только напрямую спросив об этом у него.

Мы упростили этот процесс! И теперь узнать номер телефона можно с помощью кнопки-контакта в Telegram-боте.

Кнопка-контакт работает по тем же правилам, что и уже привычные интерактивные кнопки — она отправляется вместе с сообщением, а еще ей можно дать собственное название. Также после нажатия на кнопку-контакт в Telegram-боте¸— пользователь автоматически поделится с вами именем и номером телефона.

Особенности кнопки-контакта

  1. Использовать кнопку-контакт можно и в других мессенджерах, но там она будет выглядеть как обычная интерактивная кнопка.
  2. Отправить кнопку-контакт можно только в личном чате, то есть пользователю нужно подписаться на Telegram-бота и написать сообщение. В групповых чатах подключить такую кнопку невозможно.
  3. Кнопка-контакт работает через приложение Telegram с версией не старше 9 апреля 2016 года. Использовать кнопку через более старое приложение, к сожалению, не получится.
  4. Кнопка-контакт становится недоступной, если ее подключать одновременно с другими интерактивными кнопками.
  5. К чату с пользователем привязывается только один контактный номер, которым он поделился в Telegram-боте. Если у пользователя изменится номер, то в чате он обновится только тогда, когда человек отправит новый номер в боте.

Как настроить кнопку-контакт в Telegram

Сейчас кнопку-контакт можно использовать двумя способами: через API и визуальный редактор чат-ботов. Дополнительно настраивать кнопку в визуальном редакторе не нужно, она появится автоматически и будет расположена рядом с другими интерактивными кнопками в блоке сообщений.

Кнопка-контакт в визуальном редакторе

Чтобы не запутаться в работе нового функционала, прямо под строкой с кнопками можно заметить информационный блок, который поможет вам разобраться во всем.

Информационный блок в визуальном редакторе чат-ботов

Внутри визуального редактора чат-ботов кнопка-контакт работает как обычная интерактивная кнопка — ее можно связывать с другими блоками, добавлять задержки и действия.

Где посмотреть сохраненный номер пользователя из Telegram-бота?

Телефонные номера, которыми пользователи поделились с ботом в Telegram, можно получить несколькими способами:

  • Посмотреть в личном кабинете TextBack через карточку пользователя;
  • Скачать данные по всем чатам или только подписчикам из личного кабинета TextBack через раздел «Аналитика» — номер телефона, которым пользователь поделился в Telegram будет отмечен надписью «[Telegram] Подтвержденный номер телефона»;
  • Найти контакт в карточке amoCRM.

Протестируйте кнопку-контакт в нашем визуальном редакторе чат-ботов — 14 дней бесплатно.

получить телефон пользователя

Привет всем! Собственно, суть проблемы указана в названии записи: как получить телефон пользователя с помощью Python и библиотеки Telebot. Давайте разберемся 😉

Ниже — пример рабочего года, который, надеюсь, вам поможет 🙂 Вдруг что — не стесняйтесь задавать вопросы на почту или в Telegram.

  1. import telebot #Подключили библиотеку Телебот - для работы с Телеграм
  2. from telebot import types #Подключили дополнения
  3. import config #Подключили библиотеку Config, с помощью чего можем хранить токен не в коде программы ;) а в файле config.py. Важно: этот файл должен лежать в той же директории, что и код!
  4.  
  5. bot = telebot.TeleBot(config.token) #Подключили токен
  6.  
  7. @bot.message_handler(commands=['number']) #Объявили ветку для работы по команде <strong>number</strong>
  8. def phone(message):
  9.     keyboard = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True) #Подключаем клавиатуру
  10.     button_phone = types.KeyboardButton(text="Отправить телефон", request_contact=True) #Указываем название кнопки, которая появится у пользователя
  11.     keyboard.add(button_phone) #Добавляем эту кнопку
  12.     bot.send_message(message.chat.id, 'Номер телефона', reply_markup=keyboard) #Дублируем сообщением о том, что пользователь сейчас отправит боту свой номер телефона (на всякий случай, но это не обязательно)
  13.  
  14. @bot.message_handler(content_types=['contact']) #Объявили ветку, в которой прописываем логику на тот случай, если пользователь решит прислать номер телефона :) 
  15. def contact(message):
  16.     if message.contact is not None: #Если присланный объект <strong>contact</strong> не равен нулю
  17.         print(message.contact) #Выводим у себя в панели контактные данные. А вообщем можно их, например, сохранить или сделать что-то еще.

Специально для вас — видео с более наглядной инструкцией:

Как видите — все очень и очень просто 🙂
Спасибо за внимание!

P.S. На моем канале Youtube один из подписчиков задал интересный вопрос: как скрыть клавиатуру после того, как телефонный номер был отправлен? Ответа на вопрос я не знал 🙁 Впрочем, спустя день подписчик подсказал решение, которым я и делюсь:

keyboard = types.ReplyKeyboardRemove()
bot.send_message(message.chat.id, msg, reply_markup=keyboard)

P.P.S. не так давно возник вопрос — а как полученный от пользователя номер телефона отправить, например, в удобоваримом виде куда-то в группу? Все просто:
1. Добавляете бота, который должен отправить полученную информацию в нужную группу с правами администратора
2. В коде бота вносите следующие изменения в функцию def contact(message):

@bot.message_handler(content_types=['contact'])
def contact(message):
if message.contact is not None:
print(message.contact)
print(type(message.contact))
print('Name: ' + str(message.contact.first_name))
text = 'Пользователь: ' + message.contact.first_name + ': телефон: ' + message.contact.phone_number
bot.send_message(id_channel, text)

Собственно, вы можете выводить все, что угодно — для этого просто используем название нужного поля по схеме:

phone_number': '***', 'first_name': '***', 'last_name': '***', 'user_id': ***, 'vcard': '***'

где звездочками скрыты получаемые в полном виде контактные данные пользователя.

Больше …

Больше ...

Привет всем! Неспешно разбираюсь с вопросом запуска Python-кода на сервере…

Бот спрашивает данные пользователя и записывает данные по очереди в блокнот. Но почему-то не записывает номер телефона. В чем проблема?Фото о работе Использую pytelegrambotapi

import telebot
from telebot import types
import os, signal, pickle, sys

bot = telebot.TeleBot('token')

@bot.message_handler(commands=['start'])
def user(message):
    sent = bot.send_message(message.chat.id, "Здравствуйте, как я могу к вам обращаться?")
    bot.register_next_step_handler(sent, services)
    doc = open('client.txt', 'a')


@bot.message_handler(content_types=['text'])
def services(message):
    user_markup = telebot.types.ReplyKeyboardMarkup(one_time_keyboard=True)
    user_markup.row('Buy', 'Sell')
    uslugi = bot.send_message(message.from_user.id, "Какие услуги вас интересуют?", reply_markup=user_markup)
    bot.register_next_step_handler(uslugi, telephone)
    doc = open('client.txt', 'a')
    doc.write("Имя заказчика - {name}n".format(name=message.text))


def telephone(message):
    keyboard = types.ReplyKeyboardMarkup(one_time_keyboard=True)
    reg_button = types.KeyboardButton(text="Отправить номер телефона", request_contact=True)
    keyboard.add(reg_button)
    nomer = bot.send_message(message.chat.id, 'Оставьте ваш контактный номер чтобы наш менеджер смог связаться с вами.', reply_markup=keyboard)
    bot.register_next_step_handler(nomer, save)
    doc = open('client.txt', 'a')
    doc.write("Услуга - {service}n".format(service=message.text))


def save(message):
    bot.send_message(message.chat.id, 'Спасибо за обращение. Мы свяжемся с вами в ближайшее время.')
    doc = open('client.txt', 'a')
    doc.write("Телефон - {telephon}n".format(telephon=message.text))
    doc.close()

if __name__ == '__main__':
     bot.infinity_polling(none_stop=True)

Я создаю бота, чтобы отправить сообщение нескольким контактам в Telegram. Пользователь может поделиться контактом с ботом. тогда я использую getUpdates и получаю номер телефона. Для использования метода sendMessage мне нужен chat_id. теперь, как получить chat_id пользователя с его номером телефона? Есть ли способ лучше этого метода?

3 ответа

Лучший ответ

Чтобы интернет-сервисы оставались в живых, им нужно бороться с любым типом спама. В результате боты Telegram не могут начать отправлять сообщения пользователям, которые еще не начали использовать бот!

Только когда пользователь начинает использовать бота, вы можете видеть его / ее chat_id и отправлять ему сообщения.

При этом, если пользователь (пользователь A) отправляет вам contact сведения о другом пользователе (назовем этого пользователя B), вы можете увидеть user_id пользователя B. Однако вы все еще можете не отправлять никаких сообщений напрямую, если только он не начал использовать бота раньше.

Такое поведение позволяет нам обойти и запросить пользователей по номеру телефона или, по крайней мере, подтвердить номер телефона пользователя, если это необходимо.

Для этого сначала нужно создать сообщение contact. Неважно, кто отправил сообщение, даже бот может отправить сообщение. Идея состоит в том, чтобы Telegram заполнил user_id нового contact сообщения. Вы можете прочитать об этом объекте здесь: Контактный объект

Нам нужно использовать метод sendContact, и для него требуется цель chat_id, first_name и phone_number. Теперь first_name может быть любой строкой, и ее значение не имеет отношения к процессу. Кроме того, chat_id может быть идентификатором чата любого пользователя с ботом, даже вашего. Это также может быть имя группы или канала, в котором бот является администратором с правами записи, например, @my_private_bot_channel. Короче говоря, везде, где этот бот может публиковать сообщения. Так что вам нужно только предоставить phone_number.

После отправки сообщения вы получите ответ от сервера вместе с сообщением, что ваш бот только что отправил. Поле contact этого вновь созданного сообщения содержит информацию о пользователе, с которым вы только что поделились его контактом, возможно, вместе с его / ее телеграммой user_id, которая совпадает с идентификатором чата пользователя.

Сразу после этого вы можете удалить свое сообщение с помощью метода deleteMessage.

Ниже приведен пример этого в простом формате запроса / ответа, но вам, вероятно, следует использовать для этого структуру:

https://api.telegram.org/{BOT_TOKEN}/sendContact?chat_id=123456789&phone_number=+989123456789&first_name=Some+Random+String

Ответ на этот запрос следующий:

{
    "ok": true,
    "result": {
        "message_id": 12345678987654321,
        "from": {
            "id": 987654321,
            "first_name": "The Bot Name",
            "username": "mybot_bot"
        },
        "chat": {
            "id": 123456789,
            "first_name": "Your Chat Party",
            "last_name": "Your Chat Party",
            "type": "private"
        },
        "date": 1484612850,
        "contact": {
            "phone_number": "989123456789",
            "first_name": "Some Random String",
            "user_id": 654789321
        }
    }
}

"user_id": 654789321 это та часть, которая нас интересует. Теперь вы можете удалить свое сообщение.


25

Soroush Falahati
25 Ноя 2017 в 17:17

Знание идентификатора пользователя может быть полезно для бана и отмены. Вот как я это делаю на своем веб-сайте:

1) создайте небольшой случайный код и покажите его пользователю, сказав ему отправить его вашему боту.

2) прочитайте сообщение, используя getUpdate. Итак, в PHP:

 $url = "https://api.telegram.org/bot"._TELEGRAM_BOT_TOKEN."/getUpdates?offset=-1";
 $response = file_get_contents($url, false, NULL);
 $jsondata = json_decode($response,true);
 echo "<pre>";
 print_r($jsondata);
 echo "</pre><br>";

Вы получите 3 информации:

  $chat_id = $jsondata['result'][0]['message']['chat']['id'];
  $first_name = $jsondata['result'][0]['message']['chat']['first_name'];
  $text = $jsondata['result'][0]['message']['text'];

Вам просто нужно сравнить прочитанный вами текст с кодом, который вы просите пользователя отправить. Если это то же самое, вы можете прочитать chat_id и first_name.

На данный момент, у вас есть chat_id, которого достаточно, чтобы написать пользователю в «приват». Для этого не нужно знать user_id.

Если вам нужен идентификатор пользователя, вы должны отправить еще одно сообщение. Как этот:

   $num = "+55888888888888";
   $url = "https://api.telegram.org/bot"._TELEGRAM_BOT_TOKEN."/sendContact?chat_id=".$chat_id."&phone_number=".$num."&first_name=".$first_name;
  $response = file_get_contents($url, false, NULL);
  $jsondata = json_decode($response,true);
  echo "<pre>";
  print_r($jsondata);
  echo "</pre><br>";

Как видите, чтобы отправить это второе сообщение, вам нужно 3 информации:

1) номер телефона пользователя. Вы не можете получить это от Telegram. Это означает, что вы должны спросить об этом у пользователя.

2) chat_id. Вы получаете это от предыдущего звонка

3) first_name вы также получаете от предыдущего вызова

User_id находится по адресу:

      $jsondata['result']['contact']['user_id']

Некоторые детали:

1) Кажется, Telegram не проверяет first_name. Поэтому, если вы отправляете для второго звонка другое имя, отличное от того, которое вы получили от первого звонка, это не имеет значения (но, возможно, более безопасно отправлять то же самое. Во всех случаях вы получаете его от первого звонка!)

2) если вы сделаете второй звонок с неправильным номером телефона, вы получите результат без ввода идентификатора пользователя.

Итак, вы должны сделать:

   $a = isset( $jsondata['result']['contact']['user_id']);
   if ($a == false)
   {
      $user_id = 0;  // No user_id
   }
   else
   {
      $user_id = $jsondata['result']['contact']['user_id'];
   }

3) Номер телефона должен иметь код страны. +5599888887777 в порядке, но 99888887777 нет и даст вам ответ без записи user_id.

Теперь вы можете общаться с пользователем, используя chat_id, а также забанить его из группы или канала, используя его user_id.


0

Peter
5 Дек 2018 в 12:19

Существует проблема: вы не можете отправить сообщение от бота пользователю как инициатору разговора, даже если у вас есть user_id.


1

JonathanDavidArndt
18 Янв 2018 в 18:37

Я понимаю, что это не возможно использовать a Bot получить номер телефона отправителя.
Мне, однако, нужно внедрить ботоподобный клиент, который отвечает всем, кто им отправляет сообщения. Я использую PHP на Apache.

Это не бот, так как он не принимает команды, а отвечает на отправленный текст от любого, у кого есть этот номер телефона. Таким образом, вы добавляете пользователя в качестве контакта (используя номер телефона), а затем отправляете ему текст.

Моя цель состоит в том, чтобы узнать номер телефона отправителя, когда я его получу. Telegram API что есть одноранговый идентификатор, но я не могу найти, как получить номер телефона, если это вообще возможно …

3

Решение

попробуйте эту библиотеку из github https://github.com/irazasyed/telegram-bot-sdk

и код для создания кнопки «визитная карточка» в приватном чате:

$keyboard = array(
array(
array(
'text'=>"Send your visit card",
'request_contact'=>true
)
)
); //user button under keyboard.

$reply_markup = $telegram->replyKeyboardMarkup([ 'keyboard' => $auth_keyboard, 'resize_keyboard' => true, 'one_time_keyboard' => false ]);
$telegram->sendMessage([ 'chat_id' => $chat_id, 'text' => $reply, 'reply_markup' => $reply_markup ]);

и код для получения уникального телефона пользователя с «визитной карточки» после нажатия пользователем кнопки

$user_phone = $result["message"]["contact"]["phone_number"];
if ($user_phone) {
$reply = $user_phone;
$telegram->sendMessage([ 'chat_id' => $chat_id, 'text' => $reply, 'reply_markup' => $reply_markup ]);
}

3

Другие решения

Других решений пока нет …

Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно.
Вам необходимо обновить браузер или попробовать использовать другой.

Дней с нами
768
Розыгрыши
0
Сообщения
73
Репутация
+/-

0

Реакции
57


  • #1

В данном посте я расскажу, как узнать номер телеграм аккаунта и как не спалить свой номер.

К вашему вниманию ниже я приведу парочку ботов с помощью которых можно с лёгкостью узнать номер обидчика или же любого неизвестного человека.

Начнём:

1. Первым делом нам потребуется уговорить собеседника под любым предлогам перейти в ниже перечисленные боты.

@Tpoisk_Bot
@addprivategroup_bot
@EyeGoodBot
@protestchat_bot
@joinchatru_bot
@GetCont_bot
@Checnum_bot

2. Когда наша жертва посетил один из этих ботов, нам потребуется перейти в бота @deanonym_bot

3. Делаем в нём запрос информации по никнейму телеграмма без @, либо указав персональный ID жертвы или же просто переслать сообщение от пользователяибо указав персональный ID жертвы или же просто переслать сообщение от пользователя.

Вот таким незамысловатым образом мы получим номер телефона нашей жертвы.

ВАЖНО чтобы не спалить свой номер после входа в бота @deanonym_bot не нажимайте Пройти регистрацию, также и в других ботах которые запрашивают номер!

Похожие темы

Понравилась статья? Поделить с друзьями:
  • Телеграм некорректный номер телефона
  • Телеграм на городской номер телефона
  • Телеграм кликабельный номер телефона
  • Телеграм канал для определения номера телефона
  • Телеграм как скрыть номер телефона свой