SMS bei Announcements

Neue Projekte und Anfragen, Teamarbeiten und Alpha/Beta Scripte jeder Art.
KEINE Supportanfragen zu bestehenden MODs!
Antworten
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

SMS bei Announcements

Beitrag 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
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag 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...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag 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? :(
Zuletzt geändert von Holger am Di 26.Sep, 2006 16:02, insgesamt 2-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag 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...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag 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)?
Zuletzt geändert von Holger am Mi 27.Sep, 2006 09:08, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag 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...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag von Holger »

Ähhh, IHR habt den Blank Page Mod vorgeschlagen! :pfff
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ja schon, aber Du willst doch nur eine SMS senden, oder?
Das hatte ich am Anfang noch nicht so ganz verstanden...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag 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.
Zuletzt geändert von Holger am Mi 27.Sep, 2006 09:59, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag 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

Code: Alles auswählen

if($topic_type == POST_ANNOUNCE)
- Script für SMS einfügen

Code: Alles auswählen

// Dein Script oben
- 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?
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag 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?
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag 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...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag 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:

Code: Alles auswählen

// Phonenumbers 
$number = $mobiltel; 
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag 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 ;)
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag von Holger »

Danke! Ich melde mich mit dem Ergebnis!

Was geschieht eigentlich mit den ECHOs?
Zuletzt geändert von Holger am Do 28.Sep, 2006 13:23, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag 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...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
musteng
Beiträge: 250
Registriert: Do 07.Sep, 2006 00:49

Beitrag von musteng »

Kan man mit dem script umsonst sms senden? wo kriege ich ihn :D
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag von Holger »

Das Ganze basiert auf dem Dienst mosms.com - ich glauber der ist nur in Schweden aktiv.
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Antworten