패키지 SDK를 사용하여 트리거 생성
Automation 360을/를 사용할 때 SDK 패키지를 사용하여 트리거를 만들 수 있습니다.
트리거 사용
트리거를 생성하는 데 Automation 360를 사용합니다. 특정 조건이 충족되면 트리거가 bot를 시작하고 조건이 변경되거나 중지될 때까지 대기합니다. 트리거 조건이 일치하면 실행 방법을 호출하여 트리거에 신호를 보냅니다.
필요한 주석 기호
트리거를 생성하려면 다음 주석 기호가 필요합니다.
주석 기호 | 사용량 |
---|---|
BotCommand |
트리거가 있는 BotCommand 주석 기호를 commandType 으로 사용합니다. 이렇게 하면 플레인 구형 Java 객체(POJO)가 Automation 360와 트리거 생성에 적합합니다. |
CommandPkg |
이러한 값은 패키지를 생성할 때 사용됩니다. 주석 기호에 이름, 라벨 및 설명을 입력합니다. |
Idx |
필요한 모든 매개변수와 구성원 변수에 주석 기호를 지정하고 유효성 검사를 도와줍니다. 또는 입력을 위해 인터페이스에 표시될 수 있습니다. 인덱스(Idx )와 유형을 입력합니다. |
Pkg |
인터페이스에 표시될 모든 매개변수와 구성원 변수에 주석 기호를 지정합니다. 이 주석 기호는 Idx 와 함께 제공되지 않으면 무시됩니다. |
StartListen |
트리거 수신기를 시작합니다. |
TriggerId |
트리거를 중지하는 데 필요한 트리거 ID입니다. |
TriggerRunnable |
runnable을 제공합니다. runnable을 호출하면 트리거와 관련된 bot을 시작하는 신호가 전송됩니다. |
사용 사례 예시
다음 사용 사례는 bot를 일정한 간격으로 트리거하는 타이머 트리거를 생성하는 방법을 보여줍니다.
- 비즈니스 로직을 사용하여 POJO 클래스를 만듭니다.
public class TriggerDemo { private static final Timer TIMER = new Timer(true); public void startTrigger(Double interval) { TimerTask timerTask = new TimerTask() { @Override public void run() { // Do nothing } }; TIMER.schedule(timerTask, interval.longValue()); } }
bot에 동일한 유형의 여러 트리거가 존재할 수 있습니다. 모든 트리거는 triggerId로 식별됩니다.
- 클래스에 triggerId 추가:
@TriggerId private String triggerUid; public String getTriggerUid() { return triggerUid; } public void setTriggerUid(String triggerUid) { this.triggerUid = triggerUid; }
- 특정 트리거를 중지하고자 할 때 triggerId를 사용할 수 있도록 TimerTask를 따로 저장합니다.
private static final Map<String, TimerTask> taskMap = new ConcurrentHashMap<>(); public void startTrigger(Double interval) { TimerTask timerTask = new TimerTask() { @Override public void run() { // Do nothing } }; taskMap.put(this.triggerUid, timerTask); TIMER.schedule(timerTask, interval.longValue()); }
- 조건이 충족되면 트리거를 시작합니다. runnable을 수락하고 적절하게 호출합니다.
@TriggerRunnable private Runnable runnable; public Runnable getRunnable() { return runnable; } public void setRunnable(Runnable runnable) { this.runnable = runnable; } public void startTrigger(Double interval) { TimerTask timerTask = new TimerTask() { @Override public void run() { runnable.run(); } }; taskMap.put(this.triggerUid, timerTask); TIMER.schedule(timerTask, interval.longValue()); }
- 트리거를 개별적으로 중지하거나(triggerId사용) 동시에 모든 트리거를 중지합니다(StopAllTriggers).
/* * Cancel all the task and clear the map. */ @StopAllTriggers public void stopAllTriggers() { taskMap.forEach((k, v) -> { if (v.cancel()) { taskMap.remove(k); } }); } /* * Cancel the task and remove from map * * @param triggerUid */ @StopListen public void stopListen(String triggerUid) { if (taskMap.get(triggerUid).cancel()) { taskMap.remove(triggerUid); } }
- 나머지 주석을 추가합니다.
@BotCommand(commandType = BotCommand.CommandType.Trigger) @CommandPkg(label = "Demo Trigger", description = "Demo Trigger", icon = "email.svg", name = "demoTrigger") public class TriggerDemo { //Other code @StartListen public void startTrigger(@Idx(index = "1", type = AttributeType.NUMBER) @Pkg(label = "Please provide the interval to trigger in seconds", default_value = "120", default_value_type = DataType.NUMBER) @GreaterThan("0") @NumberInteger @NotEmpty Double interval) { //Other code } }