如何用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
相关产品推荐
相关产品推荐

