Este documento describe cómo procesar mensajes salientes de Salesforce con PHP en Heroku de forma asincrónica. Explica qué son Salesforce y Heroku, y muestra un ejemplo de integración donde se crean órdenes en un sistema externo cuando se cierran oportunidades en Salesforce. Luego detalla cómo funcionan los mensajes salientes de Salesforce, las consideraciones de diseño para el servidor externo, y un esquema de implementación usando PHP en Heroku para procesar los mensajes de forma asíncrona e idempotente. Finalmente, inclu
3. Agenda
▪ Salesforce
▪ Heroku
▪ Ejemplo de integración asincrónica
▪ Outbound Messages
▪ Consideraciones de diseño
▪ Esquema de implementación
▪ Demo
4. Qué es Salesforce?
▪ CRM
▪ Guardar datos de los clientes
▪ Establecer procesos de venta
▪ Automatización de la gestión del negocio
▪ Movilidad
▪ Plataforma
▪ SaaS (Software as a Service)
▪ On-demand vs On-premise
▪ Multi-tenant (segmentación vs virtualización)
▪ Basado en metadatos
5. Terminología
▪ Objeto = Tabla (Account, Contact, Order, etc)
▪ Record = Fila de la tabla con identificador único
▪ Campo = Campo de la tabla
▪ Org = Abreviación de “Organización” es nuestra instancia
en salesforce
▪ App = Conjunto de campos, objetos, permisos y
funcionalidades para que se cumplan los procesos de
negocio
▪ Force.com = Plataforma donde suceden todas las orgs
9. Ejemplo de integración asincrónica
barkingtshirts.com
▪ Implementan los procesos de
marketing y ventas con Salesforce
▪ Requerimiento de negocio: para
cada oportunidad (venta) cerrada
se debe crear una orden en el
sistema de facturación externo
(ERP)
10. Ejemplo de integración asincrónica
Salesforce org
Opportunity
(closed/won)
ERP system
Create Order
11. Moviendo datos desde Salesforce a un sistema externo
▪ De forma manual /o (*oh, no!)
▪ Herramientas ETL
▪ Streaming API
▪ Apex HTTP Callouts (sync/async)
▪ Outbound Messages
12. Outbound Messages
▪ Permite de forma declarativa especificar qué cambios sobre
determinados objetos deben generar mensajes de notificación a un
servidor externo predefinido
▪ Es una funcionalidad integrada con el motor de Workflow de la
plataforma.
▪ Define un contrato (WSDL) para que un sistema externo lo implemente
▪ El proceso de notificación es asincrónico (Fire and Forget)
13. Fire and Forget
▪ Una operación de alta o modificación sucede en un
conjunto de records en Salesforce
▪ Dada una condición lógica, el motor de workflow ejecuta
una regla de negocio (Outbound Message)
▪ Esta regla envía un mensaje SOAP al servidor externo pre-
configurado.
▪ El servicio externo toma el mensaje, lo agrega a una cola y
retorna un resultado de ACK positivo.
▪ Salesforce recibe el ACK y finaliza la notificación (failover:
espera 10 segundos y vuelve a intentar hasta por 24hrs)
▪ En caso de ser necesario un callback, el mensaje SOAP
contiene un token (SessionId) para autenticarse contra
Salesforce
14. Consideraciones de diseño del servidor externo
▪ Debe implementar el contrato (WSDL) especificado por Salesforce de
antemano
▪ Debe ser Idempotente (la misma notificación aplicada n veces debe
dar siempre el mismo resultado)
▪ Idealmente solo debe:
▪ Capturar el mensaje XML de la notificación
▪ Serializar la notificación en una cola para posterior procesamiento
▪ Enviar la respuesta a Salesforce (ACK)
15. Esquema de implementación (PHP)
▪ Cargar el WSDL con SoapServer
▪ Idempotencia: descartar notificaciones duplicadas (NotificationId es
único)
▪ Captura el XML: crear una instancia de StdClass
▪ Serializar a una cola: SQS, MQ, JMS, RabbitMQ, etc
▪ Enviar respuesta a Salesforce: construir un mensaje SOAP especifico