<html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <base href="https://wiki.asterisk.org/wiki" />
        <style type="text/css">
    body, #email-content, #email-content-inner { font-family: Arial,FreeSans,Helvetica,sans-serif; }
    body, p, blockquote, pre, code, td, th, li, dt, dd { font-size: 13px; }
    small { font-size: 11px; }

    body { width:100% !important; -webkit-font-smoothing: antialiased; }

    body,
    #email-wrapper { background-color: #f0f0f0; }
    #email-wrapper-inner { padding: 20px; text-align: center; }
    #email-content-inner { background-color: #fff; border: 1px solid #bbb; color: $menuTxtColour; padding:20px; text-align:left; }
    #email-wrapper-inner > table { width: 100%; }
    #email-wrapper-inner.thin > table { margin: 0 auto; width: 50%; }
    #email-footer { padding: 0 16px 32px 16px; margin: 0; }

    .email-indent { margin: 8px 0 16px 0; }
    .email-comment { margin: 0 0 0 56px; }
    .email-comment.removed { background-color: #ffe7e7; border: 1px solid #df9898; padding: 0 8px;}

    #email-title-avatar { text-align: left; vertical-align: top; width: 48px; padding-right: 8px; }
    #email-title-flavor { margin: 0; padding: 0 0 4px 0; }
    #email-title-heading { font-size: 16px; line-height: 20px; min-height: 20px; margin: 0; padding: 0; }
    #email-title .icon { border: 0; padding: 0 5px 0 0; text-align: left; vertical-align: middle; }

    #email-actions { border-top: 1px solid #bbb; color: #505050; margin: 8px 0 0 0; padding: 0; }
    #email-actions td { padding-top: 8px; }
    #email-actions .left { max-width: 45%; text-align: left; }
    #email-actions .right { text-align: right; }
    .email-reply-divider { border-top: 1px solid #bbb; color: #505050; margin: 32px 0 8px 0; padding: 8px 0; }
    .email-section-title { border-bottom: 1px solid #bbb; margin: 8px 0; padding: 8px 0 0 0; }

    .email-metadata { color: #505050; }

    a { color: #326ca6; text-decoration: none; }
    a:hover { color: #336ca6; text-decoration: underline; }
    a:active {color: #326ca6; }

    a.email-footer-link { color: #505050; font-size: 11px; }

    .email-item-list { list-style: none; margin: 4px 0; padding-left: 0; }
    .email-item-list li { list-style: none; margin: 0; padding: 4px 0; }
    .email-list-divider { color: #505050; padding: 0 0.35em; }
    .email-operation-icon { padding-right: 5px; }

    .avatar { -ms-interpolation-mode: bicubic; border-radius: 3px;}
    .avatar-link { margin: 2px; }

    .tableview th { border-bottom: 1px solid #69C; font-weight: bold; text-align: left; }
    .tableview td { border-bottom: 1px solid #bbbbbb; text-align: left; padding: 4px 16px 4px 0; }

    .aui-message {  margin: 1em 0; padding: 8px; }
    .aui-message.info { background-color: #e0f0ff; border: 1px solid #9eb6d4; }
    .aui-message.success { background-color: #ddfade; border: 1px solid #93c49f; }
    .aui-message.error,
    .aui-message.removed { background-color: #ffe7e7; border: 1px solid #df9898; color: #000; }

    .call-to-action-table { margin: 10px 1px 1px 1px;}
    .call-to-cancel-container, .call-to-action-container { padding: 5px 20px; }
    .call-to-cancel-container { border: 1px solid #aaa; background-color: #eee; border-radius: 3px; }
    .call-to-cancel-container a.call-to-cancel-button { background-color: #eee; font-size: 14px; line-height: 1; padding: 0; margin: 0; color: #666; font-family: sans-serif;}
    .call-to-action-container { border: 1px solid #486582;  background-color: #3068A2; border-radius: 3px; padding: 4px 10px; }
    .call-to-action-container a.call-to-action-button { background-color: #3068A2; font-size: 14px; line-height: 1; padding: 0; margin: 0; color: #fff; font-weight: bold; font-family: sans-serif; }

    /** The span around the inline task checkbox image */
    .diff-inline-task-overlay {
        display: inline-block;
        text-align: center;
        height: 1.5em;
        padding: 5px 0px 1px 5px;
        margin-right: 5px;
        /** Unfortunately, the negative margin-left is stripped out in gmail */
        margin-left: -5px;
    }

            @media handheld, only screen and (max-device-width: 480px) {
        div, a, p, td, th, li, dt, dd { -webkit-text-size-adjust: auto; }
        small, small a { -webkit-text-size-adjust: 90%; }

        td[id=email-wrapper-inner] { padding: 2px !important; }
        td[id=email-content-inner] { padding: 8px !important; }
        td[id="email-wrapper-inner"][class="thin"] > table { text-align: left !important; width: 100% !important; }
        td[id=email-footer] { padding: 8px 12px !important; }
        div[class=email-indent] { margin: 8px 0px !important; }
        div[class=email-comment] { margin: 0 !important; }

        p[id=email-title-flavor] a { display: block; } /* puts the username and the action on separate lines */
        p[id=email-permalink] { padding: 4px 0 0 0 !important; }

        table[id=email-actions] td { padding-top: 0 !important; }
        table[id=email-actions] td.right { text-align: right !important; }
        table[id=email-actions] .email-list-item { display: block; margin: 1em 0 !important; word-wrap: normal !important; }
        span[class=email-list-divider] { display: none; }
    }



        </style>
    </head>
    <body style="font-family: Arial, FreeSans, Helvetica, sans-serif; font-size: 13px; width: 100%; -webkit-font-smoothing: antialiased; background-color: #f0f0f0">
        <table id="email-wrapper" width="100%" cellspacing="0" cellpadding="0" border="0" style="background-color: #f0f0f0">
            <tbody>
                <tr valign="middle">
                    <td id="email-wrapper-inner" style="font-size: 13px; padding: 20px; text-align: center">
                        <table id="email-content" cellspacing="0" cellpadding="0" border="0" style="font-family: Arial, FreeSans, Helvetica, sans-serif; width: 100%">
                            <tbody>
                                <tr valign="top">
                                    <td id="email-content-inner" align="left" style="font-family: Arial, FreeSans, Helvetica, sans-serif; font-size: 13px; background-color: #fff; border: 1px solid #bbb; padding: 20px; text-align: left">
                                        <table id="email-title" cellpadding="0" cellspacing="0" border="0" width="100%">
                                            <tbody>
                                                <tr>
                                                    <td id="email-title-avatar" rowspan="2" style="font-size: 13px; text-align: left; vertical-align: top; width: 48px; padding-right: 8px"> <img class="avatar" src="cid:avatar_16181e6326f183784f186951c83d98b8" border="0" height="48" width="48" style="-ms-interpolation-mode: bicubic; border-radius: 3px" /> </td>
                                                    <td valign="top" style="font-size: 13px">
                                                        <div id="email-title-flavor" class="email-metadata" style="margin: 0; padding: 0 0 4px 0; color: #505050">
                                                            <a href="    https://wiki.asterisk.org/wiki/display/~dlee " style="color:#326ca6;text-decoration:none;; color: #326ca6; text-decoration: none">David M. Lee</a> added a comment to the page:
                                                        </div> </td>
                                                </tr>
                                                <tr>
                                                    <td valign="top" style="font-size: 13px"> <h2 id="email-title-heading" style="font-size: 16px; line-height: 20px; min-height: 20px; margin: 0; padding: 0"> <a href="https://wiki.asterisk.org/wiki/display/AST/Blinky+Lights+API?focusedCommentId=26479975#comment-26479975" style="color: #326ca6; text-decoration: none"> <img class="icon" src="cid:comment-icon" alt="" style="border: 0; padding: 0 5px 0 0; text-align: left; vertical-align: middle" /> <strong style="font-size:16px;line-height:20px;vertical-align:top;">Blinky Lights API</strong> </a> </h2> </td>
                                                </tr>
                                            </tbody>
                                        </table>
                                        <div class="email-indent" style="margin: 8px 0 16px 0">
                                            <div class="email-comment" style="margin: 0 0 0 56px">
                                                <p style="font-size: 13px">(to bring our office discussion to the web) The key difference is that the content of the messages will be different. Even though the MWI notifications that Asterisk sends out will vary depending on the phone they are talking with, there will need to be code in Asterisk that can convert the incoming JSON into some sort of outgoing SIP message. Similarly for presence and device state.</p>
                                                <p style="font-size: 13px">Since code has to be in Asterisk for handling the conversion for different phones, the API can reflect the implementation and document what it expects the fields to be. They may be similar in nature, but are fundamentally different in content.</p>
                                            </div>
                                            <div class="email-indent" style="margin: 8px 0 16px 0">
                                                <p class="email-reply-divider" style="font-size: 13px; border-top: 1px solid #bbb; color: #505050; margin: 32px 0 8px 0; padding: 8px 0">In reply to a comment by <a href="    https://wiki.asterisk.org/wiki/display/~mjordan " style="color:#326ca6;text-decoration:none;; color: #326ca6; text-decoration: none">Matt Jordan</a> :</p>
                                                <div class="email-comment" style="margin: 0 0 0 56px">
                                                    <h1 id="BlinkyLightsAPI-UseCases">Use Cases</h1>
                                                    <h2 id="BlinkyLightsAPI-Mailboxes%2FMWI">Mailboxes/MWI</h2>
                                                    <ol>
                                                        <li style="font-size: 13px">App can create a custom mailbox
                                                            <ol>
                                                                <li style="font-size: 13px">Are mailboxes given names, or do they have unique id's?<br /> <span style="color: rgb(255,0,0);">Mailboxes have unique IDs that are - essentially - their names. The naming scheme is mailbox@context, where context is just another identifier that provides a way to group mailboxes together. From the perspective of a SIP phone or something else that subscribes to mailbox state, it subscribes to this identifier.</span> </li>
                                                                <li style="font-size: 13px">Does a mailbox's existence persist across restarts? What about it's state?<br /> <span style="color: rgb(255,0,0);">No. A restart blows it out of Stasis cache. The VoiceMail provider API (provided in app.h) allows consumers of mailbox state to query a voicemail provider for the current state when that state is not in the cache. From the perspective of a phone, the MWI should not change if Asterisk is restarted. Thus, ARI will also have to be a voicemail provider. In practice, however, the only time when this occurs is on initial system start up - and so long as you receive a notification that someone wants the current state of the mailbox and you send it to them, this should work just fine.</span> </li>
                                                            </ol> </li>
                                                        <li style="font-size: 13px">App can associate custom mailbox with a blinky light on a device
                                                            <ol>
                                                                <li style="font-size: 13px">Does this happen via the app, or via configuration?<br /> <span style="color: rgb(255,0,0);">This is done by the phones, not the app. The app can't associate a mailbox with a device. The app can only provide state for the mailbox that a device wants.</span> </li>
                                                            </ol> </li>
                                                        <li style="font-size: 13px">App can publish a new state for a mailbox
                                                            <ol>
                                                                <li style="font-size: 13px">Are there any common attributes for mailbox state (unplayed message count, last message timestamp, etc.)<br /> <span style="color: rgb(255,0,0);">It's all device specific. In practice, it is a new message count/old message count. Theoretically, however, you could want the state of any portion of someone' s mailbox, i.e., any folder message count. You could also want to differentiate between message priorities (normal, urgent, priority, etc.)</span> </li>
                                                            </ol> </li>
                                                    </ol>
                                                    <h2 id="BlinkyLightsAPI-Presence">Presence</h2>
                                                    <ol>
                                                        <li style="font-size: 13px">App can publish new presence state
                                                            <ol>
                                                                <li style="font-size: 13px">Are there any common attributes for presence state (state, last change timestamp, etc.)<br /> <span style="color: rgb(255,0,0);">Presence State is only the state. State values, however, can be arbitrary.</span> </li>
                                                            </ol> </li>
                                                    </ol>
                                                    <h2 id="BlinkyLightsAPI-DeviceState">Device State</h2>
                                                    <ol>
                                                        <li style="font-size: 13px">App can create a custom device state
                                                            <ol>
                                                                <li style="font-size: 13px">This can be used as an extension state in the dialplan<br /> <span style="color: rgb(255,0,0);">Correct, if someone put it in as an extension state. In fact, at some level, it has to be in the dialplan: if there isn't a hint for it in the dialplan, no one (device wise) can subscribe to it. That does make ARI have to have a level of dialplan integration that is unfortunate.</span> </li>
                                                            </ol> </li>
                                                        <li style="font-size: 13px">App can publish new device state
                                                            <ol>
                                                                <li style="font-size: 13px">Are there any common attributes for device state (state, last change timestamp, etc.)<br /> <span style="color: rgb(255,0,0);">It's ultimately device specific. When a device subscribes for the state of something, it states how it wants to receive the events. The tricky part becomes when what it subscribes for is ultimately a very device specific concept (such as the SNOM DIALOG_INFO_XML stuff.) The fact that these things exist - and someone may want to be able to create event bodies for them through ARI - is part of what leads to having a very generic event publish API.</span> </li>
                                                            </ol> </li>
                                                    </ol>
                                                    <h1 id="BlinkyLightsAPI-Proposalone%3AGenerictopics">Proposal one: Generic topics</h1>
                                                    <h2 id="BlinkyLightsAPI-API" class="p1">API</h2>
                                                    <p class="p1" style="font-size: 13px">GET /topics List[Topic] - list all topics, with optional filter for type</p>
                                                    <p class="p1" style="font-size: 13px">GET /topics/{topicId} Topic - get information about a specific topic</p>
                                                    <p class="p1" style="font-size: 13px">DELETE /topics/{topidId} - destroy a topic. This should implicitly unsubscribe all subscribers.</p>
                                                    <p class="p1" style="font-size: 13px">POST /topics Topic - create a new topic. When you create a topic, you are implicitly subscribed to that topic.</p>
                                                    <p class="p1" style="font-size: 13px">    type: The type of topic to create. Valid types initially would be 'mailbox', 'device', 'presence'</p>
                                                    <p class="p1" style="font-size: 13px">    uri: The URI subscribers will use to subscribe to the topic</p>
                                                    <p class="p1" style="font-size: 13px">POST /topics/{topicId}/publish - publish an event to a topic. Events are passed as JSON, and are opaque from the perspective of ARI. It would be up to the specific topic types to understand the  event packages.</p>
                                                    <p class="p1" style="font-size: 13px"> </p>
                                                    <p class="p1" style="font-size: 13px">/applications/{applicationName}/subscription will be updated to allow for an ARI client to subscribe to any topic in Asterisk.</p>
                                                    <h2 id="BlinkyLightsAPI-Datamodel">Data model</h2>
                                                    <p class="p1" style="font-size: 13px">Topic:</p>
                                                    <ul>
                                                        <li class="p1" style="font-size: 13px">    type: string - Valid types initially would be 'mailbox', 'device', 'presence'</li>
                                                        <li class="p1" style="font-size: 13px">    uri: string - The URI subscribers use to subscribe to the topic</li>
                                                        <li class="p1" style="font-size: 13px">    subscribers: List[Subscriber] - A list of active subscriptions</li>
                                                        <li class="p1" style="font-size: 13px">    id: string - A unique ID for the topic</li>
                                                    </ul>
                                                    <p class="p2" style="font-size: 13px"> </p>
                                                    <p class="p1" style="font-size: 13px">Subscriber</p>
                                                    <ul>
                                                        <li class="p1" style="font-size: 13px">    id: string - A unique ID for the subscriber</li>
                                                        <li class="p1" style="font-size: 13px">    topic_id: string - The topic ID this subscription refers to</li>
                                                        <li class="p1" style="font-size: 13px">    endpoint: Endpoint - If available, the endpoint that subscribed to this Topic</li>
                                                    </ul>
                                                    <p class="p2" style="font-size: 13px"> </p>
                                                    <p class="p1" style="font-size: 13px">TopicSubscriptionCreated : Event - Event raised when a new subscription is created for a topic</p>
                                                    <ul>
                                                        <li class="p1" style="font-size: 13px">    subscriber : Subscriber</li>
                                                        <li class="p1" style="font-size: 13px">    topic: Topic</li>
                                                    </ul>
                                                    <p class="p2" style="font-size: 13px"> </p>
                                                    <p class="p1" style="font-size: 13px">TopicSubscriptionDestroyed : Event - Event raised when a subscription is destroyed for a topic</p>
                                                    <ul>
                                                        <li class="p1" style="font-size: 13px">    subscriber : Subscriber</li>
                                                        <li class="p1" style="font-size: 13px">    topic : Topic</li>
                                                    </ul>
                                                    <p class="p2" style="font-size: 13px"> </p>
                                                    <p class="p1" style="font-size: 13px">TopicEvent : Event - Event raised in relation to a topic</p>
                                                    <ul>
                                                        <li class="p1" style="font-size: 13px">    topic : Topic</li>
                                                        <li class="p1" style="font-size: 13px">    body : JSON</li>
                                                    </ul>
                                                    <p class="p2" style="font-size: 13px"> </p>
                                                    <p class="p1" style="font-size: 13px">TopicCreated : Event - Event raised when a new topic is created</p>
                                                    <ul>
                                                        <li class="p1" style="font-size: 13px">    topic : Topic</li>
                                                    </ul>
                                                    <p class="p2" style="font-size: 13px"> </p>
                                                    <p class="p1" style="font-size: 13px">TopicDestroyed : Event - Event raised when a topic is destroyed</p>
                                                    <ul>
                                                        <li class="p1" style="font-size: 13px">    topic : Topic</li>
                                                    </ul>
                                                    <h2 id="BlinkyLightsAPI-Proposaltwo%3AFirstclassresources" class="p1"> <span>Proposal two: First class resources</span> </h2>
                                                    <div class="aui-message warning shadowed information-macro" style="margin: 1em 0; padding: 8px">
                                                        <span class="aui-icon icon-warning">Icon</span>
                                                        <div class="message-content">
                                                            <p style="font-size: 13px">Work in progress...</p>
                                                        </div>
                                                    </div>
                                                    <p style="font-size: 13px"> <span style="color: rgb(133,120,102);">API</span> </p>
                                                    <p style="font-size: 13px">/mailboxes/...</p>
                                                    <p style="font-size: 13px">/devicestates/...</p>
                                                    <p style="font-size: 13px">/presencestates/...</p>
                                                    <h2 id="BlinkyLightsAPI-DataModel">Data Model</h2>
                                                    <p style="font-size: 13px">Mailbox</p>
                                                    <ul>
                                                        <li style="font-size: 13px">id: string</li>
                                                        <li style="font-size: 13px">custom: object - custom mailbox state</li>
                                                    </ul>
                                                    <p style="font-size: 13px">DeviceState</p>
                                                    <ul>
                                                        <li style="font-size: 13px">id: string</li>
                                                        <li style="font-size: 13px">custom: object - custom device state</li>
                                                    </ul>
                                                    <p style="font-size: 13px">PresenceState</p>
                                                    <ul>
                                                        <li style="font-size: 13px">id: string</li>
                                                        <li style="font-size: 13px">custom: object - custom presence state</li>
                                                    </ul>
                                                    <h3 id="BlinkyLightsAPI-Events">Events</h3>
                                                    <p style="font-size: 13px">Mailbox{Created,Changed,Destroyed}</p>
                                                    <ul>
                                                        <li style="font-size: 13px">mailbox: Mailbox</li>
                                                    </ul>
                                                    <p style="font-size: 13px">DeviceState{Created,Changed,Destroyed}</p>
                                                    <ul>
                                                        <li style="font-size: 13px">device_state: DeviceState</li>
                                                    </ul>
                                                    <p style="font-size: 13px">PresenceState{Created,Changed,Destroyed}</p>
                                                    <ul>
                                                        <li style="font-size: 13px">presence_state: PresenceState</li>
                                                    </ul>
                                                    <p style="font-size: 13px"> <span style="color: rgb(255,0,0);">I don't have any comments or problems with this approach. Since the actual 'state' is custom and is not provided by the API, it is proving my point that these concepts all end up being fundamentally identical in terms of their attributes, events, and general usage. I think the operations upon them will end up being very similar as well.</span> </p>
                                                </div>
                                            </div>
                                        </div>
                                        <table id="email-actions" class="email-metadata" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-top: 1px solid #bbb; color: #505050; margin: 8px 0 0 0; padding: 0; color: #505050">
                                            <tbody>
                                                <tr>
                                                    <td class="left" valign="top" style="font-size: 13px; padding-top: 8px; max-width: 45%; text-align: left"> <span class="email-list-item"><a href="https://wiki.asterisk.org/wiki/display/AST/Blinky+Lights+API?focusedCommentId=26479975#comment-26479975" style="color: #326ca6; text-decoration: none">View Online</a> </span> <span class="email-list-divider" style="color: #505050; padding: 0 0.350em">·</span> <span class="email-list-item"><a href="https://wiki.asterisk.org/wiki/plugins/likes/like.action?contentId=26479975" style="color: #326ca6; text-decoration: none">Like</a> </span> <span class="email-list-divider" style="color: #505050; padding: 0 0.350em">·</span> <span class="email-list-item"><a href="https://wiki.asterisk.org/wiki/display/AST/Blinky+Lights+API?replyToComment=26479975#comment-26479975" style="color: #326ca6; text-decoration: none">Reply To This</a> </span> </td>
                                                    <td class="right" width="50%" valign="top" style="font-size: 13px; padding-top: 8px; text-align: right"> <span class="email-list-item"><a href="https://wiki.asterisk.org/wiki/users/removespacenotification.action?spaceKey=AST" style="color: #326ca6; text-decoration: none">Stop watching space</a> </span> <span class="email-list-divider" style="color: #505050; padding: 0 0.350em">·</span> <span class="email-list-item"><a href="https://wiki.asterisk.org/wiki/users/editmyemailsettings.action" style="color: #326ca6; text-decoration: none">Manage Notifications</a> </span> </td>
                                                </tr>
                                            </tbody>
                                        </table> </td>
                                </tr>
                            </tbody>
                        </table> </td>
                </tr>
                <tr>
                    <td id="email-footer" align="center" style="font-size: 13px; padding: 0 16px 32px 16px; margin: 0"> <small style="font-size: 11px"> This message was sent by <a class="email-footer-link" style="color:#505050;font-size:11px;text-decoration:none;; color: #326ca6; text-decoration: none; color: #505050; font-size: 11px" href="http://www.atlassian.com/software/confluence">Atlassian Confluence</a> 5.1.5, <a class="email-footer-link" style="color:#505050;font-size:11px;text-decoration:none;; color: #326ca6; text-decoration: none; color: #505050; font-size: 11px" href="http://www.atlassian.com/software/confluence/overview/team-collaboration-software?utm_source=email-footer">Team Collaboration Software</a> </small> </td>
                </tr>
            </tbody>
        </table>
    </body>
</html>