This说要获取用户 token ,我需要发送请求

auth.sentCode#efed51d9 phone_registered:Bool phone_code_hash:string send_call_timeout:int is_password:Bool = auth.SentCode;

某处?我已经读过它是一个MTProto请求,但是我不确定如何发送它。可以和邮递员一起发送吗?通过teletgrambotsrubenlagus一起使用library吗?

最佳答案

电报协议

MTProto嵌入在传输协议(TCP,HTTP等)中,因此并非不可能使用Postman,但我确实很难做到(因此,这不是最佳选择)。
认为您的http调用必须实现 MTProto 2.0 ,因此您的http消息必须具有以下结构/格式:structure

  • 64位密钥_指纹
  • 128位mesg_key
  • 加密_数据

  • 参见schematic presentation of messages

    只能将非常有限数量的特殊类型的消息作为纯文本进行传输。

    电报机器人

    关于 TelegramBots 是一个库,可帮助使用Telegram Bots Api构建Bot。

    它支持两种技术:长轮询 Webhook

    该项目有一个很好的教程,您可以尝试:quickstart

    另外,如果您是Spring Boot用户,那么它也具有 Spring Boot启动程序(spring boot starter)。

    如何实现自己的身份验证客户端?

    如果您想学习如何与电报api交互以进行身份​​验证,则需要阅读以下内容:auth section

    之后,您可以了解如何与Telegram进行交互以进行身份​​验证...。我建议您阅读真实的应用程序如何使用Telegram API。
    查看此示例实现中的Telegram Api的所有用法(对包类的引用:org.telegram.api.requests.TLRequestAuth *):

    ActivationController impl

    如上例所示,通常电报客户端使用TDLib。

    基本上,Telegram提供两个API:

    电报API和TDLib

    使用此API,您可以构建自己的自定义电报客户端。它
    对所有希望创建电报的开发人员开放100%
    我们平台上的应用程序。随时学习开源代码
    现有Telegram应用程序的示例,说明了工作原理
    这里。不要忘记在我们的系统中注册您的应用程序。

    Bot API

    该API可让您将漫游器连接到我们的系统。电报机器人是
    不需要设置其他电话号码的特殊帐户
    向上。这些帐户用作运行在某处的代码的接口
    您的服务器。

    如果要创建或使用Telegram作为服务来发送和接收消息以及从服务器进行交互(不需要电话号码)... Bot API应该是您的选择。

    如果您要创建自己的自定义电报应用程序(您的用户将需要一个电话号码来注册,就像在手机中使用电报一样)...电报API / TDLib应该是您的选择。

    TDLib 是:

    第三方开发人员可以轻松快速构建的工具,
    安全且功能丰富的电报应用程序。 TDLib负责所有网络
    实施细节,加密和本地数据存储,以便您
    可以花更多时间进行设计,响应式界面和美观
    动画。

    TDLib支持所有电报功能并开发电报
    在任何平台上都能轻松应用。它可以在Android,iOS,
    Windows,macOS,Linux和几乎任何其他系统。图书馆是
    开源并且几乎与任何编程语言兼容。

    因此,您无需关心MTProtocol协议,网络,加密等底层细节。在这种情况下,您只需要使用TDLib。

    我发送给您的示例类是Android的电报应用程序(telegram app)。它使用TDLib。

    如果您想学习如何创建自己的TDLib ...源代码在这里:
    tdlib source

    它是用C语言开发的,可以与Java,.NET等一起使用。

    基本上,它通过传输协议(http,tcp或udp)发送消息。例如。使用发布请求以上述MTProto格式提交消息的HTTP。消息用于编码。

    有关MTProto支持的传输方式工作原理的文本:supported transports

    其他参考:

    电报API:Telegram APIs
    TDLib:TDLib

    Java中TDLib用法示例

    Java示例存储库:TDLib example client
  • 第一次结帐TDLib存储库TDLib repo
    就像我说的那样,TDLib是用C语言开发的,因此您需要使用JNI(Java本机接口)与其进行交互。因此,您需要编译TDLib(使用cmake)。
  • 按照示例说明(readme.md)在平台(readme)中构建/预构建TDLib。

  • TDLib应该预先构建以与Java一起使用并安装到本地
    子目录td/如下:
    cd <path to TDLib sources>
    mkdir jnibuild
    cd jnibuild
    cmake -DCMAKE_BUILD_TYPE=Release -DTD_ENABLE_JNI=ON -DCMAKE_INSTALL_PREFIX:PATH=../example/java/td ..
    cmake --build . --target install
    

    如果您想使用MSVC在Windows上为64位Java编译TDLib,
    您还需要将-A x64选项添加到CMake。

    在Windows中,通过添加参数来使用Vcpkg工具链文件
    -DCMAKE_TOOLCHAIN_FILE = / scripts / buildsystems / vcpkg.cmake

    然后,您可以构建以下示例:
    cd <path to TDLib sources>/example/java
    mkdir build
    cd build
    cmake -DCMAKE_BUILD_TYPE=Release -DTd_DIR=<full path to TDLib sources>/example/java/td/lib/cmake/Td -DCMAKE_INSTALL_PREFIX:PATH=.. ..
    cmake --build . --target install
    

    编译后的TDLib共享库和Java示例将是
    放在bint和Javadoc文档的docs/中。
  • 然后您可以运行Java示例
  • cd <path to TDLib sources>/example/java/bin
    java '-Djava.library.path=.' org/drinkless/tdlib/example/Example
    

    如果您从CMake中收到“找不到JNI ...”错误,则需要
    指定到已安装JDK的CMake路径,例如,
    “-DJAVA_HOME = / usr / lib / jvm / java-8-oracle /”。

    如果您收到带有“找不到依赖项”的java.lang.UnsatisfiedLinkError
    库”,您可能还需要复制一些相关的共享OpenSSL
    和zlib库到bin/

    如果您将示例编译为32位版本,则可能需要
    将-d32参数提供给Java。

    如果要使用IntelliJ之类的IDE打开或将以下示例导入您的项目,请查看有关该示例的票证:how to use IntelliJ with TDLib

    尝试运行示例!非常简单,它只有三个Java类(Example,Client和Log)。

    客户端:使用“本机”方法与TDLib进行交互。
    示例:使用客户端的应用程序。

    例如。查看如何发送授权请求:
    auth request

    07-26 06:02