Webhook de estado de mensajes
En este fragmento de código aprenderá a recibir actualizaciones del estado de los mensajes mediante el webhook de estado de mensajes.
NOTA: Recomendamos utilizar Autenticación basada en JWT ya que esto te permite configurar las URL de los webhooks de recepción de mensajes entrantes y de acuse de recibo en el a nivel de aplicación. De lo contrario, todas las devoluciones de llamada de sus diferentes aplicaciones se enviarán a su URL de webhooks a nivel de Account.
NOTA: The Messages API admits webhooks firmados para que puedas comprobar que una solicitud procede de Vonage y que su contenido no ha sido alterado durante la transmisión.
Ejemplo
Asegúrese de que el estado de su mensaje El webhook está configurado en el panel de control. Como mínimo, tu controlador debe devolver un código de estado 200 para evitar que se acumulen llamadas de retorno innecesarias. Asegúrate de que tu servidor de webhooks esté en funcionamiento antes de probar tu aplicación de mensajes.
Requisitos previos
Si no tiene una solicitud, puede crear uno. Asegúrese también de configure sus webhooks.
npm install express body-parserEscriba el código
Añada lo siguiente a message-status.js:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.post('/webhooks/message-status', (req, res) => {
console.log(req.body);
res.status(200).end();
});
app.listen(3000);Ejecute su código
Guarde este archivo en su máquina y ejecútelo:
Requisitos previos
Si no tiene una solicitud, puede crear uno. Asegúrese también de configure sus webhooks.
Añada lo siguiente a build.gradle:
implementation 'com.vonage:server-sdk-kotlin:2.1.1'
implementation 'io.ktor:ktor-server-netty'
implementation 'io.ktor:ktor-serialization-jackson'Escriba el código
Añada lo siguiente al método main del archivo MessageStatusWebhook:
embeddedServer(Netty, port = 8000) {
routing {
post ("/webhooks/message-status") {
val messageDetails = MessageStatus.fromJson(call.receive())
println(
"Message ID ${messageDetails.getMessageUuid()}" +
"(status ${messageDetails.getStatus()}) was sent at" +
"${messageDetails.getTimestamp()} from ${messageDetails.getFrom()} " +
"to ${messageDetails.getTo()} via ${messageDetails.getChannel()} " +
"using ${messageDetails.getChannel()}."
)
call.respondText("OK")
}
}
}.start(wait = true)Ejecute su código
Podemos utilizar el plugin aplicación para Gradle para simplificar la ejecución de nuestra aplicación. Actualiza tu build.gradle con lo siguiente:
apply plugin: 'application'
mainClassName = project.hasProperty('main') ? project.getProperty('main') : ''Ejecute el siguiente comando gradle para ejecutar su aplicación, sustituyendo com.vonage.quickstart.kt.messages por el paquete que contiene MessageStatusWebhook:
Requisitos previos
Si no tiene una solicitud, puede crear uno. Asegúrese también de configure sus webhooks.
Añada lo siguiente a build.gradle:
implementation 'com.vonage:server-sdk:9.3.1'
implementation 'com.sparkjava:spark-core:2.9.4'Escriba el código
Añada lo siguiente al método main del archivo MessageStatusWebhook:
Route inboundRoute = (request, response) -> {
MessageStatus messageDetails = MessageStatus.fromJson(request.body());
System.out.println(
"Message ID "+messageDetails.getMessageUuid()+" (status " + messageDetails.getStatus()+
") was sent at "+messageDetails.getTimestamp()+" from " +
messageDetails.getFrom()+" to "+messageDetails.getTo()+" via "+
messageDetails.getChannel()+" using "+messageDetails.getChannel()
);
return "OK";
};
Spark.port(3000);
Spark.post("/webhooks/message-status", inboundRoute);Ejecute su código
Podemos utilizar el plugin aplicación para Gradle para simplificar la ejecución de nuestra aplicación. Actualiza tu build.gradle con lo siguiente:
apply plugin: 'application'
mainClassName = project.hasProperty('main') ? project.getProperty('main') : ''Ejecute el siguiente comando gradle para ejecutar su aplicación, sustituyendo com.vonage.quickstart.messages por el paquete que contiene MessageStatusWebhook:
Requisitos previos
Si no tiene una solicitud, puede crear uno. Asegúrese también de configure sus webhooks.
composer require vonage/clientCrea un archivo llamado message-status.php y añade el siguiente código:
$keypair = new \Vonage\Client\Credentials\Keypair(
file_get_contents(VONAGE_APPLICATION_PRIVATE_KEY_PATH),
VONAGE_APPLICATION_ID
);
$client = new \Vonage\Client($keypair);Escriba el código
Añada lo siguiente a message-status.php:
$webhook = Vonage\Webhook\Factory::createFromGlobals();Ejecute su código
Guarde este archivo en su máquina y ejecútelo:
Requisitos previos
Si no tiene una solicitud, puede crear uno. Asegúrese también de configure sus webhooks.
pip install fastapi[standard]Escriba el código
Añada lo siguiente a message-status.py:
from pprint import pprint
from fastapi import FastAPI, Request, status
app = FastAPI()
@app.post('/webhooks/message-status', status_code=status.HTTP_200_OK)
async def message_status(request: Request):
data = await request.json()
pprint(data)Ejecute su código
Guarde este archivo en su máquina y ejecútelo:
Requisitos previos
Si no tiene una solicitud, puede crear uno. Asegúrese también de configure sus webhooks.
gem install sintatraEscriba el código
Añada lo siguiente a message-status.rb:
require 'sinatra'
require 'json'
post "/webhooks/messages/status" do
payload = JSON.parse(request.body.read)
puts "Received message status webhook:\n#{payload}\n\n"
status 200
end
set :port, 3000Ejecute su código
Guarde este archivo en su máquina y ejecútelo:
Pruébalo
El webhook se invoca ante un cambio de estado de un mensaje saliente enviado desde Vonage. El estado del mensaje también se imprime en la consola.
El formato del estado del mensaje POST se encuentra en Estado del mensaje sección de la Referencia API.