[asterisk-app-dev] ARI ApplicationStarted or how to know that WebSocket connection established?

Matthew Jordan mjordan at digium.com
Fri Sep 26 07:47:12 CDT 2014


On Thu, Sep 25, 2014 at 5:17 PM, Maxim Litnitskiy
<litnimaxster at gmail.com> wrote:
>
> 2014-09-25 18:29 GMT+04:00 Matthew Jordan <mjordan at digium.com>:
>>

<snip>

I don't think I fully understand your reply, but I'll do my best to
answer your questions.

> Matt, thanks for your reply.
> Seems I was not clear enough.
> Yes Asterisk knows when smth is able to handle the Stasis application.
> And when I do a connection I also know.
> Know what?

A Stasis application is activated when a client makes a WebSocket
connection indicating that it wants to handle events from that
application. For example:

wscat -c "ws://localhost:8088/ari/events?api_key=asterisk:asterisk&app=hello-world"

Indicates that a WebSocket connection is being established to handle
the Stasis application 'hello-world'. When the connection is made, the
application is activated. At that point in time, any channel that
enters into the dialplan application Stasis will be handed over to the
external client (it now "owns" the channel), which is indicated by the
StasisStart event.

> You mean that client.connect(...) success call is enouth? After it returns
> Stasis app is setup in asterisk?

Yes.

Experiment and try it:

(1) Don't connect a WebSocket. Have the following in your dialplan:

exten => 1000,1,Stasis(hello-world)

(2) Originate a channel to 1000. Asterisk will reject it as the Stasis
application is not activated, i.e., there is no WebSocket to handle
the events from the application.

(3) Connect a WebSocket, specifying 'hello-world' as the application.

(4) Originate a channel again. You should get a StasisStart event for
that channel.

> And this mean I have to signal to other thread exactly after exit from
> client.connect(..)?

If your WebSocket connection is broken, how are you going to handle
changes to the state of a channel? Your application no longer knows -
for sure - whether or not someone has hung up a channel in your Stasis
application.

Now, Asterisk is a *tad* forgiving in this regard. Once a WebSocket
connection has been established for an application, if it is broken,
Asterisk will consider the Stasis application to be in a 'whoops,
that's broken' state. It will issue WARNINGS about events getting
missed. It will keep the application going, however, until the
WebSocket connection re-establishes.

Matt

-- 
Matthew Jordan
Digium, Inc. | Engineering Manager
445 Jan Davis Drive NW - Huntsville, AL 35806 - USA
Check us out at: http://digium.com & http://asterisk.org



More information about the asterisk-app-dev mailing list