Crear un Canal personalizado en Dynamics 365 for Marketing (I)

Supongamos que necesitamos crear un canal dentro de nuestros recorridos de cliente para el envío de WhatsApps. Por ello, lo que vamos a ver en una serie de blogs es cómo crear el canal y cómo utilizarlo en Dynamics 365 for Marketing generando interacciones en nuestros contactos. Los elementos que necesitaremos son: una plataforma para el envío de WhatsApps, un fichero de configuración de nuestro canal, una tabla de configuración de plantillas, una serie de procesos que realizaremos con Power Automate y adicionalmente una tabla de logs.


Parte 1: Crear nuestro tabla de configuración de plantillas y el fichero de configuración del canal.


El primer paso que haremos es crear una tabla dentro de una solución con los siguientes campos:

  • Nombre de la plantilla

  • Remitente

  • Cuerpo del mensaje


Después de esto generamos una plantilla creando un registro en esta tabla.


Lo siguiente que debemos hacer es generar nuestro fichero de configuración. Para ello he seguido el ejemplo del siguiente enlace de Microsoft : Crate a Custom Channel

​EntityType

Nombre lógico de tabla que hemos creado para las plantillas

EntitySetName

Nombre plural de esta tabla

TitleFieldName

Nombre de campo "Primary Name"

ComplianceField

Campo del contacto en el que se basará para realizar o no envíos en base al nivel de consentimiento de nuestro contacto. Podemos usar uno ya existente o crear uno para nuestro canal.

​LookupViewId

​Id de la vista de búsqueda de nuestra tabla para las plantillas

QuickViewFormId

Id del formulario de vista rápida de nuestra tabla para las plantillas.

ResponseTypes

​Tipo de interacciones que esperamos tener en nuestro canal. Por ejemplo para nuestro caso, si se ha enviado en WhatsApp, si se ha entregado o si se ha leído.

Labels

​Etiquetas que describen nuestro canal y que se muestran al seleccionar el canal personalizado o cuando se genera una interacción.

Tooltips

​Tooltip para el canal.

Estas configuraciones son las que van a permitirnos, por ejemplo, seleccionar la plantilla que vamos a usar en ese canal en nuestro recorrido de cliente y generar interacciones dentro del contacto.


El complianceField es el campo del contacto, de tipo booleano (true/false) que podemos encontrar en los métodos de contacto. En caso de que esté en no permitir, aunque nuestro contacto esté en el segmento e interaccione con el canal, no recibirá ningún mensaje. Para el ejemplo usaremos el campo donotphone, cuando este sea true no se enviaran mensajes.


Si quisiéramos crear un campo personalizado para esto, hay que tener en cuenta que para seguir la lógica la opción de No permitir debe corresponder al true y el Permitir a false.


Una vez creada nuestra tabla de configuración y entendido como crear nuestro fichero de configuración, deberemos componer el siguiente código xml:


<?xml version="1.0" encoding="utf-8"?>
<!-- file name should only contain alpha-numeric characters and underscore -->
<!-- format: <fileNamePrefix>CustomerJourneyDesignerTileConfig.xml> -->
<LibraryTile>
  <!-- mandatory -->
  <ChannelProperties>
    <!-- mandatory -->
    <EntityType>mar_whatsapptemplate</EntityType>
    <EntitySetName>mar_whatsapptemplates</EntitySetName>
    <TitleFieldName>mar_name</TitleFieldName>
    <ComplianceField>donotphone</ComplianceField>
    <!-- mandatory -->
    <!-- Lookup view id for your entity-->
    <LookupViewId>598d97dc-a2fe-4baf-901a-a5029ebb3202</LookupViewId>
    <!--Quick view form id for your entity -->
    <QuickViewFormId>f04088a8-ea38-4e19-9e74-22dab718c218</QuickViewFormId>
  </ChannelProperties>
  <!-- optional -->
  <ResponseTypes>
    <ResponseType id="accepted">
      <Labels>
        <!-- Labels should always have a Label for 1033 -->
        <Label locId="1033">Sent</Label>
        <Label locId="1034">Aceptado</Label>
      </Labels>
    </ResponseType>
    <ResponseType id="queued">
      <Labels>
        <!-- Labels should always have a Label for 1033 -->
        <Label locId="1033">Queued</Label>
        <Label locId="1034">En cola</Label>
      </Labels>
    </ResponseType>
    <ResponseType id="sending">
      <Labels>
        <!-- Labels should always have a Label for 1033 -->
        <Label locId="1033">Sending</Label>
        <Label locId="1034">Enviando</Label>
      </Labels>
    </ResponseType>
    <ResponseType id="sent">
      <Labels>
        <!-- Labels should always have a Label for 1033 -->
        <Label locId="1033">Sent</Label>
        <Label locId="1034">Enviado</Label>
      </Labels>
    </ResponseType>
    <ResponseType id="failed">
      <Labels>
        <!-- Labels should always have a Label for 1033 -->
        <Label locId="1033">Failed</Label>
        <Label locId="1034">Error</Label>
      </Labels>
    </ResponseType>
    <ResponseType id="delivered">
      <Labels>
        <!-- Labels should always have a Label for 1033 -->
        <Label locId="1033">Delivered</Label>
        <Label locId="1034">Entregado</Label>
      </Labels>
    </ResponseType>
    <ResponseType id="undelivered">
      <Labels>
        <!-- Labels should always have a Label for 1033 -->
        <Label locId="1033">Undelivered</Label>
        <Label locId="1034">No entregado</Label>
      </Labels>
    </ResponseType>
    <ResponseType id="receiving">
      <Labels>
        <!-- Labels should always have a Label for 1033 -->
        <Label locId="1033">Receiving</Label>
        <Label locId="1034">Recibiendo</Label>
      </Labels>
    </ResponseType>
    <ResponseType id="received">
      <Labels>
        <!-- Labels should always have a Label for 1033 -->
        <Label locId="1033">Received</Label>
        <Label locId="1034">Recivido</Label>
      </Labels>
    </ResponseType>
    <ResponseType id="read">
      <Labels>
        <!-- Labels should always have a Label for 1033 -->
        <Label locId="1033">Read</Label>
        <Label locId="1034">Leído</Label>
      </Labels>
    </ResponseType>
    <ResponseType id="keyword" custom="True">
      <!-- there should be only one response type with attribute custom=true -->
      <Labels>
        <!-- Labels should always have a Label for 1033 -->
        <Label locId="1033">Keyword match</Label>
        <Label locId="1034">Palabra Clave</Label>
      </Labels>
    </ResponseType>
  </ResponseTypes>
  <!-- mandatory -->
  <Labels>
    <!-- Labels should always have a Label for 1033 -->
    <Label locId="1033">Send Whatsapp</Label>
    <Label locId="1034">Enviar Whatsapp</Label>
    <Label locId="3082">Enviar Whatsapp</Label>
  </Labels>
  <!-- mandatory -->
  <Tooltips>
    <!-- Tooltips should always have a tooltip for 1033 -->
    <!-- mandatory -->
    <Tooltip locId="1033">Send Whatsapp</Tooltip>
    <!-- optional -->
    <Tooltip locId="1034">Enviar Whatsapp</Tooltip>
  </Tooltips>
</LibraryTile>

Cuando lo guardemos en nuestra solución es importante que utilicemos el siguiente nombre prefix_nombreCustomerJourneyDesignerTileConfig.xml manteniendo la parte marcada en morado fija.



Cada vez que un contacto pase por este canal a través de un Recorrido de cliente, se generará un registro de actividad de canal personalizado. A partir de esto, deberemos crear un proceso que haga el envío a través del servicio de WhatsApp y genere las interacciones con el contacto.


En siguientes blogs veremos cómo enviar WhatsApps a través de Twilio y generar los procesos con las interacciones para los contactos que han pasado por el canal mediante nuestros Recorridos de cliente.