我正在通过沙箱测试免费试用 twilio<->whatsapp。
我可以在我的 Flask 服务器中很好地接收来自 Whatsapp 的短信。但是,当我从 Whatsapp 收到图像时,我得到一个 MediaUrl0,在获取该图像时,它会返回一个 401 错误 xml,其中包含 20003 twilio 错误代码。 MediaUrl0 本身是一个很长的 api.twilio.com url。
我认为传入图像不需要身份验证,并且 Whatsapp 图像 url 是公共 aws url?无论如何,即使我尝试设置 client = Client(testing_account_sid,testing_auth_token),它也不起作用。
知道我做错了什么吗
谢谢 火神
更新:您可能需要使用基本身份验证,具体取决于您创建帐户的时间
这不是必需的,但也许您发送了错误的请求。尝试运行这个片段:
import os
import requests # ← new import
from dotenv import load_dotenv
from flask import Flask, request
from twilio.twiml.messaging_response import MessagingResponse
load_dotenv()
app = Flask(__name__)
def respond(message):
response = MessagingResponse()
response.message(message)
return str(response)
@app.route('/message', methods=['POST'])
def reply():
sender = request.form.get('From')
message = request.form.get('Body')
media_url = request.form.get('MediaUrl0')
print(f'{sender} sent {message}')
if media_url:
r = requests.get(media_url)
content_type = r.headers['Content-Type']
username = sender.split(':')[1] # remove the whatsapp: prefix from the number
if content_type == 'image/jpeg':
filename = f'uploads/{username}/{message}.jpg'
elif content_type == 'image/png':
filename = f'uploads/{username}/{message}.png'
elif content_type == 'image/gif':
filename = f'uploads/{username}/{message}.gif'
else:
filename = None
if filename:
if not os.path.exists(f'uploads/{username}'):
os.mkdir(f'uploads/{username}')
with open(filename, 'wb') as f:
f.write(r.content)
return respond('Thank you! Your image was received.')
else:
return respond('The file that you submitted is not a supported image type.')
else:
return respond('Please send an image!')
欲了解更多详情,请查看这篇文章。