Difference between revisions of "Viewer URI Name Space"

From Second Life Wiki
Jump to navigation Jump to search
(Add experience SLURL)
(33 intermediate revisions by 14 users not shown)
Line 1: Line 1:
{{ProtocolNav}}
{{ProtocolNav}}
aka Viewer URL Namespace


aka SLAPP URLs
== Overview ==


aka Application SLURL
The SL client supports links of the format secondlife://Region/123/45/67/, which have traditionally specified a region name and x/y/z location.  This means "run Second Life viewer and show Region on the world map".
 
[[Category: Name Spaces]]
[[Category: Search]]
 
The SL client supports links of the format secondlife://Region/123/45/67/, which have traditionally specified a region name and x/y/z location.  This means "open Second Life and show Region on the world map".


The new URL scheme has 3 slashes, and allows direct control of the user interface and login.  For example, secondlife:///app/login
The new URL scheme has 3 slashes, and allows direct control of the user interface and login.  For example, secondlife:///app/login


Most secondlife:///app URLs only work from browser instances running inside Second Life because of a denial-of-service attack using secondlife:///app/teleport links to force repeated teleports.  SLURLs that work with external browsers include:
Most secondlife:///app URLs only work from browser instances running inside Second Life because of a denial-of-service attack using secondlife:///app/teleport links to force repeated teleports.  SLURLs that work with external browsers include:
* secondlife://<region name>
* <nowiki>secondlife://<region name></nowiki>
* secondlife:///app/login
* secondlife:///app/login


In chat, dialogs and other user interface elements, these URLs will be highlighted as clickable links, often with custom formatting including icons. The full functionality is available in Viewer 2.0 and up. Clickable links without formatting were available only in older versions' chat and IM history.


'''secondlife://'''
These links also may be known as ''Viewer URL Namespace'', ''SLAPP URLs'' or ''Application SLURL''.
* <region_name> ''log in to this region or, if logged in, show information and offer teleport''
 
** /<local_x> ''optional X position, defaults to 128''
Enclose your links in squared brackets, or they will in some cases (e.g. for ObjectIm - links) treat all text after the link as part of the link itself (which in most cases means, the text after the link will never display). Example:  &#91;secondlife&#58;&#47;&#47;&#47;app&#47;objectim&#47;190f571d-fdf1-8f6c-4e9d-973e9b5e0566?name=ObjectName&owner=c93c3129-2250-4c79-a5f7-8c755ca2707e&groupowned=true&slurl=Location&#47;128&#47;128&#47;27 ObjectName&#93;. In this case you will also need to ensure the object name has been escaped.
*** /<local_y> ''optional Y position, defaults to 128''
 
**** /<local_z> ''optional Z position, defaults to 0''
== Syntax ==
 
'''<nowiki>secondlife://</nowiki>'''
: '''<region_name>''' log in to this region or, if logged in, show information and offer teleport
:: '''/<local_x>''' optional X position, defaults to 128
::: '''/<local_y>''' optional Y position, defaults to 128
:::: '''/<local_z>''' optional Z position, defaults to 0
 
: '''/app'''
:: '''/agent'''
::: '''/<agent_id>'''
:::: '''/about''' open agent's profile, with 2nd Life tab selected
:::: '''/inspect''' display info dialog for agent (2.0)
:::: '''/im''' start an IM session with the agent (2.0)
:::: '''/offerteleport''' display teleport offer dialog (2.0)
:::: '''/pay''' display pay resident dialog (2.0)
:::: '''/requestfriend''' display friendship offer dialog (2.0)
:::: '''/mute''' add to block list (2.0)
:::: '''/unmute''' remove from block list (2.0)
:::: '''/completename''' replace the URL with the avatar's display and user names,
:::::e.g., "hmm <nowiki>secondlife:///app/agent/eea40b5a-553d-4a07-b1ca-9f6e2f867814/complete</nowiki> wow" in chat becomes "hmm Cerise (cerise.sorbet) wow" (2.4); see {{LSLGC|Avatar/Name}} for more details.
:::: '''/displayname''' replace the URL with the avatar's display name (2.4)
:::: '''/username''' replace the URL with the avatar's username e.g. "user.name" (2.4)
:: '''/appearance'''
::: '''/show''' display the sidebar appearance tab (2.0)
:: '''/balance'''
::: '''/request''' request a L$ balance update from the server (2.0)
:: '''/chat'''
::: '''/<channel>''' any channel number greater than 0 except [[DEBUG_CHANNEL]]
:::: '''/&lt;text>'''
:: '''/classified'''
::: '''/<classified_id>'''
:::: '''/about''' open floater describing classified
:: '''/event'''
::: '''/<event_id>'''
:::: '''/about''' open floater describing event
:: '''/experience'''
::: '''/<experience_id>'''
:::: '''/profile''' open floater describing experience
:: '''/group'''
::: '''/<group_id>'''
:::: '''/about''' open floater describing group
:::: '''/inspect''' display info dialog for group (2.0)
::: '''/create''' open the create group dialog (1.20)
::: '''/list'''
:::: '''/show''' open the list of groups to which user belongs (1.20)
:: '''/help'''
::: '''/<help_query>''' optional help topic (2.0)
:: '''/inventory'''
::: '''/<inventory_id>'''
:::: '''/select''' inventory offer (2.0)
::: '''/show''' open the inventory sidebar tab (2.0)
:: '''/login''' log in on launch. External and internal browsers.
::: see below for query parameters, of course, values are URL escaped
:: '''/maptrackavatar'''
::: '''/<friend_id>''' find a friend on the world map, requires permission (2.4)
:: '''/objectim'''
::: '''/<object_id>''' display an info dialog for the object sending this message (2.0)
:::: '''?name=<object_name>'''
:::: '''&owner=<owner_id>'''
:::: '''&groupowned=true''' (add if the object is deeded to a group)
:::: '''&slurl=<region>/<x>/<y>/<z>'''
:: '''/parcel'''
::: '''/<parcel_id>'''
:::: '''/about''' open floater describing place
:: '''<strike>/region'''
::: '''/<region_id>'''
:::: '''/about''' information from database about that region?  list of parcels?  covenant?</strike>
:: '''/search'''
::: '''/<category>''' "all", "people", "places", "events", "groups", "wiki", "destinations", "classifieds"
:::: '''/<search_term>''' open a search floater with matching results (2.0)
:: '''/sharewithavatar'''
::: '''/<agent_id>''' open an inventory share/IM window for agent (2.4)
:: '''/teleport'''
::: '''/<region_name>''' teleport instantly to this region, no dialog
:::: '''/<local_x>''' optional X position, defaults to 128
::::: '''/<local_y>''' optional Y position, defaults to 128
:::::: '''/<local_z>''' optional Z position, defaults to 0
:: '''/voicecallavatar'''
::: '''/<agent_id>''' start a private voice session (2.4)
:: '''/wear_folder'''
::: '''/?folder_id=<inventory_folder_uuid>''' replace outfit with contents of specified folder (2.6)
::: '''/?folder_name=<library_folder_name>''' replace outfit with contents of named Library folder
:: '''/worldmap''' open the map with this destination selected (2.0)
::: '''/<region_name>'''
:::: '''/<local_x>''' optional X position, defaults to 128
::::: '''/<local_y>''' optional Y position, defaults to 128
:::::: '''/<local_z>''' optional Z position, defaults to 0


* /app
** /agent
*** /<agent_id>
**** /about ''open agent's profile, with 2nd Life tab selected''
** /appearance
**** /show ''display the sidebar appearance tab, added in 2.0''
** /balance
**** /request ''request a L$ balance update from the server''
** /chat
*** /<channel> ''any channel number greater then or equal to 0''
**** /<text>
** /classified
*** /<classified_id>
**** /about ''open floater describing classified''
** /event
*** /<event_id>
**** /about ''open floater describing event''
** /group
*** /<group_id>
**** /about ''open floater describing group''
*** /create ''open the create group dialog, added in 1.20''
*** /list
**** /show ''open the list of groups to which user belongs, added in 1.20''
** /help
*** /<help_query> ''optional help topic''
** /inventory
*** /<inventory_id>
**** /select
*** /show ''open the inventory sidebar tab''
** /login ''log in on launch. External and internal browsers.''
*** see below for query parameters, of course, values are URL escaped
** /objectim
*** /<object_id>
**** ?name=<object_name>
**** &owner=<owner_id>
**** &groupowned=true ''(add if the object is deeded to a group)''
**** &slurl=<region>/<x>/<y>/<z> ''display an info dialog for the object sending this message''
** /parcel
*** /<parcel_id>
**** /about ''open floater describing place''
** /region
*** /<region_id>
**** /about ''information from database about that region?  list of parcels?  covenant?''
** /search
*** /<category> ''e.g. places''
**** /<search_term> ''open a search floater with matching results''
** /teleport
*** /<region_name> ''teleport instantly to this region, no dialog''
**** /<local_x> ''optional X position, defaults to 128''
***** /<local_y> ''optional Y position, defaults to 128''
****** /<local_z> ''optional Z position, defaults to 0''
** /worldmap
*** <region_name>
**** /<local_x> ''optional X position, defaults to 128''
***** /<local_y> ''optional Y position, defaults to 128''
****** /<local_z> ''optional Z position, defaults to 0''
This could be extended to things like:
This could be extended to things like:
* /app/event/<event_id>/subscribe to register for notifications
: '''/app/event/<event_id>/subscribe''' to register for notifications
* /app/parcel/<parcel_id>/teleport to teleport to a specific location
: '''/app/parcel/<parcel_id>/teleport''' to teleport to a specific location
* /app/agent/<agent_id>/im to start IM session


== Login Query Parameters ==
== Login Query Parameters ==
Line 96: Line 121:
| location || login location, format TBD, optional
| location || login location, format TBD, optional
|}
|}
== Examples ==
<source lang="lsl2">
string Who(key id)
{
    return "secondlife:///app/agent/" + (string)id + "/inspect";
}
default
{
    touch_start(integer num)
    {
        llSay(0, "Touched by " + Who(llDetectedKey(0)) + "." );
    }
}
</source>
[[Category:Name Spaces]]
[[Category:Search]]
[[Category:LSL Chat]]
[[Category:LSL_Dialog]]

Revision as of 13:14, 9 August 2019

Overview

The SL client supports links of the format secondlife://Region/123/45/67/, which have traditionally specified a region name and x/y/z location. This means "run Second Life viewer and show Region on the world map".

The new URL scheme has 3 slashes, and allows direct control of the user interface and login. For example, secondlife:///app/login

Most secondlife:///app URLs only work from browser instances running inside Second Life because of a denial-of-service attack using secondlife:///app/teleport links to force repeated teleports. SLURLs that work with external browsers include:

In chat, dialogs and other user interface elements, these URLs will be highlighted as clickable links, often with custom formatting including icons. The full functionality is available in Viewer 2.0 and up. Clickable links without formatting were available only in older versions' chat and IM history.

These links also may be known as Viewer URL Namespace, SLAPP URLs or Application SLURL.

Enclose your links in squared brackets, or they will in some cases (e.g. for ObjectIm - links) treat all text after the link as part of the link itself (which in most cases means, the text after the link will never display). Example: [secondlife:///app/objectim/190f571d-fdf1-8f6c-4e9d-973e9b5e0566?name=ObjectName&owner=c93c3129-2250-4c79-a5f7-8c755ca2707e&groupowned=true&slurl=Location/128/128/27 ObjectName]. In this case you will also need to ensure the object name has been escaped.

Syntax

secondlife://

<region_name> log in to this region or, if logged in, show information and offer teleport
/<local_x> optional X position, defaults to 128
/<local_y> optional Y position, defaults to 128
/<local_z> optional Z position, defaults to 0
/app
/agent
/<agent_id>
/about open agent's profile, with 2nd Life tab selected
/inspect display info dialog for agent (2.0)
/im start an IM session with the agent (2.0)
/offerteleport display teleport offer dialog (2.0)
/pay display pay resident dialog (2.0)
/requestfriend display friendship offer dialog (2.0)
/mute add to block list (2.0)
/unmute remove from block list (2.0)
/completename replace the URL with the avatar's display and user names,
e.g., "hmm secondlife:///app/agent/eea40b5a-553d-4a07-b1ca-9f6e2f867814/complete wow" in chat becomes "hmm Cerise (cerise.sorbet) wow" (2.4); see Avatar/Name for more details.
/displayname replace the URL with the avatar's display name (2.4)
/username replace the URL with the avatar's username e.g. "user.name" (2.4)
/appearance
/show display the sidebar appearance tab (2.0)
/balance
/request request a L$ balance update from the server (2.0)
/chat
/<channel> any channel number greater than 0 except DEBUG_CHANNEL
/<text>
/classified
/<classified_id>
/about open floater describing classified
/event
/<event_id>
/about open floater describing event
/experience
/<experience_id>
/profile open floater describing experience
/group
/<group_id>
/about open floater describing group
/inspect display info dialog for group (2.0)
/create open the create group dialog (1.20)
/list
/show open the list of groups to which user belongs (1.20)
/help
/<help_query> optional help topic (2.0)
/inventory
/<inventory_id>
/select inventory offer (2.0)
/show open the inventory sidebar tab (2.0)
/login log in on launch. External and internal browsers.
see below for query parameters, of course, values are URL escaped
/maptrackavatar
/<friend_id> find a friend on the world map, requires permission (2.4)
/objectim
/<object_id> display an info dialog for the object sending this message (2.0)
?name=<object_name>
&owner=<owner_id>
&groupowned=true (add if the object is deeded to a group)
&slurl=<region>/<x>/<y>/<z>
/parcel
/<parcel_id>
/about open floater describing place
/region
/<region_id>
/about information from database about that region? list of parcels? covenant?
/search
/<category> "all", "people", "places", "events", "groups", "wiki", "destinations", "classifieds"
/<search_term> open a search floater with matching results (2.0)
/sharewithavatar
/<agent_id> open an inventory share/IM window for agent (2.4)
/teleport
/<region_name> teleport instantly to this region, no dialog
/<local_x> optional X position, defaults to 128
/<local_y> optional Y position, defaults to 128
/<local_z> optional Z position, defaults to 0
/voicecallavatar
/<agent_id> start a private voice session (2.4)
/wear_folder
/?folder_id=<inventory_folder_uuid> replace outfit with contents of specified folder (2.6)
/?folder_name=<library_folder_name> replace outfit with contents of named Library folder
/worldmap open the map with this destination selected (2.0)
/<region_name>
/<local_x> optional X position, defaults to 128
/<local_y> optional Y position, defaults to 128
/<local_z> optional Z position, defaults to 0

This could be extended to things like:

/app/event/<event_id>/subscribe to register for notifications
/app/parcel/<parcel_id>/teleport to teleport to a specific location

Login Query Parameters

first the account first name
last the account last name
session the secure session id
location login location, format TBD, optional

Examples

string Who(key id)
{
    return "secondlife:///app/agent/" + (string)id + "/inspect";
}
 
default
{
    touch_start(integer num)
    {
        llSay(0, "Touched by " + Who(llDetectedKey(0)) + "." );
    }
}