0 votes
in SoSci Survey (dt.) by s191137 (330 points)

Hallo,

im Rahmen unserer mehrwelligen Befragung werden wir mit der Serienmail-Funktion (SMS) arbeiten.
Nun würden wir gerne Folgendes umsetzen:
"Sobald Sie an zwei aufeinander folgenden Kurstagen nicht teilgenommen haben, senden wir Ihnen auch keine SMS mehr zu."
Ist dies mit SoSci Survey möglich? Wie würde die Umsetzung aussehen?
Vielen Dank im Voraus für Ihre Hilfe!

Viele Grüße

1 Answer

0 votes
by SoSci Survey (303k points)

Ist dies mit SoSci Survey möglich? Wie würde die Umsetzung aussehen?

Aktionen können nur dann ausgeführt werden, wenn ein Fragebogen aufgerufen wird, nicht aber wenn das nicht der Fall ist.

Die Umsetzung würde also so aussehen, dass man in jedem Fragebogen mittels mailSchedule() die Serienmails für die nächsten 2 Tage plant.

Wenn jemand den Fragebogen täglich aufruft, ist das kein Problem, denn jede Serienmail wird an jeden Adressdaten nur einmal geschickt. Ob das dann das mailSchedule() aus dem ersten oder aus dem zweiten Fragebogen war, ist egal.

by s191137 (330 points)
Hallo,

vielen Dank für die Auskunft!
Bisher habe ich folgenden Code erstellt, welcher auf der ersten Seite des Fragebogens A2 eingefügt ist:


$tage = (int)value('RG01', 'label');
$uhrzeit = value('IT01', 'label');

// Einladungsmails

// T1
for ($i=0; $i<$tage; $i++) {
  mailSchedule(false, $i+3, strtotime('+'.($i+1).' days '.$uhrzeit));
}

// T2
mailSchedule(false, 17, strtotime('+'.($tage+1).' days '.$uhrzeit));
mailSchedule(false, 18, strtotime('+'.($tage+2).' days '.$uhrzeit));
mailSchedule(false, 19, strtotime('+'.($tage+3).' days '.$uhrzeit));
mailSchedule(false, 20, strtotime('+'.($tage+4).' days '.$uhrzeit));
mailSchedule(false, 21, strtotime('+'.($tage+5).' days '.$uhrzeit));
mailSchedule(false, 22, strtotime('+'.($tage+6).' days '.$uhrzeit));
mailSchedule(false, 23, strtotime('+'.($tage+7).' days '.$uhrzeit));
mailSchedule(false, 24, strtotime('+'.($tage+8).' days '.$uhrzeit));
mailSchedule(false, 25, strtotime('+'.($tage+9).' days '.$uhrzeit));
mailSchedule(false, 26, strtotime('+'.($tage+10).' days '.$uhrzeit));

 
// T3

for ($i= 0; $i<14; $i++) {
  mailSchedule(false, $i+27, strtotime('+'.($tage + $i + 11).' days '.$uhrzeit));
}

// T4
mailSchedule(false, 41, strtotime('+'.($tage+25).' days '.$uhrzeit));


// Erinnerungsmails (z.B. nach einer und zwei Stunden)

// T1
for ($i=0; $i<$tage; $i++) {
  mailSchedule(false, $i+42, strtotime('+'.($i+1).' days + 1 hours '.$uhrzeit), ['status' => 'no-response']);
}


for ($i= 0; $i<$tage; $i++) {
  mailSchedule(false, $i+56, strtotime('+'.($i+1).' days + 2 hours '.$uhrzeit), ['status' => 'no-response']);
}

// T2
mailSchedule(false, 70, strtotime('+'.($tage+1).' days + 1 hours '.$uhrzeit), ['status' => 'no-response']);
mailSchedule(false, 71, strtotime('+'.($tage+2).' days + 1 hours '.$uhrzeit), ['status' => 'no-response']);
mailSchedule(false, 72, strtotime('+'.($tage+3).' days + 1 hours '.$uhrzeit), ['status' => 'no-response']);
mailSchedule(false, 73, strtotime('+'.($tage+4).' days + 1 hours '.$uhrzeit), ['status' => 'no-response']);
mailSchedule(false, 74, strtotime('+'.($tage+5).' days + 1 hours '.$uhrzeit), ['status' => 'no-response']);
mailSchedule(false, 75, strtotime('+'.($tage+6).' days + 1 hours '.$uhrzeit), ['status' => 'no-response']);
mailSchedule(false, 76, strtotime('+'.($tage+7).' days + 1 hours '.$uhrzeit), ['status' => 'no-response']);
mailSchedule(false, 77, strtotime('+'.($tage+8).' days + 1 hours '.$uhrzeit), ['status' => 'no-response']);
mailSchedule(false, 78, strtotime('+'.($tage+9).' days + 1 hours '.$uhrzeit), ['status' => 'no-response']);
mailSchedule(false, 79, strtotime('+'.($tage+10).' days + 1 hours '.$uhrzeit), ['status' => 'no-response']);

mailSchedule(false, 80, strtotime('+'.($tage+1).' days + 2 hours '.$uhrzeit), ['status' => 'no-response']);
mailSchedule(false, 81, strtotime('+'.($tage+2).' days + 2 hours '.$uhrzeit), ['status' => 'no-response']);
mailSchedule(false, 82, strtotime('+'.($tage+3).' days + 2 hours '.$uhrzeit), ['status' => 'no-response']);
mailSchedule(false, 83, strtotime('+'.($tage+4).' days + 2 hours '.$uhrzeit), ['status' => 'no-response']);
mailSchedule(false, 84, strtotime('+'.($tage+5).' days + 2 hours '.$uhrzeit), ['status' => 'no-response']);
mailSchedule(false, 85, strtotime('+'.($tage+6).' days + 2 hours '.$uhrzeit), ['status' => 'no-response']);
mailSchedule(false, 86, strtotime('+'.($tage+7).' days + 2 hours '.$uhrzeit), ['status' => 'no-response']);
mailSchedule(false, 87, strtotime('+'.($tage+8).' days + 2 hours '.$uhrzeit), ['status' => 'no-response']);
mailSchedule(false, 88, strtotime('+'.($tage+9).' days + 2 hours '.$uhrzeit), ['status' => 'no-response']);
mailSchedule(false, 89, strtotime('+'.($tage+10).' days + 2 hours '.$uhrzeit), ['status' => 'no-response']);

// T3
for ($i= 0; $i<14; $i++) {
  mailSchedule(false, $i+90, strtotime('+'.($tage + $i + 11).' days + 1 hours '.$uhrzeit), ['status' => 'no-response']);
}

for ($i= 0; $i<14; $i++) {
  mailSchedule(false, $i+104, strtotime('+'.($tage + $i + 11).' days + 2 hours '.$uhrzeit), ['status' => 'no-response']);
}

// T4
mailSchedule(false, 118, strtotime('+'.($tage+25).' days + 1 hours '.$uhrzeit), ['status' => 'no-response']);

mailSchedule(false, 119, strtotime('+'.($tage+25).' days + 2 hours '.$uhrzeit), ['status' => 'no-response']);


Könnten Sie einmal beispielshaft illustrieren, wie die Umsetzung aussehen könnte und an welcher Stelle der PHP-Code eingefügt werden müsste?
Vielen Dank im Voraus für Ihre Hilfe!

Viele Grüße
by SoSci Survey (303k points)
In den ersten Fragebogen kommt nur der PHP-Code für T1 und T2.

In den zweiten Fragebogen kommt dann der PHP-Code für T2 und T3.

In den dritten Fragebogen kommt der PHP-Code für T3 und T4.

Falls alle Serienmails denselben Fragebogen aufrufen, müssen Sie innerhalb des Fragebogens ermitteln, in welcher Erhebungswelle der Befragte gerade ist und entsprechend den richtigen PHP-Code laufen lassen.

Und damit Sie $tage und $uhrzeit auch in den späteren Fragebögen kennen, sollten Sie diese Werte mittels dbSet() in der Datenbank für Inhalte ablegen - als Schlüssel bietet sich die SERIAL der Befragten an.
by s191137 (330 points)
Vielen Dank für die Erläuterungen!

Für den Zeitpunkt T1 habe ich folgenden Code:
for ($i=0; $i<$tage; $i++) {
  mailSchedule(false, $i+3, strtotime('+'.($i+1).' days '.$uhrzeit));
}
Es wird mehrmals der derselbe Fragebogen verschickt (der Fragebogen wiederholt sich also einfach), wobei die Dauer der Versendung in ihrer Länge variiert (7-14 Tage). Könnten Sie einmal beispielhaft illustrieren, wie ich mein Vorhaben umsetzen könnte?
Vielen Dank im Voraus!
by SoSci Survey (303k points)
> Es wird mehrmals der derselbe Fragebogen verschickt

In Ordnung. Für diesen Anwendungsfall liefert panelData() nun in 'mailing' die Nummer der Serienmail, auf deren Einladung der Befragte reagiert hat.

So können Sie mit einer IF-Konstruktion einfach die richtigen mailSchedule()-Befehle auslösen.

$info = panelData();

if ($info['mailing'] == 3) {
  // Versand T1
}
if (in_array($info['mailing'], [17,18,19,20])) {
  // Versand T2
}
if (in_array($info['mailing'], [21,22,23,24])) {
  // Versand T3
}
// u.s.w.

Sie müssen nur einen Plan erstellen, bei welchen Serienmails welche weiteren Serienmails verschickt werden sollen. Und wie schon geschrieben: Ganz trivial wird es nicht. Wenn Sie so besondere Wünsche haben, dann werden Sie ein wenig ausprobieren und sich "reinfuchsen" müssen.

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

...