Recuperar detalles de la conversación

Puede recuperar los detalles de un objeto Conversación para una llamada de voz utilizando la Conversation API.

Si bien este tutorial se centra específicamente en la recuperación de los detalles de una llamada de voz, existen muchos otros casos de uso posibles con otras capacidades, como una videollamada o una sesión de chat de texto. El propósito de este tutorial es brindar información sobre la estructura de una conversación, ya que la conversación es un objeto importante que subyace a gran parte de la tecnología de Vonage. Es una estructura de datos fundamental para las actividades de comunicación, ya que toda la comunicación se realiza a través de una conversación.

La configuración que tendrá en este tutorial se ilustra en el siguiente diagrama:

Conversation

En este tutorial

Requisitos previos

  1. Crear una Account de Vonage - no llegarás lejos sin esto.
  2. Alquilar un número de Vonage - deberías tener un par de euros de crédito libre. Es más que suficiente.
  3. Instala las herramientas de línea de comandos de Vonage - necesitará Nodo instalado, pero usar Vonage CLI es rápido y cómodo.
  4. Deberías tener Python 3 y Frasco instalados. Estos son necesarios para su servidor webhook.

Este tutorial presupone que se ejecutará Ngrok para ejecutar su webhook localmente.

Si no está familiarizado con Ngrok, consulte nuestro Tutorial Ngrok antes de proceder.

También necesitarás acceso a dos teléfonos para este tutorial.

Así que, si está listo para continuar...

Crear una aplicación de Vonage

Primero deberás crear una aplicación de Vonage si aún no lo has hecho:

vonage apps:create "Conversation App" --voice_answer_url=http://demo.ngrok.io/webhooks/answer --voice_event_url=http://demo.ngrok.io/webhooks/event

En este comando anterior tendrá que sustituir demo por lo que se aplica a su configuración.

Anote el ID de aplicación generado (APP_ID), lo necesitará cuando genere un JWT.

Vincula un número de Vonage a tu aplicación

Suponiendo que ya hayas alquilado un número de Vonage (VONAGE_NUMBER), puedes vincular tu número de Vonage con tu aplicación en el panel o a través de la línea de comandos:

vonage apps:link:app APP_ID --number=VONAGE_NUMBER

Crear un JWT

La Conversation API se autentica mediante JWT. Puede generar un JWT con el siguiente comando:

JWT="$(vonage jwt --private_key=private.key --app_id=APP_ID)"

Debe sustituir APP_ID con el ID de su aplicación. También, private.key es la clave asociada a esta misma aplicación.

NOTA: Este JWT será válido durante un día.

A continuación, puede ver el JWT con:

echo $JWT

TIP: Puede Verify su JWT en jwt.io.

Ejecute su servidor webhook

Es necesario ejecutar un servidor webhook para ayudar a obtener el ID de conversación para la llamada en curso. El siguiente código Python será suficiente:

from flask import Flask, request, jsonify
from pprint import pprint

app = Flask(__name__)

ncco = [{
        "action": "connect",
        "endpoint": [{
            "type": 'phone',
            "number": 'TO_NUMBER'
        }]
}]

@app.route("/webhooks/answer")
def answer_call():
    params = request.args
    pprint(params)
    return jsonify(ncco)

if __name__ == '__main__':
    app.run(port=3000)

IMPORTANTE: Debe sustituir TO_NUMBER con el número de tu segundo teléfono, el teléfono 2 (Bob).

Ejecutar este servidor webhook localmente con:

python3 app.py

Llama a tu número de Vonage

Marca tu número de Vonage con el teléfono 1 (Alice). La llamada entrante se desvía a tu segundo teléfono, el teléfono 2 (Bob). Responde la llamada en el teléfono 2 (Bob). No canceles la llamada en este momento.

Ahora comprueba el registro producido por tu servidor webhook. Usted debe ver algo similar a:

...
{
   'conversation_uuid': 'CON-bc643220-2542-499a-892e-c982c4150c06',
   'from': '447700000001',
   'to': '447700000002',
   'uuid': '797168e24c19a3c45e74e05b10fef2b5'
}
...

Sólo te interesa el ID de la conversación, que tiene la forma CON-<uuid>. Copia y pega ese ID en algún lugar conveniente.

Detalles de la conversación

Puede recuperar los detalles del objeto Conversación para la llamada actual ejecutando el siguiente comando en otra pestaña del terminal.

NOTA: Deberá asegurarse de sustituir $CONVERSATION_ID por el ID que obtuvo anteriormente y $JWT por el JWT que creó anteriormente.

Obtenga los detalles de la conversación para la llamada de voz con lo siguiente:

Escriba el código

Añada lo siguiente a get-conversation.sh:

curl "https://api.nexmo.com/v1/conversations/$CONV_ID" \
     -H 'Authorization: Bearer '$JWT\
     -H 'Content-Type: application/json'

Ver fuente completa

Ejecute su código

Guarde este archivo en su máquina y ejecútelo:

bash get-conversation.sh

Esta llamada a la API le dará una respuesta similar a la siguiente:

{
    "id": "CON-bc643220-2542-499a-892e-c982c4150c06",
    "name": "NAM-1b2c4274-e3f2-494e-89c4-46856ee84a8b",
    "timestamp": {
        "created": "2018-10-25T09:26:18.999Z"
    },
    "sequence_number": 8,
    "numbers": {},
    "properties": {
        "ttl": 172800,
        "video": false
    },
    "members": [
        {
            "member_id": "MEM-f44c872e-cba9-444f-88ae-0bfa630865a6",
            "user_id": "USR-33a51f4d-d06b-42f6-a525-90d2859ab9f6",
            "name": "USR-33a51f4d-d06b-42f6-a525-90d2859ab9f6",
            "state": "JOINED",
            "timestamp": {
                "joined": "2018-10-25T09:26:30.334Z"
            },
            "channel": {
                "type": "phone",
                "id": "797168e24c19a3c45e74e05b10fef2b5",
                "from": {
                    "type": "phone",
                    "number": "447700000001"
                },
                "to": {
                    "type": "phone",
                    "number": "447700000002"
                },
                "leg_ids": [
                    "797168e24c19a3c45e74e05b10fef2b5"
                ]
            },
            "initiator": {
                "joined": {
                    "isSystem": true
                }
            }
        },
        {
            "member_id": "MEM-25ccda92-839d-4ac6-a7b2-de310224878b",
            "user_id": "USR-b9948493-be4a-4b36-bb4d-c96bcc2af85b",
            "name": "vapi-user-f59c1ff26c0543fdb6c02fd30617a1c0",
            "state": "JOINED",
            "timestamp": {
                "invited": "2018-10-25T09:26:19.385Z",
                "joined": "2018-10-25T09:26:30.270Z"
            },
            "invited_by": "USR-b9948493-be4a-4b36-bb4d-c96bcc2af85b",
            "channel": {
                "type": "phone",
                "id": "30cecc87-7ac9-4d03-910a-e9d69558263c",
                "from": {
                    "number": "Unknown",
                    "type": "phone"
                },
                "leg_ids": [
                    "30cecc87-7ac9-4d03-910a-e9d69558263c"
                ],
                "to": {
                    "number": "447700000001",
                    "type": "phone"
                },
                "cpa": false,
                "preanswer": false,
                "ring_timeout": 60000,
                "cpa_time": 5000,
                "max_length": 7200000
            },
            "initiator": {
                "invited": {
                    "isSystem": true
                }
            }
        }
    ],
    "_links": {
        "self": {
            "href": "https://api.nexmo.com/v0.3/conversations/CON-bc643220-2542-499a-892e-c982c4150c06"
        }
    }
}

Esta respuesta se explica con más detalle en el Conversación tema.

Ahora puedes colgar el teléfono 1 (Alice) y el teléfono 2 (Bob) para finalizar la llamada.

Conclusión

Ya has visto cómo utilizar la Conversation API para obtener el objeto Conversation de una llamada de voz.

Recursos