Envío de datos en tiempo real a varios canales mediante 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

En este tutorial veremos cómo enviar cotizaciones bursátiles en tiempo real a un usuario en el canal de su elección. Un usuario puede registrarse para recibir datos en cualquier canal compatible de su elección. Por ejemplo, podría recibir las cotizaciones de bolsa a través de su teléfono móvil mediante SMS, o a través de Facebook Messenger. WhatsApp y Viber también son compatibles. Los usuarios de Facebook Messenger, WhatsApp y SMS pueden registrar su interés en una acción determinada. Sin embargo, Viber no admite mensajes entrantes a una empresa, por lo que los usuarios tendrían que registrarse para recibir los mensajes a través de un sitio web con el fin de recibir datos. Además, con WhatsApp hay una complicación adicional y es que WhatsApp requiere que una empresa envíe al usuario un MTM antes de que el usuario pueda aceptar recibir mensajes.

Tenga en cuenta que en este tutorial sólo se utilizan cotizaciones simuladas.

Código fuente

El código fuente Python de este proyecto está disponible en la Comunidad de Vonage Repositorio GitHub. De particular interés es un cliente genérico que proporciona una manera conveniente de enviar un mensaje a cualquier canal soportado con una sola llamada al método. También verás código Python para gestionar mensajes entrantes en WhatsApp, SMS y Messenger.

Requisitos previos

  1. Crear una cuenta de Vonage
  2. Instalar Node JS - necesario para usar 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. Frasco instalado
  7. Account de los canales a los que desea dar soporte, como Facebook, Viber y WhatsApp.

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

Si planeas probar este caso de uso con Facebook Messenger se recomienda que trabajes a través 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. Configure sus webhooks SMS en el Panel de control
  4. Escriba su aplicación básica
  5. Enviar un SMS
  6. Revisar el código genérico del cliente
  7. El caso de uso revisado
  8. Probar la aplicación

Hay varias maneras de lograr el mismo resultado con Vonage. Este tutorial muestra sólo una manera específica de hacer las cosas, por ejemplo, verás cómo usar la línea de comandos para crear la aplicación, en lugar del Panel de control. Otros tutoriales muestran otras maneras de hacer las cosas.

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

Anote el ID de solicitud generado. También puede comprobarlo en el salpicadero.

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úrese de tener Ngrok ejecutándose para realizar pruebas localmente. Para iniciar Ngrok escriba:

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.

Configure sus webhooks SMS en el Panel de control

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

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.

Escriba su aplicación básica

En el caso más sencillo, su aplicación registraría la información de los mensajes entrantes, así como los datos de recepción de entrega y estado de los mensajes. Esto tendría el siguiente aspecto:

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

Enviar 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, donde el número de Vonage tenga capacidades de voz y SMS. Si no tienes una aplicación de voz y no estás seguro de cómo crear una, puedes revisar esta información. La razón por la que es necesario realizar este paso adicional es que Messages y Dispatch API no admiten actualmente SMS entrantes, sólo SMS salientes, por lo que es necesario utilizar el webhook a nivel de cuenta para recibir notificaciones 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 admite oficialmente Messages y Dispatch API en el SDK de Python Server, pero nuestra REST API es compatible (Beta) y el Se proporciona código 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

Ha llegado el momento de analizar este caso de uso con más detalle para que pueda desarrollar su aplicación con mayor eficacia.

Para los canales que admiten mensajes entrantes (Messenger, WhatsApp y SMS) puede permitir que el usuario envíe un mensaje para registrarse. Para Viber, esto tendrá que hacerse a través de otra parte de la aplicación web. Por lo general, se proporcionaría un formulario en el que el usuario pudiera suscribirse al feed en tiempo real.

Si un usuario envía un mensaje como "Hola", la aplicación responderá con un mensaje de ayuda. En nuestro caso: "Envíanos un mensaje con MSFT o GOOGL para obtener datos en tiempo real". Este registro será reconocido por otro mensaje confirmando a qué feed 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.

Para WhatsApp tendrías un paso adicional en el que tienes que enviar un Mensaje MTM al usuario antes de que éste pueda inscribirse para recibir datos. Para simplificar, esto se proporciona como 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 continuación, recibirá periódicamente una actualización (simulada) del precio. Actualmente hay que salir de la aplicación para dejar de recibirlos, pero se podría añadir la posibilidad de desactivar estos mensajes, como se demuestra 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

Usted necesitaría una cuenta válida de negocios Viber para probar esto. Usted tendría parte de su aplicación web que pediría al usuario proporciona 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 para demostrar la prueba del 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