2017-01-16 15 views
9

Tworzę bota, aby wysłać wiadomość do wielu osób kontaktowych w Telegramie. użytkownik może udostępnić kontakt z botem. następnie używam getUpdates i otrzymuję numer telefonu. Do korzystania z metody sendMessage potrzebuję adresu chat_id. teraz, jak uzyskać chat_id użytkownika z jego numerem telefonu? Czy jest jakaś metoda lepsza niż ta metoda?Jak uzyskać user_id numeru telefonu w telegramie

+1

Bot nie może skontaktować się z użytkownikiem, który wcześniej nie napisał do bota. –

+0

Jeśli ktoś wysyła kontakt do bota z numerem telefonu zarejestrowanym w telegramie, w kontakcie jest dodatkowe pole "identyfikator_użytkownika", ale jak wspomniałem wcześniej, twój bot nie może skontaktować się z tym użytkownikiem, jeśli użytkownik nie napisał do bota przed. –

Odpowiedz

16

Aby usługi internetowe mogły pozostać przy życiu, muszą walczyć z każdym rodzajem spamu. W rezultacie, boty Telegram nie mogą rozpocząć wysyłania wiadomości do użytkowników, którzy jeszcze nie zaczęli używać bota!

Tylko wtedy, gdy użytkownik zaczyna używać bota, można zobaczyć jego/jej chat_id i wysłać do niego wiadomości.

Jeśli użytkownik (Użytkownik A) prześle Ci dane o innym użytkowniku (Nazwijmy to, Użytkownik B), zobaczysz user_id użytkownika B. Jednak nadal nie możesz wysłać wiadomości bezpośrednio, chyba że on/ona również zaczęła wcześniej używać bota.

To zachowanie pozwala nam na obejście tego problemu i wysłanie zapytania do użytkowników za pomocą numeru telefonu lub przynajmniej potwierdzenie numeru telefonu użytkownika, jeśli jest to wymagane.

Aby to zrobić, najpierw należy utworzyć wiadomość o numerze contact. Nie ma znaczenia, kto wysłał wiadomość, nawet bot może wysłać wiadomość. Chodzi o to, aby Telegram wypełnił user_id nowej wiadomości o numerze contact. Można przeczytać o tym obiekcie tutaj: Contact Object

Sposób musimy użyć jest sendContact i potrzebuje cel chat_id, a first_name i phone_number. Teraz first_name może być dowolnym ciągiem, a jego wartość jest nieistotna dla procesu. Ponadto, chat_id może być identyfikacją każdego użytkownika z bota, nawet Twojego. Może to być również nazwa grupy lub kanału, w którym bot jest administratorem z dostępem do zapisu, na przykład @my_private_bot_channel. Krótko mówiąc, wszędzie tam, gdzie bot może wysłać wiadomość. Musisz więc podać tylko phone_number.

Po wysłaniu wiadomości otrzymasz odpowiedź serwera, wraz z Message, którą Twój bot właśnie opublikował. Pole contact tego nowo utworzonego komunikatu zawiera informacje o użytkowniku, któremu właśnie udostępniono jego kontakt, prawdopodobnie wraz z jego telegramem user_id, który jest tym samym, co identyfikator czatu użytkownika.

Zaraz potem możesz usunąć swoją wiadomość za pomocą metody deleteMessage.

Poniżej przedstawiono przykład takiego postępowania w zwykłym życzenie/format odpowiedzi, ale powinieneś użyć ramy to:

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

Odpowiedzią na ten wniosek jest następujący:

{ 
    "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 to część, która nas interesuje. Teraz możesz usunąć swoją wiadomość.

+2

Przepraszam za słabą gramatykę angielską. każdy edytor moich zdań jest mile widziany –

+0

Dzięki za udostępnienie twojej metody. Jeśli mam tylko numer telefonu, w jaki sposób mogę uzyskać user_id użytkownika telegramu. Ponieważ musimy przekazać chat_id i first_name użytkownika, aby twoja metoda działała. –

+1

@AlenooshBaghumian no! pamiętaj, że nazwa pierwsza może być dowolnym ciągiem. chat_id też może być twoim własnym chat_id! –

1

Występuje problem: nie możesz wysłać wiadomości z bota do użytkownika jako inicjatora rozmowy, nawet jeśli masz identyfikator użytkownika.

+0

@AnkitBajpai Tak, to * stanowi * odpowiedź na pytanie. Mówienie, że nie możesz tego zrobić * jest odpowiedzią *. Jeśli nie sądzisz, że jest to przydatna odpowiedź, możesz to zlekceważyć. – Servy

Powiązane problemy