Pause Funktion bei FollowUp
Moderator: mirko
Re: Pause Funktion bei FollowUp
tja musst Deinen Code prüfen. Kannst auch in der cron_furesponders.inc.php Zeile 314 die SQL-Anweisung anzeigen lassen, vielleicht ist irgendwas zu sehen.
Re: Pause Funktion bei FollowUp
Hmm, ok, aber das ist komisch, weil genau so mache ich es.
Wir haben immer 1 Tages Intervalle beim FollowUp, für alle Mails.
Wann jemand "pausiert" habe ich in meinem System gespeichert, somit sendet mein System per API nur noch den Befehl zur Aktivierung bzw. deaktivierung.
Bevor jedoch über die API aktiviert wird, setze ich bei LastSending das Datum vom vorherigen Tag inkl. Zeitangabe. Also heute wäre der Wert '2013-09-03 10:00:00'. Im Anschluss aktiviere ich das Mitglied per API-Call. Nun müsste doch bei der nächsten regulären Prüfung doch genau das passieren zumindest um 3 Uhr morgens:
NOW() >= LastSending (2013-09-03 10:00:00) + E-MailIntervall (1 Tag) = FALSE!
Da es ja noch 3 Uhr morgens ist und der Vergleich Intervall (1 Tag) + Datum (=2013-09-04 10:00:00) ergeben müsste. Solange bis das Datum+Uhrzeit erreicht wurde.
Das komische, setze ich nachträglich, also nachdem die Mail verschickt wurde, ein neues Datum in LastSending, wird dieses auch für den zukünftigen Versand genommen.
Wir haben immer 1 Tages Intervalle beim FollowUp, für alle Mails.
Wann jemand "pausiert" habe ich in meinem System gespeichert, somit sendet mein System per API nur noch den Befehl zur Aktivierung bzw. deaktivierung.
Bevor jedoch über die API aktiviert wird, setze ich bei LastSending das Datum vom vorherigen Tag inkl. Zeitangabe. Also heute wäre der Wert '2013-09-03 10:00:00'. Im Anschluss aktiviere ich das Mitglied per API-Call. Nun müsste doch bei der nächsten regulären Prüfung doch genau das passieren zumindest um 3 Uhr morgens:
NOW() >= LastSending (2013-09-03 10:00:00) + E-MailIntervall (1 Tag) = FALSE!
Da es ja noch 3 Uhr morgens ist und der Vergleich Intervall (1 Tag) + Datum (=2013-09-04 10:00:00) ergeben müsste. Solange bis das Datum+Uhrzeit erreicht wurde.
Das komische, setze ich nachträglich, also nachdem die Mail verschickt wurde, ein neues Datum in LastSending, wird dieses auch für den zukünftigen Versand genommen.
Re: Pause Funktion bei FollowUp
LastEMailSent hat damit nichts zu tun, das ist nur ein Statistik-Feld, weil alle Statistik sehen wollen.
Es wird LastSending in der ml_fu_ref Tabelle geprüft NOW() >= LastSending + Intervall der E-Mail, ist das WAHR wird die E-Mail versendet.
Es wird LastSending in der ml_fu_ref Tabelle geprüft NOW() >= LastSending + Intervall der E-Mail, ist das WAHR wird die E-Mail versendet.
Pause Funktion bei FollowUp
Hallo Mirko,
wir bieten unseren Kunden die Möglichkeit sich auszuzusuchen an welchen Tagen Sie E-Mails erhalten wollen. Manche wollen z.B. am Wochenende keine haben, manche schon.
Der Prozess ist somit automatisiert durchzuführen. Im generellen Sinne ist es eine "Pause"-Funktion, die selbstständig von einem Cronjob geprüft wird und nichts mit dem SWM zu tun hat. Zudem bieten wir unseren Kunden an, die Mails zu einem bestimmten Zeitpunkt zu erhalten. Ist jedoch für jeden Kunden inviduell. Manche wollen Ihre Mail in der früh, manche am Abend. Daher habe ich mich entschlossen die Zeit eines jeden Users ständig (täglich) zu korrigieren, da es ja nach jedem Versand zu einem kleinen "Schwund" kommt.
Nun ergibt sich jedoch ein Problem. bzg. der Pause Funktion.
Mal angenommen jemand möchte am Sa/So keine Mail erhalten. Automatisiert habe ich bereits, dass jeder Kunde geprüft wird und die, die für den Tag nicht in Frage kommen, werden ganz normal über die API deaktiviert. Nun vergehen 2 Tage und es ist Montag morgen 00:00:01. Der Cronjob läuft und aktiviert den Benutzer wieder. Er wird direkt zu dieser Zeit angemailt, also 00:00:01. Das war mir auch klar warum, weil der FollowUp die Tage prüft wie lange zum vorhergehenden Mail vergangen sein muss, damit er startet. Da ja Sa/So ausgesetzt wurde, liegen mehr als 48 Stunden dazwischen. Nun habe ich jedoch eine weitere Korrektur durchgeführt. Bevor der User um 00:00:01 aktiviert wird, wird die Zeit des letzten Versandes swm_admin_TABELLE_ml_fu_ref in der Spalte "LastSending" korrigiert und eine "Fakezeit" eingetragen, als wäre das Mailing am Sonntag zur gewünschten Zeit verschickt worden. Also z.B. "2013-09-01 00:09:00" Am Montag morgen um 0 Uhr wird der cronjob aktiv, aktiviert den Benutzer (nach Zeitkorrektur) aber trotzdem wird die Mail verschickt. Und jetzt ist der Zeitpunkt wo ich nicht mehr weiter weiß.
Wird irgendwo noch ein weiterer Zeitwert hinterlegt den der FollowUp tatsächlich als Grundlage nimmt? Zwischenzeitlich habe ich vermutet, dass sich alle Ereignisse in so kurzer Zeit abspielen, dass hier vielleicht das Problem liegt. Cronjob läuft um 0 Uhr, gleichzeitig prüft aber auch der FollowUp jede Minute auf neue Mails. Daher habe ich den Superwebmailer von 0-3 Uhr morgens lahm gelegt (also kein cronjob wird ausgeführt). Somit hat mein System genügend Zeit in aller Ruhe alles abzuarbeiten, auch wenn es nur wenige Sekunden dauert.
Diese Sache habe ich heute getestet, habe in meinem System das die Fakezeit generiert auch Logs schreiben lassen, welche "Fakezeit" wann wo hingeschrieben wurde. Und das ist soweit alles stimmtig. Nachdem der Cronjob um 3 Uhr wieder gestartet ist, hat er direkt um 3:01 die Mail an mich rausgeschickt obwohl ich 10 Uhr eingetragen hatte. Irgendwo hängt es noch.
Könntest du mir evtl. einen Tipp geben? Ist vielleicht der call api_Recipients.api_activateOrdeactivateRecipient dafür verantwortlich?
Wäre echt klasse, wenn du mir dazu Hinweise geben könntest, ich spiel mich an dem Problem jetzt sicher schon eine Woche rum und komm nicht weiter.
Edit: Ich hab grad gesehen, dass es in der Tabelle swm_TABELLE_members auch noch eine Spalte LastEMailSent gibt. Trage dort mal auch das Fakedatum ein, vielleicht klappt das ja
Vielen Dank schonmal
wir bieten unseren Kunden die Möglichkeit sich auszuzusuchen an welchen Tagen Sie E-Mails erhalten wollen. Manche wollen z.B. am Wochenende keine haben, manche schon.
Der Prozess ist somit automatisiert durchzuführen. Im generellen Sinne ist es eine "Pause"-Funktion, die selbstständig von einem Cronjob geprüft wird und nichts mit dem SWM zu tun hat. Zudem bieten wir unseren Kunden an, die Mails zu einem bestimmten Zeitpunkt zu erhalten. Ist jedoch für jeden Kunden inviduell. Manche wollen Ihre Mail in der früh, manche am Abend. Daher habe ich mich entschlossen die Zeit eines jeden Users ständig (täglich) zu korrigieren, da es ja nach jedem Versand zu einem kleinen "Schwund" kommt.
Nun ergibt sich jedoch ein Problem. bzg. der Pause Funktion.
Mal angenommen jemand möchte am Sa/So keine Mail erhalten. Automatisiert habe ich bereits, dass jeder Kunde geprüft wird und die, die für den Tag nicht in Frage kommen, werden ganz normal über die API deaktiviert. Nun vergehen 2 Tage und es ist Montag morgen 00:00:01. Der Cronjob läuft und aktiviert den Benutzer wieder. Er wird direkt zu dieser Zeit angemailt, also 00:00:01. Das war mir auch klar warum, weil der FollowUp die Tage prüft wie lange zum vorhergehenden Mail vergangen sein muss, damit er startet. Da ja Sa/So ausgesetzt wurde, liegen mehr als 48 Stunden dazwischen. Nun habe ich jedoch eine weitere Korrektur durchgeführt. Bevor der User um 00:00:01 aktiviert wird, wird die Zeit des letzten Versandes swm_admin_TABELLE_ml_fu_ref in der Spalte "LastSending" korrigiert und eine "Fakezeit" eingetragen, als wäre das Mailing am Sonntag zur gewünschten Zeit verschickt worden. Also z.B. "2013-09-01 00:09:00" Am Montag morgen um 0 Uhr wird der cronjob aktiv, aktiviert den Benutzer (nach Zeitkorrektur) aber trotzdem wird die Mail verschickt. Und jetzt ist der Zeitpunkt wo ich nicht mehr weiter weiß.
Wird irgendwo noch ein weiterer Zeitwert hinterlegt den der FollowUp tatsächlich als Grundlage nimmt? Zwischenzeitlich habe ich vermutet, dass sich alle Ereignisse in so kurzer Zeit abspielen, dass hier vielleicht das Problem liegt. Cronjob läuft um 0 Uhr, gleichzeitig prüft aber auch der FollowUp jede Minute auf neue Mails. Daher habe ich den Superwebmailer von 0-3 Uhr morgens lahm gelegt (also kein cronjob wird ausgeführt). Somit hat mein System genügend Zeit in aller Ruhe alles abzuarbeiten, auch wenn es nur wenige Sekunden dauert.
Diese Sache habe ich heute getestet, habe in meinem System das die Fakezeit generiert auch Logs schreiben lassen, welche "Fakezeit" wann wo hingeschrieben wurde. Und das ist soweit alles stimmtig. Nachdem der Cronjob um 3 Uhr wieder gestartet ist, hat er direkt um 3:01 die Mail an mich rausgeschickt obwohl ich 10 Uhr eingetragen hatte. Irgendwo hängt es noch.
Könntest du mir evtl. einen Tipp geben? Ist vielleicht der call api_Recipients.api_activateOrdeactivateRecipient dafür verantwortlich?
Wäre echt klasse, wenn du mir dazu Hinweise geben könntest, ich spiel mich an dem Problem jetzt sicher schon eine Woche rum und komm nicht weiter.
Edit: Ich hab grad gesehen, dass es in der Tabelle swm_TABELLE_members auch noch eine Spalte LastEMailSent gibt. Trage dort mal auch das Fakedatum ein, vielleicht klappt das ja

Vielen Dank schonmal