From fcbb5185e4140dafa4a3cd814784322f9d9cbfd8 Mon Sep 17 00:00:00 2001 From: benji Date: Tue, 2 May 2023 19:48:27 +0200 Subject: [PATCH 01/40] API Whatsapp --- requirements.txt | 1 + src/index.py | 46 +++++++++++++++++++++++++++++++++++++--------- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/requirements.txt b/requirements.txt index 34fc9cb..840dd88 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,3 +3,4 @@ pytest==7.1.3 pytest-asyncio==0.20.3 uvicorn==0.20.0 pydantic~=1.10.4 +twilio diff --git a/src/index.py b/src/index.py index 246f9fb..2e9478a 100644 --- a/src/index.py +++ b/src/index.py @@ -1,20 +1,48 @@ -from fastapi import FastAPI - -from src.dtos.ISayHelloDto import ISayHelloDto +from fastapi import FastAPI, Request +from fastapi.responses import XMLResponse +from twilio.twiml.messaging_response import MessagingResponse app = FastAPI() - @app.get("/") async def root(): return {"message": "Hello World"} - @app.get("/hello/{name}") async def say_hello(name: str): return {"message": f"Hello {name}"} - -@app.post("/hello") -async def hello_message(dto: ISayHelloDto): - return {"message": f"Hello {dto.message}"} +@app.post('/webhook') +async def webhook(request: Request): + form_data = await request.form() + message_received = form_data.get('Body') + num_media = int(form_data.get('NumMedia', 0)) + + response = MessagingResponse() + + if message_received: + print(f"Message reçu : {message_received}") + response.message("Hello, World!") + + if num_media > 0: + for i in range(num_media): + media_url = form_data.get(f'MediaUrl{i}') + media_type = form_data.get(f'MediaContentType{i}') + + if media_type.startswith("audio/"): + print(f"Audio reçu : {media_url}") + response.message("Vous avez envoyé un fichier audio.") + elif media_type.startswith("image/"): + print(f"Image reçue : {media_url}") + response.message("Vous avez envoyé une image.") + elif media_type.startswith("video/"): + print(f"Vidéo reçue : {media_url}") + response.message("Vous avez envoyé une vidéo.") + else: + print(f"Type de média non pris en charge : {media_type}") + + return XMLResponse(content=str(response), media_type="application/xml") + +if __name__ == '__main__': + import uvicorn + uvicorn.run(app, host="127.0.0.1", port=8000) From 7fe747124e5d0362d968e85f4d9581b192e42a5f Mon Sep 17 00:00:00 2001 From: benji Date: Tue, 2 May 2023 19:51:27 +0200 Subject: [PATCH 02/40] API Whatsapp --- src/index.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/index.py b/src/index.py index 2e9478a..12e8421 100644 --- a/src/index.py +++ b/src/index.py @@ -1,5 +1,5 @@ from fastapi import FastAPI, Request -from fastapi.responses import XMLResponse +from fastapi.responses import Response from twilio.twiml.messaging_response import MessagingResponse app = FastAPI() @@ -41,7 +41,7 @@ async def webhook(request: Request): else: print(f"Type de média non pris en charge : {media_type}") - return XMLResponse(content=str(response), media_type="application/xml") + return Response(content=str(response), media_type="application/xml") if __name__ == '__main__': import uvicorn From 7206f20247274beed2961788f9b7ad7e0f6efa76 Mon Sep 17 00:00:00 2001 From: benji Date: Tue, 2 May 2023 19:54:37 +0200 Subject: [PATCH 03/40] debug --- src/index.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/index.py b/src/index.py index 12e8421..d879890 100644 --- a/src/index.py +++ b/src/index.py @@ -14,6 +14,7 @@ async def say_hello(name: str): @app.post('/webhook') async def webhook(request: Request): + print('ICI', request) form_data = await request.form() message_received = form_data.get('Body') num_media = int(form_data.get('NumMedia', 0)) From de65c67ba504b910c8060de72796ec513b288d87 Mon Sep 17 00:00:00 2001 From: benji Date: Tue, 2 May 2023 20:03:33 +0200 Subject: [PATCH 04/40] debug --- src/index.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/index.py b/src/index.py index d879890..dc4cc91 100644 --- a/src/index.py +++ b/src/index.py @@ -15,6 +15,9 @@ async def say_hello(name: str): @app.post('/webhook') async def webhook(request: Request): print('ICI', request) + response = MessagingResponse() + response.message("Hello, World!") + return Response(content=str(response), media_type="application/xml") form_data = await request.form() message_received = form_data.get('Body') num_media = int(form_data.get('NumMedia', 0)) From 5d01ed13d93cd69103d710c54d4c1eb6130e8d96 Mon Sep 17 00:00:00 2001 From: benji Date: Tue, 2 May 2023 20:05:38 +0200 Subject: [PATCH 05/40] debug --- src/index.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/index.py b/src/index.py index dc4cc91..80acb2f 100644 --- a/src/index.py +++ b/src/index.py @@ -15,13 +15,15 @@ async def say_hello(name: str): @app.post('/webhook') async def webhook(request: Request): print('ICI', request) - response = MessagingResponse() - response.message("Hello, World!") - return Response(content=str(response), media_type="application/xml") + form_data = await request.form() message_received = form_data.get('Body') num_media = int(form_data.get('NumMedia', 0)) + response = MessagingResponse() + response.message("Hello, World!" + str(form_data) + str(num_media)) + return Response(content=str(response), media_type="application/xml") + response = MessagingResponse() if message_received: From a1334f74cf804f7e5cd2198b268bd8bb598b6e33 Mon Sep 17 00:00:00 2001 From: benji Date: Tue, 2 May 2023 20:07:00 +0200 Subject: [PATCH 06/40] debug --- src/index.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/index.py b/src/index.py index 80acb2f..e83ef56 100644 --- a/src/index.py +++ b/src/index.py @@ -17,11 +17,11 @@ async def webhook(request: Request): print('ICI', request) form_data = await request.form() - message_received = form_data.get('Body') - num_media = int(form_data.get('NumMedia', 0)) + #message_received = form_data.get('Body') + #num_media = int(form_data.get('NumMedia', 0)) response = MessagingResponse() - response.message("Hello, World!" + str(form_data) + str(num_media)) + response.message("Hello, World!" + str(type(form_data))) return Response(content=str(response), media_type="application/xml") response = MessagingResponse() From 6a10d9077707cdb4a5ea5524e6280b7aaa63408d Mon Sep 17 00:00:00 2001 From: benji Date: Tue, 2 May 2023 22:33:58 +0200 Subject: [PATCH 07/40] debug --- requirements.txt | 1 + src/index.py | 31 ++++++++++++++++++++++++------- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/requirements.txt b/requirements.txt index 840dd88..7fcd55e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,3 +4,4 @@ pytest-asyncio==0.20.3 uvicorn==0.20.0 pydantic~=1.10.4 twilio +python-multipart diff --git a/src/index.py b/src/index.py index e83ef56..4f953e1 100644 --- a/src/index.py +++ b/src/index.py @@ -1,6 +1,17 @@ from fastapi import FastAPI, Request from fastapi.responses import Response from twilio.twiml.messaging_response import MessagingResponse +import requests +import json + +url = "https://apps.beam.cloud/e928s" +headers = { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate", + "Authorization": "Basic NjU1M2Y0MTQzZGI2ZTJiOGY5ZmI3ZmI4NDE5OThlMzE6ODZlOWFlYmZmNTFhOWRlMDdjOGEzNTk2NjljMmIzODY=", + "Connection": "keep-alive", + "Content-Type": "application/json" +} app = FastAPI() @@ -17,12 +28,8 @@ async def webhook(request: Request): print('ICI', request) form_data = await request.form() - #message_received = form_data.get('Body') - #num_media = int(form_data.get('NumMedia', 0)) - - response = MessagingResponse() - response.message("Hello, World!" + str(type(form_data))) - return Response(content=str(response), media_type="application/xml") + message_received = form_data.get('Body') + num_media = int(form_data.get('NumMedia', 0)) response = MessagingResponse() @@ -37,7 +44,17 @@ async def webhook(request: Request): if media_type.startswith("audio/"): print(f"Audio reçu : {media_url}") - response.message("Vous avez envoyé un fichier audio.") + payload = {"url": f"{media_url}"} + response_beam = requests.request("POST", url, headers=headers, data=json.dumps(payload)) + print(response_beam.content) + # Supposons que 'response_beam' est un objet 'Response' de la bibliothèque 'requests' + response_data = json.loads(response_beam.content) # Convertissez le contenu JSON en dictionnaire Python + #print(response_data) # Accédez à l'attribut 'pred' du dictionnaire + if 'pred' in response_data: + print(response_data['pred']) + response.message(f"{response_data['pred']}") + else: + response.message("") elif media_type.startswith("image/"): print(f"Image reçue : {media_url}") response.message("Vous avez envoyé une image.") From 01b60336648221890ad91859c5fe509b1391b2e3 Mon Sep 17 00:00:00 2001 From: benji Date: Sat, 20 May 2023 20:35:11 +0200 Subject: [PATCH 08/40] Add Twilio websocket --- src/index.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/index.py b/src/index.py index 4f953e1..bfda653 100644 --- a/src/index.py +++ b/src/index.py @@ -1,8 +1,9 @@ -from fastapi import FastAPI, Request +from fastapi import FastAPI, Request, WebSocket from fastapi.responses import Response from twilio.twiml.messaging_response import MessagingResponse import requests import json +import base64 url = "https://apps.beam.cloud/e928s" headers = { @@ -23,7 +24,23 @@ async def root(): async def say_hello(name: str): return {"message": f"Hello {name}"} -@app.post('/webhook') +@app.post('/webhook/call') +async def webhook(request: Request): + print('ICI', request) + +@app.websocket("/stream") +async def websocket_endpoint(websocket: WebSocket): + await websocket.accept() + while True: + data = await websocket.receive_text() + data = json.loads(data) + if 'payload' in data: + audio_data = base64.b64decode(data['payload']) + print(type(audio_data)) + # Maintenant, `audio_data` contient l'audio brut que vous pouvez passer à votre fonction de transcription + # transcription = your_transcription_function(audio_data) + +@app.post('/webhook/whatsapp') async def webhook(request: Request): print('ICI', request) From 92e9763954901e3e2a9e7d9770d63de2803cad27 Mon Sep 17 00:00:00 2001 From: benji Date: Sat, 20 May 2023 21:00:35 +0200 Subject: [PATCH 09/40] Add Twilio websocket --- src/index.py | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/index.py b/src/index.py index bfda653..1567462 100644 --- a/src/index.py +++ b/src/index.py @@ -1,9 +1,11 @@ from fastapi import FastAPI, Request, WebSocket from fastapi.responses import Response from twilio.twiml.messaging_response import MessagingResponse +from twilio.twiml.voice_response import VoiceResponse, Start, Stream import requests import json import base64 +from pydantic import BaseModel url = "https://apps.beam.cloud/e928s" headers = { @@ -28,17 +30,40 @@ async def say_hello(name: str): async def webhook(request: Request): print('ICI', request) +class StreamData(BaseModel): + event: str + start: dict = None + media: dict = None + +@app.post("/webhook/voice") +def answer_call(): + response = VoiceResponse() + start = Start() + start.stream(url='wss://apis-as-phere-s-team.vercel.app/stream') + response.append(start) + response.say("Bienvenue, je suis en train d'écouter et de transcrire ce que vous dites.") + return str(response) + @app.websocket("/stream") async def websocket_endpoint(websocket: WebSocket): await websocket.accept() while True: + data = await websocket.receive_json() + stream_data = StreamData(**data) + if stream_data.media: + audio_data = base64.b64decode(stream_data.media['payload']) + print(type(audio_data)) + # Maintenant, `audio_data` contient l'audio brut que vous pouvez passer à votre fonction de transcription + # transcription = your_transcription_function(audio_data) + # TODO: Générer une réponse vocale en temps réel (ceci n'est pas pris en charge par Twilio au moment de l'écriture) + +''' data = await websocket.receive_text() data = json.loads(data) if 'payload' in data: audio_data = base64.b64decode(data['payload']) print(type(audio_data)) - # Maintenant, `audio_data` contient l'audio brut que vous pouvez passer à votre fonction de transcription - # transcription = your_transcription_function(audio_data) +''' @app.post('/webhook/whatsapp') async def webhook(request: Request): From 22162079c802cb604a9dca9ea4b3397185d143d2 Mon Sep 17 00:00:00 2001 From: benji Date: Sat, 20 May 2023 21:04:45 +0200 Subject: [PATCH 10/40] Add Twilio websocket --- src/index.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/index.py b/src/index.py index 1567462..a1d6b5d 100644 --- a/src/index.py +++ b/src/index.py @@ -37,11 +37,15 @@ class StreamData(BaseModel): @app.post("/webhook/voice") def answer_call(): + print(1) response = VoiceResponse() start = Start() start.stream(url='wss://apis-as-phere-s-team.vercel.app/stream') + print(2) response.append(start) + print(3) response.say("Bienvenue, je suis en train d'écouter et de transcrire ce que vous dites.") + print(4) return str(response) @app.websocket("/stream") From b100a91d89ae97ebdb3706ebcf172c13687c6d35 Mon Sep 17 00:00:00 2001 From: benji Date: Sat, 20 May 2023 21:13:17 +0200 Subject: [PATCH 11/40] Add Twilio websocket --- src/index.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/index.py b/src/index.py index a1d6b5d..de5c762 100644 --- a/src/index.py +++ b/src/index.py @@ -44,8 +44,10 @@ def answer_call(): print(2) response.append(start) print(3) - response.say("Bienvenue, je suis en train d'écouter et de transcrire ce que vous dites.") + response.say("Bienvenue, je suis en train d'écouter et de transcrire ce que vous dites.", voice='alice') print(4) + resp.play('https://demo.twilio.com/docs/classic.mp3') + print(5) return str(response) @app.websocket("/stream") From 20721b54aa10bbeb5f287894398d0e403922d4e6 Mon Sep 17 00:00:00 2001 From: benji Date: Sat, 20 May 2023 21:14:46 +0200 Subject: [PATCH 12/40] Add Twilio websocket --- src/index.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.py b/src/index.py index de5c762..e121319 100644 --- a/src/index.py +++ b/src/index.py @@ -46,7 +46,7 @@ def answer_call(): print(3) response.say("Bienvenue, je suis en train d'écouter et de transcrire ce que vous dites.", voice='alice') print(4) - resp.play('https://demo.twilio.com/docs/classic.mp3') + response.play('https://demo.twilio.com/docs/classic.mp3') print(5) return str(response) From 5e6ea22e33c5854a049d0b5ecabf0ad2b614fa83 Mon Sep 17 00:00:00 2001 From: benji Date: Sat, 20 May 2023 21:19:24 +0200 Subject: [PATCH 13/40] Add Twilio websocket --- src/index.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/index.py b/src/index.py index e121319..99daebf 100644 --- a/src/index.py +++ b/src/index.py @@ -48,8 +48,18 @@ def answer_call(): print(4) response.play('https://demo.twilio.com/docs/classic.mp3') print(5) + # Use to record the caller's message + response.record() + print(6) + # End the call with + response.hangup() + print(7) return str(response) +@app.get("/webhook/voice") +def record(): + answer_call() + @app.websocket("/stream") async def websocket_endpoint(websocket: WebSocket): await websocket.accept() From 5c7fb85f9504005d3d06b5e38f23d1d3e0169a80 Mon Sep 17 00:00:00 2001 From: benji Date: Sat, 20 May 2023 21:27:30 +0200 Subject: [PATCH 14/40] Add Twilio websocket --- src/index.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/index.py b/src/index.py index 99daebf..4ad55c9 100644 --- a/src/index.py +++ b/src/index.py @@ -1,7 +1,7 @@ from fastapi import FastAPI, Request, WebSocket from fastapi.responses import Response from twilio.twiml.messaging_response import MessagingResponse -from twilio.twiml.voice_response import VoiceResponse, Start, Stream +from twilio.twiml.voice_response import VoiceResponse, Start, Stream, Gather import requests import json import base64 @@ -42,8 +42,12 @@ def answer_call(): start = Start() start.stream(url='wss://apis-as-phere-s-team.vercel.app/stream') print(2) - response.append(start) + #response.append(start) print(3) + gather = Gather(input='dtmf', num_digits=4) + gather.say('Please enter the 4 digit code on your screen to get started.') + response.append(gather) + print(31) response.say("Bienvenue, je suis en train d'écouter et de transcrire ce que vous dites.", voice='alice') print(4) response.play('https://demo.twilio.com/docs/classic.mp3') @@ -54,6 +58,7 @@ def answer_call(): # End the call with response.hangup() print(7) + print(response) return str(response) @app.get("/webhook/voice") From 21b85dca3b24649384d3dfab5b9f7e7db5469df0 Mon Sep 17 00:00:00 2001 From: benji Date: Sat, 20 May 2023 21:33:18 +0200 Subject: [PATCH 15/40] Add Twilio websocket --- src/index.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/index.py b/src/index.py index 4ad55c9..12f8406 100644 --- a/src/index.py +++ b/src/index.py @@ -39,24 +39,25 @@ class StreamData(BaseModel): def answer_call(): print(1) response = VoiceResponse() - start = Start() - start.stream(url='wss://apis-as-phere-s-team.vercel.app/stream') + #start = Start() + #start.stream(url='wss://apis-as-phere-s-team.vercel.app/stream') print(2) #response.append(start) print(3) - gather = Gather(input='dtmf', num_digits=4) - gather.say('Please enter the 4 digit code on your screen to get started.') - response.append(gather) + #gather = Gather(input='dtmf', num_digits=4) + #gather.say('Please enter the 4 digit code on your screen to get started.') + #response.append(gather) print(31) - response.say("Bienvenue, je suis en train d'écouter et de transcrire ce que vous dites.", voice='alice') + #response.say("Bienvenue, je suis en train d'écouter et de transcrire ce que vous dites.", voice='alice') + response.say("Hello world. Bonjour, bienvenue Benjamin.", voice='alice') print(4) - response.play('https://demo.twilio.com/docs/classic.mp3') + #response.play('https://demo.twilio.com/docs/classic.mp3') print(5) # Use to record the caller's message - response.record() + #response.record() print(6) # End the call with - response.hangup() + #response.hangup() print(7) print(response) return str(response) From 4729a314ea14cd1acb5862f1cd257d327ddb0c50 Mon Sep 17 00:00:00 2001 From: benji Date: Sat, 20 May 2023 21:42:29 +0200 Subject: [PATCH 16/40] Add Twilio websocket --- src/index.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/index.py b/src/index.py index 12f8406..fb4c4e3 100644 --- a/src/index.py +++ b/src/index.py @@ -59,8 +59,10 @@ def answer_call(): # End the call with #response.hangup() print(7) - print(response) - return str(response) + # Créer une instance de `Response` avec le type de contenu correct + xml_response = Response(content=str(response), media_type="application/xml") + print(xml_response) + return xml_response @app.get("/webhook/voice") def record(): From 4c94878c3e84de26190e85fd3f801dd426ed1865 Mon Sep 17 00:00:00 2001 From: benji Date: Sat, 20 May 2023 21:46:16 +0200 Subject: [PATCH 17/40] Add Twilio websocket --- src/index.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/index.py b/src/index.py index fb4c4e3..dbcf0ff 100644 --- a/src/index.py +++ b/src/index.py @@ -49,9 +49,9 @@ def answer_call(): #response.append(gather) print(31) #response.say("Bienvenue, je suis en train d'écouter et de transcrire ce que vous dites.", voice='alice') - response.say("Hello world. Bonjour, bienvenue Benjamin.", voice='alice') + #response.say("Hello world. Bonjour, bienvenue Benjamin.", voice='alice') print(4) - #response.play('https://demo.twilio.com/docs/classic.mp3') + response.play('https://demo.twilio.com/docs/classic.mp3') print(5) # Use to record the caller's message #response.record() From 4bac1d0fe7ee47fbdd742aafe2052d0ed15a1005 Mon Sep 17 00:00:00 2001 From: benji Date: Sat, 20 May 2023 21:59:32 +0200 Subject: [PATCH 18/40] Add Twilio websocket --- src/index.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/index.py b/src/index.py index dbcf0ff..4ba99ad 100644 --- a/src/index.py +++ b/src/index.py @@ -39,26 +39,26 @@ class StreamData(BaseModel): def answer_call(): print(1) response = VoiceResponse() - #start = Start() - #start.stream(url='wss://apis-as-phere-s-team.vercel.app/stream') print(2) - #response.append(start) - print(3) #gather = Gather(input='dtmf', num_digits=4) #gather.say('Please enter the 4 digit code on your screen to get started.') #response.append(gather) - print(31) - #response.say("Bienvenue, je suis en train d'écouter et de transcrire ce que vous dites.", voice='alice') - #response.say("Hello world. Bonjour, bienvenue Benjamin.", voice='alice') + print(3) + response.say("Bienvenue, je suis en train d'écouter et de transcrire ce que vous dites.", voice='alice') + response.say("Hello world. Bonjour, bienvenue Benjamin.", voice='alice') print(4) response.play('https://demo.twilio.com/docs/classic.mp3') print(5) # Use to record the caller's message - #response.record() + response.record() print(6) + start = Start() + start.stream(url='wss://apis-as-phere-s-team.vercel.app/stream') + response.append(start) + print(7) # End the call with #response.hangup() - print(7) + print(8) # Créer une instance de `Response` avec le type de contenu correct xml_response = Response(content=str(response), media_type="application/xml") print(xml_response) From 99c9ee0e0cee0460a21d9fe86e0b2bd64e824ec5 Mon Sep 17 00:00:00 2001 From: benji Date: Sat, 20 May 2023 22:03:23 +0200 Subject: [PATCH 19/40] Add Twilio websocket --- src/index.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.py b/src/index.py index 4ba99ad..7cfde6b 100644 --- a/src/index.py +++ b/src/index.py @@ -47,7 +47,7 @@ def answer_call(): response.say("Bienvenue, je suis en train d'écouter et de transcrire ce que vous dites.", voice='alice') response.say("Hello world. Bonjour, bienvenue Benjamin.", voice='alice') print(4) - response.play('https://demo.twilio.com/docs/classic.mp3') + #response.play('https://demo.twilio.com/docs/classic.mp3') print(5) # Use to record the caller's message response.record() From 0972659b6d4f14d6bd11b9baf8a97d7368439d0a Mon Sep 17 00:00:00 2001 From: benji Date: Sat, 20 May 2023 22:06:08 +0200 Subject: [PATCH 20/40] Add Twilio websocket --- src/index.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/index.py b/src/index.py index 7cfde6b..09ae742 100644 --- a/src/index.py +++ b/src/index.py @@ -70,11 +70,16 @@ def record(): @app.websocket("/stream") async def websocket_endpoint(websocket: WebSocket): + print(11) await websocket.accept() + print(12) while True: + print(13) data = await websocket.receive_json() stream_data = StreamData(**data) + print(14) if stream_data.media: + print(15) audio_data = base64.b64decode(stream_data.media['payload']) print(type(audio_data)) # Maintenant, `audio_data` contient l'audio brut que vous pouvez passer à votre fonction de transcription From a2c8f993c5dc48c80bef2f728d36d8527c393b73 Mon Sep 17 00:00:00 2001 From: benji Date: Sat, 20 May 2023 22:08:21 +0200 Subject: [PATCH 21/40] Add Twilio websocket --- src/index.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/index.py b/src/index.py index 09ae742..ba1c63a 100644 --- a/src/index.py +++ b/src/index.py @@ -49,12 +49,12 @@ def answer_call(): print(4) #response.play('https://demo.twilio.com/docs/classic.mp3') print(5) - # Use to record the caller's message - response.record() - print(6) start = Start() start.stream(url='wss://apis-as-phere-s-team.vercel.app/stream') response.append(start) + print(6) + # Use to record the caller's message + #response.record() print(7) # End the call with #response.hangup() From 283bd55cd9e49c93eab643034b57027f61058534 Mon Sep 17 00:00:00 2001 From: benji Date: Sat, 20 May 2023 23:49:08 +0200 Subject: [PATCH 22/40] Add Twilio websocket --- src/index.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/index.py b/src/index.py index ba1c63a..bb06a46 100644 --- a/src/index.py +++ b/src/index.py @@ -7,7 +7,8 @@ import base64 from pydantic import BaseModel -url = "https://apps.beam.cloud/e928s" +url_api = "https://apps.beam.cloud/e928s" +url_webhook = "wss://twilio-asphere.herokuapp.com" headers = { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", @@ -50,7 +51,7 @@ def answer_call(): #response.play('https://demo.twilio.com/docs/classic.mp3') print(5) start = Start() - start.stream(url='wss://apis-as-phere-s-team.vercel.app/stream') + start.stream(url=url_webhook) response.append(start) print(6) # Use to record the caller's message @@ -116,7 +117,7 @@ async def webhook(request: Request): if media_type.startswith("audio/"): print(f"Audio reçu : {media_url}") payload = {"url": f"{media_url}"} - response_beam = requests.request("POST", url, headers=headers, data=json.dumps(payload)) + response_beam = requests.request("POST", url_api, headers=headers, data=json.dumps(payload)) print(response_beam.content) # Supposons que 'response_beam' est un objet 'Response' de la bibliothèque 'requests' response_data = json.loads(response_beam.content) # Convertissez le contenu JSON en dictionnaire Python From 0bbc7faa808bf106f603c8f5f39840d362719e90 Mon Sep 17 00:00:00 2001 From: benji Date: Sat, 20 May 2023 23:56:51 +0200 Subject: [PATCH 23/40] Add Twilio websocket --- src/index.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/index.py b/src/index.py index bb06a46..cbd1671 100644 --- a/src/index.py +++ b/src/index.py @@ -45,7 +45,7 @@ def answer_call(): #gather.say('Please enter the 4 digit code on your screen to get started.') #response.append(gather) print(3) - response.say("Bienvenue, je suis en train d'écouter et de transcrire ce que vous dites.", voice='alice') + #response.say("Bienvenue, je suis en train d'écouter et de transcrire ce que vous dites.", voice='alice') response.say("Hello world. Bonjour, bienvenue Benjamin.", voice='alice') print(4) #response.play('https://demo.twilio.com/docs/classic.mp3') @@ -61,6 +61,7 @@ def answer_call(): #response.hangup() print(8) # Créer une instance de `Response` avec le type de contenu correct + print(str(response)) xml_response = Response(content=str(response), media_type="application/xml") print(xml_response) return xml_response From 838be7f7db622165b138c901e3a22cf947f0d724 Mon Sep 17 00:00:00 2001 From: benji Date: Sun, 21 May 2023 00:10:10 +0200 Subject: [PATCH 24/40] Add Twilio websocket --- src/index.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/index.py b/src/index.py index cbd1671..ba626c9 100644 --- a/src/index.py +++ b/src/index.py @@ -1,7 +1,7 @@ from fastapi import FastAPI, Request, WebSocket from fastapi.responses import Response from twilio.twiml.messaging_response import MessagingResponse -from twilio.twiml.voice_response import VoiceResponse, Start, Stream, Gather +from twilio.twiml.voice_response import VoiceResponse, Start, Connect, Stream, Gather import requests import json import base64 @@ -50,7 +50,7 @@ def answer_call(): print(4) #response.play('https://demo.twilio.com/docs/classic.mp3') print(5) - start = Start() + start = Connect()#Start() start.stream(url=url_webhook) response.append(start) print(6) From c7f3a1a8bf2ef5f1d36faad40a03c26a92e2868d Mon Sep 17 00:00:00 2001 From: benji Date: Sun, 21 May 2023 01:19:46 +0200 Subject: [PATCH 25/40] Add Twilio websocket --- requirements.txt | 1 + src/index.py | 29 ++++++++++++++++++++--------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/requirements.txt b/requirements.txt index 7fcd55e..eb62724 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,3 +5,4 @@ uvicorn==0.20.0 pydantic~=1.10.4 twilio python-multipart +boto3 diff --git a/src/index.py b/src/index.py index ba626c9..50a1b52 100644 --- a/src/index.py +++ b/src/index.py @@ -6,6 +6,8 @@ import json import base64 from pydantic import BaseModel +import boto3 +from botocore.exceptions import NoCredentialsError url_api = "https://apps.beam.cloud/e928s" url_webhook = "wss://twilio-asphere.herokuapp.com" @@ -17,6 +19,17 @@ "Content-Type": "application/json" } +# AWS Credentials - Ils doivent être stockés de manière sécurisée +aws_access_key_id = 'your_access_key_id' +aws_secret_access_key = 'your_secret_access_key' +aws_session_token = 'your_session_token' # facultatif +s3_client = boto3.client('s3')#, + #aws_access_key_id=aws_access_key_id, + #aws_secret_access_key=aws_secret_access_key, + #aws_session_token=aws_session_token) +bucket_name = 'api-beam' +parent_folder = 'twilio' + app = FastAPI() @app.get("/") @@ -37,29 +50,27 @@ class StreamData(BaseModel): media: dict = None @app.post("/webhook/voice") -def answer_call(): - print(1) +async def answer_call(): + form_data = await request.form() + call_sid = form_data.get('CallSid') + print(call_sid) + # Créer un dossier dans S3 + folder_name = f"{parent_folder}/{call_sid}/" + s3_client.put_object(Bucket=bucket_name, Key=(folder_name)) response = VoiceResponse() - print(2) #gather = Gather(input='dtmf', num_digits=4) #gather.say('Please enter the 4 digit code on your screen to get started.') #response.append(gather) - print(3) #response.say("Bienvenue, je suis en train d'écouter et de transcrire ce que vous dites.", voice='alice') response.say("Hello world. Bonjour, bienvenue Benjamin.", voice='alice') - print(4) #response.play('https://demo.twilio.com/docs/classic.mp3') - print(5) start = Connect()#Start() start.stream(url=url_webhook) response.append(start) - print(6) # Use to record the caller's message #response.record() - print(7) # End the call with #response.hangup() - print(8) # Créer une instance de `Response` avec le type de contenu correct print(str(response)) xml_response = Response(content=str(response), media_type="application/xml") From 3eb12992608d2d5d2b57dec583395457761abbbb Mon Sep 17 00:00:00 2001 From: benji Date: Sun, 21 May 2023 01:22:19 +0200 Subject: [PATCH 26/40] Add Twilio websocket --- src/index.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.py b/src/index.py index 50a1b52..db7c4db 100644 --- a/src/index.py +++ b/src/index.py @@ -50,7 +50,7 @@ class StreamData(BaseModel): media: dict = None @app.post("/webhook/voice") -async def answer_call(): +async def answer_call(request: Request): form_data = await request.form() call_sid = form_data.get('CallSid') print(call_sid) From ac181892b51b38c7e610c25c93962d700d7ae6e1 Mon Sep 17 00:00:00 2001 From: benji Date: Sun, 21 May 2023 01:33:58 +0200 Subject: [PATCH 27/40] Add Twilio websocket --- src/index.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/index.py b/src/index.py index db7c4db..405641d 100644 --- a/src/index.py +++ b/src/index.py @@ -20,12 +20,12 @@ } # AWS Credentials - Ils doivent être stockés de manière sécurisée -aws_access_key_id = 'your_access_key_id' -aws_secret_access_key = 'your_secret_access_key' -aws_session_token = 'your_session_token' # facultatif -s3_client = boto3.client('s3')#, - #aws_access_key_id=aws_access_key_id, - #aws_secret_access_key=aws_secret_access_key, +aws_access_key_id = 'AKIA5ZNQFWXGBYOQAJNX' +aws_secret_access_key = 'dy6aw3RAqXmbuZD9yB2YVPjKmL/VTU/ExSeCehF4' +#aws_session_token = 'your_session_token' # facultatif +s3_client = boto3.client('s3', + aws_access_key_id=aws_access_key_id, + aws_secret_access_key=aws_secret_access_key)#, #aws_session_token=aws_session_token) bucket_name = 'api-beam' parent_folder = 'twilio' From 3b73ee3b6b263748f67e7aa8d8c085adb9d876c7 Mon Sep 17 00:00:00 2001 From: benjisympa Date: Sat, 19 Aug 2023 22:17:59 +0200 Subject: [PATCH 28/40] Update index.py local webhook --- src/index.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.py b/src/index.py index 405641d..4e0f1dd 100644 --- a/src/index.py +++ b/src/index.py @@ -10,7 +10,7 @@ from botocore.exceptions import NoCredentialsError url_api = "https://apps.beam.cloud/e928s" -url_webhook = "wss://twilio-asphere.herokuapp.com" +url_webhook = "wss://incubo.serveo.net" #"wss://twilio-asphere.herokuapp.com" headers = { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", From 2bd9717989bd38aaced1390a7414c329ba5b00f6 Mon Sep 17 00:00:00 2001 From: benjisympa Date: Sun, 3 Mar 2024 12:08:57 +0100 Subject: [PATCH 29/40] Update index.py Sinhouse --- src/index.py | 77 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 67 insertions(+), 10 deletions(-) diff --git a/src/index.py b/src/index.py index 4e0f1dd..0f611b4 100644 --- a/src/index.py +++ b/src/index.py @@ -106,48 +106,105 @@ async def websocket_endpoint(websocket: WebSocket): audio_data = base64.b64decode(data['payload']) print(type(audio_data)) ''' + + if media_type.startswith("audio/"): + msg.body("Voici l'audio que vous avez envoyé :") + msg.media(media_url) + elif media_type.startswith("image/"): + msg.body("Voici l'image que vous avez envoyée :") + msg.media(media_url) + elif media_type.startswith("video/"): + msg.body("Voici la vidéo que vous avez envoyée :") + msg.media(media_url) + else: + response.message("Type de média non pris en charge.") + + return Response(content=str(response), media_type="application/xml") @app.post('/webhook/whatsapp') async def webhook(request: Request): print('ICI', request) form_data = await request.form() + sender_number = form_data.get('From') # Récupère le numéro de téléphone de l'expéditeur message_received = form_data.get('Body') num_media = int(form_data.get('NumMedia', 0)) response = MessagingResponse() + # Créer un message avec un média attaché + msg = response.message() if message_received: print(f"Message reçu : {message_received}") - response.message("Hello, World!") + payload = {'user_id': sender_number, "prompt": f"{message_received}"} + response_beam = requests.request("POST", url_api, headers=headers, data=json.dumps(payload)) + print('Réponse API', response_beam.content) + # Supposons que 'response_beam' est un objet 'Response' de la bibliothèque 'requests' + response_data = json.loads(response_beam.content) # Convertissez le contenu JSON en dictionnaire Python + #print(response_data) # Accédez à l'attribut 'pred' du dictionnaire + if 'text' in response_data: + print('Réponse API text', response_data['output']) + msg.body(f"{response_data['output']}") + if 'image' in response_data: + msg.media(response_data['url']) + if 'video' in response_data: + msg.media(response_data['url']) + if 'audio' in response_data: + msg.media(response_data['url']) + #response.message("Hello, World!") if num_media > 0: + images = [] + videos = [] for i in range(num_media): media_url = form_data.get(f'MediaUrl{i}') media_type = form_data.get(f'MediaContentType{i}') if media_type.startswith("audio/"): print(f"Audio reçu : {media_url}") - payload = {"url": f"{media_url}"} + payload = {'audio': 1, "urls": [f"{media_url}"]} response_beam = requests.request("POST", url_api, headers=headers, data=json.dumps(payload)) print(response_beam.content) # Supposons que 'response_beam' est un objet 'Response' de la bibliothèque 'requests' response_data = json.loads(response_beam.content) # Convertissez le contenu JSON en dictionnaire Python #print(response_data) # Accédez à l'attribut 'pred' du dictionnaire - if 'pred' in response_data: - print(response_data['pred']) - response.message(f"{response_data['pred']}") - else: - response.message("") + if 'text' in response_data: + print('Réponse API text', response_data['output']) + msg.body(f"{response_data['output']}") + if 'image' in response_data: + msg.media(response_data['url']) + if 'video' in response_data: + msg.media(response_data['url']) + if 'audio' in response_data: + msg.media(response_data['url']) + #else: + #response.message("") elif media_type.startswith("image/"): print(f"Image reçue : {media_url}") - response.message("Vous avez envoyé une image.") + images.append(media_url) + #response.message("Vous avez envoyé une image.") elif media_type.startswith("video/"): print(f"Vidéo reçue : {media_url}") - response.message("Vous avez envoyé une vidéo.") + videos.append(media_url) + #response.message("Vous avez envoyé une vidéo.") else: print(f"Type de média non pris en charge : {media_type}") - + + if len(images) > 0: + payload = {'image': 1, "urls": [f"{media_url}"]} + response_beam = requests.request("POST", url_api, headers=headers, data=json.dumps(payload)) + print(response_beam.content) + # Supposons que 'response_beam' est un objet 'Response' de la bibliothèque 'requests' + response_data = json.loads(response_beam.content) # Convertissez le contenu JSON en dictionnaire Python + print('Réponse API images', response_data) # Accédez à l'attribut 'pred' du dictionnaire + if len(videos) > 0: + payload = {'video': 1, "urls": [f"{media_url}"]} + response_beam = requests.request("POST", url_api, headers=headers, data=json.dumps(payload)) + print(response_beam.content) + # Supposons que 'response_beam' est un objet 'Response' de la bibliothèque 'requests' + response_data = json.loads(response_beam.content) # Convertissez le contenu JSON en dictionnaire Python + print('Réponse API videos', response_data) # Accédez à l'attribut 'pred' du dictionnaire + return Response(content=str(response), media_type="application/xml") if __name__ == '__main__': From 7c85ad114b94de7c97f080b0d139c6c39aab8aca Mon Sep 17 00:00:00 2001 From: benjisympa Date: Sun, 3 Mar 2024 12:09:46 +0100 Subject: [PATCH 30/40] Update index.py Sinhouse --- src/index.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/index.py b/src/index.py index 0f611b4..f23b70f 100644 --- a/src/index.py +++ b/src/index.py @@ -9,7 +9,8 @@ import boto3 from botocore.exceptions import NoCredentialsError -url_api = "https://apps.beam.cloud/e928s" +#url_api = "https://apps.beam.cloud/e928s" +url_api = "https://fjoie.apps.beam.cloud" url_webhook = "wss://incubo.serveo.net" #"wss://twilio-asphere.herokuapp.com" headers = { "Accept": "*/*", From 3f4f33daed32c9c2e60cb090adf29d5b9b2c9bc4 Mon Sep 17 00:00:00 2001 From: benjisympa Date: Sun, 3 Mar 2024 12:13:44 +0100 Subject: [PATCH 31/40] Update index.py Sinhouse --- src/index.py | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/src/index.py b/src/index.py index f23b70f..22d93ce 100644 --- a/src/index.py +++ b/src/index.py @@ -107,20 +107,6 @@ async def websocket_endpoint(websocket: WebSocket): audio_data = base64.b64decode(data['payload']) print(type(audio_data)) ''' - - if media_type.startswith("audio/"): - msg.body("Voici l'audio que vous avez envoyé :") - msg.media(media_url) - elif media_type.startswith("image/"): - msg.body("Voici l'image que vous avez envoyée :") - msg.media(media_url) - elif media_type.startswith("video/"): - msg.body("Voici la vidéo que vous avez envoyée :") - msg.media(media_url) - else: - response.message("Type de média non pris en charge.") - - return Response(content=str(response), media_type="application/xml") @app.post('/webhook/whatsapp') async def webhook(request: Request): @@ -190,6 +176,7 @@ async def webhook(request: Request): #response.message("Vous avez envoyé une vidéo.") else: print(f"Type de média non pris en charge : {media_type}") + response.message("Type de média non pris en charge.") if len(images) > 0: payload = {'image': 1, "urls": [f"{media_url}"]} From b45ee327f4efeb1181872c0173d2b6fa43b538d3 Mon Sep 17 00:00:00 2001 From: benjisympa Date: Sun, 3 Mar 2024 12:41:12 +0100 Subject: [PATCH 32/40] Update index.py Sinhouse --- src/index.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/index.py b/src/index.py index 22d93ce..ef5fa5e 100644 --- a/src/index.py +++ b/src/index.py @@ -121,6 +121,20 @@ async def webhook(request: Request): # Créer un message avec un média attaché msg = response.message() + if message_received and num_media > 0: + if media_type.startswith("audio/"): + print(f"Audio reçu : {media_url}") + payload = {'cloning': 1, "speaker_wav_url": f"{media_url}", "text": f"{message_received}"} + response_beam = requests.request("POST", url_api, headers=headers, data=json.dumps(payload)) + print(response_beam.content) + # Supposons que 'response_beam' est un objet 'Response' de la bibliothèque 'requests' + response_data = json.loads(response_beam.content) # Convertissez le contenu JSON en dictionnaire Python + #print(response_data) # Accédez à l'attribut 'pred' du dictionnaire + if 'text' in response_data: + print('Réponse API text', response_data['output']) + msg.body(f"{response_data['output']}") + if 'audio' in response_data: + msg.media(response_data['url']) if message_received: print(f"Message reçu : {message_received}") payload = {'user_id': sender_number, "prompt": f"{message_received}"} From f22c925fd14922131a06538a03e2d46851e7cbd9 Mon Sep 17 00:00:00 2001 From: benjisympa Date: Sun, 3 Mar 2024 13:02:41 +0100 Subject: [PATCH 33/40] Update index.py Sinhouse --- src/index.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/index.py b/src/index.py index ef5fa5e..502c5b0 100644 --- a/src/index.py +++ b/src/index.py @@ -135,6 +135,10 @@ async def webhook(request: Request): msg.body(f"{response_data['output']}") if 'audio' in response_data: msg.media(response_data['url']) + if 'image' in response_data: + msg.media(response_data['url']) + if 'video' in response_data: + msg.media(response_data['url']) if message_received: print(f"Message reçu : {message_received}") payload = {'user_id': sender_number, "prompt": f"{message_received}"} From eaddd4730f14fbc42c1604ffbc2e7a9a64a23228 Mon Sep 17 00:00:00 2001 From: benjisympa Date: Sun, 3 Mar 2024 13:11:06 +0100 Subject: [PATCH 34/40] Update index.py Sinhouse --- src/index.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/index.py b/src/index.py index 502c5b0..b71cdbd 100644 --- a/src/index.py +++ b/src/index.py @@ -142,6 +142,11 @@ async def webhook(request: Request): if message_received: print(f"Message reçu : {message_received}") payload = {'user_id': sender_number, "prompt": f"{message_received}"} + if message_received.lower() == 'acc': + 'has_spent': True + if message_received.lower() == 'ref': + 'has_spent': False + payload['has_spent'] = 'has_spent' response_beam = requests.request("POST", url_api, headers=headers, data=json.dumps(payload)) print('Réponse API', response_beam.content) # Supposons que 'response_beam' est un objet 'Response' de la bibliothèque 'requests' @@ -167,7 +172,12 @@ async def webhook(request: Request): if media_type.startswith("audio/"): print(f"Audio reçu : {media_url}") - payload = {'audio': 1, "urls": [f"{media_url}"]} + payload = {'user_id': sender_number, 'audio': 1, "url": f"{media_url}"} + if message_received.lower() == 'acc': + 'has_spent': True + if message_received.lower() == 'ref': + 'has_spent': False + payload['has_spent'] = 'has_spent' response_beam = requests.request("POST", url_api, headers=headers, data=json.dumps(payload)) print(response_beam.content) # Supposons que 'response_beam' est un objet 'Response' de la bibliothèque 'requests' From 218b0ab68846fbdac8434dd1a0b204f771a3ff5a Mon Sep 17 00:00:00 2001 From: benjisympa Date: Sun, 3 Mar 2024 20:23:35 +0100 Subject: [PATCH 35/40] Update index.py Sinhouse --- src/index.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/index.py b/src/index.py index b71cdbd..0d63a4d 100644 --- a/src/index.py +++ b/src/index.py @@ -143,10 +143,10 @@ async def webhook(request: Request): print(f"Message reçu : {message_received}") payload = {'user_id': sender_number, "prompt": f"{message_received}"} if message_received.lower() == 'acc': - 'has_spent': True + has_spent = True if message_received.lower() == 'ref': - 'has_spent': False - payload['has_spent'] = 'has_spent' + has_spent = False + payload['has_spent'] = has_spent response_beam = requests.request("POST", url_api, headers=headers, data=json.dumps(payload)) print('Réponse API', response_beam.content) # Supposons que 'response_beam' est un objet 'Response' de la bibliothèque 'requests' From f6175cbda11e3120b154014a12863f2505a6f8f0 Mon Sep 17 00:00:00 2001 From: benjisympa Date: Sun, 3 Mar 2024 20:25:18 +0100 Subject: [PATCH 36/40] Update index.py Sinhouse --- src/index.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/index.py b/src/index.py index 0d63a4d..5b7aa83 100644 --- a/src/index.py +++ b/src/index.py @@ -143,10 +143,9 @@ async def webhook(request: Request): print(f"Message reçu : {message_received}") payload = {'user_id': sender_number, "prompt": f"{message_received}"} if message_received.lower() == 'acc': - has_spent = True + payload['has_spent'] = True if message_received.lower() == 'ref': - has_spent = False - payload['has_spent'] = has_spent + payload['has_spent'] = False response_beam = requests.request("POST", url_api, headers=headers, data=json.dumps(payload)) print('Réponse API', response_beam.content) # Supposons que 'response_beam' est un objet 'Response' de la bibliothèque 'requests' @@ -174,10 +173,9 @@ async def webhook(request: Request): print(f"Audio reçu : {media_url}") payload = {'user_id': sender_number, 'audio': 1, "url": f"{media_url}"} if message_received.lower() == 'acc': - 'has_spent': True + payload['has_spent'] = True if message_received.lower() == 'ref': - 'has_spent': False - payload['has_spent'] = 'has_spent' + payload['has_spent'] = False response_beam = requests.request("POST", url_api, headers=headers, data=json.dumps(payload)) print(response_beam.content) # Supposons que 'response_beam' est un objet 'Response' de la bibliothèque 'requests' From 1419b8979a67b6e4598c200870e3335924df481e Mon Sep 17 00:00:00 2001 From: benjisympa Date: Sun, 3 Mar 2024 23:12:49 +0100 Subject: [PATCH 37/40] Update index.py Sinhouse --- src/index.py | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/index.py b/src/index.py index 5b7aa83..ee0b82a 100644 --- a/src/index.py +++ b/src/index.py @@ -147,7 +147,7 @@ async def webhook(request: Request): if message_received.lower() == 'ref': payload['has_spent'] = False response_beam = requests.request("POST", url_api, headers=headers, data=json.dumps(payload)) - print('Réponse API', response_beam.content) + #print('Réponse API', response_beam.content) # Supposons que 'response_beam' est un objet 'Response' de la bibliothèque 'requests' response_data = json.loads(response_beam.content) # Convertissez le contenu JSON en dictionnaire Python #print(response_data) # Accédez à l'attribut 'pred' du dictionnaire @@ -204,20 +204,20 @@ async def webhook(request: Request): print(f"Type de média non pris en charge : {media_type}") response.message("Type de média non pris en charge.") - if len(images) > 0: - payload = {'image': 1, "urls": [f"{media_url}"]} - response_beam = requests.request("POST", url_api, headers=headers, data=json.dumps(payload)) - print(response_beam.content) - # Supposons que 'response_beam' est un objet 'Response' de la bibliothèque 'requests' - response_data = json.loads(response_beam.content) # Convertissez le contenu JSON en dictionnaire Python - print('Réponse API images', response_data) # Accédez à l'attribut 'pred' du dictionnaire - if len(videos) > 0: - payload = {'video': 1, "urls": [f"{media_url}"]} - response_beam = requests.request("POST", url_api, headers=headers, data=json.dumps(payload)) - print(response_beam.content) - # Supposons que 'response_beam' est un objet 'Response' de la bibliothèque 'requests' - response_data = json.loads(response_beam.content) # Convertissez le contenu JSON en dictionnaire Python - print('Réponse API videos', response_data) # Accédez à l'attribut 'pred' du dictionnaire + if len(images) > 0: + payload = {'image': 1, "urls": [f"{media_url}"]} + response_beam = requests.request("POST", url_api, headers=headers, data=json.dumps(payload)) + print(response_beam.content) + # Supposons que 'response_beam' est un objet 'Response' de la bibliothèque 'requests' + response_data = json.loads(response_beam.content) # Convertissez le contenu JSON en dictionnaire Python + print('Réponse API images', response_data) # Accédez à l'attribut 'pred' du dictionnaire + if len(videos) > 0: + payload = {'video': 1, "urls": [f"{media_url}"]} + response_beam = requests.request("POST", url_api, headers=headers, data=json.dumps(payload)) + print(response_beam.content) + # Supposons que 'response_beam' est un objet 'Response' de la bibliothèque 'requests' + response_data = json.loads(response_beam.content) # Convertissez le contenu JSON en dictionnaire Python + print('Réponse API videos', response_data) # Accédez à l'attribut 'pred' du dictionnaire return Response(content=str(response), media_type="application/xml") From d1ac277b890ac0ab7be5dd28924e6ec6248528c5 Mon Sep 17 00:00:00 2001 From: benjisympa Date: Sun, 3 Mar 2024 23:16:40 +0100 Subject: [PATCH 38/40] Update index.py Sinhouse --- src/index.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/index.py b/src/index.py index ee0b82a..3318496 100644 --- a/src/index.py +++ b/src/index.py @@ -203,7 +203,6 @@ async def webhook(request: Request): else: print(f"Type de média non pris en charge : {media_type}") response.message("Type de média non pris en charge.") - if len(images) > 0: payload = {'image': 1, "urls": [f"{media_url}"]} response_beam = requests.request("POST", url_api, headers=headers, data=json.dumps(payload)) @@ -218,7 +217,6 @@ async def webhook(request: Request): # Supposons que 'response_beam' est un objet 'Response' de la bibliothèque 'requests' response_data = json.loads(response_beam.content) # Convertissez le contenu JSON en dictionnaire Python print('Réponse API videos', response_data) # Accédez à l'attribut 'pred' du dictionnaire - return Response(content=str(response), media_type="application/xml") if __name__ == '__main__': From 453bdb7442be1d01f1cc087720895b7631ada62e Mon Sep 17 00:00:00 2001 From: benjisympa Date: Sun, 3 Mar 2024 23:20:56 +0100 Subject: [PATCH 39/40] Update index.py Sinhouse --- src/index.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.py b/src/index.py index 3318496..3b38d26 100644 --- a/src/index.py +++ b/src/index.py @@ -116,6 +116,7 @@ async def webhook(request: Request): sender_number = form_data.get('From') # Récupère le numéro de téléphone de l'expéditeur message_received = form_data.get('Body') num_media = int(form_data.get('NumMedia', 0)) + print('num_media', num_media) response = MessagingResponse() @@ -161,7 +162,6 @@ async def webhook(request: Request): if 'audio' in response_data: msg.media(response_data['url']) #response.message("Hello, World!") - if num_media > 0: images = [] videos = [] From e8d2cc5ea7f32fa89e1b5cfd5a7d7c490d76d89a Mon Sep 17 00:00:00 2001 From: benjisympa Date: Sun, 3 Mar 2024 23:35:31 +0100 Subject: [PATCH 40/40] Update index.py Sinhouse