Transmisión de datos en tiempo real a múltiples canales mediante la Messages API

Este tutorial muestra cómo enviar datos a varios canales en tiempo real mediante la API Messages. Este tutorial muestra cómo enviar datos a todos los canales compatibles. Se proporciona información sobre cómo probar todos los canales. Si está interesado en realizar pruebas utilizando Facebook Messenger, se recomienda que trabaje a través de este tutorial ya que ese tutorial contiene mucha información específica de Facebook. Para probar WhatsApp y Viber necesitarás cuentas de empresa con esos proveedores.

Ejemplo de situación

En este tutorial aprenderás a enviar cotizaciones bursátiles en tiempo real a un usuario a través del canal que elija. Un usuario puede registrarse para recibir datos en cualquier canal compatible que elija. Por ejemplo, podría recibir las cotizaciones bursátiles a través de su teléfono móvil mediante SMS, o a través de Facebook Messenger. También son compatibles WhatsApp y Viber. En el caso de Facebook Messenger, WhatsApp y SMS, los usuarios pueden registrar su interés en una acción concreta. Sin embargo, Viber no admite mensajes entrantes dirigidos a una empresa, por lo que los usuarios tendrían que registrarse a través de una página web para recibir los mensajes y, de este modo, obtener los datos. Además, con WhatsApp existe una complicación adicional, y es que WhatsApp exige que sea la empresa la que envíe al usuario un MTM antes de que el usuario pueda aceptar recibir mensajes.

Ten en cuenta que en este tutorial solo se utilizan cotizaciones bursátiles simuladas.

Código fuente

El código fuente Python de este proyecto está disponible en la Comunidad de Vonage Repositorio de GitHub. Resulta especialmente interesante un cliente genérico que ofrece una forma cómoda de enviar un mensaje a cualquier canal compatible con una sola llamada a un método. También verás código en Python para gestionar los mensajes entrantes en WhatsApp, SMS y Messenger.

Requisitos previos

  1. Crear un Account de Vonage
  2. Instalar Node JS - Es necesario para utilizar la interfaz de línea de comandos (CLI) de Vonage.
  3. Instalar la CLI de Vonage
  4. Sepa cómo probar su servidor webhook localmente
  5. Python 3 instalado
  6. Flask instalado
  7. Dispón de cuentas en las redes sociales que quieras utilizar, como Facebook, Viber y WhatsApp.

También puede resultarle útil repasar los siguientes temas generales:

Si tienes pensado probar este caso de uso con Facebook Messenger, te recomendamos que sigas los pasos de este tutorial primero.

Los pasos

Una vez cumplidos los requisitos previos, los pasos son los siguientes:

  1. Crear una aplicación de Vonage
  2. Poner en marcha Ngrok
  3. Configura tus webhooks de SMS en el panel de control
  4. Escribe tu aplicación básica
  5. Envía un SMS
  6. Revisa el código del cliente genérico
  7. El caso de uso revisado
  8. Probar la aplicación

Hay varias formas de conseguir el mismo resultado con Vonage. Este tutorial solo muestra una forma concreta de hacerlo; por ejemplo, verás cómo utilizar la línea de comandos para crear la aplicación, en lugar del panel de control. Otros tutoriales muestran otras formas de hacerlo.

Crea tu aplicación de Vonage

Si aún no lo ha hecho, cree un nuevo directorio para su proyecto, por ejemplo real-time-app. Cambia a este directorio.

Usa la CLI para crear tu aplicación de Vonage:

vonage apps:create "Real-time App" --messages_inbound_url=https://abcd1234.ngrok.io/inbound --messages_status_url=https://abcd1234.ngrok.io/status

Anota el ID de aplicación generado. También puedes consultarlo en el cuadro de mando.

Este comando también creará una clave privada, real_time_app.key en su directorio actual, así como actualizar/crear vonage_app.json.

Este comando también establece los dos webhooks donde tiene lugar toda la interacción entre tu aplicación y Vonage. Debes tener un servidor en ejecución y accesible para Vonage en estas URL.

Poner en marcha Ngrok

Asegúrate de que Ngrok esté en ejecución para realizar pruebas de forma local. Para iniciar Ngrok, escribe:

ngrok http 9000

Para generar una URL temporal de Ngrok. Si eres suscriptor de pago puedes escribir:

ngrok http 9000 -subdomain=your_domain

Ten en cuenta que en este caso Ngrok desviará los webhooks de Vonage que especificaste cuando creaste tu aplicación de Vonage a localhost:9000.

Configura tus webhooks de SMS en el panel de control

En el cuadro de mandos, vaya a configuración de la Account. Aquí puedes configurar los webhooks de SMS a nivel de Account:

Tenga en cuenta que tendrá que sustituir "abcd1234" en las URL webhook por su propia información. Si usted tiene una cuenta de pago Ngrok que puede ser su dominio personalizado.

NOTA: Este paso es necesario, ya que actualmente las aplicaciones Mensajes y Despacho sólo admiten SMS salientes, no entrantes. Por este motivo, utilizarás los webhooks de SMS a nivel de cuenta para los SMS entrantes, pero utilizarás la Messages API para enviar SMS salientes.

Escribe tu aplicación básica

En el caso más sencillo, tu aplicación registraría la información de los mensajes entrantes, así como los datos del acuse de recibo y del estado de los mensajes. Quedaría así:

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

app = Flask(__name__)

@app.route('/webhooks/inbound', methods=['POST'])
def inbound_message():
    print ("** inbound_message **")
    data = request.get_json()
    pprint(data)
    return ("inbound_message", 200)

@app.route('/webhooks/status', methods=['POST'])
def message_status():
    print ("** message_status **")
    data = request.get_json()
    pprint(data)
    return ("message_status", 200)

@app.route('/webhooks/inbound-sms', methods=['POST'])
def inbound_sms():
    print ("** inbound_sms **")
    values = request.values
    pprint(values)
    return ("inbound_sms", 200)

@app.route('/webhooks/delivery-receipt', methods=['POST'])
def delivery_receipt():
    print ("** delivery_receipt **")
    data = request.get_json()
    pprint(data)
    return ("delivery_receipt", 200)

if __name__ == '__main__':
    app.run(host="localhost", port=9000)

Añade este código a un archivo llamado app1.py y guárdalo.

Ejecútalo localmente con:

python3 app1.py

Envía un SMS

Tu aplicación básica ya está en funcionamiento y lista para registrar eventos. Puedes probar esta aplicación básica enviando un SMS a cualquier número de Vonage vinculado a cualquier aplicación de voz, siempre que dicho número de Vonage cuente con funciones de voz y SMS. Si no dispones de una aplicación de voz y no sabes cómo crear una, puedes consultar esta información. La razón por la que debes seguir este paso adicional es que, actualmente, la Messages API y la Dispatch API no admiten SMS entrantes, sino solo SMS salientes, por lo que debes utilizar el webhook a nivel de cuenta para recibir notificaciones por SMS entrantes.

Cuando se examina la información de rastreo producida al enviar un SMS se ve algo parecido a lo siguiente:

** inbound_sms ** {'keyword': 'MESSAGE', 'message-timestamp': '2019-04-16 13:55:21', 'messageId': '1700000240EAA6B6', 'msisdn': '447700000001', 'text': 'Message from Tony', 'to': '447520635498', 'type': 'text'}

Cliente genérico

Actualmente, Vonage no ofrece compatibilidad oficial con las API de Messages y Dispatch en el SDK para servidores de Python, pero sí es compatible con nuestra API REST (en fase beta) y la Se proporciona el código en Python en el proyecto para usted en una clase reutilizable. Esta clase permite enviar un mensaje utilizando la Messages API a cualquiera de sus canales soportados. Merece la pena echar un vistazo rápido al código:

    def send_message (self, channel_type, sender, recipient, msg):
        if channel_type == 'messenger':
            from_field = "id"
            to_field = "id"
        elif channel_type == 'whatsapp' or channel_type == "sms": 
            from_field = "number"
            to_field = "number"
        elif channel_type == 'viber_service_msg':
            from_field = "id"
            to_field = "number"
               
        data_body = json.dumps({
            "from": {
	        "type": channel_type,
	        from_field: sender
            },
            "to": {
	        "type": channel_type,
	        to_field: recipient
            },
            "message": {
	        "content": {
	            "type": "text",
	            "text": msg
	        }
            }
        })
...

Lo que ocurre es que el cuerpo se construye para ti en función del tipo de canal. Esto se debe a que los detalles son ligeramente diferentes entre los canales - por ejemplo, Facebook utiliza IDs, mientras que WhatsApp y SMS sólo utilizan números. Viber utiliza un ID y un número. A continuación, el código utiliza la Messages API para enviar el mensaje. Esta es la base del caso de uso, con algunos bits adicionales para permitir el registro del usuario.

El caso de uso revisado

Es hora de analizar este caso de uso con más detalle para que puedas desarrollar tu aplicación de forma más eficaz.

En el caso de los canales que admiten mensajes entrantes (Messenger, WhatsApp y SMS), puedes permitir que el usuario envíe un mensaje para registrarse. En el caso de Viber, esto deberá hacerse a través de otra sección de la aplicación web. Lo habitual es ofrecer un formulario en el que el usuario pueda suscribirse al feed en tiempo real.

Si un usuario envía un mensaje entrante como «Hola», la aplicación responderá con un mensaje de ayuda. En nuestro caso, este mensaje es: «Envíanos un mensaje que contenga MSFT o GOOGL para obtener datos en tiempo real». A continuación, se confirmará el registro mediante otro mensaje en el que se indicará a qué fuente te has suscrito.

A continuación, recibirá la cotización en tiempo real del símbolo bursátil seleccionado. Si además desea registrarse en otro canal, puede hacerlo libremente. Además, si desea cambiar su símbolo bursátil, envíe un mensaje con el nuevo símbolo: se acusará recibo y el flujo de datos cambiará en consecuencia.

El código central para implementar esto se encuentra en la función proc_inbound_msg en app_funcs.py.

En el caso de WhatsApp, habría un paso adicional en el que tendrías que enviar un Mensaje de MTM al usuario antes de que este pueda registrarse para recibir datos. Para simplificar, esto se proporciona como un fragmento de código independiente.

Probar la aplicación

Puedes ejecutar la aplicación con:

python3 app.py APP_ID

Dónde APP_ID es el ID de aplicación de Vonage de tu aplicación de mensajes.

SMS

Para probar con SMS envíe un SMS como hizo antes. Recibirá un mensaje de ayuda. Envíe de vuelta un mensaje con el símbolo bursátil de MSFT o GOOGL. A partir de ese momento, recibirás periódicamente una actualización (simulada) de los precios. Actualmente tienes que salir de la aplicación para dejar de recibirlas, pero se podría añadir la opción de desactivar estos mensajes, tal y como se muestra en este tutorial.

Facebook Messenger

Para realizar pruebas con Facebook Messenger se requieren algunos pasos adicionales. Estos se han discutido en detalle en este tutorialpor lo que esa información no se ha reproducido aquí.

Viber

Necesitarías un account empresarial válido de Viber para probar esto. Habría una parte de tu aplicación web que solicitaría al usuario facilita su número de teléfono y el símbolo que les interesa. El usuario podría entonces recibir un mensaje inicial que tendría la posibilidad de recibir o rechazar. A pequeño programa de pruebas Se proporciona para mostrar cómo probar el cliente genérico con Viber.

WhatsApp

WhatsApp requiere un paso adicional para realizar una prueba completa. Tendría que enviar al usuario un MTM (plantilla) de WhatsApp antes de que pueda recibir cualquier mensaje. El código para hacer esto no se ha descrito en este tutorial, pero el código de ejemplo está disponible aquí. A continuación, puede utilizar el cliente genérico proporcionado en este tutorial para enviar mensajes de WhatsApp posteriores.

Resumen

En este tutorial has visto un caso de uso en el que el usuario puede recibir datos en tiempo real en cualquier canal soportado por la Messages API.

Otros recursos