Seite 1 von 1
SMS bei Announcements
Verfasst: Do 06.Jul, 2006 09:40
von Holger
Hi,
ich brauche etwas Hilfe!
Ich habe einen guten Anbieter für SMS-Versand gefunden.
Jetzt möchte ich folgendes machen: wenn ein Announcement geschrieben wird, sollte eine Gruppe per SMS informiert werden. Die Handynummern sind in einem Profil-Feld gespeichert.
Das skript:
Code: Alles auswählen
<?
// Input username, password and URL to MOSMS.
$mosms_username = "your moms-username";
$mosms_password = "your moms-password";
$mosms_url = "http://www.domain.com/se/sms-send.php";
// Phonenumbers
$number = array(
'0701234567',
'0709876543',
'0701223344');
// Type of SMS
$mosms_type = "text";
// Message to be sent
$mosms_data = "New important message in the forum!";
// Call MOSMS and send the SMS
$mosms_data = rawurlencode($mosms_data);
//Start loop
for ($x = 0;$x<=count($number)-1;$x++)
{
$result = file_get_contents($mosms_url . "?username=$mosms_username&password=$mosms_password&nr=$number[$x]&type=$mosms_type&data=$mosms_data");
// Check errorcodes
if ($result <> "0") {
// Errorcode was returned
echo "Error when calling number: $number[$x] - errorcode: $result <br>";
} else {
// No errorvode
echo "SMS was sent to $number[$x]! <br>";
}
//End loop
}
?>
Dieser Teil sollte dann dynamisch aus dem Handyfeld ausgelesen werden:
Code: Alles auswählen
// Phonenumbers
$number = array(
'0701234567',
'0709876543',
'0701223344');
Und dieser Teil sollte z.B. den Titel des Announcements enthalten:
Code: Alles auswählen
// Message to be sent
$mosms_data = "New important message in the forum!";
Wäre es möglich, das Script bei Announcements auzulösen?
Könnte man die Felder dynamisch fyllen?
Gruss
Holger
Verfasst: Do 06.Jul, 2006 10:39
von oxpus
Nun, binde das Script in eine phpBB-Seite ein (Blank Page MOD hilft hierbei) und Du kannst mit einer SQL-Abfrage die Telefonnummern aus beliebigen Userdaten auslesen.
Zudem muss man auch definieren, nach welchen Ereignissen die SMS ausgelöst werden sollen.
Also z. B. das Posten in einem bestimmten Forum oder von News, oder oder oder...
Alles noch offen, um näher helfen zu können...
Verfasst: Do 06.Jul, 2006 10:45
von Holger
[quote="oxpus";p="61628"]Nun, binde das Script in eine phpBB-Seite ein (Blank Page MOD hilft hierbei) und Du kannst mit einer SQL-Abfrage die Telefonnummern aus beliebigen Userdaten auslesen.
Zudem muss man auch definieren, nach welchen Ereignissen die SMS ausgelöst werden sollen.
Also z. B. das Posten in einem bestimmten Forum oder von News, oder oder oder...
Alles noch offen, um näher helfen zu können...[/quote]
Das Ereignis sollte sein: Announcement. Egal in welchem Forum.
Die Telefonnummer wird in dem Feld "mobiltel gespeichert:
Code: Alles auswählen
$strip_var_list = array('email' => 'email', 'icq' => 'icq', 'aim' => 'aim', 'msn' => 'msn', 'yim' => 'yim', 'website' => 'website', 'location' => 'location', 'occupation' => 'occupation', 'interests' => 'interests', 'foraldertill' => 'foraldertill', 'hemtel' => 'hemtel', 'mobiltel' => 'mobiltel', 'jobbtel' => 'jobbtel', 'address' => 'address', 'postnummer' => 'postnummer', 'stad' => 'stad', 'foraldrargrupp' => 'foraldrargrupp', 'confirm_code' => 'confirm_code');
Das Skript würde ich separat ablegen, z.B. in einer Datei sms.php oder so. Geht das auch? Ah, jetzt verstehe ich. Wenn ich das mit dem Blank-Page-Mod mache, dann habe ich alle Includes bereits "aktiviert".
Edit: hat jemand eine Idee wie das laufen könnte?
Keiner?

Verfasst: Di 26.Sep, 2006 17:12
von oxpus
Der Blank Page MOD stellt nur eine "leere" neue PHP-Seite zur Verfügung.
Wenn diese innerhalb des phpBB-Verzeichnisses laufen kann/soll, ist alles in Ordnung.
Ansonsten würde ich Dir MODs empfehlen, die externe phpBB-Scripte ermöglichen. Ich glaube einer heisst "phpBB To Go" und ist auf phpbbhacks.com zu finden...
Verfasst: Mi 27.Sep, 2006 09:07
von Holger
Ok, wenn ich also den Blank Page Mod verwende, dann muss ich also die Abfrage und das Auslösen des SMS-Versandes dort reinbringen?
Das auslösende EVENT (Annoncement in einem bestimmten Forum) muss anders realisiert werden und ruft dann diese Blank Page Mod-Seite auf (im Hintergrund)?
Verfasst: Mi 27.Sep, 2006 09:32
von oxpus
Warum denn eine extra Seite?
Wenn eine Ankündigung erstellt wird, kann man das dann doch auch gleich in der functions_post.php machen...
Verfasst: Mi 27.Sep, 2006 09:43
von Holger
Ähhh, IHR habt den Blank Page Mod vorgeschlagen!

Verfasst: Mi 27.Sep, 2006 09:53
von oxpus
Ja schon, aber Du willst doch nur eine SMS senden, oder?
Das hatte ich am Anfang noch nicht so ganz verstanden...
Verfasst: Mi 27.Sep, 2006 09:57
von Holger
Neee, ich möchte, sobald ein Announcement gepostet wird eine SMS an eine Gruppe verschicken, also an mehrere Empfänger. Siehe meinen ersten Beitrag oben:
wenn ein Announcement geschrieben wird, sollte eine Gruppe per SMS informiert werden. Die Handynummern sind in einem Profil-Feld gespeichert.
Mir wäre auch lieber, wenn das z.B. in der functions_post abgehandelt wird.
Verfasst: Mi 27.Sep, 2006 10:24
von oxpus
Ja, das geht doch!
Alles in der Funktion submit_post(); in includes/functions_post.php:
- Feststellen, ob der Topic-Typ eine Ankündigung ist
- Script für SMS einfügen
- Fertig
So, das wäre dann auch erstmal der Grundstock.
Was Du dann in Deinem Script brauchst, wären die User einer Usergruppe oder fest definierte Empfänger?
Verfasst: Mi 27.Sep, 2006 10:31
von Holger
Ich bräuchte User aus einer bestimmten Usergruppe.
Die Handynummer wird in dem Feld "mobiltel" hinterlegt.
Das SMS-Skript
Code: Alles auswählen
<?
// Input username, password and URL to MOSMS.
$mosms_username = "your moms-username";
$mosms_password = "your moms-password";
$mosms_url = "http://www.domain.com/se/sms-send.php";
// Phonenumbers
$number = array(
'0701234567',
'0709876543',
'0701223344');
// Type of SMS
$mosms_type = "text";
// Message to be sent
$mosms_data = "New important message in the forum!";
// Call MOSMS and send the SMS
$mosms_data = rawurlencode($mosms_data);
//Start loop
for ($x = 0;$x<=count($number)-1;$x++)
{
$result = file_get_contents($mosms_url . "?username=$mosms_username&password=$mosms_password&nr=$number[$x]&type=$mosms_type&data=$mosms_data");
// Check errorcodes
if ($result <> "0") {
// Errorcode was returned
echo "Error when calling number: $number[$x] - errorcode: $result <br>";
} else {
// No errorvode
echo "SMS was sent to $number[$x]! <br>";
}
//End loop
}
?>
enthält ja diesen Teil:
Code: Alles auswählen
// Phonenumbers
$number = array(
'0701234567',
'0709876543',
'0701223344');
Der müsste dynamisch (per Schleife?) mit den Handynummern aus der Gruppe gefüllt werden.
Dieser Teil:
Code: Alles auswählen
// Message to be sent
$mosms_data = "New important message in the forum!";
könnte ja aus dem Announcement-Titel bestehen, oder?
Verfasst: Mi 27.Sep, 2006 10:46
von oxpus
Klar, die Daten des Posts kann man ja an dieser Stelle in der functions_post.php abgreifen.
Hm, alle User einer Gruppe...
Sollte so gehen:
Code: Alles auswählen
// Einstellungen
$sms_group = 1;
$user_phone_number = 'mobiltel';
// Abfrage/Script
$sql = "SELECT DISTINCT u.$user_phone_number
FROM " . GROUPS_TABLE . " g, " . USER_GROUP_TABLE . " ug, " . USERS_TABLE . " u
WHERE g.group_id = ug.group_id
AND ug.user_id = u.user_id
AND g.group_single_user <> " . TRUE . "
AND ug.user_pending <> " . TRUE . "
AND g.group_id = $sms_group";
if (!($result = $db->sql_query($sql)))
{
mesage_die(GENERAL_ERROR, 'Could not read user mobiltel', '', __LINE__, __FILE__, $sql);
}
while ($row = $db->sql_fetchrow($result))
{
$mobiltel = $row[$user_phone_number];
// Hier das SMS-Script für die SMS an den aktuell abgefragten User
}
$db->sql_freeresult($result);
Die ersten beiden Variablen sind halt von Dir einzustellen, der Rest ist dann wohl eindeutig...
Verfasst: Mi 27.Sep, 2006 10:56
von Holger
In der functions_post.php habe ich ja folgenden Code:
Code: Alles auswählen
//
// Post a new topic/reply/poll or edit existing post/poll
//
function submit_post($mode, &$post_data, &$message, &$meta, &$forum_id, &$topic_id, &$post_id, &$poll_id, &$topic_type, &$bbcode_on, &$html_on, &$smilies_on, &$attach_sig, &$bbcode_uid, $post_username, $post_subject, $post_message, $poll_title, &$poll_options, &$poll_length)
{
global $board_config, $lang, $db, $phpbb_root_path, $phpEx;
global $userdata, $user_ip;
include($phpbb_root_path . 'includes/functions_search.'.$phpEx);
$current_time = time();
if ($mode == 'newtopic' || $mode == 'reply' || $mode == 'editpost')
{
//
// Flood control
//
$where_sql = ($userdata['user_id'] == ANONYMOUS) ? "poster_ip = '$user_ip'" : 'poster_id = ' . $userdata['user_id'];
$sql = "SELECT MAX(post_time) AS last_post_time
FROM " . POSTS_TABLE . "
WHERE $where_sql";
if ($result = $db->sql_query($sql))
{
if ($row = $db->sql_fetchrow($result))
{
if (intval($row['last_post_time']) > 0 && ($current_time - intval($row['last_post_time'])) < intval($board_config['flood_interval']))
{
message_die(GENERAL_MESSAGE, $lang['Flood_Error']);
}
}
}
}
Das ist ja nur der ANFANG der Funktion.
Könnte ich das jetzt ganz stumpf so ausbauen?
Code: Alles auswählen
//
// Post a new topic/reply/poll or edit existing post/poll
//
function submit_post($mode, &$post_data, &$message, &$meta, &$forum_id, &$topic_id, &$post_id, &$poll_id, &$topic_type, &$bbcode_on, &$html_on, &$smilies_on, &$attach_sig, &$bbcode_uid, $post_username, $post_subject, $post_message, $poll_title, &$poll_options, &$poll_length)
{
global $board_config, $lang, $db, $phpbb_root_path, $phpEx;
global $userdata, $user_ip;
include($phpbb_root_path . 'includes/functions_search.'.$phpEx);
$current_time = time();
if ($mode == 'newtopic' || $mode == 'reply' || $mode == 'editpost')
{
//
// Flood control
//
$where_sql = ($userdata['user_id'] == ANONYMOUS) ? "poster_ip = '$user_ip'" : 'poster_id = ' . $userdata['user_id'];
$sql = "SELECT MAX(post_time) AS last_post_time
FROM " . POSTS_TABLE . "
WHERE $where_sql";
if ($result = $db->sql_query($sql))
{
if ($row = $db->sql_fetchrow($result))
{
if (intval($row['last_post_time']) > 0 && ($current_time - intval($row['last_post_time'])) < intval($board_config['flood_interval']))
{
message_die(GENERAL_MESSAGE, $lang['Flood_Error']);
}
}
}
}
if($topic_type == POST_ANNOUNCE)
{
// Einstellungen
$sms_group = 1;
$user_phone_number = 'mobiltel';
// Abfrage/Script
$sql = "SELECT DISTINCT u.$user_phone_number
FROM " . GROUPS_TABLE . " g, " . USER_GROUP_TABLE . " ug, " . USERS_TABLE . " u
WHERE g.group_id = ug.group_id
AND ug.user_id = u.user_id
AND g.group_single_user <> " . TRUE . "
AND ug.user_pending <> " . TRUE . "
AND g.group_id = $sms_group";
if (!($result = $db->sql_query($sql)))
{
mesage_die(GENERAL_ERROR, 'Could not read user mobiltel', '', __LINE__, __FILE__, $sql);
}
while ($row = $db->sql_fetchrow($result))
{
$mobiltel = $row[$user_phone_number];
// Hier das SMS-Script für die SMS an den aktuell abgefragten User
// Input username, password and URL to MOSMS.
$mosms_username = "your moms-username";
$mosms_password = "your moms-password";
$mosms_url = "http://www.domain.com/se/sms-send.php";
// Phonenumbers
$number = $mobiltel;
// Type of SMS
$mosms_type = "text";
// Message to be sent
$mosms_data = "New important message in the forum!";
// Call MOSMS and send the SMS
$mosms_data = rawurlencode($mosms_data);
//Start loop
for ($x = 0;$x<=count($number)-1;$x++)
{
$result = file_get_contents($mosms_url . "?username=$mosms_username&password=$mosms_password&nr=$number[$x]&type=$mosms_type&data=$mosms_data");
// Check errorcodes
if ($result <> "0") {
// Errorcode was returned
echo "Error when calling number: $number[$x] - errorcode: $result <br>";
} else {
// No errorvode
echo "SMS was sent to $number[$x]! <br>";
}
//End loop
}
//End if announcement
}
}
$db->sql_freeresult($result);
Ist DER Teil korrekt so:
Verfasst: Mi 27.Sep, 2006 13:00
von oxpus
Ja, wäre alles so korrekt.
Versuchs. Mehr als schief gehen, kanns nicht.
Ich würde aber diesen Part an Deiner Stelle besser ans Ende der Funktion stellen, also nachdem die Ankünfigung gespeichert ist.
Sonst könnte ein User eine SMS erhalten über das, was ggf. garnicht vorhanden ist

Verfasst: Mi 27.Sep, 2006 15:42
von Holger
Danke! Ich melde mich mit dem Ergebnis!
Was geschieht eigentlich mit den ECHOs?
Verfasst: Do 28.Sep, 2006 14:33
von oxpus
echo gibt Text im Browser aus.
Kannst Du auch weglassen,bzw. hier, sofern ein Fehler auftritt, auch mit einer message_die() Meldung ersetzen...
Verfasst: Do 04.Jan, 2007 18:36
von musteng
Kan man mit dem script umsonst sms senden? wo kriege ich ihn

Verfasst: Fr 05.Jan, 2007 09:24
von Holger
Das Ganze basiert auf dem Dienst mosms.com - ich glauber der ist nur in Schweden aktiv.