use of com.symphony.api.model.V4SymphonyElementsAction in project spring-bot by finos.
the class ElementsHandler method accept.
@SuppressWarnings("unchecked")
@Override
public void accept(V4Event t) {
try {
V4SymphonyElementsAction action = t.getPayload().getSymphonyElementsAction();
if (action != null) {
Map<String, Object> formValues = (Map<String, Object>) action.getFormValues();
String verb = (String) formValues.get("action");
String formId = action.getFormId();
Object currentForm;
if (hasFormData(formValues)) {
currentForm = formConverter.convert(formValues, formId);
} else {
currentForm = null;
}
EntityJson data = retrieveData(action.getFormMessageId());
Addressable rr = ruBuilder.loadRoomById(action.getStream().getStreamId());
User u = ruBuilder.loadUserById(t.getInitiator().getUser().getUserId());
// if we're not in a room, address the user directly.
rr = rr == null ? u : rr;
Errors e = ErrorHelp.createErrorHolder();
if (validated(currentForm, e)) {
FormAction ea = new FormAction(rr, u, currentForm, verb, data);
try {
Action.CURRENT_ACTION.set(ea);
for (ActionConsumer c : elementsConsumers) {
try {
c.accept(ea);
} catch (Exception ee) {
LOG.error("Failed to handle consumer " + c, ee);
}
}
} finally {
Action.CURRENT_ACTION.set(Action.NULL_ACTION);
}
} else {
WorkResponse fr = new WorkResponse(rr, currentForm, WorkMode.EDIT, ButtonList.of(new Button(verb, Button.Type.ACTION, "Retry")), convertErrorsToMap(e));
rh.accept(fr);
}
}
} catch (Exception e) {
LOG.error("Couldn't handle event " + t, e);
}
}
use of com.symphony.api.model.V4SymphonyElementsAction in project spring-bot by finos.
the class BotIT method testPressButton.
/**
* When the user presses a button, we return a response.
*/
@Test
public void testPressButton() {
V4Event in = new V4Event().initiator(new V4Initiator().user(new V4User().email("rob@example.com").displayName("Rob Example").userId(2438923l))).payload(new V4Payload().symphonyElementsAction(new V4SymphonyElementsAction().formId("koreai-choice").formValues(Collections.singletonMap("action", "some button")).stream(new V4Stream().streamId("ABC123"))));
getPublicBot().sendToConsumer(in);
littleSleep();
wireMockRule.verify(1, WireMock.postRequestedFor(urlPathMatching("/agent/v4/stream/ABC123/message/create")));
}
use of com.symphony.api.model.V4SymphonyElementsAction in project spring-bot by finos.
the class KoreAIEventHandler method accept.
@Override
public void accept(V4Event t) {
try {
V4MessageSent ms = t.getPayload().getMessageSent();
V4User u = t.getInitiator().getUser();
if (ms != null) {
V4Stream stream = ms.getMessage().getStream();
String text = extractText(ms);
EntityJson ej = parseEntityJson(ms.getMessage().getData());
if (!u.getEmail().equals(botIdentity.getEmail()) && (isAddressed(stream, ej, text))) {
try {
Address a = buildAddress(u, stream);
text = normalizeText(text);
requester.send(a, text);
} catch (Exception e) {
LOG.error("Couldn't handle message {}", ms);
}
}
}
// handle form submits
V4SymphonyElementsAction elements = t.getPayload().getSymphonyElementsAction();
if (elements != null) {
String formId = elements.getFormId();
if (formId.equals("koreai-choice")) {
@SuppressWarnings("unchecked") String button = ((Map<String, String>) elements.getFormValues()).get("action");
try {
Address a = buildAddress(u, elements.getStream());
requester.send(a, button);
} catch (Exception e) {
LOG.error("Couldn't handle form submission {}", ms);
}
}
}
} catch (Exception e) {
LOG.error("Couldn't handle stream event " + t, e);
}
}
Aggregations