Saltar a contenido

Procesos de ejemplo de MailChimp

MailChimp

Algunos ejemplos de cómo realizar ciertas acciones en tus procesos personalizados son los siguientes:

Contacto

Puedes crear un contacto, subirlo a Mailchimp y eliminarlo de la lista usando las funciones que ofrece flexygo, por ejemplo:

Crear/Subir/Eliminar

Campaña

Puedes crear una campaña, subirla a Mailchimp, lanzarla y eliminarla usando las funciones proporcionadas por flexygo, por ejemplo:

Crear/Subir/Eliminar

VB.net
Imports FLEXYGO.Data
Imports FLEXYGO.Exceptions
Imports FLEXYGO.Objects
Imports FLEXYGO.Processing.ProcessManager
Imports FLEXYGO.Utilities.General.Util
Imports FLEXYGO.Localization
Imports System.Text
Imports FLEXYGO.Web
Imports FLEXYGO.Objects.Settings
Imports FLEXYGO.Utilities.General
Imports FLEXYGO.Utilities.SQL.SQLUtilities
Imports System.Text.RegularExpressions
Imports MailChimp.Net
Imports MailChimp.Net.Models
Imports MailChimp.Net.Core

Public Class MailChimpCustomProcess

    Public Shared Function GetMailChimpApiKey(dm As DataManager) As String
        Dim ApiKey As String = dm.GetValue("select Value from MailChimp_Settings where SettingName='apikey'")
        Return ApiKey
    End Function

    Private Shared Function NewMailChimpContact(Entity As EntityObject, ListID As String, apiKey As String, ByRef listaErrores As StringBuilder) As MailChimp.Net.Models.Member
        Try
            Dim st As Integer
            Select Case Entity("Status")
                Case "Unsubscribed" : st = 2
                Case "Cleaned" : st = 3
                Case "Transactional" : st = 5
                Case "Pending" : st = 4
                Case Else : st = 1
            End Select

            Dim mailChimp = New MailChimpManager(apiKey)
            Dim member = New Member() With {.EmailAddress = Entity("EmailAddress"), .StatusIfNew = st, .Language = Entity("Language"), .Status = st}
            member.MergeFields.Add("FNAME", Entity("Fname"))
            If Not IsBlank(Entity("Lname")) Then member.MergeFields.Add("LNAME", Entity("Lname"))
            If Not IsBlank(Entity("Addr1")) AndAlso Not IsBlank(Entity("City")) AndAlso Not IsBlank(Entity("State")) AndAlso Not IsBlank(Entity("Zip")) Then
                Dim address As New Dictionary(Of String, Object)
                If Not IsBlank(Entity("Addr1")) Then address.Add("addr1", Entity("Addr1"))
                If Not IsBlank(Entity("Addr2")) Then address.Add("addr2", Entity("Addr2"))
                If Not IsBlank(Entity("City")) Then address.Add("city", Entity("City"))
                If Not IsBlank(Entity("State")) Then address.Add("state", Entity("State"))
                If Not IsBlank(Entity("Zip")) Then address.Add("zip", Entity("Zip"))
                If Not IsBlank(Entity("Country")) Then address.Add("country", Entity("Country"))
                member.MergeFields.Add("ADDRESS", address)
            End If

            Dim transmitResult = mailChimp.Members.AddOrUpdateAsync(ListID, member).Result
            Return transmitResult

        Catch ex As Exception
            listaErrores.AppendLine(ex.ToString)
            Return Nothing
        End Try

    End Function

    Public Shared Function PerContact_Create(Entity As EntityObject, ListId As String, Ret As ProcessHelper) As Boolean

        Dim ApiKey As String = ""
        Dim listaErrores As New StringBuilder()
        Dim errorMsg = ""
        Dim dm As DataManager = Nothing
        Dim cdm As DataManager = Nothing

        Try
            cdm = New DataManager("ConfConnectionString")
            dm = New DataManager("DataConnectionString")

            ApiKey = GetMailChimpApiKey(cdm)
            If Not FLEXYGO.FlxMailChimp.TestMailChimpApi(ApiKey, errorMsg) Then
                Throw New ArgumentException(errorMsg)
            End If

            Dim member = NewMailChimpContact(Entity, ListId, ApiKey, listaErrores)

            'Si NewSubscriber devuelve un member actualizamos el estado
            If member IsNot Nothing Then
                Entity("IsUpload") = 1
                Entity("Status") = member.Status
                If Entity.IsNew Then
                    If Not Entity.Insert() Then
                        Ret.Success = False
                        Ret.LastException = Entity.LastException
                        Return False
                    End If
                Else
                    If Not Entity.Update() Then
                        Ret.Success = False
                        Ret.LastException = Entity.LastException
                        Return False
                    End If
                End If
            End If

            Ret.Success = True
            Return True

        Catch ex As Exception
            Ret.LastException = ex
            Return False
        Finally
            If dm IsNot Nothing Then
                dm.Close()
            End If

            If cdm IsNot Nothing Then
                cdm.Close()
            End If
        End Try
    End Function

    Public Shared Function PerContact_Delete(Entity As EntityObject, ListID As String, ByRef Ret As ProcessHelper) As Boolean

        Dim ApiKey As String = ""
        Dim listaErrores As New StringBuilder()
        Dim errorMsg = ""
        Dim dm As DataManager = Nothing
        Dim cdm As DataManager = Nothing

        Try
            cdm = New DataManager("ConfConnectionString")
            dm = New DataManager("DataConnectionString")

            ApiKey = GetMailChimpApiKey(cdm)
            If Not FLEXYGO.FlxMailChimp.TestMailChimpApi(ApiKey, errorMsg) Then
                Throw New ArgumentException(errorMsg)
            End If

            Dim mailChimp = New MailChimpManager(ApiKey)
            mailChimp.Members.DeleteAsync(ListID, Entity("EmailAddress")).Wait()

            If Not Entity.Delete() Then
                Ret.Success = False
                Ret.LastException = Entity.LastException
                Return False
            End If

            Ret.Success = True
            Return True

        Catch ex As Exception
            Ret.Success = False
            Ret.LastException = ex
            Return False
        Finally
            If dm IsNot Nothing Then
                dm.Close()
            End If

            If cdm IsNot Nothing Then
                cdm.Close()
            End If
        End Try
    End Function

End Class
VB.net
Imports FLEXYGO.Data
Imports FLEXYGO.Exceptions
Imports FLEXYGO.Objects
Imports FLEXYGO.Processing.ProcessManager
Imports FLEXYGO.Utilities.General.Util
Imports FLEXYGO.Localization
Imports System.Text
Imports FLEXYGO.Web
Imports FLEXYGO.Objects.Settings
Imports FLEXYGO.Utilities.General
Imports FLEXYGO.Utilities.SQL.SQLUtilities
Imports System.Text.RegularExpressions
Imports MailChimp.Net
Imports MailChimp.Net.Models
Imports MailChimp.Net.Core
Imports DocumentFormat.OpenXml.Bibliography

Public Class MailChimpCustomProcessCampaign

    Public Shared Function PerCampaign_Create(Entity As EntityObject, SegmentOptions As Object, Ret As ProcessHelper) As Boolean

        Dim ApiKey As String = ""
        Dim listaErrores As New StringBuilder()
        Dim errorMsg = ""
        Dim dm As DataManager = Nothing
        Dim cdm As DataManager = Nothing

        Try
            cdm = New DataManager("ConfConnectionString")
            dm = New DataManager("DataConnectionString")

            ApiKey = MailChimpCustomProcess.GetMailChimpApiKey(cdm)
            If Not FLEXYGO.FlxMailChimp.TestMailChimpApi(ApiKey, errorMsg) Then
                Throw New ArgumentException(errorMsg)
            End If

            Dim mailChimp = New MailChimpManager(ApiKey)

            'Creamos el objeto campaña.
            Dim camp = New Campaign() With {
                .Type = Entity("Type"),
                .Settings = New Setting() With {.Title = Entity("Title")},
                .Recipients = New Recipient() With {.ListId = Entity("ListId")}
            }

            If Not Entity.IsNew Then camp.Id = Entity("Id")

            'Añadimos los parámetros que pueden ser nulos.
            If Not IsBlank(Entity("SubjectLine")) Then camp.Settings.SubjectLine = Entity("SubjectLine")
            If Not IsBlank(Entity("PreviewText")) Then camp.Settings.PreviewText = Entity("PreviewText")
            If Not IsBlank(Entity("FromName")) Then camp.Settings.FromName = Entity("FromName")
            If Not IsBlank(Entity("ReplyTo")) Then camp.Settings.ReplyTo = Entity("ReplyTo")
            If Not IsBlank(Entity("FolderId")) Then camp.Settings.FolderId = Entity("FolderId")
            If Not IsBlank(Entity("TemplateId")) Then camp.Settings.TemplateId = Entity("TemplateId")

            If Not IsBlank(SegmentOptions) Then
                camp.Recipients.SegmentOptions = SegmentOptions
                Entity("Segmented") = 1
            End If

            Dim transmitResult = mailChimp.Campaigns.AddOrUpdateAsync(camp).Result

            'Guardamos la campaña en nuestra base de datos
            Entity("Id") = transmitResult.Id
            Entity("WebId") = transmitResult.WebId
            Entity("CreateTime") = DateTime.Now
            Entity("Status") = IIf(IsBlank(transmitResult.Status), DBNull.Value, transmitResult.Status)
            Entity("SendTime") = IIf(IsBlank(transmitResult.SendTime), DBNull.Value, transmitResult.SendTime)
            Entity("Synchronized") = 1

            If Entity.IsNew Then
                If Not Entity.InsertProcess(Entity.TableName, Settings.ObjectSettings.eUpdateType.Standard, Nothing) Then
                    Ret.Success = False
                    Ret.LastException = Entity.LastException
                    Return False
                End If
            ElseIf Not Entity.UpdateProcess(Settings.ObjectSettings.eUpdateType.Standard, Nothing) Then
                Ret.Success = False
                Ret.LastException = Entity.LastException
                Return False
            End If

            Ret.Success = True
            Return True

        Catch ex As Exception
            Ret.LastException = ex
            Return False
        Finally
            If dm IsNot Nothing Then
                dm.Close()
            End If

            If cdm IsNot Nothing Then
                cdm.Close()
            End If
        End Try
    End Function

    Public Shared Function PerCampaignLaunchAction(Entity As EntityObject, ByRef Ret As ProcessHelper, Action As String, Optional Email As Object = Nothing, Optional Type As Object = Nothing) As Boolean
        Dim ApiKey As String = ""
        Dim listaErrores As New StringBuilder()
        Dim errorMsg = ""
        Dim dm As DataManager = Nothing
        Dim cdm As DataManager = Nothing

        Try
            cdm = New DataManager("ConfConnectionString")
            dm = New DataManager("DataConnectionString")

            ApiKey = MailChimpCustomProcess.GetMailChimpApiKey(cdm)
            If Not FLEXYGO.FlxMailChimp.TestMailChimpApi(ApiKey, errorMsg) Then
                Throw New ArgumentException(errorMsg)
            End If

            Dim mailChimp = New MailChimpManager(ApiKey)

            Dim campaign = mailChimp.Campaigns.GetAsync(Entity("Id")).Result

            If IsBlank(campaign) Then
                Ret.Success = False
                Ret.LastException = New Exception("This campaign does not exist in MailChimp")
                Return False
            End If

            Select Case Action
                Case 1
                    'Enviar campaña
                    mailChimp.Campaigns.SendAsync(campaign.Id).Wait()
                    Return True
                Case 2
                    'Cancelar envío de campaña
                    mailChimp.Campaigns.CancelAsync(campaign.Id).Wait()
                    Return True
                Case 3
                    'Replicar campaña
                    mailChimp.Campaigns.ReplicateCampaignAsync(campaign.Id).Wait()
                    Return True
                Case 4
                    'Programar campaña
                    mailChimp.Campaigns.ScheduleAsync(campaign.Id).Wait()
                    Return True
                Case 5
                    'Desprogramar campaña
                    mailChimp.Campaigns.UnscheduleAsync(campaign.Id).Wait()
                    Return True
                Case 6
                    'Testear campaña
                    Dim campTest = New CampaignTestRequest With {.Emails = {Email}, .EmailType = Type}
                    mailChimp.Campaigns.TestAsync(campaign.Id, campTest).Wait()
                    Return True
                Case Else
                    Ret.Success = False
                    Ret.WarningMessage = "Action selected does not exist"
                    Return False
            End Select

            'Actualizamos el estado de la campaña
            Entity("Status") = campaign.Status
            If Not Entity.UpdateProcess(Settings.ObjectSettings.eUpdateType.Standard, Nothing) Then
                Ret.Success = False
                Ret.LastException = Entity.LastException
                Return False
            End If

            Ret.Success = True
            Return True

        Catch ex As Exception
            Ret.Success = False
            Ret.LastException = ex
            Return False
        End Try

    End Function

    Public Shared Function PerCampaign_Delete(Entity As EntityObject, ByRef Ret As ProcessHelper) As Boolean

        Dim ApiKey As String = ""
        Dim listaErrores As New StringBuilder()
        Dim errorMsg = ""
        Dim dm As DataManager = Nothing
        Dim cdm As DataManager = Nothing

        Try
            cdm = New DataManager("ConfConnectionString")
            dm = New DataManager("DataConnectionString")

            ApiKey = MailChimpCustomProcess.GetMailChimpApiKey(cdm)
            If Not FLEXYGO.FlxMailChimp.TestMailChimpApi(ApiKey, errorMsg) Then
                Throw New ArgumentException(errorMsg)
            End If

            Dim mailChimp = New MailChimpManager(ApiKey)

            mailChimp.Campaigns.DeleteAsync(Entity("Id")).Wait()

            If Not Entity.Delete() Then
                Ret.Success = False
                Ret.LastException = Entity.LastException
                Return False
            End If

            Ret.Success = True
            Return True

        Catch ex As Exception
            Ret.Success = False
            Ret.LastException = ex
            Return False
        Finally
            If dm IsNot Nothing Then
                dm.Close()
            End If

            If cdm IsNot Nothing Then
                cdm.Close()
            End If
        End Try
    End Function

End Class