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

如何用Twilio在WhatsApp发送位置对象?MessagingResponse发位置报错求助

嘿,我来帮你搞定这两个关于Twilio和WhatsApp位置消息的问题!

先解决你遇到的报错问题

你碰到的'Message'对象没有'persistent_action'属性错误,原因很直接:Twilio的MessagingResponse里的Message对象压根不支持persistent_action这个方法。这个参数是Twilio发送WhatsApp消息的API请求参数,不属于Twiml(Twilio标记语言)的语法范畴,所以用Twiml的方式没法这么设置。

正确的实现方式(同时回答第一个问题)

要通过Twilio给WhatsApp发送位置消息,你需要直接调用Twilio的消息API,而不是用MessagingResponse。下面是修正后的完整代码:

首先,确保你安装了Twilio的Python SDK:

pip install twilio

然后替换成你的Twilio账号信息,运行这段代码:

from flask import Flask, request
from twilio.rest import Client

app = Flask(__name__)

# 替换成你自己的Twilio账号信息
TWILIO_ACCOUNT_SID = '你的Twilio账号SID'
TWILIO_AUTH_TOKEN = '你的Twilio Auth Token'
TWILIO_WHATSAPP_NUMBER = 'whatsapp:+14155238886'  # Twilio官方的WhatsApp沙箱号码,或者你的正式号码

@app.route('/bot', methods=['POST'])
def bot():
    # 获取发送消息的用户号码
    incoming_user_number = request.values.get('From')
    lat = request.values.get('Latitude')
    long = request.values.get('Longitude')
    
    if lat and long:
        # 初始化Twilio客户端
        client = Client(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN)
        
        # 发送位置消息
        location_message = client.messages.create(
            from_=TWILIO_WHATSAPP_NUMBER,
            to=incoming_user_number,
            body="这是你分享的位置:",  # 可选的文本说明
            persistent_action=[f"geo:{lat},{long}"]  # WhatsApp识别的位置格式
        )
        
        return f"位置消息已发送!消息SID:{location_message.sid}"
    else:
        return "没有接收到位置信息哦~"

if __name__ == '__main__':
    app.run(debug=True)

关键细节说明

  • persistent_action是发送WhatsApp位置的核心参数,它接受一个列表,里面的geo:{纬度},{经度}字符串就是WhatsApp能识别的位置对象格式。
  • 你必须使用Twilio分配的WhatsApp号码作为from_参数,格式要带上whatsapp:前缀(比如whatsapp:+14155238886)。
  • 接收消息的用户号码to也需要同样的格式,比如用户的号码是+86138XXXXXXX,就要写成whatsapp:+86138XXXXXXX。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 15:07:39