You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过DialogFlow获取Telegram用户地理位置?已尝试自定义Payload

解决DialogFlow对接Telegram获取用户地理位置的问题

我之前也踩过Telegram位置请求的坑,它和Facebook Messenger的逻辑不太一样——没有专门的原生事件,得先调整Payload的写法,再正确配置DialogFlow的意图来捕获位置数据,下面一步步给你讲:

1. 修正你的自定义Payload

你原来的Payload里有个关键错误:callback_data和request_location不能同时放在同一个Telegram键盘按钮里。当你设置request_location: true时,这个按钮的作用是触发用户分享位置,Telegram不会发送callback_data,而是直接把位置消息传给DialogFlow,多余的callback_data反而可能干扰按钮行为。

修正后的正确Payload如下:

{
  "telegram": {
    "text": "Selecione a opção desejada:",
    "reply_markup": {
      "keyboard": [
        [
          {
            "text": "Compartilhar sua Localização",
            "request_location": true
          }
        ],
        [
          {
            "text": "Cancelar",
            "callback_data": "Cancelar"
          }
        ]
      ],
      "resize_keyboard": true
    }
  }
}

(建议加上resize_keyboard: true让键盘适配手机屏幕,提升用户体验)

2. 在DialogFlow中配置意图捕获位置数据

Telegram不会像Facebook那样发送FACEBOOK_LOCATION事件,而是直接把位置信息作为用户输入传递给DialogFlow,你需要创建一个意图来识别这个输入:

  • 新建一个意图(比如命名为GetUserLocation)
  • 在参数模块,添加系统实体@sys.geo-coordinate,并设置为必填参数
  • 不需要添加特定事件,DialogFlow会自动识别Telegram传来的位置数据并匹配到这个参数
  • 在响应里可以设置回复,比如Obrigado por compartilhar sua localização!

3. 通过Webhook获取详细坐标(可选)

如果需要提取纬度、经度的具体数值做后续处理(比如调用地图API),可以在Webhook中读取原始请求数据:
当用户分享位置后,DialogFlow传给Webhook的请求体里,originalDetectIntentRequest.payload.data会包含类似这样的结构:

{
  "location": {
    "latitude": -23.5505,
    "longitude": -46.6333
  },
  "message_id": 123,
  "chat": { ... }
}

你可以直接提取latitude和longitude字段进行后续操作。

这样调整后,就能成功获取Telegram用户的地理位置了!

内容的提问来源于stack exchange,提问作者Pedro Luiz Santos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:42:19