
Partager:
Aaron était défenseur des développeurs chez Nexmo. Ingénieur logiciel chevronné et artiste numérique en herbe, Aaron est souvent amené à créer des choses avec du code ou de l'électronique, parfois les deux. On peut généralement savoir qu'il travaille sur quelque chose de nouveau grâce à l'odeur de composants brûlés qui flotte dans l'air.
Renvoyer un appel téléphonique via Voice Proxy avec Python et Starlette
Temps de lecture : 5 minutes
Dans certaines situations, nous pouvons avoir besoin qu'un étranger puisse nous appeler, ou que nous puissions l'appeler. Un livreur peut avoir besoin de vous appeler au sujet de votre colis ; vous pouvez avoir besoin d'appeler votre chauffeur de taxi parce que vous avez oublié votre parapluie. Dans ces situations, il est pratique de pouvoir appeler et parler à la personne réelle et non à un centre d'appel. Toutefois, personne ne souhaite qu'un inconnu dispose de son numéro privé.
Le renvoi d'appel permet à des personnes de s'appeler sans qu'aucune d'entre elles ne connaisse le numéro de téléphone de l'autre. Ce type de renvoi d'appel est appelé proxy vocal.
Avant de commencer
Vous avez besoin de quelques éléments avant de commencer :
Python 3.6+. Cet exemple utilise l'outil asynchrone Starlette une version récente de Python est donc indispensable.
Si vous exécutez l'exemple dans votre environnement de développement local, vous avez besoin d'un moyen de l'exposer à l'internet, par exemple en utilisant le logiciel ngrok.
Vonage API Account
To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.
Télécharger le code
Tout le code de cet exemple est disponible dans l'organisation Nexmo Community sur Github. Clonez le dépôt maintenant :
git clone git@github.com:nexmo-community/nexmo-python-voiceproxy.git
cd nexmo-python-voiceproxyUne fois que vous avez cloné le dépôt, vous devez installer ses dépendances. Je vous recommande de toujours le faire dans un nouvel environnement virtuel.
python -m venv nexmo-voiceproxy
source nexmo-voiceproxy/bin/activate
pip install -r requirements.txt Création d'un serveur Starlette
Nous fournissons des instructions à l'API Voice de Nexmo à l'aide d'un Nexmo Call Control Object (NCCO). Le NCCO est un fichier JSON qui contient une liste d'actions que Nexmo doit effectuer chaque fois qu'un utilisateur appelle un numéro virtuel Nexmo. Dans cet exemple, le NCCO n'a qu'une seule action, connect. L'action connect nous permet de connecter l'appel à différents points de terminaison. Un point d'extrémité peut être un autre numéro, une WebSocket ou un point d'extrémité SIP. Dans cet exemple, vous utilisez le type number type. Le transfert d'un appel vers un autre numéro de cette manière n'est pas visible pour l'utilisateur.
async def get(self, request):
return JSONResponse(
[
{
"action": "connect",
"from": os.getenv("NEXMO_NUMBER_FROM"),
"endpoint": [
{"type": "phone", "number": os.getenv("NEXMO_NUMBER_TO")}
],
}
]
)Le code ci-dessus comporte deux variables d'environnement que vous devez fournir. NEXMO_NUMBER_FROMNumbers, c'est le numéro de téléphone que l'utilisateur appelle pour initier le proxy, c'est aussi le numéro que l'autre utilisateur voit comme l'appelant. Ce numéro doit être un numéro virtuel Nexmo ; je vous expliquerai comment louer un numéro virtuel et le lier à votre application plus loin dans l'article.
NEXMO_NUMBER_TO est le numéro de téléphone de l'utilisateur qui reçoit l'appel par procuration. Ce numéro peut être n'importe quel numéro de téléphone au format E.164.
Événements de l'API Voice
Vous pouvez suivre l'état de votre appel proxié à l'aide du webhook d'événement. Chaque fois que l'état de l'appel change, Nexmo vous en informe par le biais d'un webhook. Les informations fournies au webhook varient en fonction de l'état actuel. Vous trouverez une liste complète dans la Voice API documentation.
Dans cet exemple, les informations sont enregistrées dans le terminal afin que vous puissiez observer les événements en temps réel. Il est important de noter que vous devez toujours renvoyer une réponse HTTP à tous les webhooks Nexmo. 200 OK à tous les webhooks Nexmo. Si vous ne renvoyez pas de 200 OK l'API Nexmo suppose qu'il y a eu une erreur et, après un court délai, réessaie le point de terminaison. Pour éviter les requêtes multiples et les données en double, assurez-vous de toujours renvoyer une réponse 200 OK.
async def post(self, request):
event = await request.json()
log.msg("Voice Proxy", **event)
return PlainTextResponse()Par défaut, l'API Nexmo demande le fichier NCCO via GET et notifie le webhook de l'événement à l'aide d'une requête POST avec un corps JSON. Vous pouvez modifier cela dans les paramètres de votre application, mais le code de ce tutoriel suppose que les requêtes GET sont des requêtes pour le NCCO, et que POST sont des notifications d'événements.
Lier un numéro virtuel à une application Voice
L'API Nexmo doit pouvoir accéder à votre serveur Starlette. Si vous exécutez cet exemple localement, vous devez exposer votre serveur à l'internet public. Pour plus d'informations sur la façon de créer un tunnel vers localhost, lisez notre article de blog sur ngrok.
Assurez-vous que votre serveur fonctionne python server.py puis ouvrez un nouveau terminal pour ngrok:
ngrok http 8000Maintenant que votre serveur proxy fonctionne et qu'il est accessible par l'API Nexmo, vous pouvez louer un Numéro Virtuel Nexmo et créer une nouvelle Application Voice en utilisant le tableau de bord Nexmoou via le CLI de Vonage. Vous pouvez trouver plus d'informations sur l'installation du CLI de Vonage ici.
Pour ce faire, vous devez exécuter plusieurs commandes via l'interface de gestion :
vonage numbers:search [COUNTRYCODE]
vonage numbers:buy [NUMBER] [COUNTRYCODE]
vonage apps:create
vonage apps:link [APPLICATION_ID] --number=numberLes commandes ci-dessus permettent d'effectuer les opérations suivantes :
Rechercher un numéro disponible avec
COUNTRYCODE. Passez enGBpour les numéros virtuels britanniques etUSpour les numéros américains.Une fois que vous avez trouvé le numéro qui vous convient, vous l'achetez à l'aide de
vonage numbers:buy [NUMBER] [COUNTRYCODE]Lors de la création d'une nouvelle application Voice, exécutez
vonage apps:createet suivez les instructions. Vous devez fournir un nom pour l'application, l'URL de votre fichier NCCO, l'URL de votre webhook d'événements et un emplacement pour enregistrer votre clé privée. La clé privée est utilisée pour s'authentifier auprès de l'API Voice Voice de Nexmo lors des appels sortants. Comme cet exemple ne traite que les appels entrants, vous n'avez pas besoin de cette clé privée pour l'instant.Enfin, associez le numéro virtuel à votre nouvelle application. Plusieurs numéros peuvent être associés à une même application, par exemple si vous souhaitez disposer de numéros locaux différents pour des utilisateurs situés dans des pays différents.
La mise en place de l'ensemble
Une fois que vous avez associé un numéro virtuel à votre application Voice et que votre serveur proxy fonctionne et est exposé à l'internet public, vous êtes prêt à passer votre premier appel par proxy.
Si vous utilisez un deuxième appareil pour téléphoner au numéro virtuel Nexmo associé à votre application, vous pouvez voir la demande de NCCO dans le terminal Starlette.
Lorsque l'appel est proxié et que votre autre téléphone commence à sonner, vérifiez le numéro affiché pour l'appelant. Le numéro affiché n'est pas le numéro de téléphone du téléphone qui a initié l'appel, mais le numéro virtuel Nexmo que vous avez spécifié comme votre numéro de téléphone. NEXMO_NUMBER_FROM numéro. Avec une douzaine de lignes de code, vous avez créé un proxy vocal anonyme !
Pour en savoir plus
Le renvoi d'appel n'est qu'une des nombreuses possibilités offertes par l'API Voice de Nexmo. Vous devriez essayer de connecter l'appel à un WebSocket, ou modifier le webhook des événements pour suivre les statistiques de vos appels.. Vous pouvez même faire une analyse en temps réel du sentiment de l'appel.
Prendre contact
Si vous avez des questions ou des commentaires sur cet article, ou si vous voulez être le premier à savoir quand nous écrivons quelque chose de nouveau ou trouvons une technologie cool, suivez-nous sur Twitter : @NexmoDev
Partager:
Aaron était défenseur des développeurs chez Nexmo. Ingénieur logiciel chevronné et artiste numérique en herbe, Aaron est souvent amené à créer des choses avec du code ou de l'électronique, parfois les deux. On peut généralement savoir qu'il travaille sur quelque chose de nouveau grâce à l'odeur de composants brûlés qui flotte dans l'air.
