Handling GenerativeAgent Events
While analyzing a conversation, GenerativeAgent communicates back to you via events. These events are sent via a Server-Sent-Event stream.
The single SSE stream contain events for all conversations that are processed by GenerativeAgent.
Each event contains the id of the conversation it relates to, and the type of event.
Handling these events has 2 main steps:
- Create SSE Stream
- Handle the event
Step 1: Create SSE Stream
To create an SSE stream for GenerativeAgent, first generate a streaming URL, and then initiate the SSE stream with that URL
To create the SSE stream URL, POST to /streams
:
A successful request returns 200 and the streamingUrl
to use to create the SSE stream. Additionally it returns a streamId
. Save this Id and use it to reconnect SSE in-case the stream disconnects.
The streaming URL is only valid for 30 seconds. After that time, the connection will be rejected and you will need to request a new URL.
Initiate the SSE stream by connecting to the URL and handle the events. How you connect to an SSE stream depends on the language you use and what are your preferred libraries. We include an example in NodeJs below.
Handle SSE disconnects
If your SSE connection breaks, reestablish the stream using the streamId
returned in the original request.
A successful request returns 200 and the streaming URL you will reconnect with.
Save the streamId
to use in your /analyze
requests. This will send all the GenerativeAgent messages for that analyze request, to this SSE stream.
Step 2: Handle events
You need to process each event from GenerativeAgent. The data sent via SSE needs to be parsed into a JSON, and then handled accordingly.
Determining the conversation the event pertains to and take the necessary action depending on the event type
.
For a given analyze request on a conversation, you may receive any of the following event types:
processingStart
: The bot started processing. This can be used to trigger user feedback such as showing a “typing” indicator.authenticationRequired
: Some API Connections require additional User authentication. Refer to User authentication required for more information.reply
: The bot has a reply for the conversation. We will automatically create a message for the bot, but you will need to send back the response to your user. This can be text directly when on a text based system, or your TTS for voice channels.transferToAgent
: The bot could not handle the request and the conversation should be transferred to an agent.processingEnd
: The bot finished processing. This indicates there will be no further events until analyze is called again.
Here is an example set of events where analyze is called:
User Authentication Required
A key power of GenerativeAgent is it’s ability to call your APIs to look up information or perform an action. These are determined by the API Connections you create.
Some APIs require end user authentication. When this is the case, we sent the authenticationRequested
event. Work with your ASAPP team to determine those authentication needs and what needs to passed back to ASAPP.
Based on the specifics of your API, you will need to gather the end user authentication information and call /authenticate
on the conversation:
A successful response returns a 204 response and no body. GenerativeAgent will continue processing and send you subsequent events.
Code sample
Here is an example of initiate the SSE stream and listening for the events using nodeJS. This uses axios to get the URL and the EventSource package for handling the events:
This example is intended to be illustrative only.
Event Schema
Each event is a json format with several fields with the following specification:
Field Name | Type | Description |
---|---|---|
generativeAgentMessageId | string | A unique identifier for this webhook request. |
conversationId | string | The internal identifier for the conversation from the ASAPP system. |
externalConversationId | string | The external identifier for the conversation from your external system. |
type | string, enum | The type of bot response. It can be one of the following:
|
reply.* | object | If the |
reply.messageId | string | The identifier of the message sent in the reply |
reply.text | string | The message text of the reply |
Next Steps
After handling Events from GenerativeAgents, you have control over what is happening during conversations.
You may find one of the following sections helpful in advancing your integration:
Was this page helpful?