Шаги после создания ключа авторизации для Telegram API
Я возился с реализацией версии Telegram API на C#, но я застрял. Я успешно выяснил, как создать ключ авторизации, но я не знаю, куда идти дальше. Кто-нибудь знает следующий шаг после создания ключа авторизации? Документация так сложна для подражания.
Для справки: Telegram API
Примечание: я не использую Bot API. Я пытаюсь использовать обычный API.
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 + nearDc, это, скорее всего, ваше первое сообщение MTproto Encrypted, поэтому вам нужно будет создать новое случайное 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 (полезная нагрузка)
полезная нагрузка = соль + идентификатор_ сеанса + идентификатор_сообщения + seq_no + длина (сообщения) + сообщение + заполнение
Вы можете получить выше здесь
6) теперь вы ожидаете результат, который сообщит вам ваш ближайший dc_id, если он отличается от dc_id = 2 (обычно dc_id = 2 - это значение по умолчанию, с которого вы начинаете), то вам нужно отключиться и установить новое соединение с вашим новым dc_id и заново сгенерируйте свой auth_key, подключенный к этому новому DC. Ваши 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 с помощью вашего нового клиента Telegram
8) все последующие сообщения, которые вы отправляете в Telegram, будут отправляться с использованием одинаковых идентификаторов сеанса и соли, а также с использованием шагов шифрования MTProto, как и раньше
9) обратите внимание, что соль обычно полезна только в течение 24 часов. Сервер отправит вам новую соль, которую вы можете использовать для замены просроченных солей. session_id обычно долгоживущий.
10) как только вы освоите эти несколько шагов, вы можете попробовать отправить сообщения или получить список контактов и историю сообщений.
Приветствия.