Как отправить аудио в формате MP3 с S3 через WhatsApp Cloud API, используя предварительно подписанные URL-адреса?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как отправить аудио в формате MP3 с S3 через WhatsApp Cloud API, используя предварительно подписанные URL-адреса?

Сообщение Anonymous »

Я разрабатываю функцию, при которой аудиосообщение, созданное API Eleven Labs, сохраняется в корзине AWS S3 и должно отправляться пользователям через API WhatsApp Cloud. Хотя этот процесс отлично работает с общедоступными ссылками MP3, он терпит неудачу, когда я пытаюсь использовать предварительно подписанные URL-адреса, сгенерированные для частных объектов корзины S3. Это наводит меня на мысль, что проблема связана с параметрами аутентификации в предварительно подписанном URL-адресе. Ниже приведена соответствующая часть моего кода:
Функция для создания данных для отправки обратно пользователю:

Код: Выделить всё

def get_audio_message_input(recipient, audio_url):
return json.dumps({
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": recipient,
"type": "audio",
"audio": {"link": audio_url},
})
Функция обработки входящих данных от пользователя:

Код: Выделить всё

def process_whatsapp_message(body):
wa_id = body["entry"][0]["changes"][0]["value"]["contacts"][0]["wa_id"]
name = body["entry"][0]["changes"][0]["value"]["contacts"][0]["profile"]["name"]
message_body = body["entry"][0]["changes"][0]["value"]["messages"][0]["text"]["body"]

audio_url = testingElevenLabs(message_body)
data = get_audio_message_input(wa_id, audio_url)
send_message(data)
Обработка S3 для загрузки и создания предварительно подписанных URL-адресов:

Код: Выделить всё

import boto3
import uuid

session = boto3.Session(
aws_access_key_id='AWS_ACCESS_KEY_ID',
aws_secret_access_key='AWS_SECRET_ACCESS_KEY',
region_name='AWS_REGION_NAME'
)
s3 = session.client("s3")

def generate_presigned_url(s3_file_name: str) -> str:
return s3.generate_presigned_url(
"get_object",
Params={"Bucket": "AWS_S3_BUCKET_NAME", "Key": s3_file_name},
ExpiresIn=3600  # URL expires in 1 hour
)

def upload_audiostream_to_s3(audio_stream) -> str:
s3_file_name = f"{uuid.uuid4()}.mp3"
s3.upload_fileobj(audio_stream, "AWS_S3_BUCKET_NAME", s3_file_name)
return s3_file_name
Функция, извлекающая подписанный URL-адрес:

Код: Выделить всё

def testingElevenLabs(text: str):
audio_stream = text_to_speech_stream(text)
s3_file_name = upload_audiostream_to_s3(audio_stream)
signed_url = generate_presigned_url(s3_file_name)
print(f"Signed URL to access the file: {signed_url}")
return signed_url
Функция отправки сообщения:

Код: Выделить всё

import requests
import logging
from flask import jsonify, current_app

def send_message(data):
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {current_app.config['ACCESS_TOKEN']}"
}
url = f"https://graph.facebook.com/{current_app.config['VERSION']}/{current_app.config['PHONE_NUMBER_ID']}/messages"

try:
response = requests.post(url, data=data, headers=headers, timeout=10)
response.raise_for_status()
except requests.Timeout:
logging.error("Timeout occurred while sending message")
return jsonify({"status": "error", "message": "Request timed out"}), 408
except requests.RequestException as e:
logging.error(f"Request failed due to: {e}")
return jsonify({"status": "error", "message": "Failed to send message"}), 500
else:
log_http_response(response)
return response
Просто чтобы указать, что я обрабатываю: общедоступные файлы MP3 отправляются без проблем через WhatsApp Cloud API, но при попытке отправить аудиофайл с использованием URL-адреса, подписанного S3, ничего не происходит, и там ошибки не возвращаются. Как я могу гарантировать, что API WhatsApp правильно обрабатывает эти предварительно подписанные URL-адреса или есть лучший подход к безопасной отправке этих аудиофайлов?

Подробнее здесь: https://stackoverflow.com/questions/790 ... igned-urls
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как вы можете использовать URL-адреса, подписанные GCP, с Private Service Connect
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Можем ли мы проверить, зарегистрирован ли номер телефона в WhatsApp, используя WhatsApp Cloud API
    Anonymous » » в форуме Php
    0 Ответы
    123 Просмотры
    Последнее сообщение Anonymous
  • Можем ли мы проверить, зарегистрирован ли номер телефона в WhatsApp, используя WhatsApp Cloud API [закрыто]
    Anonymous » » в форуме Php
    0 Ответы
    86 Просмотры
    Последнее сообщение Anonymous
  • Соединение Docker Cloud Cloud Cloud Cloud
    Anonymous » » в форуме JAVA
    0 Ответы
    51 Просмотры
    Последнее сообщение Anonymous
  • Соединение Docker Cloud Cloud Cloud Cloud
    Anonymous » » в форуме JAVA
    0 Ответы
    58 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»