Difference between revisions of "LlInstantMessage"

From Second Life Wiki
Jump to: navigation, search
m (Added new llRegionSayTo method for "see also" area)
m (+caveats +notes)
Line 8: Line 8:
 
|spec
 
|spec
 
|caveats=**For applications where this is problematic, it's possible to place the call to llInstantMessage in a child script and pass the information to that script via [[llMessageLinked]].
 
|caveats=**For applications where this is problematic, it's possible to place the call to llInstantMessage in a child script and pass the information to that script via [[llMessageLinked]].
 +
* All object IM's are throttled at >2500 per 30mins, per owner, per region in a rolling window. this includes IM's sent after the throttle is in place
 +
** Throttled IM's are dropped. for implementation see [[llInstantMessage#notes|notes]] below
 
*'''message''' will be truncated if it exceeds 1199 bytes.
 
*'''message''' will be truncated if it exceeds 1199 bytes.
 
*'''message''' will appear in the chat window and will not logged by the InstantMessage logging facility. (If a the specified user is not signed it, the messages will be delivered to their email just like a regular instant message, if the user has enabled email for their account.)
 
*'''message''' will appear in the chat window and will not logged by the InstantMessage logging facility. (If a the specified user is not signed it, the messages will be delivered to their email just like a regular instant message, if the user has enabled email for their account.)
Line 46: Line 48:
 
|also_articles
 
|also_articles
 
|also_events
 
|also_events
|notes=Instant Messaging has the benefit of allowing communication from an object to an avatar anywhere in the Grid. The downside is that an object cannot receive an Instant Message, therefore an avatar cannot send an Instant Message to an object. It's a one-way communication avenue. Also, the two-second script delay can be considered a downside in some applications.
+
|notes=
 +
* Instant Messaging has the benefit of allowing communication from an object to an avatar anywhere in the Grid. The downside is that an object cannot receive an Instant Message, therefore an avatar cannot send an Instant Message to an object. It's a one-way communication avenue. Also, the two-second script delay can be considered a downside in some applications.
 +
* Throttling Implementation (Kelly Linden):
 +
** The throttle is on all IMs from the object owner. It does not disable all IMs in the region, but does disable all IMs from the owner of the object.
 +
** The throttle is not per object, but per owner. Splitting the spamming object into multiple objects will not help unless owned by different people. This also means that owning multiple almost too spammy objects will cause you to hit the limit.
 +
** 2500 IMs in 30 minutes will trigger the block.
 +
** IMs that are blocked continue to count against the throttle. The IM count must drop below 2500 before any IMs will be delivered.
 +
** The IM count of the previous window is used to approximate the rolling window. If it is 20% into the current window the IM count will be the current count + 80% of the previous count. This allows us to approximate a rolling average, however it has the behavior that a flood of IMs can have an effect on the throttle for double the window length. This is why in practice the throttle behaves more like 5k in 1hr than 2.5k in 30min.
 +
 
 
|cat1=Communications
 
|cat1=Communications
 
|cat2=Instant Message
 
|cat2=Instant Message

Revision as of 22:14, 18 September 2011

Summary

Function: llInstantMessage( key user, string message );

Sends an Instant Message specified in the string message to the user specified by key.

• key user avatar UUID
• string message

Caveats

  • This function causes the script to sleep for 2.0 seconds.
    • For applications where this is problematic, it's possible to place the call to llInstantMessage in a child script and pass the information to that script via llMessageLinked.
  • All object IM's are throttled at >2500 per 30mins, per owner, per region in a rolling window. this includes IM's sent after the throttle is in place
    • Throttled IM's are dropped. for implementation see notes below
  • message will be truncated if it exceeds 1199 bytes.
  • message will appear in the chat window and will not logged by the InstantMessage logging facility. (If a the specified user is not signed it, the messages will be delivered to their email just like a regular instant message, if the user has enabled email for their account.)
All Issues ~ Search JIRA for related Bugs

Examples

Tell the owner somebody touched the object: <lsl>// This particular example is for demonstration only. // Use llOwnerSay() for the same functionality, in case the owner is known to be in the same Region.

key owner;

default {

   on_rez(integer start_param)
   {
       owner=llGetOwner();  // get the key of the objects owner.
   }
   touch_start(integer total_num)
   {        
       llInstantMessage(owner,llKey2Name(owner)+", " + (string)total_num +" Avatar(s) touched me!");
   }

}</lsl> Send a confirmation to the Avatar that touches an object without spamming other Avatars: <lsl>default {

   touch_start(integer total_num)
   {        
       llInstantMessage(llDetectedKey(0),"You have been registered!");
   }
}</lsl>

Notes

  • Instant Messaging has the benefit of allowing communication from an object to an avatar anywhere in the Grid. The downside is that an object cannot receive an Instant Message, therefore an avatar cannot send an Instant Message to an object. It's a one-way communication avenue. Also, the two-second script delay can be considered a downside in some applications.
  • Throttling Implementation (Kelly Linden):
    • The throttle is on all IMs from the object owner. It does not disable all IMs in the region, but does disable all IMs from the owner of the object.
    • The throttle is not per object, but per owner. Splitting the spamming object into multiple objects will not help unless owned by different people. This also means that owning multiple almost too spammy objects will cause you to hit the limit.
    • 2500 IMs in 30 minutes will trigger the block.
    • IMs that are blocked continue to count against the throttle. The IM count must drop below 2500 before any IMs will be delivered.
    • The IM count of the previous window is used to approximate the rolling window. If it is 20% into the current window the IM count will be the current count + 80% of the previous count. This allows us to approximate a rolling average, however it has the behavior that a flood of IMs can have an effect on the throttle for double the window length. This is why in practice the throttle behaves more like 5k in 1hr than 2.5k in 30min.

See Also

Functions

•  llOwnerSay Sends chat region wide to owner
•  llRegionSay Sends chat region wide
•  llRegionSayTo Sends chat region wide to an object/avatar
•  llWhisper Sends chat limited to 10 meters
•  llSay Sends chat limited to 20 meters
•  llShout Sends chat limited to 100 meters

Deep Notes

All Issues

~ Search JIRA for related Issues
   llTargetSay() - region-wide direct communication

Signature

function void llInstantMessage( key user, string message );