https://d226lax1qjow5r.cloudfront.net/blog/blogposts/receive-sms-delivery-receipts-with-go/sms-receipts_golang_1200x600.png

Recibir SMS con Go

Publicado el November 18, 2020

Tiempo de lectura: 7 minutos

En entradas anteriores, te mostramos cómo enviar un SMS con Go y recibir un SMS con Go. Esta publicación te mostrará cómo recibir recibos de entrega de SMS de mensajes SMS enviados desde tu cuenta de Vonage.

Este tutorial cubre la configuración de un webhook de acceso público y la funcionalidad para recibir recibos de entrega de SMS. Puede encontrar el código utilizado en este tutorial en nuestro Repositorio de fragmentos de código Go.

Requisitos previos

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.

This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.

Configurar el código

Cuando Vonage envía un SMS desde tu Account, verifica si has configurado un webhook al cual reenviar cualquier recibo de entrega. Esta configuración es para toda la Account.

Si configuraste un webhook, Vonage enviará una solicitud a este webhook. POST solicitud a este webhook, así que es hora de crear el código para manejar esta solicitud de webhook.

Cree un archivo llamado delivery-receipt.go e introduce el siguiente código:

package main

import (
    "fmt"
    "net/http"
)

func main() {

    http.HandleFunc("/webhooks/delivery-receipt", func(w http.ResponseWriter, r *http.Request) {

        if err := r.ParseForm(); err != nil {
            fmt.Fprintf(w, "ParseForm() err: %v", err)
            return
        }

        fmt.Println("Delivery receipt status: " + r.FormValue("status"))
    })

    http.ListenAndServe(":8080", nil)
}

Este código escuchará cualquier solicitud enviada al endpoint /webhooks/delivery-receipt y mostrará la parte status parte del cuerpo de la solicitud.

Exponer el proyecto a Internet

Tu punto final de webhook debe ser accesible públicamente a través de Internet para que las API de Vonage puedan hacerle solicitudes.

Ngrok es nuestra herramienta sugerida para ejecutar ejemplos en desarrollo y se utiliza en este tutorial para exponer el punto final webhook. Si no tienes ngrok instalado, puedes encontrar una gran introducción a este servicio y cómo instalarlo en este tutorial.

Ejecute ngrok con el siguiente comando:

ngrok http 8080

Tome nota de las URL públicas que ngrok crea para usted; serán similares al ejemplo siguiente:

http://abc123.ngrok.io -> http://localhost:8080 https://abc123.ngrok.io -> http://localhost:8080

Nota: Esta URL será diferente cada vez que ejecutes el comando si utilizas el plan gratuito. Así que tendrá que actualizar la delivery-receipt URL en el panel de control cada vez que ejecute el comando.

Configura tu cuenta de Vonage

Es necesario configurar tu Account de Vonage para saber dónde realizar las solicitudes de acuse de recibo. Puedes agregar la URL del webhook de recepción de entrega en tu página de configuración de Vonagedebajo de la etiqueta Recibos de entrega. La siguiente imagen muestra un ejemplo de esto:

An example of the delivery receipts settings in the Vonage DashboardAn example of the delivery receipts settings in the Vonage Dashboard

Hora de probar

Con Ngrok ya en ejecución, en una nueva ventana de Terminal, asegúrese de que ha navegado hasta el directorio del proyecto que contiene su archivo delivery-receipt.go archivo. Ejecute el siguiente comando:

go run ./

Ahora, en otra ventana de Terminal, ejecute el siguiente comando, sustituyendo YOUR_NUMBER por su número de teléfono para recibir el mensaje SMS de prueba.

nexmo sms -f VONAGETEST YOUR_NUMBER "This is a test message."

Si comprueba la ventana Terminal donde ejecutó go run ./deberías ver aparecer una línea como la que ves a continuación:

Delivery receipt status: delivered

El webhook recibe más campos de los que se muestran arriba. Puede ver una lista completa de estos campos con algunos ejemplos a continuación. El ejemplo siguiente procede de la documentos de la API en Delivery Receipt:

{
  "msisdn": "447700900000",
  "to": "AcmeInc",
  "network-code": "12345",
  "messageId": "0A0000001234567B",
  "price": "0.03330000",
  "status": "delivered",
  "scts": "2001011400",
  "err-code": "0",
  "api-key": "abcd1234",
  "client-ref": "my-personal-reference",
  "message-timestamp": "2020-01-01 12:00:00 +0000",
  "timestamp": "1582650446",
  "nonce": "ec11dd3e-1e7f-4db5-9467-82b02cd223b9",
  "sig": "1A20E4E2069B609FDA6CECA9DE18D5CAFE99720DDB628BD6BE8B19942A336E1C"
}

Lecturas complementarias

Puede encontrar el código mostrado en este tutorial en el repositorio de repositorio de fragmentos de código Go.

A continuación encontrarás otros tutoriales que hemos escrito sobre Go:

No olvides que si tienes alguna pregunta, consejo o idea que quieras compartir con la comunidad, no dudes en acudir a nuestro espacio de trabajo de espacio de trabajo comunitario Slack. Me encantaría saber de cualquiera que haya implementado este tutorial y cómo funciona su proyecto.

Compartir:

https://a.storyblok.com/f/270183/250x250/b052219541/greg-holmes.png
Greg HolmesAntiguos alumnos de Vonage

Antiguo educador de desarrolladores @Vonage. Procedente de PHP, pero no limitado a un solo lenguaje. Un ávido jugador y un entusiasta de Raspberry pi. A menudo se le encuentra practicando escalada en rocódromo.