0 votes
in SoSci Survey (dt.) by s068944 (400 points)

Guten Tag,

ich führe eine Tagebuchstudie durch, bei der die Teilnehmer 6 Befragungen pro Tag (T1-T6) zu (Versandzeitpunkte von T2-T6 in Abhängigkeit vom Ausfüllen der ersten Befragung) sehr pünktlich ausfüllen müssen. Wenn die Teilnehmer 5 Minuten nach 'mailsent' der Fragebögen T2-T6 den Link noch nicht geöffnet oder den Fragebogen zu weniger als 50% ausgefüllt haben, wollen wir die Teilnehmer anrufen und an die Bearbeitung des Fragebogens erinnern. Das ist nicht nur für die Teilnehmer ziemlich aufwändig, sondern auch für die Studienleitung aufwändig zu überwachen. Daher würde ich gern eine automatische Benachrichtigung installieren, sodass wir (die Studienleitung) automatisch eine Mail erhalten, wenn die o.g. Bedingungen nicht erfüllt sind.

T2-T6 werden per mailschedule() verschickt. Nun habe ich überlegt, eine extra Serienmail und einen extra Fragebogen einzurichten, der auch mit mailSchedule angewiesen und ggf. mit mailRevoke zurückgehalten wird. Ich habe allerdings meine Zweifel, dass nur die Studienleitung diese Mail erhält, sondern auch die Studientielnehmer. Oder kann man da bei mailSchedule auch eine E-Mail Adresse eingeben?

Hätten Sie noch eine Idee zur Lösung des Problems?

Ich bedanke mich im Voraus!

1 Answer

0 votes
by SoSci Survey (328k points)

Dafür habe ich spontan keine Lösung.

Der Haken dabei ist ja, wie Sie schon bemerken, dass die Mails an einen anderen Adressaten gehen müssen als an den aktuellen Interviewteilnehmer. Das hat mehrere Implikationen:

(a) Mit mailSchedule() würde die Serienmail überhaupt nur einmal verschickt, denn jede Serienmail wird an jeden Adressaten nur max. einmal verschickt. Stattdessen könnte man aber mailResume() verwenden.

(b) Die mittels mailResume() vorbereiteten Versendungen können nur im laufenden Interview mittels mailRevoke() storniert werden. Aber um Zeitpunkt wenn T2 ausgefüllt wird, läuft ja ein anderes Interview.

SoSci Survey fehlt beim Ausfüllen von T2 schlicht und ergreifend die Möglichkeit, die richtige Serienmail zu finden.

Ich könnte mir eine neue Funktion (z.B. mailNotification()) vorstellen, die wie mailSchedule() funktioniert, aber die Mail (nur) an die Projektleitung verschickt. In diesem Fall könnte man den Versandeintrag dennoch an den Teilnehmer binden und so gezielt mittels mailRevoke() stornieren. Allerdings müssten Sie ein wenig Zeit (1-3 Wochen) mitbringen, wenn Sie solch eine Funktion gerne hätten?

Die Alternative wäre, dass man einmal pro Tag die Adressliste abruft und prüft, wer seinen Link nicht angeklickt hat. Aber nachdem Sie den Versandzeitpunkt ja dynamisch ermitteln, wäre das eine wenig erfreulich Tätigkeit...

by s068944 (400 points)
Das wäre äußerst hilfreich, wenn Sie das einrichten könnten!! So viel Zeit habe ich auf jeden Fall noch.

Ich erkläre noch einmal ganz genau, worum es mir geht:
T1 wird morgens um 5 Uhr versandt und ist bis 12 Uhr mittags "gültig". Nach dem Aufwachen sollen die Teilnehmer unmittelbar T1 ausfüllen. In T1 ist der Versand von T2-T6 mittels mailSchedule() wie folgt festgelegt:
mailSchedule(false, 2, 1680); //28 Min. Verzögerung
mailSchedule(false, 3, 2580); //43 Min. Verzögerung
mailSchedule(false, 4, 8880); //148 Min. Verzögerung
mailSchedule(false, 5, 28680); //478 Min. Verzögerung
mailSchedule(false, 6, 48480); //808 Min. Verzögerung

Wenn man den mailSchedule()-Zeitpunkt als T0 definiert (da habe ich einen Zeitstempel als interne Variabel eingebaut 'ZS01_01'), möchte ich ab diesem Zeitpunkt für T2-T5 in folgenden Zeitintervallen vom System automatisch informiert werden (per E-Mail), je wenn Fragebogenseite 6 noch nicht erreicht ist:
T2: 33 Minuten nach Zeitstempel, wenn Fragebogenseite 6 noch nicht erreicht ist
T3: 48 Minuten nach Zeitstempel,wenn Fragebogenseite 6 noch nicht erreicht ist
T4: 153 Minuten nach Zeitstempel, wenn Fragebogenseite 6 noch nicht erreicht ist
T5: 483 Minuten nach Zeitstempel,wenn Fragebogenseite 6 noch nicht erreicht ist

Ist das so verständlich?
by SoSci Survey (328k points)
Ja - zumindest glaube ich, ist es das, wie ich das Anliegen bisher verstanden hatte. Die Gültigkeit der einzelnen Serienmails wird per PHP-Code Filter beschränkt, oder?
by s068944 (400 points)
ja genau, zum Beispiel so:
function timeCheck() {
    $info = panelData(); // Gültigkeit des Fragebogens auf 15 Minuten beschränken
if ($info) {
  $sent = $info['mailsent'];
  $limit = strtotime('+ 900 seconds', $sent);
  if (time() > $limit) {
    text('too late');
    buttonHide();
    pageStop();
  }
}
}


oder so:
$info = panelData(); // Gültigkeit des Fragebogens bis 12 Uhr beschränken
if ($info) {
  $sent = $info['mailsent'];
  $limit = strtotime('today 12:00:00', $sent);
  if (time() > $limit) {
    text('too late');
    buttonHide();
    pageStop();
  }
}

oder so:
$limit = value('ZS02_01') + 1680;
  if (time() > $limit) {
    text('too late');
    buttonHide();
    pageStop();
}
by SoSci Survey (328k points)
Ich evaluiere gerade unterschiedliche Möglichkeiten, wie das mit der Benachrichtigung am besten funktionieren könnte.

Eine Problematik, die dabei auftaucht und zu der ich gerne Ihre Meinung hören würde: Anonymität. In der Benachrichtigung müssten Sie ja sehen, welcher Adresseintrag (=E-Mail-Adresse) nicht teilgenommen hat. Zugleich ist dann aber aus dem Zeitpunkt bei fester Verzögerung genau ersichtlich, zu welchem Datensatz diese E-Mail-Adresse gehört.

Nun könnte die Infomail natürlich nur die Personenkennung (SERIAL) mitteilen, und dann müssten Sie die Teilnehmer-Adressen im Datenschutz-Modus "personenbezogen" importieren, um die Zuordnung vorzunehmen. Aber dann erheben Sie im Datensatz selbst personenbezogene Daten. Das ist nur mit AVV-Vertrag möglich, und diesen können wir (wenn es um mehr als Adressdaten geht) nur für den kostenpflichtigen Pro-Server vereinbaren.

Zumal ich nicht weiß, ob Sie wirklich personenbezogene Daten sammeln möchten, denn das ist ja ach DSGVO gleich mit einer Reihe von Verpflichtungen und Dokumentation verbunden...
by s068944 (400 points)
Da sprechen Sie einen wichtigen Punkt an, um den ich mir auch schon Gedanken gemacht habe und mit dem ich auch ein anderes Problem habe. Prinzipiell würde mir "Pseudonym" genügen (da wird ja auch die Serial zurückgegeben), denn wir lassen von den Teilnehmern bei jeder Befragung ein Pseudonym generieren (jedes Mal nach den gleichen Vorgaben), sodass wir die Daten später zuordnen können. Mein Problem bei der Sache ist, dass für mich die Rückgabe der Variable Mailsent im Datensatz von enormer Wichtigkeit ist. Diese wird nach jetzigem Stand allerdings nur bei "Personenbezogen" zurückgegeben. Gibt es noch eine andere Möglichkeit, Daten für Mailsent zu erhalten, auch wenn nur "Pseudonym" ausgewählt ist? Dann würde mir das genügen. Beantwortet das Ihre Frage?
by SoSci Survey (328k points)
Die Funktion panelData() liefert MAILSENT auch für pseudonyme Adressdaten, vgl. https://www.soscisurvey.de/help/doku.php/de:create:functions:paneldata - die Ausgabe müssen Sie dann nur mittels put() in einer internen Variable speichern.

Aber meine Frage beantwortet es nicht wirklich: Wenn Sie eine Benachrichtigung über die Nicht-Teilnahme erhalten, dann können Sie anhand des Zeitpunkts ganz genau erkennen, zu welchem Datensatz die Mailadresse gehört... Sie haben dann implizit also personenbezogene Daten. Und das wollten Sie ja eigentlich vermeiden. Aber wenn Sie zugleich MAILSENT und STARTED im Datensatz haben, dann sehe ich das als unvermeidlich.

Die m.E. "saubere" Lösung wäre, dass die Infomail ("hat nicht teilgenommen") nur die Personenkennung (SERIAL) enthält - und Sie die Adressdaten als "personenbezogen" importieren, sodass Sie E-Mail-Adressen und Personenkennungen zuordnen können. Aber dann kommen Sie den DSGVO-Auflagen nicht aus...
by s068944 (400 points)
Zum ersten Punkt:
Wie kann ich die Informationen über mailSent aus Paneldata() in die interne Variable übertragen? Ich frage panedata in meinem Fragebogen so ab:
$info = panelData(); // Gültigkeit des Fragebogens bis 12 Uhr beschränken
if ($info) {
  $sent = $info['mailsent'];
usw.
wenn ich Folgendes eingebe, klappt das nicht:
put('ZS03_01', $info('mailsent'('d.m.Y H:i:s')));

Zum zweiten Punkt:
wäre nicht eine saubere Lösung, wenn der Inhalt des Pseudonyms (das entspricht drei Items in unserem Datensatz), das die Probanden selbst in der Befragung (z.B. in T1) generieren, in der Benachrichtigungsmail an uns gemeldet wird?
by SoSci Survey (328k points)
Versuchen Sie es mit

$info = panelData();
if ($info) {
  put('ZS03_01', $info['mailsent']);
}

Oder falls Sie ein anderes Format für die Zeit bevorzugen

  put('ZS03_01', date('Y-m-d H:i:s', $info['mailsent']));

> wäre nicht eine saubere Lösung, wenn der Inhalt des Pseudonyms (das entspricht drei Items in unserem Datensatz), das die Probanden selbst in der Befragung (z.B. in T1) generieren, in der Benachrichtigungsmail an uns gemeldet wird?

Naja, wenn Sie ohnehin eine Zuordnungliste Pseudoynm-Person haben, dann arbeite Sie ja ohnehin schon mit personenbezonen Daten. Dann macht es wohl auch keinen Unterschied mehr, wenn Sie den Bezug Datensatz-E-Mail-Adresse aus dem Zeitpunkt der E-Mail ableiten können...

Ich notiere mir also, dass in der Mail (a) die SERIAL (Personenkennung) und (b) nach Bedarf noch benutzerdefinierte Felder (z.B. für Ihr Pseudonym) verschickt werden sollen.
by SoSci Survey (328k points)
edited by SoSci Survey
Nein, keine neue Funktion - die eleganteste Lösung bestand darin, für mailSchedule() eine neue Option zu erlauben. Und zwar kann man im vierten Parameter ("Einstellungen") nun eine andere E-Mail-Adresse als Empfänger festlegen.

mailSchedule(false, 2, 3600, array(
  'to.email' => 'projektleiter@studie.com'
));

Diese Funktion ist ab sofort auf www.soscisurvey.de verfügbar und wird mit Verzögerung auch auf s2survey.net installiert.

Bitte vorab gründlich testen, neue Funktionen halten mitunter kreative Überraschungen bereit...
by s068944 (400 points)
edited by s068944
Wunderbar - ganz herzlichen Dank. Ich würde gern, wie bei mailSend, Informationen aus dem Datensatz (SERIAL) in der Mail an den Projektleiter zurückgeben. Geht das und wenn ja, wie?

Ich habe die Funktion gerade getestet und es hat leider nicht funktioniert. Undzwar wurden die für den Projektleiter bestimmten Mails einfach an die Test-Teilnehmerin geschickt, genauso wie alle anderen Mails. Irgend eine Idee, woran es liegen könnte? Muss ich vielleicht etwas bei den Serienmaileinstellungen beachten (vielleicht nicht als Erinnerung oder Fortsetzung für eine Mail angeben)?
by SoSci Survey (328k points)
Könnten Sie bitte mitteilen (a) auf welchem Server Sie arbeiten (www.soscisurvey.de?) und (b) wie Ihr PHP-Code genau aussieht?

Die Personenkennung (SERIAL) des Teilnehmers müssten Sie mit dem Platzhalter %serial% oder %caseSerial% (da bin ich spontan nicht sicher) in die E-Mail schreiben können.
by s068944 (400 points)
(a) www.soscisurvey.de
(b) hier mein Test-Code:
mailSchedule(false, -8, 60);
mailSchedule(false, 4, 120, array(
  'to.mail' => 'mused.studie@med.uni-heidelberg.de'));
mailSchedule(false, -9, 180);
mailSchedule(false, 5, 240, array(
  'to.mail' => 'mused.studie@med.uni-heidelberg.de'));
mailSchedule(false, -10, 300);
mailSchedule(false, 6, 360, array(
  'to.mail' => 'mused.studie@med.uni-heidelberg.de'));
mailSchedule(false, -11, 420);
mailSchedule(false, 7, 480, array(
  'to.mail' => 'mused.studie@med.uni-heidelberg.de'));
mailSchedule(false, 1, 540);

Ich habe dann für jede Befragung (für die Teilnehmer) und für jede Nachricht mit mailRevoke() an die Projektleitung einen extra Fragebogen und eine extra Serienmail angelegt.

Es kam schon öfter die Frage auf, warum ich negative IDs habe (weiß ich nicht), funktioniert sonst aber alles ganz ok so.

Zur SERIAL: also bei der Funktion mailSend z.B. muss ich die Info, die ich am Ende in der Mail stehen haben möchte ja im Fragebogen "vorbereiten", nämlich so: mailSend('mused.studie@med.uni-heidelberg.de', 9, 0, NULL, caseSerial(), value('ZS01_01')); und dann kann ich in meine Mail schreiben %custom1% usw.
Das müsste ich doch dann bei mailSchedule auch irgendwie machen, oder? Sonst weiß doch das System nicht, was ich will, oder?
by SoSci Survey (328k points)
Arg ... ich hatte in meiner Antwort oben einen Fehler. Es muss 'to.email' (mit "e") heißen, inzwischen auch in der Anleitung dokumentiert: https://www.soscisurvey.de/help/doku.php/de:create:functions:mailschedule

Und ich nehme aus Ihrer Rückfrage das Feedback mit, dass eine Fehlermeldung bei ungültigen Optionen hilfreich wäre.
by s068944 (400 points)
Ich teste gerade und immerhin funktioniert es jetzt schon, dass die Mail an den Projektleiter gesendet werden - vielen Dank dafür! Allerdings wird die Mail auch dann versandt, wenn die Befragung bis zum Ende durchgeführt wurde. Ich möchte aber eigentlich nur dann benachrichtigt werden, wenn die Befragung NICHT oder nicht vollständig ausgeführt wurde.

Wenn ich noch eine Detailfrage hierzu stellen darf: ich möchte gern, dass die Nachricht an den Projektleiter nur dann versendet wird, wenn eine bestimmte Fragebogenseite noch nicht erreicht ist bzw. wenn ein bestimmtes Item noch nicht bearbeitet wurde. Ginge das auch?
by SoSci Survey (328k points)
> Allerdings wird die Mail auch dann versandt, wenn die Befragung bis zum Ende durchgeführt wurde. Ich möchte aber eigentlich nur dann benachrichtigt werden, wenn die Befragung NICHT oder nicht vollständig ausgeführt wurde.

Dann nutzen Sie bitte mailRevoke() in dem Fragebogen, der aufgerufen wird, wenn der Teilnehmer den Link verwendet.

Alternativ können Sie die Serienmail auch als Folgemail anlegen (z.B. Nr. 4 als Folgemail für Nr. -8) und in mailSchedule() einstellen, dass nur säumige Teilnehmer die Mail bekommen sollen.

>  ich möchte gern, dass die Nachricht an den Projektleiter nur dann versendet wird, wenn eine bestimmte Fragebogenseite noch nicht erreicht ist

Dann ist mailRevoke() das Mittel der Wahl.

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...