Действия после создания ключа авторизации для Telegram API

Я возился с реализацией C# версии Telegram API, но я застрял. Я успешно понял, как создать ключ авторизации, но я не знаю, что делать дальше. Кто-нибудь знает следующий шаг после создания ключа авторизации? Документация настолько сложна для понимания.

Для справки: API Telegram

Примечание. Я не использую Bot API. Я пытаюсь использовать обычный API.


person Jesse McConahie    schedule 02.12.2015    source источник
comment
Я задокументировал шаги здесь stackoverflow.com/a/34929980/44080.   -  person Charles Okwuagwu    schedule 21.01.2016


Ответы (1)


После создания вашего Auth_key мне проще всего убедиться, что я подключен к ближайшему центру обработки данных, прежде чем продолжить. Также вы должны отправить команду InitConnection вместе с текущим уровнем (версией API), с которым будет работать ваш код.

Вот пример того, что я отправляю:

msg = TL.invokewithlayer(@layer, TL.initconnection(@app_id, @device_model, @system_version, @app_version, @lang_code, TL.help_getnearestdc))

Теперь, прежде чем вы отправите это, вот еще немного предыстории:

1) Серверы Telegram общаются в TL, что в основном представляет собой специально разработанную схему кодирования, которую Telegram использует для выражения всего: от команд до всех их типов. Вам нужно будет создать себе декодер и кодировщик для преобразования необработанных байтов в TL и наоборот.

2) Telegram время от времени обновляет свои версии API, но версия на их сайте устарела. Вы можете легко получить последнюю спецификацию API их официальных проектов с открытым исходным кодом. В частности, это и это из Webogram весьма полезны для генерации свой собственный парсер TL. Текущая версия слоя 45

3) Таким образом, когда вы отправляете свой запрос init + NearestDc, это, скорее всего, ваше первое зашифрованное сообщение MTproto, поэтому вам нужно будет создать новый случайный 64-битный номер в качестве ключа сеанса, но также вам нужен действительный server_salt...

4) Возможно, вы пропустили это при создании своего Auth_Key, но вы можете создать действительный начальный server_salt из этого:

server_salt = substr(new_nonce, 0, 8) XOR substr(server_nonce, 0, 8)

вы можете посмотреть это здесь: ШАГ 9) Обмен ключами DH завершен

5) Теперь у вас есть server_salt, новый случайный 64-битный идентификатор session_id, и вы хотите отправить следующее:

msg = TL.invokewithlayer(@layer, TL.initconnection(@app_id, @device_model, @system_version, @app_version, @lang_code, TL.help_getnearestdc))

Формат MTProto: auth_id + msg_key + enc_payload

enc_payload = AES_IGE_enc (полезная нагрузка)

полезная нагрузка = соль + session_id + msg_id + seq_no + len(msg) + msg + padding

Вы можете получить это из здесь

6) теперь вы ожидаете результат, который сообщает вам ваш ближайший dc_id, если он отличается от dc_id = 2 (обычно dc_id = 2 используется по умолчанию, с которого вы начинаете), тогда вам нужно отключиться и запустить новое подключение к вашему новому dc_id и повторно сгенерируйте свой ключ auth_key, подключенный к этому новому контроллеру домена. Ваши dc_ids указывают на список IP-адресов центров обработки данных Telegram ['149.154.175.50', '149.154.167.51', '149.154.175.100', '149.154.167.91', '149.154.171.5']

7) после подключения к правильному «ближайшему контроллеру домена» теперь можно выполнить авторизацию пользователя, чтобы авторизуйте (ваш) номер мобильного телефона для доступа к телеграмме с помощью вашего нового клиента Telegram

8) все последующие сообщения, которые вы отправляете в Telegram, будут отправляться с использованием того же идентификатора session_id и соли и с соблюдением шагов шифрования MTProto, как и раньше.

9) обратите внимание, что соль обычно хороша всего 24 часа. Сервер отправит вам новую соль, которую вы можете использовать для замены просроченных солей. session_id обычно долгоживущий.

10) как только вы освоите эти несколько шагов, вы можете попробовать отправлять сообщения или получать список контактов и историю сообщений.

Ваше здоровье.

person Charles Okwuagwu    schedule 18.02.2016