Lieber Herr Leiner, liebes SoSci Survey-Team
wir benutzen SoSci Survey gerade für eine ESM-Studie (5 Befragungen täglich über 30 Tage mit der Möglichkeit, die Befragung um 2 Tage zu verlängern).
Der SMS-Versand wird in einem Eingangsfragebogen über Serienmails mit der mailSchedule()-Funktion gehandhabt. Der php-Code für den Versand ist am Ende dieses Beitrags eingefügt. Die Kontaktdaten werden in einem früheren Fragebogen über die Opt-In für E-Mail-Verteiler-Frage eingelesen. Unser Problem ist nun, dass die Seriennummern der Probanden nicht übernommen werden für die täglichen Befragungen, wenn die Einladungen zu den randomisierten Zeiten (per mailSchedule() festgelegt) verschickt werden. Somit können wir keine Zuordnung machen zwischen Person und Fragebogen. Wenn man jedoch eine geplante Serienmail sofort manuell verschickt (also früher als von der mailSchedule() festgelegten Zeit), wird die Seriennummer übernommen. Wir können uns dies nicht erklären und wären sehr froh um Ihre Hilfe.
Anbei unser verwendeter php-Code für den SMS-Versand:
if (getRoute() != 'repeat') {
// Der Code, der bei erneuter Anzeige der Seite nicht mehr laufen soll
$dateString = value('AS25_01');
list($year, $month, $day) = explode('-', $dateString);
//$timeString = value('AS25_02');
//list($hour, $minute) = explode(':', $timeString);
$hour = value('AS30');
$firstMailID = 5;
$period = 10800;
$interval = 3600;
$expire = 3600;
$days = 30;
$mailsPerDay = 5;
$secondsPerDay = 60*60*24;
$firstDate = mktime($hour, 0, 0, $month, $day, $year);
//odd positions are study days (6,4,5); even positions are pause days (7,3)
//total number of study days = sum of numbers in odd positions
//wenn ohne Pause: Nur die Anzahl Studientage ins Array schreiben
//sum of odd numbers muss gleich sein wie $days
$sessions = array(30);
//Zusatztage
$numberOfFinishedSurveys = 0;
put('IV06_01', $numberOfFinishedSurveys);
$totalSurveys = $days * $mailsPerDay;
put('IV07_01', $totalSurveys);
$extraAnswered = 1;
put('IV08_01', $extraAnswered);
$extraDate = $firstDate + (array_sum($sessions) - 1) * $secondsPerDay;
//jetzt kommt es am letzten tag; wenn zweitletzter tag gewünscht, dann - 2, wenn hälfte, dann /2
put('IV09_01', $extraDate);
$firstDayOfExtra = $firstDate + array_sum($sessions) * $secondsPerDay;
put('IV10_01', $firstDayOfExtra);
$currentMailID = $firstMailID;
$i = 0;
$currentDate = $firstDate;
while($i < count($sessions)){
$numberOfDays = $sessions[$i];
for ($day = 0; $day < $numberOfDays; $day++) {
for ($mail = 0; $mail < $mailsPerDay; $mail++) {
$minDate = $currentDate + ($mail * $period);
$maxDate = $minDate + $interval;
$date = random($minDate, $maxDate);
mailSchedule(false, $currentMailID, $date, array('expire' => $expire));
$currentMailID++;
}
$currentDate = $currentDate + $secondsPerDay;
}
$i++;
if ($i < count($sessions)) {
// make the pause if there is one
$currentDate = $currentDate + $sessions[$i]*$secondsPerDay;
$i++;
}
}
}
Reicht Ihnen das oder benötigen Sie weitere Informationen?
Vielen Dank für Ihre Hilfe und freundliche Grüsse