网络活动
在与 HTML5 游戏、支付网关网站和机器人小程序进行交互时,Telegram 应用应该公开 API,以便从网站接收数据和事件。
事件 API
游戏、支付网关和机器人小程序可以生成需要被 Telegram 应用接收的事件。通常,事件是通过GamingCommunication 库或机器人小程序库中postEvent的方法生成的。该函数会尝试以多种不同的方式将事件发送到 Telegram 应用。
postEvent
WebviewProxy
在移动应用中,事件接收器 API 通常应该以window.TelegramWebviewProxy带有postEvent方法的对象形式公开。
window.TelegramWebviewProxy.postEvent(eventType, eventData)
窗口.外部
或者,window.external.notify可以公开一个方法,该方法接受一个包含事件类型和有效负载的字符串 JSON 有效负载:
window.external.notify(JSON.stringify({eventType: eventType, eventData: eventData}));
postMessage API
最后,需要打开游戏、打开机器人小程序或在 iframe 中处理支付的 Web MTProto 客户端可以使用postMessage API接收来自 iframe 的事件。GamingCommunication
和机器人小程序库默认会使用'*'`as` 属性targetOrigin,无论嵌入器的来源如何,都会向父页面发送消息。
window.parent.postMessage(JSON.stringify({eventType: eventType, eventData: eventData}), targetOrigin);
事件类型
eventType是一个简单的字符串,表示事件类型,并且eventData是一个有效负载,其中包含一个对象,该对象将由 Telegram 应用程序解析。
payment_form_submit
事件有效负载:包含credentials和title字段的 JSON 对象。
- title这是被审查过的信用卡名称。
- credentials是一个特定于服务的 JSON 对象,其中包含有关用户向支付系统提供的支付凭证的信息。
Telegram 和机器人均无法访问您的信用卡信息。
信用卡详情仅由支付系统处理,更多信息请参阅支付文档»
share_score
无事件有效载荷。
当用户明确点击“分享分数”按钮分享游戏及其分数时,游戏会调用此方法。通常是通过在游戏消息上
使用`messages.forwardMessages`with_my_score并添加标志来实现的。
share_game
无事件有效载荷。
当用户明确点击“分享游戏”按钮分享游戏但不分享分数时,游戏会调用此方法。通常的做法是在游戏消息中
使用`messages.forwardMessages` 方法with_my_score(不带任何标志),或者分享游戏的深度链接。
web_app_close
没有事件有效负载,或者是一个包含以下字段的 JSON 对象(客户端应对其进行正确验证)。
- return_back- 如果为真,当 Web 应用是通过另一个应用中的深度链接打开的(即并非通过 Telegram 客户端中的深度链接打开),则 Telegram 客户端应返回到打开该链接的应用,而不是 Telegram 客户端的主页。(布尔值,可选)
当机器人小程序的 WebView 应该关闭时,该小程序会发出此消息。
web_app_open_popup
事件数据:一个包含以下字段的 JSON 对象(客户端应正确验证这些字段)。
- title- 弹出窗口标题(可选字符串,最多 64 个字符)
- message- 弹出窗口消息(字符串,最多 256 个字符)
-
buttons- 一个包含以下对象的数组(数组包含 1-3 个对象)
- type- 按钮类型(字符串,可以是以下值之一:红色ok、红色close、cancel红色、default红色destructive(在这种情况下,按钮必须为红色))
- text- 按钮文本(字符串,可选ok,类型close为cancel)
- id- 按钮 ID(唯一字符串)
由机器人小程序发出,在网页视图上打开原生弹出窗口。
默认情况下,按钮应显示在同一行。
如果小程序提供两个按钮,且水平方向无法在一行中完整显示,则每个按钮应显示在单独的行中。
如果小程序提供三个按钮,则每个按钮始终显示在单独的行中。
- 如果用户按下任何按钮,则调用window.Telegram.WebView.receiveEvent("popup_closed", {"button_id": "<button id>"})
- 如果用户在未按下任何指定按钮的情况下取消交互,则调用window.Telegram.WebView.receiveEvent("popup_closed", {})
如果弹出窗口已显示,则禁用此事件的处理;仅在popup_closed响应事件发出后才重新启用处理。
启用处理后,在 3 秒内最多可处理 3 个连续的此类有效事件,忽略超出此范围的事件。
web_app_request_write_access
事件数据:null
由机器人小程序发出,用于请求用户允许其发送消息。
收到此事件后,客户端应首先调用bots.canSendMessage,以检查他们是否已以某种方式授予机器人写入权限。
- 如果该方法返回boolTrue,则应向小程序发送write_access_requested 事件 » 。{"status": "allowed"}
-
否则,如果该方法返回boolFalse,则应向用户显示提示,表明机器人正在请求向其发送消息的权限。
如果用户接受,则调用bots.allowSendMessage,如果方法调用成功,则发出write_access_requested事件{"status": "allowed"}。
否则,如果用户拒绝或bots.allowSendMessage调用失败,则发出write_access_requested 事件{"status": "cancelled"}。
web_app_request_phone
事件数据:null
由机器人小程序发出,请求用户分享其手机号码作为联系人。
收到此事件后,客户端应向用户显示提示,表明机器人正在请求用户分享其电话号码(如果机器人当前已被阻止,则还可以选择请求用户解除阻止)。
如果他们接受,则应通过向机器人发送联系人来共享用户的电话号码(如果机器人当前被用户屏蔽,则应先解除屏蔽);如果所有 RPC 查询(解除屏蔽机器人、发送消息)都成功,则应发送一个phone_requested 事件 »{"status": "sent"}。
如果用户拒绝或任何中间方法调用失败,则应发送一个phone_requested 事件 »{"status": "cancelled"}。
web_app_biometry_get_info
事件数据:null
由机器人小程序发出,请求客户端初始化当前机器人的生物特征认证管理器对象,并在完成后发出biometry_info_received事件»。
此请求应该只是初始化客户端状态,即检查生物识别认证是否可用,而不应该询问用户任何信息。
web_app_biometry_request_access
事件数据:一个 JSON 对象,带有一个可选的reason字符串字段(1-128 个字符,用于提示),其中包含机器人请求使用生物识别身份验证的原因。
由机器人小程序发出,请求用户允许使用生物识别认证,并在完成后发出biometry_info_received事件»。
此请求实际上不应触发生物识别身份验证,而应仅通过弹出窗口请求用户允许使用该功能,该弹出窗口应仅显示一次(针对此机器人):如果用户之前已允许、拒绝或取消此机器人的生物识别权限弹出窗口,则不得显示弹出窗口。
web_app_biometry_update_token
事件数据:一个包含以下字段的 JSON 对象:
- token- 新的标记(字符串,0-1024 个字符),或者空字符串以将其删除。
- reason- 可选字符串字段,包含机器人请求使用生物识别进行身份验证的原因(1-128 个字符,用于提示)。
由机器人小程序发出,用于使用生物识别技术进行身份验证,并将生物识别令牌安全地存储在设备上,并在完成后发出biometry_token_updated事件»。
该令牌(例如,可能是加密货币钱包的私钥,或应用程序必须安全保存的其他数据)必须由 Telegram 客户端安全存储,并将其与拥有该小程序的机器人关联起来。
例如,令牌可以直接存储在设备上的安全存储中,只有在生物特征认证后才能访问;或者,令牌可以存储在普通的非安全存储中,但以加密形式存储,加密密钥是使用生物特征认证后从设备的安全存储中返回的密钥(例如,在 Android 上,使用生物特征提示认证结果返回的 CryptoObject )。
如果用户之前已禁止机器人使用生物识别身份验证,则此请求应立即失败,并发出相应的biometry_token_updated事件»。
web_app_biometry_request_auth
事件数据:一个 JSON 对象,带有一个可选的reason字符串字段,其中包含机器人请求使用生物识别进行身份验证的原因(1-128 个字符,用于提示)。
由机器人小程序发出,用于使用生物识别技术进行身份验证并获取先前存储的安全令牌,并在完成后发出一个biometry_auth_requested事件»,其中包含错误或解密的生物识别令牌»(如果尚未配置令牌,则为空字符串)。
token_saved仅当 biometry_info_received 对象的字段»等于 时才应使用,否则请先使用web_app_biometry_update_token »true设置新令牌。
如果用户之前已禁止机器人使用生物识别身份验证,则此请求应立即失败,并发出相应的biometry_auth_requested事件»。
web_app_biometry_open_settings
事件数据:null
由机器人小程序发出,用于打开机器人的生物识别认证设置页面,当应用程序需要向之前拒绝过该权限的用户请求使用生物识别技术的权限时,此操作非常有用。
请注意,此事件只能在用户与小程序界面交互时处理(例如,点击小程序内部或主按钮),并且最多每秒处理一次。
web_app_invoke_custom_method
事件数据:一个包含以下字段的 JSON 对象:
- req_id- 包含当前请求 ID 的字符串
- method- 一个字符串,包含被调用自定义方法的名称
- params- 包含方法调用参数的对象
由机器人小程序发出,代表用户向 Telegram 服务器发出自定义方法调用。
此事件应触发bots.invokeWebViewCustomMethod请求,并将传递method给custom_method,并将params传递给params。
收到回复后,应发出custom_method_invoked 事件,其中包含以下字段:
- req_id-req_id来自web_app_invoke_custom_method对象
- result- 如果bots.invokeWebViewCustomMethod方法调用成功,则返回该方法响应中包含的 JSON 数据。
- error- 如果方法调用失败,则显示 RPC 错误文本
web_app_read_text_from_clipboard
事件数据:一个包含以下字段的 JSON 对象:
- req_id- 包含当前请求 ID 的字符串
由机器人小程序发出,用于获取系统剪贴板的内容。
仅当机器人拥有的、添加到附件菜单中的小程序应用出现此事件时,无论小程序应用本身是如何启动的,此事件都应触发一个clipboard_text_received 事件,并包含以下有效负载:
- req_id来自req_id请求web_app_read_text_from_clipboard
- data- 包含剪贴板内容的字符串
请注意,此方法只能在用户与小程序界面交互时调用(例如,点击小程序内部或主按钮/设置按钮)。
请注意,用户交互的 TTL 必须为 10 秒:此类事件将被忽略,并且如果上次小程序用户交互(如上所述)发生在 10 秒之前,则必须发送包含正确字段的clipboard_text_received 事件。req_iddata
如果未在附件菜单中安装机器人,则还必须发送带有正确字段的clipboard_text_received事件。req_iddata
web_app_open_scan_qr_popup
事件数据:一个包含以下字段的 JSON 对象:
- text- 可选字符串,包含要在“扫描二维码”标题下显示的文本,0-64 个字符。
由机器人小程序发出,提示客户端打开原生二维码扫描器并开始持续扫描二维码。
每次扫描新的二维码时,都应该发出一个qr_text_received事件»,直到用户通过用户界面关闭弹出窗口,或者小程序通过web_app_close_scan_qr_popup事件关闭弹出窗口为止。
关闭弹出窗口时应发出一个scan_qr_popup_closed事件»;如果由于权限问题无法打开扫描二维码弹出窗口,则应发出相同的事件。
web_app_close_scan_qr_popup
事件数据:null
由机器人小程序发出,提示客户端关闭使用web_app_open_scan_qr_popup打开的原生二维码扫描器。
如果使用此事件关闭二维码弹出窗口,则不应发出“scan_qr_popup_closed事件 »”事件。
web_app_setup_closing_behavior
事件数据:一个包含布尔值的 JSON 对象need_confirmation。
如果等于true,客户端应在关闭网页视图之前弹出“您所做的更改可能不会保存。”的确认窗口,并提供“取消”/“仍然关闭”按钮,以避免意外中止敏感操作;否则不应要求用户确认。
web_app_set_background_color
事件数据:一个 JSON 对象,其中包含color一个十六进制 RGB 颜色字符串。
用于设置小程序背景和下拉滚动颜色。
web_app_set_header_color
事件数据:一个包含以下字段的 JSON 对象:
-
color_key- 一个字符串,其值如下:
- bg_color-应使用bg_color主题参数。
- secondary_bg_color-应使用secondary_bg_color主题参数。
- color- 十六进制 RGB 格式的颜色(#ffffff)。
这两个字段互斥,如果两个字段都未提供,则使用默认标题颜色。
用于设置迷你应用标题和顶部滚动条颜色。
web_app_data_send
事件数据:一个包含字符串data字段的 JSON 对象。
仅供键盘按钮小程序使用,用于按此处所述向机器人发送数据»。小程序将关闭。
web_app_switch_inline_query
事件数据:一个 JSON 对象,包含以下键:
-
query- 此内联查询将插入到聊天输入框中,位于机器人用户名之后。
它可以是空字符串,在这种情况下,只会插入机器人用户名,并触发一个空的内联查询。 -
chat_types- 一个字符串数组,包含users` <string>`bots、`<string>`、` <string>`、`<string>groups`等元素的组合channels。
如果该数组非空,客户端应提示用户选择指定类型的特定聊天,然后打开所选聊天,并在输入字段中插入机器人的用户名和指定的内联查询。
数组值指定用户可以选择的聊天类型。
如果为空,则使用当前聊天。
由内联模式小程序使用,用于按此处所述向机器人发送数据»。小程序将关闭。
web_app_trigger_haptic_feedback
事件数据:一个包含以下字段的 JSON 对象:
-
type- 以下值之一(字符串):
- impact发生了撞击。
- notification- 某项任务或行动成功、失败或产生了警告。
- selection_change用户已更改选择。
-
impact_style- 仅用于impact反馈,以下值之一(字符串):
- light- 表示小型或轻量级 UI 对象之间发生碰撞
- medium- 表示中等大小或中等重量的 UI 对象之间发生冲突
- heavy- 表示大型或重量级 UI 对象之间发生碰撞
- rigid- 表示硬质或不灵活的 UI 对象之间发生冲突
- soft- 表示软性或柔性 UI 对象之间发生碰撞
-
notification_type- 仅用于notification反馈,以下值之一(字符串):
- error表示任务或操作失败
- success表示任务或操作已成功完成。
- warning- 表示某项任务或操作产生了警告
用于在 Web 应用程序中触发用户交互的触觉反馈。
web_app_open_link
事件数据:一个包含以下字段的 JSON 对象:
- url要打开的 URL
- try_instant_view- 可选布尔值,如果设置,则等于true且 URL 的 scheme 为http或https,则如果可能,链接应以即时查看模式打开。
-
try_browser- 可选字符串(如果设置),必须包含以下浏览器标识符之一,客户端应尝试使用指定的浏览器(如果当前已安装在设备上)打开链接:
- google-chrome或者chrome- Google Chrome
- mozilla-firefox或者firefox- Firefox
- microsoft-edge或edge- Microsoft Edge
- opera歌剧
- opera-mini- Opera Mini
- brave或者brave-browser- Brave 浏览器
- duckduckgo或者duckduckgo-browser- DuckDuckGo 浏览器
- samsung或samsung-browser- 三星浏览器
- vivaldi或者vivaldi-browser——维瓦尔第
- kiwi或者ĸiwi-browser——奇异果
- uc或者uc-browser- UC 浏览器
- tor或者tor-browser- TOR 浏览器
用于在外部浏览器(或浏览器客户端的新标签页)中打开链接。小程序不会关闭。
仅允许打开 协议方案与web_app_allowed_protocols中指定的方案之一相等的 URL 。
请注意,此方法只能在用户与小程序界面交互时调用(例如,点击小程序内部或主按钮/设置按钮)。
打开 URL 后,此类事件将被忽略,直到用户再次与小程序界面交互(如上所述)。
请注意,用户交互的 TTL 必须为 1 秒:如果上次小程序用户交互发生在 1 秒之前,则此类事件必须被忽略。
web_app_open_tg_link
事件数据:一个包含以下字段的 JSON 对象:
- path_full- 字符串字段,包含t.me 深度链接的路径+查询组件(url = 'https://t.me' + path_full)
- force_request- 可选布尔字段,如果设置且为真,客户端必须忽略深度链接的任何本地缓存信息(主要用于刷新贴纸集链接的缓存信息»)
用于打开t.me 深度链接。请勿关闭小程序。
web_app_open_invoice
事件数据:一个 JSON 对象,其中包含一个字符串slug字段,该字段包含发票深度链接。
用于发起发票付款 »,通过在小程序上打开发票弹出窗口:小程序本身不能关闭。
必须使用invoice_closed将付款状态报告给小程序。
web_app_expand
无事件有效载荷。
将迷你应用扩展到最大可用高度。
当用户在网页视图中向上滑动时,迷你应用也必须展开。
用户向下滑动以缩小网页视图时,必须忽略此事件。
web_app_request_viewport
无事件有效载荷。
客户端使用viewport_changed 事件来请求有关视口的信息。
web_app_request_theme
无事件有效载荷。
客户端应发出theme_changed 事件,以便小程序可以请求有关当前主题的信息。
web_app_ready
无事件有效载荷。
当小程序完全加载时,会发出此信号,向客户端应用程序发出信号,表明可以移除加载指示器占位符。
请注意,不能保证小程序完全加载时会发出此事件:客户端应在收到此事件或页面加载完成(原生 webview/iframe 事件)时移除加载指示器,以先发生的事件为准。
web_app_setup_main_button
事件有效负载:包含以下字段的 JSON 对象:
- is_visible- 主按钮是否可见(布尔值,默认为 false)
- is_active- 主按钮是否处于激活状态(布尔值,默认为 true)
- text- 按钮文本(字符串,如果trim(text)为空,则按钮必须隐藏)
- color- 按钮颜色,十六进制 RGB 格式(字符串,默认为button_color主题参数)
- text_color- 按钮文本颜色,十六进制 RGB 格式(字符串,默认为button_text_color主题参数)
- is_progress_visible- 指示按钮是否应显示加载指示器(布尔值,默认为 false)
- has_shine_effect- 按钮是否应具有光泽效果(布尔值,默认为 false)
配置位于 webview 正下方的主按钮:当用户按下该按钮时,main_button_pressed客户端应发出一个事件。
某些客户端会在屏幕底部实现一个水平媒体类型标签栏,当用户点击附件菜单按钮时会打开该标签栏:该标签栏包含一个水平按钮列表,用于添加特定类型的媒体文件以及打开已安装的附件菜单小程序。
对于实现了标签栏的客户端,只有当用户通过标签栏按钮打开小程序,并且该小程序发出一个web_app_setup_main_button带有 `with` 的事件is_visible=true时,主按钮才应在用户首次点击 WebView 后显示(替换标签栏),以防止机器人立即阻塞标签栏。
web_app_setup_main_button否则,当收到事件时,无需用户交互即可立即显示主按钮is_visible=true。
web_app_setup_back_button
事件数据:一个包含is_visible布尔字段的 JSON 对象。
决定是否显示或隐藏返回按钮:当用户按下该按钮时,back_button_pressed客户端应发出一个事件。
请注意,在支持的平台上,可以使用操作系统自带的返回按钮代替自定义返回按钮:在这种情况下,如果该值为is_visible真,则按下操作系统自带的返回按钮应发出一个back_button_pressed事件;否则,应关闭 WebView。
web_app_setup_settings_button
事件数据:一个包含is_visible布尔字段的 JSON 对象。
决定是否显示或隐藏设置按钮:当用户按下该按钮时,settings_button_pressed客户端应发出一个事件。
resize_frame
事件有效负载:包含height字段的 JSON 对象。
由IViframe 嵌入中的受支持页面调用,指示嵌入框架的新大小。
web_app_setup_swipe_behavior
事件有效负载:包含布尔allow_vertical_swipe字段的 JSON 对象。
调用机器人 Web 应用程序来告知客户端启用或禁用通常用于移动设备的垂直滑动手势,以最小化 Web 应用程序。
web_app_set_bottom_bar_color
事件数据:一个 JSON 对象,其中包含color一个十六进制 RGB 颜色字符串。
用于设置小程序底部栏颜色。
web_app_setup_secondary_button
事件有效负载:包含以下字段的 JSON 对象:
- is_visible- 按钮是否可见(布尔值,默认为 false)
- is_active- 按钮是否处于激活状态(布尔值,默认为 true)
- text- 按钮文本(字符串,如果trim(text)为空,则按钮必须隐藏)
- color- 按钮颜色,十六进制 RGB 格式(字符串,默认为button_color主题参数)
- text_color- 按钮文本颜色,十六进制 RGB 格式(字符串,默认为button_text_color主题参数)
- is_progress_visible- 指示按钮是否应显示加载指示器(布尔值,默认为 false)
- has_shine_effect- 按钮是否应具有光泽效果(布尔值,默认为 false)
- position- 为以下之一left:right,,,top(bottom字符串,默认为left)
配置位于 webview 正下方的辅助按钮,该辅助按钮位于主按钮的左侧、右侧、顶部或底部(如果可见,否则位于主按钮通常所在的位置)。
当用户按下该按钮时,secondary_button_pressed客户端应该发出一个事件。
某些客户端会在屏幕底部实现一个水平媒体类型标签栏,当用户点击附件菜单按钮时会打开该标签栏:该标签栏包含一个水平按钮列表,用于添加特定类型的媒体文件以及打开已安装的附件菜单小程序。
对于实现了标签栏的客户端,仅当用户通过标签栏按钮打开小程序,且该小程序发出一个web_app_setup_secondary_button带有特定参数的事件is_visible=true时,辅助按钮(替换标签栏)才应在用户首次点击 WebView 中的相应按钮后显示,以防止机器人立即阻塞标签栏。
web_app_setup_secondary_button否则,当收到事件时,辅助按钮可以立即显示,而无需用户交互is_visible=true。
web_app_share_to_story
事件有效负载:包含以下字段的 JSON 对象:
- media_url- 包含要作为故事分享的媒体的 HTTPS URL 的字符串
- text- 媒体的可选字符串标题
-
widget_link- 一个可选对象,用于描述要包含在文章中的 URL 媒体区域,包含以下字段:
- url- 包含小部件 URL 的字符串。
- text- 一个可选字符串,用于指定控件的标签。
供小程序在用户个人资料中分享故事 »,并可指定可选的标题和URL 小部件 »。
此事件应打开应用程序的故事编辑器,其中包含指定的媒体、标题和小部件,允许用户在发布故事之前对其进行调整。
web_app_request_fullscreen
事件有效载荷:null
由小型 Web 应用程序发出,用于请求将 Web 应用程序扩展到全屏模式。
成功时,发出fullscreen_changed事件is_fullscreen=true。
失败时,发出fullscreen_failed 事件,其error值为UNSUPPORTED(此设备或平台不支持全屏模式)或ALREADY_FULLSCREEN(小程序已处于全屏模式)。
web_app_exit_fullscreen
事件有效载荷:null
由小型 Web 应用程序发出,用于请求退出全屏模式。
此方法应无条件地发出fullscreen_changed事件is_fullscreen=false(即使我们已经退出全屏模式)。
在不支持全屏模式的平台上,必须发出fullscreen_failed 事件,其error值为UNSUPPORTED而不是fullscreen_changed。
web_app_start_accelerometer
事件有效负载:包含以下字段的 JSON 对象:
- refresh_rate- 一个可选的整数,表示刷新率(以毫秒为单位),范围从 20 到 1000(默认为 1000)。
用于小程序启动加速计跟踪。
在不支持指定刷新率的平台上,或者如果指定的刷新率不在支持的范围内,则可以忽略该刷新率:这不应该导致错误,跟踪应该使用最接近的受支持刷新率开始。
成功时发出accerometer_started 事件,在没有加速度计跟踪的平台上发出accerometer_failed 事件。error=UNSUPPORTED
在小程序发出web_app_stop_accelerometer之前,客户端最多每毫秒就会发出一次 accelerometer_changed 事件,refresh_rate其中包含加速度计读数。
web_app_stop_accelerometer
事件有效载荷:null
供小程序使用,以停止加速计跟踪,停止发出accelerometer_changed 事件。
成功时发出accerometer_stopped 事件,在没有加速度计跟踪的平台上发出accerometer_failed 事件。error=UNSUPPORTED
web_app_start_gyroscope
事件有效负载:包含以下字段的 JSON 对象:
- refresh_rate- 一个可选的整数,表示刷新率(以毫秒为单位),范围从 20 到 1000(默认为 1000)。
用于小程序启动陀螺仪追踪。
在不支持指定刷新率的平台上,或者如果指定的刷新率不在支持的范围内,则可以忽略该刷新率:这不应该导致错误,跟踪应该使用最接近的受支持刷新率开始。
成功时发出gyroscope_started 事件,在没有陀螺仪跟踪的平台上发出gyroscope_failed 事件。error=UNSUPPORTED
在小程序发出web_app_stop_gyroscope之前,客户端最多每毫秒就会发出gyroscope_changed 事件,refresh_rate其中包含陀螺仪读数。
web_app_stop_gyroscope
事件有效载荷:null
供小程序使用,以停止陀螺仪跟踪,停止发出gyroscope_changed 事件。
成功时发出gyroscope_stopped 事件,在没有陀螺仪跟踪的平台上发出gyroscope_failed 事件。error=UNSUPPORTED
web_app_start_device_orientation
事件有效负载:包含以下字段的 JSON 对象:
- refresh_rate- 一个可选的整数,表示刷新率(以毫秒为单位),范围从 20 到 1000(默认为 1000)。
- need_absolute- 一个可选的布尔值,指示应用程序是否请求接收绝对方向数据,以便确定设备相对于磁北的姿态(可用于实现指南针等功能,默认为 truefalse)。
用于小程序启动设备方向跟踪。
在不支持指定刷新率的平台上,或者当指定的刷新率不在支持的范围内时,可能会忽略该刷新率:这不应导致错误,系统会使用最接近的受支持刷新率开始跟踪。
某些平台可能也不支持绝对方向数据,在这种情况下,系统会改为发送相对方向事件。
成功时发出device_orientation_started 事件,在没有设备方向跟踪的平台上发出device_orientation_failed 事件。error=UNSUPPORTED
在小程序发出web_app_stop_device_orientation之前,客户端最多每毫秒就会发出device_orientation_changed 事件,refresh_rate其中包含设备方向读数。
web_app_stop_device_orientation
事件有效载荷:null
供小程序使用,以停止设备方向跟踪,停止发出device_orientation_changed 事件。
成功时发出device_orientation_stopped 事件,在没有设备方向跟踪的平台上发出device_orientation_failed 事件。error=UNSUPPORTED
web_app_add_to_home_screen
事件有效载荷:null
小程序会使用此功能请求用户在主屏幕上添加指向小程序的快捷方式(使用机器人的徽标)。
如果同一类型的另一个事件仍在处理中,或者用户在应用程序中的最后一次点击发生在 10 秒之前,则忽略此类传入事件。
如果快捷方式已成功添加,则发出home_screen_added 事件;如果快捷方式未成功添加,则在不支持的平台上发出home_screen_failed 事件error="UNSUPPORTED"。
如果当前平台没有办法确定快捷方式的安装状态,则可以不发出home_screen_addedand事件。home_screen_failed
web_app_check_home_screen
事件有效载荷:null
用于小程序检查是否已将小程序的快捷方式添加到主屏幕。
必须发出home_screen_checked 事件 »带有状态的事件(包括在不支持的平台上,请参阅事件文档 »以了解此情况)。
web_app_set_emoji_status
事件有效负载:包含以下字段的 JSON 对象:
- custom_emoji_id- 字符串形式的长整型数据,包含要设置为表情符号状态的自定义表情符号的 ID (字符串)
- duration- 可选整数,表示状态的生存时间 (TTL);如果为 0,则状态永不过期(整数,默认为 0)
小程序可以使用此功能手动设置(或删除)用户的状态表情符号。
如果同一类型的另一个事件仍在处理中,或者用户在应用程序中的最后一次点击发生在 10 秒之前,则忽略此类传入事件。
成功时发出emoji_status_set 事件,失败时发出emoji_status_failed 事件。
web_app_request_emoji_status_access
事件有效载荷:null
如果同一类型的另一个事件仍在处理中,或者用户在应用程序中的最后一次点击发生在 10 秒之前,则忽略此类传入事件。
供小程序使用,通过bots.updateUserEmojiStatus方法请求更新用户表情符号状态的权限。
如果用户之前已经同意(即机器人的userFullbot_can_manage_emoji_status标志已为该用户设置),则发出emoji_status_access_requested事件并status="allowed"终止流程。
如果用户拒绝,则发出emoji_status_access_requested 事件并status="cancelled"终止流程。
如果用户同意,客户端必须调用bots.toggleUserEmojiStatusPermission方法,enabled=true并传递机器人的 ID:如果该方法返回boolTrue,则发出带有 的emoji_status_access_requestedstatus="allowed"事件;否则发出相同的事件status="cancelled"。
成功后,机器人将能够使用bots.updateUserEmojiStatus来更改用户的表情符号状态。
web_app_request_safe_area
事件有效载荷:null
供小程序使用,以请求发出safe_area_changed 事件 »,其中包含当前系统定义的安全区域内边距值。
web_app_request_content_safe_area
事件有效载荷:null
供小程序使用,以请求发出content_safe_area_changed 事件 »,其中包含当前内容定义的安全区域内边距值。
web_app_check_location
事件有效载荷:null
必须由小程序使用,以在客户端初始化地理位置对象并获取有关地理位置功能和状态的基本信息,作为location_checked 事件 »。
此事件实际上不应该向用户询问任何内容,只需返回当前设置(而不是当前地理位置)。
web_app_request_location
事件有效载荷:null
供小程序使用,以请求发出location_requested 事件 »,其中包含用户的当前地理位置数据(如果用户拒绝访问其当前地理位置,则不包含任何内容)。
只有在用户尚未拒绝或允许小程序访问位置信息的情况下,此事件才应请求用户允许与当前小程序共享其位置信息;在这种情况下,不应显示任何提示。
web_app_open_location_settings
事件有效载荷:null
小程序可以使用此功能请求打开机器人的地理位置设置页面,当应用程序需要请求之前已拒绝使用当前地理位置的用户的权限时,此功能非常有用。
请注意,此事件仅应在用户与小程序界面交互时处理(例如,在过去 10 秒内点击小程序内部或主按钮),并且仅当尚未处理相同类型的事件时才应处理。
web_app_request_file_download
事件数据:一个包含字符串字段的 JSONurl对象filename。
机器人网络应用程序使用它来请求下载文件。
请按以下步骤处理此事件:
-
调用`bots.checkDownloadFileParams`,传入参数url和filename机器人 ID。
忽略后续web_app_request_file_download事件,直到执行到步骤 3(web_app_request_file_download可以在前一个文件下载过程中接受新文件)
。1.1) 如果该方法未返回`boolTrue`,则发出状态为 `true` 的`file_download_requested`cancelled事件并中止该过程。 -
如果返回boolTrue$nameOfTheBot,则向用户显示提示,通知他们正在请求下载名为filename.的文件
。2.1) 如果用户拒绝下载文件,则发出状态等于 的file_download_requestedcancelled事件并中止该过程。 - 如果用户同意,则开始从urlas下载文件filename,并发出状态等于 的file_download_requesteddownloading事件。
- 下载完成后,向用户显示一条提示信息,表明文件已成功下载。
web_app_send_prepared_message
事件数据:一个包含id字符串字段的 JSON 对象。
机器人 Web 应用程序使用此方法邀请用户发送预先准备好的内联消息 »。
web_app_toggle_orientation_lock
locked事件数据:一个包含布尔字段(默认为 truefalse)的 JSON 对象。
机器人 Web 应用程序使用此功能来启用或禁用方向锁定。
web_app_device_storage_save_key
事件数据:一个 JSON 对象,包含以下键:
- req_id- 包含当前请求 ID 的字符串
- key- 一个包含要保存的键的字符串
- valuenull- 要保存的值,或要删除的键的字符串。
机器人 Web 应用程序使用此方法从用户设备上的持久本地存储中保存或删除与当前登录用户和小程序关联的密钥。
所有数据都存储在本地,且仅供创建该数据的机器人访问。每个机器人使用此存储空间,每个用户最多可存储 5 MB 的数据。
成功时发出device_storage_key_saved 事件,失败时发出device_storage_failed 事件。
web_app_device_storage_get_key
事件数据:一个 JSON 对象,包含以下键:
- req_id- 包含当前请求 ID 的字符串
- key- 一个包含要获取的键的字符串
机器人 Web 应用程序使用此方法从用户设备上的持久本地存储中获取与当前登录用户和小程序关联的密钥。
成功时发出device_storage_key_received 事件,失败时发出device_storage_failed 事件。
web_app_device_storage_clear
事件数据:一个 JSON 对象,包含以下键:
- req_id- 包含当前请求 ID 的字符串
机器人 Web 应用程序使用此工具清除用户设备上与当前登录用户和小程序关联的持久本地存储。
成功时发出device_storage_cleared 事件,失败时发出device_storage_failed 事件。
web_app_secure_storage_save_key
事件数据:一个 JSON 对象,包含以下键:
- req_id- 包含当前请求 ID 的字符串
- key- 一个包含要保存的键的字符串
- valuenull- 要保存的值,或要删除的键的字符串。
机器人 Web 应用程序使用此工具从用户设备上的安全存储中保存或删除与当前登录用户和小程序关联的密钥。
在iOS 系统中,它使用系统钥匙串;在Android 系统中,它使用密钥库。这确保所有存储的值在静态存储时都经过加密,并且未经授权的应用程序无法访问。
安全存储适用于存储令牌、密钥、身份验证状态和其他敏感的用户特定信息。每个机器人最多可以为每个用户存储 10 个项目。
成功时发出secure_storage_key_saved 事件,失败时发出secure_storage_failed 事件。
web_app_secure_storage_get_key
事件数据:一个 JSON 对象,包含以下键:
- req_id- 包含当前请求 ID 的字符串
- key- 一个包含要获取的密钥的字符串。
机器人 Web 应用程序使用此密钥从用户设备上的安全存储中获取密钥,该密钥与当前登录用户和小程序相关联。
成功时发出secure_storage_key_received 事件,失败时发出secure_storage_failed 事件。
如果返回的can_restore标志为真,则不会返回密钥,但可以通过调用web_app_secure_storage_restore_key来恢复密钥。
web_app_secure_storage_clear
事件数据:一个 JSON 对象,包含以下键:
- req_id- 包含当前请求 ID 的字符串
机器人 Web 应用程序使用此工具清除用户设备上与当前登录用户和小程序关联的安全存储空间。
成功时发出secure_storage_cleared 事件,失败时发出secure_storage_failed 事件。
web_app_secure_storage_restore_key
事件数据:一个 JSON 对象,包含以下键:
- req_id- 包含当前请求 ID 的字符串
- key- 包含要恢复的密钥的字符串。
机器人 Web 应用程序使用此密钥从用户设备上的安全存储中恢复与当前登录用户和小程序关联的密钥。
成功时发出secure_storage_key_restored 事件,失败时发出secure_storage_failed 事件。
web_app_hide_keyboard
事件有效载荷:null
如果屏幕键盘当前可见,则将其隐藏。如果键盘未激活,则不执行任何操作。
web_app_verify_age
事件有效负载:一个包含以下键的 JSON 对象:
- passed- 布尔值,表示用户是否通过了年龄验证
- age- 可选整数,表示用户通过年龄验证后检测到的年龄
- gender- 可选布尔值,指示用户通过年龄验证后检测到的性别
- genderProbability- 可选浮点数,表示用户通过年龄验证后检测到的性别的概率
显示年龄验证结果,点击此处查看完整流程的更多信息 »。