11import { HttpStatusCode , IHttp , IModify , IPersistence , IRead } from '@rocket.chat/apps-engine/definition/accessors' ;
22import { ApiEndpoint , IApiEndpointInfo , IApiRequest , IApiResponse } from '@rocket.chat/apps-engine/definition/api' ;
33import { ILivechatRoom } from '@rocket.chat/apps-engine/definition/livechat' ;
4+ import { IDialogflowMessage , DialogflowRequestType } from '../enum/Dialogflow' ;
45import { EndpointActionNames , IActionsEndpointContent } from '../enum/Endpoints' ;
56import { Headers , Response } from '../enum/Http' ;
67import { Logs } from '../enum/Logs' ;
8+ import { Dialogflow } from '../lib/Dialogflow' ;
79import { createHttpResponse } from '../lib/Http' ;
810import { createDialogflowMessage } from '../lib/Message' ;
911import { closeChat , performHandover } from '../lib/Room' ;
@@ -20,15 +22,15 @@ export class IncomingEndpoint extends ApiEndpoint {
2022 this . app . getLogger ( ) . info ( Logs . ENDPOINT_RECEIVED_REQUEST ) ;
2123
2224 try {
23- await this . processRequest ( read , modify , persis , request . content ) ;
25+ await this . processRequest ( read , modify , http , request . content ) ;
2426 return createHttpResponse ( HttpStatusCode . OK , { 'Content-Type' : Headers . CONTENT_TYPE_JSON } , { result : Response . SUCCESS } ) ;
2527 } catch ( error ) {
2628 this . app . getLogger ( ) . error ( Logs . ENDPOINT_REQUEST_PROCESSING_ERROR , error ) ;
2729 return createHttpResponse ( HttpStatusCode . INTERNAL_SERVER_ERROR , { 'Content-Type' : Headers . CONTENT_TYPE_JSON } , { error : error . message } ) ;
2830 }
2931 }
3032
31- private async processRequest ( read : IRead , modify : IModify , persis : IPersistence , endpointContent : IActionsEndpointContent ) {
33+ private async processRequest ( read : IRead , modify : IModify , http : IHttp , endpointContent : IActionsEndpointContent ) {
3234
3335 const { action, sessionId } = endpointContent ;
3436 if ( ! sessionId ) { throw new Error ( Logs . INVALID_SESSION_ID ) ; }
@@ -43,6 +45,18 @@ export class IncomingEndpoint extends ApiEndpoint {
4345 const { visitor : { token : visitorToken } } = room ;
4446 await performHandover ( modify , read , sessionId , visitorToken , targetDepartment ) ;
4547 break ;
48+ case EndpointActionNames . TRIGGER_EVENT :
49+ const { actionData : { event = null } = { } } = endpointContent ;
50+ if ( ! event ) { throw new Error ( Logs . INVALID_EVENT_DATA ) ; }
51+
52+ try {
53+ const response : IDialogflowMessage = await Dialogflow . sendRequest ( http , read , modify , sessionId , event , DialogflowRequestType . EVENT ) ;
54+ await createDialogflowMessage ( sessionId , read , modify , response ) ;
55+ } catch ( error ) {
56+ this . app . getLogger ( ) . error ( `${ Logs . DIALOGFLOW_REST_API_ERROR } ${ error . message } ` ) ;
57+ throw new Error ( `${ Logs . DIALOGFLOW_REST_API_ERROR } ${ error . message } ` ) ;
58+ }
59+ break ;
4660 case EndpointActionNames . SEND_MESSAGE :
4761 const { actionData : { messages = null } = { } } = endpointContent ;
4862 if ( ! messages ) { throw new Error ( Logs . INVALID_MESSAGES ) ; }
0 commit comments