和附近用户聊天
如何使用基于地理位置的功能,例如地理聊天和附近用户功能。
获取附近用户和地理群组
inputGeoPoint#48222faf flags:# lat:double long:double accuracy_radius:flags.0?int = InputGeoPoint;---functions---contacts.getLocated#d348bc44 flags:# background:flags.1?true geo_point:InputGeoPoint self_expires:flags.0?int = Updates;
使用contacts.getLocated获取附近用户和群组的列表。
不要设置任何background标志self_expires:仅填充geo_point用户的当前地理位置:将返回附近用户和地理聊天列表(不发布用户的当前位置)。
例如,此功能可用于与附近的 Telegram 用户交换联系人,或加入基于位置的群聊,请参阅此处 »了解更多用例。
点击此处»了解如何创建地理群组,点击此处»了解如何向其他用户宣传我们当前的位置。
创建地理组
inputGeoPoint#48222faf flags:# lat:double long:double accuracy_radius:flags.0?int = InputGeoPoint;---functions---channels.createChannel#91006707 flags:# broadcast:flags.0?true megagroup:flags.1?true for_import:flags.3?true forum:flags.5?true title:string about:string geo_point:flags.2?InputGeoPoint address:flags.2?string ttl_period:flags.4?int = Updates;channels.editLocation#58e63f6d channel:InputChannel geo_point:InputGeoPoint address:string = Bool;
在创建超级组时,将 a 传递geo_point给channels.createChannel,以便创建与地理位置关联的地理组,该地理组将返回给附近的用户 »。
还应传入位置的文本描述(1-64 个 UTF-8 字符)address。
使用channels.editLocation更改群组的位置。
广告宣传我们目前的地址
inputGeoPoint#48222faf flags:# lat:double long:double accuracy_radius:flags.0?int = InputGeoPoint;---functions---contacts.getLocated#d348bc44 flags:# background:flags.1?true geo_point:InputGeoPoint self_expires:flags.0?int = Updates;
我们当前的位置可能会通过contacts.getLocated向其他用户公布:在这种情况下,必须始终设置标志。self_expires
请注意,如果当前用户已使用Telegram Business 位置功能 »(即使没有geo_point,只有文本address),则该方法将返回BUSINESS_ADDRESS_ACTIVE错误,表明位置只能使用account.updateBusinessLocation »更改(或删除) ,而不是使用contacts.getLocated。
此标志用于指定传递的地理位置的过期时间(即地理位置将在self_expires秒后过期);传递0x7fffffff0 可禁用过期,传递 0 可使当前地理位置私有。
该方法还会返回附近用户和聊天记录的列表,但前提是传递的过期时间 TTL 不为零。
用户仍然可以通过不设置该标志来获取附近用户和聊天记录,而无需公开其地理位置,详情 请参见此处 »
虽然当前用户的地理位置是公开的,但客户端应该每隔半小时左右在后台更新一次(或者无论如何都要在指定的过期日期之前更新self_expires),同时设置以下标志:如果新位置与先前位置相距超过 1 公里,或者先前位置未知,background则应设置该标志。