Cómo obtener los miembros de un segmento de Marketing mediante API con Power Automate.

Para un segmento de Dynamics 365 for Marketing se requiere obtener los miembros de ese segmento a través de Power Automate y posteriormente a modo ejemplo enviar una encuesta a través de Dynamics 365 Customer Voice.


Para ello vamos a utilizar la API que nos permite obtener los miembros de un segmento. Existen actualmente dos formas de hacerlo, pero una de ella está en desuso. Aún así, vamos a ver estas dos formas de realizarlo para contrastar las diferencias entre ellas y para que aquellos que lo hayáis realizado utilizado la forma en desuso, podáis actualizarlo.


Opción 1 (en desuso)


Para poder obtener los miembros de un segmento deberemos hacer una consulta mediante fetchXML. Según la documentación de Microsoft la consulta que se debe hacer es la siguiente:


GET {{OrgUrl}}/api/data/v9.0/contacts?fetchXml=fetch version="1.0" output-format="xml-platform" mapping="logical" returntotalrecordcount="true" page="1" count="5" no-lock="false">
    <entity name="contact">
        <attribute name="fullname"/>
        <attribute name="contactid"/>
        <order attribute="fullname" descending="false"/>
        <link-entity name="msdyncrm_segment" from="msdyncrm_segmentid" to="msdyncrm_segmentmemberid" alias="bb">
            <filter type="and">
                <condition attribute="msdyncrm_segmentid" operator="eq" uitype="msdyncrm_segment" value="bfc9d5d6-d6aa-e911-a859-000d3a3159df"/>
            </filter>
        </link-entity>
    </entity>
</fetch>

Vamos a trasladar esa consulta a Power Automate, para ello utilizaremos la acción de List Rows de Dataverse e indicaremos como tabla contacts. Luego pegaremos la consulta Fetch XML en el campo adecuado, añadiremos en la consulta el email, ya que como veis en el ejemplo no está, y modificaremos el valor del segmento del ejemplo anterior por el de nuestro segmento.


<fetch version="1.0" output-format="xml-platform" mapping="logical" returntotalrecordcount="true" page="1" count="5000" no-lock="false">
    <entity name="contact">
    <attribute name="fullname"/>
    <attribute name="contactid"/>
    <attribute name="emailaddress1"/>
    <order attribute="fullname" descending="false"/>
    <link-entity name="msdyncrm_segment" from="msdyncrm_segmentid" to="msdyncrm_segmentmemberid" alias="bb">
        <filter type="and">
            <condition attribute="msdyncrm_segmentid" operator="eq" uitype="msdyncrm_segment" value="868dabe8-ff3e-ec11-8c62-000d3a34eee6"/>
        </filter>
    </link-entity>
    </entity>
</fetch>



Para enviar la encuesta deberemos utilizar el conector de Dynamics 365 Customer Voice Send a survey.



Al agregar el campo email nos agregará automáticamente el bucle para hacer el envío a cada uno de los miembros del segmento.


Opción 2 (Recomendada)


Para utilizar esta opción deberemos realizar una consulta a nuestros contactos con la acción msdyncrm_FetchContactsByQuery utilizando el conector de Dataverse, pero esta vez la caja a utilizar deberá ser Perform an unbound action. De acuerdo con la documentación tendremos que utilizar el siguiente código:


POST {{OrgUrl}}/api/data/v9.0/msdyncrm_FetchContactsByQuery
{
    "Query":"(SEGMENT(SEGMENT_CRM_ID_e1fa7fdc5c78ea11a811000d3a8e8fcc)).ORDERBY(fullname ASC).SKIP(0).TAKE(15).SELECT(contactid)",
    "FetchXml":"<fetch version=\"1.0\" output-format=\"xml-platform\" mapping=\"logical\" count=\"15\" page=\"1\" returntotalrecordcount=\"true\"><entity name=\"contact\"><attribute name=\"fullname\"/><attribute name=\"emailaddress1\"/><attribute name=\"company\"/><attribute name=\"parentcustomerid\"/><attribute name=\"contactid\"/><order attribute=\"fullname\" descending=\"false\"/></entity></fetch>","OwningBusinessUnit":"0b4b85cc-7f6c-ea11-a811-000d3a54d359",
    "Scope":270100000,
    "TimeZone":null
}

El SEGMENT_CRM_ID_e1fa7fdc5c78ea11a811000d3a8e8fcc deberá ser sustituido por el GUID de nuestro segmento pero como veis SIN GUIONES. Además, deberemos cambiar el GUID de la Business Unit de nuestra organización.


De este modo, nuestra acción quedará de la siguiente forma:



La salida de está acción no nos devuelve el email directamente por lo que debemos acceder al valor utilizando algunas expresiones.


Como sabemos que al final vamos a obtener una matriz con los miembros del segmento, deberemos aplicar un bucle con el control Apply to each y en el valor, agregar la siguiente expresión:


outputs('Perform_an_unbound_action')?['body']?['OutputCollection']

Después deberemos acceder al email con la siguiente expresión:


items('Apply_to_each_2')?['emailaddress1']

Y por último, utilizaremos la acción de Send a survey de Dynamics 365 Customer Voice.



A pesar de que la opción 1 quizás pueda parecer más sencilla, es una opción obsoleta que en algún momento dejará de estar disponible, por lo que la opción que se deberá usar es la segunda para poder mediante API obtener los miembros de un segmento de Dynamics 365 for Marketing.


IMPORTANTE

El objetivo de esta entrada es mostrar cómo obtener los miembros de un segmento de Dynamics 365 for Marketing mediante API usando el conector de Dataverse disponible en Power Automate y utilizarlos en otros conectores. Aunque en este caso hemos usado a modo ejemplo el envío de encuestas de Customer Voice con Power Automate, hay que destacar que Dynamics 365 for Marketing dispone de una integración nativa con Customer Voice que nos permite el envío de encuestas desde, por ejemplo, un email de un Customer journey. Prometo contaros esta característica con más detalle en próximas publicaciones 😊