如何使用 HTTP 基本身份验证访问 Twilio 媒体

问题描述 投票:0回答:1

我正在尝试创建一个 Python 程序,用于接收发送到我的 Twilio WhatsApp 号码的图像并将其发送到另一个号码。

from flask import Flask, request
from twilio.rest import Client
from twilio.twiml.messaging_response import MessagingResponse

app = Flask(__name__)

# Twilio credentials
account_sid = 'redacted'
auth_token = 'redacted'
client = Client(account_sid, auth_token)

@app.route("/whatsapp", methods=['POST'])
def whatsapp():
    media_msg = request.values.get('NumMedia')

    if int(media_msg) > 0:
        media_url = request.values.get('MediaUrl0')

        message = client.messages.create(
            body="test",
            from_='whatsapp:+19179949274',
            to=f'whatsapp:+16466737627',
            media_url=[media_url],
        )
        print("media message: ", message.sid)


    resp = MessagingResponse()
    msg = resp.message()

    return str(resp)

if __name__ == "__main__":
    app.run(debug=True, port=5001)

足够简单,但它不起作用,因为在 2023 年 7 月,Twilio 实施了用于访问媒体的强制性 HTTP 基本身份验证(如此处所述)。因此,当我运行

client.messages.create()
时,不会发送图像,因为
media_url
不包含必要的身份验证信息。 我是 REST API 的新手,所以我不知道如何向
media_url
提供帐户 SSID 和身份验证令牌。 Twilio 的文档缺乏,也没有如何使用 Python 库执行此操作的示例。

我认为既然我在客户端对象

Client(account_sid, auth_token)
中提供了我的身份验证信息,我就不必验证
media_url
,但我开始认为我错了,因为我尝试了一切,但我的代码仍然没有没用。

我应该如何更改我的代码才能提供必要的身份验证信息以成功发送图像链接?

http-headers twilio basic-authentication twilio-api
1个回答
0
投票

啊,我明白了。在这种情况下,您想要转发传入的媒体文件

未发送媒体文件,因为 Twilio Messaging API 需要可公开访问的 URL,而您收到的 URL 需要基本身份验证(正如您在问题中所述)。解决方案是向该 URL 发送 HTTP GET 请求并提供您的帐户凭据。响应包含一个有效期为 4 小时且不需要基本身份验证的 URL。然后您可以使用该 URL 发送消息。

import requests
from base64 import b64encode

# Prepare the basic authentication header
auth_str = "AC1234:Auth_Toen"
auth_bytes = auth_str.encode('utf-8')
auth_b64 = b64encode(auth_bytes).decode('utf-8')
headers = {'Authorization': 'Basic ' + auth_b64}

# Make the request
url = "https://api.twilio.com/2010-04-01/Accounts/AC1234/Messages/MM1234/Media/ME1234"
response = requests.get(url, headers=headers)

print(response.url)
# This returns a https://mms.twiliocdn.com/-URL that can be used to send outbound messages for 4 hours

来自支持页面

启用 HTTP 基本身份验证后,将需要 Twilio 帐户 Sid 和身份验证令牌或 API 密钥来访问、获取和下载今后创建的任何新的可编程消息传递媒体文件。获取您的媒体的请求会将您重定向到仅在 4 小时内有效的安全 URL。当 URL 在 4 小时后过期时,您需要再次获取媒体并检索新的短期 URL,该 URL 将在另外 4 小时内可用。

© www.soinside.com 2019 - 2024. All rights reserved.