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

基于Dialogflow开发Telegram机器人:如何响应联系人分享请求?

处理Dialogflow + Telegram机器人的联系人分享响应

当然可以实现!Dialogflow虽然没有原生支持Telegram的联系人/位置事件,但我们有两种可靠的方案来搞定这个需求,下面我一步步给你讲清楚:

方案一:创建自定义事件触发Dialogflow意图

这种方式更贴合Dialogflow的事件驱动模型,适合需要把联系人分享作为对话触发点的场景:

  1. 在Dialogflow中创建自定义事件
    打开你的Dialogflow代理,进入「Events」页面,新建一个事件(比如命名为telegram_contact_shared),可以给它添加参数(比如phone_number、first_name)来存储联系人信息。

  2. 在Telegram机器人中间层/Webhook监听联系人分享
    当用户在Telegram里分享联系人时,Telegram会向你的机器人发送一个包含contact类型的更新。你需要在接收Telegram请求的代码里,判断是否是联系人分享:

    • 如果是,就调用Dialogflow的detectIntent API,把刚才创建的telegram_contact_shared事件作为触发条件,同时把联系人的姓名、电话等信息作为事件参数传进去。
  3. 在Dialogflow中配置对应意图
    新建一个意图,把telegram_contact_shared事件设为触发条件,然后就可以在意图里配置回复话术,或者调用Webhook做进一步处理(比如把联系人信息存入数据库)。

方案二:直接在Webhook中解析Telegram联系人数据

如果不需要通过事件触发,而是想直接处理联系人数据并返回响应,这种方法更直接:

  1. 确保Webhook已启用并正确配置
    先确认你的Dialogflow代理已经完成Telegram集成,并且开启了Webhook(在「Fulfillment」页面设置)。

  2. 在Webhook中提取联系人信息
    当用户分享联系人时,Telegram的请求payload会包含在Dialogflow的originalDetectIntentRequest.payload字段里。你可以在Webhook代码里直接解析这个payload:

    // 示例Node.js代码(Express框架)
    app.post('/dialogflow-webhook', async (req, res) => {
      const telegramPayload = req.body.originalDetectIntentRequest?.payload;
      
      // 判断是否是联系人分享请求
      if (telegramPayload?.contact) {
        const { first_name, phone_number, last_name } = telegramPayload.contact;
        
        // 根据联系人信息生成回复
        const fulfillmentResponse = {
          fulfillmentMessages: [
            {
              text: {
                text: [
                  `已收到你的联系人:${first_name}${last_name ? ' ' + last_name : ''},电话:${phone_number}`
                ]
              }
            }
          ]
        };
        return res.json(fulfillmentResponse);
      }
      
      // 处理其他类型请求
      res.json({
        fulfillmentMessages: [{ text: { text: ['请分享联系人信息哦~'] } }]
      });
    });
    
  3. 灵活扩展逻辑
    你可以在Webhook里把联系人信息存入数据库,或者根据电话号码做后续的业务处理(比如查询用户信息),然后返回对应的响应给用户。

注意事项

  • 确保你的Webhook服务使用HTTPS协议,Telegram要求Webhook必须是HTTPS才能接收请求。
  • 如果用自定义事件,要保证传递的参数名称和Dialogflow事件里定义的参数名一致,这样才能在意图中引用这些参数。
  • 可以结合Dialogflow的上下文(Context),把联系人信息存储到上下文中,方便后续对话流程使用。

内容的提问来源于stack exchange,提问作者naveera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:07:04