Takeout API

Telegram 的 API 允许用户通过 Takeout API 导出他们的所有信息。

account.takeout#4dba4501 id:long = account.Takeout;inputTakeoutFileLocation#29be5899 = InputFileLocation;---functions---account.initTakeoutSession#8ef3eab0 flags:# contacts:flags.0?true message_users:flags.1?true message_chats:flags.2?true message_megagroups:flags.3?true message_channels:flags.4?true files:flags.5?true file_max_size:flags.5?long = account.Takeout;invokeWithTakeout#aca9fd2e {X:Type} takeout_id:long query:!X = X;account.finishTakeoutSession#1d2652ee flags:# success:flags.0?true = Bool;

使用account.initTakeoutSession初始化外卖会话:传递适当的标志以启用相应方法的使用,如下所述。

调用下面描述的方法时,每个查询都必须使用invokeWithTakeout进行包装,并id返回account.initTakeoutSession。

导出完成后,使用account.finishTakeoutSession终止会话。

分割范围

messageRange#ae30253 min_id:int max_id:int = MessageRange;---functions---messages.getSplitRanges#1cff7e08 = Vector<MessageRange>;invokeWithMessagesRange#365275f2 {X:Type} range:MessageRange query:!X = X;

某些方法调用需要使用消息范围进行额外的分页。

首先,通过调用messages.getSplitRanges(像往常一样将其包装在invokeWithTakeout中)来获取消息范围列表。

然后,当调用需要消息范围分页的方法时,先使用invokeWithMessagesRange包装该方法,然后再像往常一样用invokeWithTakeout包装它。

首先传递第一个消息范围;继续传递相同的消息范围,同时使用通常的 `offset_*,`limit、`,` 等参数进行分页;一旦没有更多结果,就切换到下一个消息范围,从头开始重新分页。offset_*重复此操作,直到处理完messages.getSplitRanges返回的所有消息范围。limit

程序

示例实现:tdesktop。

以下是导出账户信息所需步骤的概述。

所有请求都必须包装在invokeWithTakeout构造函数中,包括用于保存文件的upload.getFile调用。

除非另有规定,所有请求均不需要使用拆分范围进行分页。

联系方式

savedPhoneContact#1142bd56 phone:string first_name:string last_name:string date:int = SavedContact;---functions---contacts.getSaved#82f1e39f = Vector<SavedContact>;

此方法不需要使用消息范围进行分页。

使用contacts.getSaved导出完整的联系人列表,请参阅此处 »了解另一种可用于获取 Telegram 帐户中所有联系人的完整列表而无需使用 takeout 会话的替代方法。

左声道

messages.chats#64ff9fd5 chats:Vector<Chat> = messages.Chats; messages.chatsSlice#9cd81144 count:int chats:Vector<Chat> = messages.Chats;---functions---channels.getLeftChannels#8341ecc0 offset:int = messages.Chats;

此方法不需要使用消息范围进行分页。

使用channels.getLeftChannels获取我们离开的频道或超级群组列表。