가상 에이전트 작업 스크립트

  • 릴리스 버전: Yokohama
  • 업데이트 날짜 2025년 03월 03일
  • 읽기16분
  • 사용자 데이터를 VACS에 전달하고, 변환을 적용하고, 응답을 채팅 인터페이스 엔드포인트로 다시 전송하려면 필수 워크플로우 스튜디오 작업 및 하위 플로우 스크립트 세트를 작성해야 합니다.

    제공자 및 인바운드/아웃바운드 스크립트

    Twilio와 같은 제공자는 채팅 기능을 제공합니다. 사용자 작업 스크립트는 제공자 작업뿐만 아니라 챗봇 또는 사용자 지정 대화의 인바운드 및 아웃바운드 변환기 작업에 대한 대화형 사용자 지정 채팅 통합 구성을 수행합니다. 각 스크립트의 예제가 제공됩니다. 여기에는 각 스크립트가 수행하는 작업에 대한 설명과 작업 입력 및 작업 출력이 포함됩니다. 스크립트 JSON의 예도 볼 수 있습니다.

    이러한 스크립트를 빌드하여 서버 및 클라이언트 메시지를 변환하는 데 사용합니다 워크플로우 스튜디오 . 제공자, 보낸 사람 및 인바운드/아웃바운드 변환기 스크립트가 필요합니다. 추가 스크립트를 사용하여 채팅에 더 많은 기능을 추가할 수 있습니다.

    표 1. 스크립트
    스크립트 이름 목적 필수(Y/N)
    제공자 속성 제공자 인증 토큰, 사용자 식별자, 사용자 입력 및 컨텍스트 변수를 포함합니다. Y
    보낸 사람 작업

    요청을 번들로 묶고 또는 통합 허브를 통해 워크플로우 스튜디오 비동기적으로 응답을 보냅니다.

    Y
    응답 프로세서 아웃바운드 메시지에 대해 받은 응답에 따라 업데이트 메시지 상태와 같은 플랫폼 작업을 수행합니다. N
    상황별 작업 상황별 작업을 지원합니다. N
    계정 작업 연결 계정 연결의 성공 여부에 대한 콜백을 제공합니다. N
    아웃바운드 변환기 채팅 서버에서 지원하는 컨트롤을 채팅 인터페이스별 렌더링으로 변환합니다. Y
    인바운드 변환기 옵션입니다. 채팅 제공자에 적용되는 경우 기본 리치 컨트롤을 사용할 수 있습니다. 각 입력 컨트롤에 대해 별도의 인바운드 변환을 제공할 필요가 없습니다. 기본 동작이 작동하지 않는 경우 특정 가상 에이전트 서버 컨트롤에 대한 인바운드 변환으로 기본값을 재정의할 수 있습니다. Y

    제공자 속성 작업 스크립트

    제공자 속성 작업 스크립트는 수신 메시지에서 데이터를 추출합니다. 스크립트는 대화형 사용자 지정 채팅 통합 프로토콜에 대해 알고 있으며 수신 메시지의 내용, 보낸 사람의 사용자 ID 및 선택적 인증 토큰을 출력합니다.
    주:
    제공자 속성 작업 스크립트에 상황별 작업이 있는 경우 사용자 입력(상황별 작업과 일치)이 기록에 포함되도록 스크립트에 request_context.contextual_action과 request_context.typed_value가 모두 있어야 합니다. request_context.typed_value를 설정하지 않으면 해당 메시지 내용이 기록에 나타나지 않습니다.
    표 2. 제공자 속성 작업 스크립트 입력/출력
    입력 출력
    • 헤더(JSON) - 요청 헤더
    • 페이로드(JSON) - 요청 본문
    • 토큰(문자열) - 인증 토큰입니다.
    • provider_user_id(문자열) - 보낸 사람의 이름(예: Slack 메시지의 사용자 이름)입니다.
    • request_context(JSON) - 받은 실제 컨텐츠입니다.
      • typed_value - 질문에 대한 답변과 같은 입력된 컨텐츠입니다.
      • attachment_value.url - 첨부 파일의 URL입니다.
      • attachment_value.content_type - 첨부 파일의 콘텐츠 유형입니다.
      • attachment_value.name - 첨부 파일의 파일 이름입니다.
      • 상황별 작업 - 수행할 작업(예: END_CONVERSATION, START_CONVERSATION, AGENT)입니다. 이 스크립트는 들어오는 메시지를 확인합니다. 인식된 키워드가 있는 경우 작업 중 하나를 설정할 수 있습니다(예: outputs.request_context.contextual_action = "END_CONVERSATION";). 프레임워크는 이 키워드를 인식하고 상황별 작업 스크립트를 호출합니다.
      • context_vars - 대화에 전달할 컨텍스트 변수(예: 'outputs.request_context.context_vars = {language: "en"};').
    그림 1. 예: 워크플로우 스튜디오 헤더 및 페이로드를 포함한 제공자 속성 작업 스크립트 입력
    헤더와 페이로드가 JSON을 사용하도록 설정된 작업 입력 워크플로우 스튜디오 입니다.
    그림 2. 예: 워크플로우 스튜디오 토큰, request_context 및 provider_user_id를 포함한 제공자 속성 작업 스크립트 출력
    의 워크플로우 스튜디오 작업 출력은 토큰, request_context 및 provider_user_id 값을 지정합니다.

    예: 제공자 속성 작업 스크립트.

    (function execute(inputs, outputs) {
        var headers = (inputs.headers);
        var payload = (inputs.payload);
    
        // check if an authentication token was included. this is optional.
        var smsUtil = new VASMSTwilioUtil();
        outputs.token = JSON.stringify(smsUtil.getToken(headers, payload));
    
        var data = payload.data;
        var request_context = {}; 
        // inspect the actual message. it could be an MMS (attachment) or raw text
        if (data['MediaUrl0']) {
            var attachment_value = {};
            attachment_value.url = data['MediaUrl0'];
            attachment_value.content_type = data['MediaContentType0'];
            attachment_value.name = smsUtil.getFileName(attachment_value.url , attachment_value.content_type);
            request_context.attachment_value = attachment_value;
        } else {
           request_context.typed_value = data['Body'];
        }
    
        // set the mandatory outputs
        outputs.request_context = request_context;
        outputs.provider_user_id = data.From;
    })(inputs, outputs);

    보낸 사람 하위 플로우

    스크립트 대신 보낸 사람 하위 플로우가 제공자에게 메시지를 보내는 프로세스를 처리합니다. 메시지는 하위 플로우의 일부로 문자열에 포함됩니다 payload . 발신자에는 및 service_urlorigin_service_url가 있고 아웃바운드 URL은 제공자에 따라 다릅니다. 예를 들어 MS Teams를 통해 전송된 메시지는 다음 값을 tenant_id사용합니다. 가상 에이전트가 옵션이 포함된 메시지를 보내면 수신자는 옵션을 선택합니다. 하위 플로우는 선택에 따라 메시지 표시를 업데이트하고 옵션을 제거합니다. 사용자가 선택한 옵션에 따라 대화가 계속됩니다. 는 가상 에이전트 외부 요청을 보내지 않고 메시지 처리를 계속할 수 있습니다. 하위 플로우를 생성할 때 작업이 없습니다. 하위 플로우 내에서 작업을 호출합니다. 하위 플로우에 대한 자세한 내용은 다음 문서를 참조하십시오 .

    상황별 작업 스크립트

    상황별 작업 스크립트는 주제 내에서 가상 에이전트에이전트를 입력하는 등의 특수 키워드 작업을 수행하여 라이브 에이전트에 즉시 전달됩니다.

    표 3. 상황별 작업 스크립트 입력
    입력 출력
    • conversation_id(문자열) - 대화 ID입니다.
    • request_context(JSON) - 수행할 작업이 포함된 제공자 속성 스크립트(예: END_CONVERSATION, START_CONVERSATION, AGENT)에서 전달된 요청입니다.
    안 함

    예: 상황별 작업 스크립트

    (function execute(inputs, outputs) {
      var contextual_action = inputs.request_context.contextual_action;
      if (contextual_action === "END_CONVERSATION") {
        sn_cs.VASystemObject.endConversation(inputs.conversation_id);
      } else if (contextual_action === "AGENT") {
        sn_cs.VASystemObject.switchToLiveAgent(inputs.conversation_id);
      } else if (contextual_action === "START_CONVERSATION") {
        sn_cs.VASystemObject.startConversation(inputs.conversation_id);
      }
    })(inputs, outputs);

    계정 작업 스크립트 연결

    링크 계정 작업 스크립트에는 연결 중인 사용자의 식별자가 포함되어 있습니다. 스크립트에는 연결된 계정도 포함되어 있습니다.

    표 4. 계정 작업 스크립트 입력 연결
    입력 출력
    • provider_user_id(문자열) - SMS 케이스의 전화 번호와 같이 연결하는 사용자의 식별자입니다.
    • status(문자열) - 성공/실패.
    • user_id(문자열) - 연결된 계정의 ServiceNow user_sys_id입니다.
    안 함

    예: 계정 작업 스크립트를 연결합니다.

    (function execute(inputs, outputs) {
      
      var richControl = (inputs.rich_control);
      var value = richControl.value;
      outputs.result = richControl.header + ': ' + value.action;
      
    })(inputs, outputs);

    응답 프로세서 작업 스크립트

    응답 프로세서 작업 스크립트는 메시지 전송 요청에 대한 응답을 기반으로 하는 특수 작업을 수행합니다. 프레임워크는 이미 기본 메시지 상태 추적을 수행합니다.

    표 5. 응답 프로세서 계정 작업 스크립트 입력
    입력 출력
    • message_id(문자열) - 이 응답sys_cs_message 연결된 기록의 식별자입니다.
    • 헤더(JSON) - 수신된 헤더입니다.
    • body(문자열) - 수신된 본문입니다.
    • 상태 코드(정수) - 수신된 HTTP 상태 코드입니다.
    안 함

    예: 응답 프로세서 작업 스크립트.

    (function execute(inputs, outputs) {
        gs.debug("Response from provider: message_id = " + inputs.message_id + ", status_code = " +
          inputs.status_code + ", headers = " + JSON.stringify(inputs.headers) + ", body = " + inputs.body);
    })(inputs, outputs);

    아웃바운드 변환기 스크립트

    아웃바운드 변환기 스크립트는 발신 가상 에이전트 메시지를 대화형 사용자 지정 채팅 통합과 관련된 프로토콜로 변환합니다.

    입력.

    • rich_control(JSON) - 가상 에이전트 변환해야 하는 서버 리치 컨트롤 구성요소입니다.
    • 페이로드(JSON) - 요청자로부터 받은 마지막 응답입니다.

    출력.

    result(String) - 보낼 제공자에 적합한 구성요소 메시지입니다.

    표 6. 예: 아웃바운드 변환기 스크립트
    아웃바운드 변환기 이름 스크립트 예
    가상 에이전트 - SMS Twilio 어댑터 기본 텍스트 아웃바운드 변환기
    (function execute(inputs, outputs) {
      var rich_control = inputs.rich_control;
      outputs.result = rich_control['label'];
    })(inputs, outputs);
    가상 에이전트 - SMS Twilio 어댑터 기본 링크 아웃바운드 변환기
    (function execute(inputs, outputs) {
      var richControl = (inputs.rich_control);
      var value = richControl.value;
      outputs.result = richControl.header + ': ' + value.action;
    })(inputs, outputs);
    가상 에이전트 - SMS Twilio 어댑터 기본 선택기 아웃바운드 변환기
    (function execute(inputs, outputs) {
      var rich_control = inputs.rich_control;
      var options = rich_control['options'];
      if (options && options.length > 0) {
          var optionsLength = options.length;
          var picker = rich_control['label'] || "";
          for (var x = 0; x < optionsLength; x++) {
              picker += "\n" + (x+1) +  ": " + options[x].label;
          }
      }
      outputs.text_message = picker;
    })(inputs, outputs);
    가상 에이전트 - SMS Twilio 어댑터 기본 멀티링크 아웃바운드 변환기
    (function execute(inputs, outputs) {
      var rich_control = inputs.rich_control;
      var linkResult = rich_control['header'];
      var totalValues = rich_control['values'].length;
      for (var i = 0; i < totalValues; i++) {
        linkResult = linkResult + '\n';
        var linkValue = rich_control['values'][i];
        linkResult = linkResult + '\n' + linkValue['description'] + ': ' + linkValue['action'];
      }
      outputs.result  = linkResult;
    })(inputs, outputs);
    가상 에이전트 - SMS Twilio 어댑터 기본 카드 아웃바운드 변환기
    (function execute(inputs, outputs) {
      var richControl = (inputs.rich_control);
      var data = JSON.parse(richControl.data);    
      var tableTitle = data.title;
      var fields = data.fields;
      var subtitle = data.subtitle;
      var url = data.url;    
      var message = subtitle ? getCardLine(tableTitle, subtitle) : tableTitle + "\n";
      for (var i= 0; i<fields.length; i++) {
         message += getCardLine(fields[i].fieldLabel, fields[i].fieldValue);
      }
      message += url;
      outputs.result = message;
    
      function getCardLine(key, value) {
          if (value == '' || value == null || key == '' || key == null)
              return;
          return key + ": " + value + "\n";
      }
    })(inputs, outputs);

    인바운드 변환기 스크립트

    인바운드 변환기 스크립트는 들어오는 대화형 사용자 지정 채팅 통합 메시지를 인식하는 가상 에이전트 프로토콜로 변환합니다. 사용자에게 제공되는 리치 컨트롤에 삽입할 필수 값을 결정합니다.

    입력.

    • request_context(JSON) - 제공자 속성 스크립트에서 전달된 요청입니다.
    • rich_control(JSON) - 원래 "질문"을 포함하는 요청자에게 전송된 마지막 서식 있는 컨트롤입니다.

    출력.

    결과(JSON) - 서버에서 예상하는 결과입니다 가상 에이전트 . 요청자가 주제 선택기에 응답하는 경우 이는 주제의 sys_id입니다. 요청자가 입력 텍스트에 응답하는 경우 텍스트 응답입니다.
    • 값 - sys_id 또는 텍스트 값입니다.
    • search_text - 요청자가 예상치 못한 항목을 선택한 경우 사용되는 텍스트입니다. 예를 들어 사용자가 주제 선택기 구성요소에 대한 응답으로 "이러한 옵션 중 내가 원하는 것과 일치하는 옵션이 없음"과 같이 NLU가 지원할 수 있는 내용을 입력했습니다.
    표 7. 예: 인바운드 변환기 스크립트
    인바운드 변환기 이름 스크립트 예
    가상 에이전트 - SMS Twilio 어댑터 기본 텍스트 인바운드 변환기

    목적: 제기된 InputText 질문에 대한 텍스트 응답 찾기

    (function execute(inputs, outputs) {
      var requestContext = inputs.request_context;
      var richControl = inputs.rich_control;
      var typedValue = requestContext['typed_value'];
      var attachmentValue = requestContext['attachment_value'];
      var smsUtil = new VASMSTwilioUtil();
      var result = {};
      if(richControl['itemType'] == 'image' || richControl['itemType'] == 'file')	{
        if (attachmentValue && attachmentValue.content_type.includes('image')) {
          result.url = attachmentValue.url;
          result.content_type = attachmentValue.content_type;
          result.name = attachmentValue.name;
          result.headers = attachmentValue.headers;
        } else if (typedValue) {
          result.url = typedValue;
          var contentType = smsUtil.getContentType(typedValue);
          if (typeof contentType === 'undefined')
            gs.error('Please enter a valid image link. Inbound image link: {0}', typedValue);
          else
            result.content_type = contentType;
        } else {
          gs.error('Please upload an image or enter a valid image link.');
        }
      }
      result['value'] = typedValue;
      result['search_text'] = '';
      outputs.result = result;
    })(inputs, outputs);
    가상 에이전트 - SMS Twilio 어댑터 기본 선택기 인바운드 변환기

    목적: 사용자가 이 선택기 질문에 대해 선택한 옵션의 sys_id 찾습니다. 이 스크립트는 아웃바운드 변환기와 동일한 알고리즘을 사용합니다. 옵션을 선택하지 않고 사용자가 대신 입력한 경우 "search_text"가 설정되고 이 인스턴스에서 활성화된 경우 NLU에 공급됩니다.

    (function execute(inputs, outputs) {
      var request_context = inputs.request_context;
      var rich_control = inputs.rich_control;
      var selectedValue = request_context["typed_value"];
      var result = {};
      result["value"] = "";
      result["search_text"] = "";
      if (rich_control['options']) {
        var options = rich_control['options'];
        var optionsLength = options.length;
        selectedValue === Number(selectedValue)
        if (selectedValue > 0 && selectedValue <= optionsLength) {
            var selectedOption = options[selectedValue - 1];
            result["value"] = selectedOption.value;
        } else {
            result["search_text"] = request_context["typed_value"];
        }
      }
      outputs.result = result;
    })(inputs, outputs);